Полезная информация

Заказывай стафф с атрибутикой Mozilla и... пусть все вокруг завидуют тебе! Быть уникальным - быть с Mozilla!

№102-07-2015 20:19:07

xseed
Участник
 
Группа: Members
Зарегистрирован: 24-03-2009
Сообщений: 58
UA: Firefox 38.0

Панель закладок в контекстном меню

Нашел код из дополнения "Context Bookmarks".

Выделить код

Код:

if(document.getElementById("contextbookmarksID")) return;
var contextmenu = document.getElementById('contentAreaContextMenu');
if(!contextmenu) return;
var bookmarksMenu = document.getElementById("bookmarksMenu");
if(!bookmarksMenu) return;

var dupNode = document.importNode(bookmarksMenu, true);
if(!dupNode) return;
dupNode.id = "contextbookmarksID";

contextmenu.appendChild(dupNode);

Добавил его в keyconfig на горячую клавишу, при нажатии появился пункт "Закладки". Но мне бы хотелось, чтобы в контекстном меню появился не пункт Закладки, а только пункт "Панель закладок".
1. Как это сделать?
2. Как сделать так, чтобы этот код автоматически выполнялся при старте браузера (чтобы не вешать его на горячую клавишу).

Отредактировано xseed (02-07-2015 20:19:58)


Три студента и лопата заменяют экскаватор

Отсутствует

 

№202-07-2015 20:27:21

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 42.0

Re: Панель закладок в контекстном меню

xseed пишет

1.  ... 2. ...

Использовать Custom Buttons, и во вкладку "Инициализация" новой или существующей кнопки:

Выделить код

Код:

(function() {
if(document.getElementById("contextbookmarksID")) return;
var contextmenu = document.getElementById('contentAreaContextMenu');
if(!contextmenu) return;
var bookmarksMenu = document.getElementById("bookmarksToolbarFolderMenu");
if(!bookmarksMenu) return;

var dupNode = document.importNode(bookmarksMenu, true);
if(!dupNode) return;
dupNode.id = "contextbookmarksID";

contextmenu.appendChild(dupNode);
})();

Отсутствует

 

№302-07-2015 22:44:46

xseed
Участник
 
Группа: Members
Зарегистрирован: 24-03-2009
Сообщений: 58
UA: Firefox 38.0

Re: Панель закладок в контекстном меню

turbot пишет
xseed пишет

1.  ... 2. ...

Использовать Custom Buttons, и во вкладку "Инициализация" новой или существующей кнопки:

Получилось! Добавил созданную кнопку в контекстное меню через меню Вид - Панели инструментов - Изменить.
PS: А без Custom Buttons нельзя? А то okkamas_knife говорит, что это - новая поделка... :sick:


Три студента и лопата заменяют экскаватор

Отсутствует

 

№402-07-2015 22:51:53

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 42.0

Re: Панель закладок в контекстном меню

xseed пишет

А то okkamas_knife говорит, что это - новая поделка...

Это он о [firefox] нынешнем. :D Он-то как раз апологет Custom Buttons (и [seamonkey]).

xseed пишет

нельзя

Нет, если хотите

xseed пишет

чтобы этот код автоматически выполнялся при старте браузера

(ну разве что с userChrome.js, но это теже яйца, только сбоку).

Отсутствует

 

№502-07-2015 23:14:56

xseed
Участник
 
Группа: Members
Зарегистрирован: 24-03-2009
Сообщений: 58
UA: Firefox 38.0

Re: Панель закладок в контекстном меню

xseed пишет

Получилось!

Не долго счастье было. Оказывается, Панель закладок появилась, но ни один пункт в ней не открывается! То есть я нажимаю любой пункт, контекстное меню, как и положено, исчезает, но ссылка не открывается, то есть ничего не происходит, 10 вкладок попытался открыть, но даже в консоли браузера ничего не появляется... Что это может быть?
PS: URL для закладок в контекстном меню в строке состояния видны.

Отредактировано xseed (02-07-2015 23:24:19)


Три студента и лопата заменяют экскаватор

Отсутствует

 

№603-07-2015 01:21:04

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 42.0

Re: Панель закладок в контекстном меню

xseed
Не по моим силенкам с этим разобраться. Просите помощи здесь.

Отсутствует

 

№703-07-2015 06:07:19

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 42.0

Re: Панель закладок в контекстном меню

xseed
Вот такое, спозаранку, придумалось:

Выделить код

Код:

(function() {
  if ( document.getElementById("contextBookmarksToolbar") ) return; 

  var contextMenu = document.getElementById("contentAreaContextMenu");
  var menu = document.createElement("menu");
  var menuPopup = document.createElement("menupopup");
  
  menu.setAttribute("id", "contextBookmarksToolbar");
  menu.setAttribute("class", "menu-iconic bookmark-item");
  menu.setAttribute("label", "Панель Закладок");
  menu.setAttribute("image", "chrome://browser/skin/places/bookmarksToolbar.png");

  menuPopup.setAttribute("id", "context_bookmarksToolbarPopup");
  menuPopup.setAttribute("placespopup", "true");
  menuPopup.setAttribute("context", "placesContext");
  menuPopup.setAttribute("openInTabs", "children");
  menuPopup.setAttribute("tooltip", "bhTooltip");
  menuPopup.setAttribute("popupsinherittooltip", "true");
  menuPopup.setAttribute("onpopupshowing", "if (!this.parentNode._placesView) new PlacesMenu(event, 'place:folder=TOOLBAR')");
  menuPopup.setAttribute("oncommand", "BookmarksEventHandler.onCommand(event, this.parentNode._placesView);");
  menuPopup.setAttribute("onclick", "BookmarksEventHandler.onClick(event, this.parentNode._placesView);");
  
  menu.appendChild(menuPopup);
  contextMenu.appendChild(menu);

  contextMenu.addEventListener("popupshowing", function() {
    menu.hidden = !gContextMenu; 
  }, false);
})();

Работает, вроде. :)

Отсутствует

 

№803-07-2015 07:10:00

bezuma
Участник
 
Группа: Members
Откуда: Москва
Зарегистрирован: 26-01-2014
Сообщений: 256
UA: Firefox 39.0

Re: Панель закладок в контекстном меню

turbot
Еще как работает! :) Плодотворное утро - спасибо

Отсутствует

 

№903-07-2015 13:34:50

voqabuhe
Участник
 
Группа: Members
Зарегистрирован: 06-12-2011
Сообщений: 3231
UA: Firefox 42.0

Re: Панель закладок в контекстном меню

Есть же кнопка от Dumby и исправление к ней №9174

Добавлено 03-07-2015 13:37:40
Хотя я возможно не совсем понял, что требуется. :)

Отредактировано voqabuhe (03-07-2015 13:37:40)

Отсутствует

 

№1003-07-2015 15:06:35

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 42.0

Re: Панель закладок в контекстном меню

voqabuhe
Ха, поиском по версии для печати прошелся, но ответ на ваш вопрос пропустил.
Впрочем, это же для открытия жестом, а не для создания пункта в контекстном меню. Так что :P мимо.

Отсутствует

 

№1104-07-2015 00:08:03

voqabuhe
Участник
 
Группа: Members
Зарегистрирован: 06-12-2011
Сообщений: 3231
UA: Firefox 42.0

Re: Панель закладок в контекстном меню

turbot пишет

Так что :P мимо.

Ну мимо, но почти рядом. :) Да и ссылка здесь будет уместна, если кто будет искать по панель закладок

Отредактировано voqabuhe (04-07-2015 00:11:06)

Отсутствует

 

№1204-07-2015 01:31:28

xseed
Участник
 
Группа: Members
Зарегистрирован: 24-03-2009
Сообщений: 58
UA: Firefox 38.0

Re: Панель закладок в контекстном меню

turbot пишет

Работает

turbot, большое вам спасибо!

А вот интересно, можно ли в Firefox создать собственное Контекстное меню, вызываемое отдельной горячей клавишей? И как в этом случае код кнопки будет выглядеть? Хотелось бы, конечно, чтобы для Панели закладок было отдельное контекстное меню, ведь в этом случае не потребуется перемещаться на пункт Панель закладок, что более удобно. Например, назначив открытие Панели закладок на CTRL-RMB.

Отредактировано xseed (04-07-2015 01:39:42)


Три студента и лопата заменяют экскаватор

Отсутствует

 

№1304-07-2015 02:29:06

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 42.0

Re: Панель закладок в контекстном меню

xseed
Можно, конечно. Но это я точно не потяну. Если только опять утреннее сатори не настигнет. :) Попросите в теме, на которую я выше ссылку дал.

Отсутствует

 

№1404-07-2015 17:09:23

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 42.0

Re: Панель закладок в контекстном меню

xseed
Родил, держите:

Выделить код

Код:

(function() {
  if (document.getElementById("context_bookmarksToolbarPopup")) return;
  
  var contextMenu = document.getElementById("contentAreaContextMenu");
  var menuPopup = document.createElement("menupopup");
  var parentNode = document.getElementById("mainPopupSet");
  
  menuPopup.setAttribute("id", "context_bookmarksToolbarPopup");
  menuPopup.setAttribute("placespopup", "true");
  menuPopup.setAttribute("context", "placesContext");
  menuPopup.setAttribute("openInTabs", "children");
  menuPopup.setAttribute("tooltip", "bhTooltip");
  menuPopup.setAttribute("popupsinherittooltip", "true");
  menuPopup.setAttribute("onpopupshowing", "if (!this.parentNode._placesView) new PlacesMenu(event, 'place:folder=TOOLBAR')");
  menuPopup.setAttribute("oncommand", "BookmarksEventHandler.onCommand(event, this.parentNode._placesView);");
  menuPopup.setAttribute("onclick", "BookmarksEventHandler.onClick(event, this.parentNode._placesView);");
  
  parentNode.appendChild(menuPopup);
  
  contextMenu.addEventListener("popupshowing", function(event) {
    if (!event.ctrlKey) return;
    event.preventDefault(); 
    event.stopPropagation();
    menuPopup.openPopupAtScreen(event.screenX, event.screenY);
  }, false);
})();

Отредактировано turbot (04-07-2015 17:16:42)

Отсутствует

 

№1506-07-2015 14:33:46

xseed
Участник
 
Группа: Members
Зарегистрирован: 24-03-2009
Сообщений: 58
UA: Firefox 39.0

Re: Панель закладок в контекстном меню

Получилось! turbot, спасибо за очередную функцию! Теперь можно открывать закладки не выходя из полноэкранного режима!
Только для того, чтобы она работала, надо ее добавить не в меню, а на Панель инструментов. Если я добавляю ее в меню, то она перестает работать после перезагрузки браузера или же если просто, без перезагрузки, если я пытаюсь ей воспользоваться в новом окне. Приходится терпеть лишнюю кнопку на Панели инструментов, что, конечно, неудобно, но в принципе, не критично. Но с другой стороны у знающих людей наверняка не одна функция под рукой, неужели, для того чтобы они работали, им приходится для каждой функции держать отдельную кнопку на Панели инструментов?

Отредактировано xseed (06-07-2015 15:23:40)


Три студента и лопата заменяют экскаватор

Отсутствует

 

№1606-07-2015 16:28:23

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 42.0

Re: Панель закладок в контекстном меню

xseed пишет

Если я добавляю ее в меню, то она перестает работать после перезагрузки браузера или же если просто, без перезагрузки, если я пытаюсь ей воспользоваться в новом окне.

Ага, известная проблема. Скройте кнопку стилем, чтоб не мешалась:

Выделить код

Код:

id-кнопки {display: none !important}

в userChrome.css. (Как узнать нужный селектор)
Еще вариант - Custom_Buttons/Merge_Custom_Buttons at master · Infocatcher/Custom_Buttons · GitHub
Либо вынести ее на дополнительный тулбар (в этой теме есть пара вариантов, как их получить) и скрыть его с [CB]Спрятать панель дополнений (нужно будет подредактировать селекторы в кнопке, примерно так), в результате:
thumb.png

Добавлено 06-07-2015 16:33:23

xseed пишет

неужели, для того чтобы они работали, им приходится для каждой функции держать отдельную кнопку

Нет. Большинство кнопок (например, если весь ее код обернут в функцию) можно совмещать в одну. Обычно автором указывается, можно ли запихивать в существующие. Тут, да, я забыл, указываю:
Использование: положите код в любую Custom Buttons кнопку, в инициализацию. Не обязательно создавать новую CB кнопку, можно использовать уже существующую.
:)

Отредактировано turbot (06-07-2015 16:33:45)

Отсутствует

 

№1728-07-2015 16:11:21

OmTatSat
Участник
 
Группа: Members
Зарегистрирован: 25-06-2015
Сообщений: 82
UA: Firefox 38.0

Re: Панель закладок в контекстном меню

скрытый текст

turbot пишет

Родил, держите
Код:
(function() {
  if (document.getElementById("context_bookmarksToolbarPopup")) return;
 
  var contextMenu = document.getElementById("contentAreaContextMenu");
  var menuPopup = document.createElement("menupopup");
  var parentNode = document.getElementById("mainPopupSet");
 
  menuPopup.setAttribute("id", "context_bookmarksToolbarPopup");
  menuPopup.setAttribute("placespopup", "true");
  menuPopup.setAttribute("context", "placesContext");
  menuPopup.setAttribute("openInTabs", "children");
  menuPopup.setAttribute("tooltip", "bhTooltip");
  menuPopup.setAttribute("popupsinherittooltip", "true");
  menuPopup.setAttribute("onpopupshowing", "if (!this.parentNode._placesView) new PlacesMenu(event, 'place:folder=TOOLBAR')");
  menuPopup.setAttribute("oncommand", "BookmarksEventHandler.onCommand(event, this.parentNode._placesView);");
  menuPopup.setAttribute("onclick", "BookmarksEventHandler.onClick(event, this.parentNode._placesView);");
 
  parentNode.appendChild(menuPopup);
 
  contextMenu.addEventListener("popupshowing", function(event) {
    if (!event.ctrlKey) return;
    event.preventDefault();
    event.stopPropagation();
    menuPopup.openPopupAtScreen(event.screenX, event.screenY);
  }, false);
})();


попробовал добавить эту кнопку, но ни по нажатию на неё ни по горячей клавише ничего не происходит, подскажите пожалуйста подробно для нуба как правильно её добавить.
П.С. добавлял в вкладку инициализация, вкладку кода оставил пустой

Отредактировано OmTatSat (28-07-2015 16:12:56)

Отсутствует

 

№1828-07-2015 17:37:05

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 42.0

Re: Панель закладок в контекстном меню

OmTatSat
Во вкладку инициализация, правильно. Меню закладок появляться будет только при вызове обычного контекстного меню (то бишь, при ПКМ по странице) с зажатым Ctrl'ом (if (!event.ctrlKey) return;). Клавишу-модификатор можно поменять.

Добавлено 28-07-2015 17:39:14
Если вам это меню нужно по нажатию на саму кнопку, то вот.

Отредактировано turbot (28-07-2015 17:39:14)

Отсутствует

 

№1928-07-2015 20:41:19

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 42.0

Re: Панель закладок в контекстном меню

Если же вам нужно клавишами вызывать, то:

скрытый текст

Выделить код

Код:

(function() {
  if (document.getElementById("context_bookmarksToolbarPopup")) return;
  
  var menuPopup = document.createElement("menupopup");
  var parentNode = document.getElementById("mainPopupSet");
  
  menuPopup.setAttribute("id", "context_bookmarksToolbarPopup");
  menuPopup.setAttribute("placespopup", "true");
  menuPopup.setAttribute("context", "placesContext");
  menuPopup.setAttribute("openInTabs", "children");
  menuPopup.setAttribute("tooltip", "bhTooltip");
  menuPopup.setAttribute("popupsinherittooltip", "true");
  menuPopup.setAttribute("onpopupshowing", "if (!this.parentNode._placesView) new PlacesMenu(event, 'place:folder=TOOLBAR')");
  menuPopup.setAttribute("oncommand", "BookmarksEventHandler.onCommand(event, this.parentNode._placesView);");
  menuPopup.setAttribute("onclick", "BookmarksEventHandler.onClick(event, this.parentNode._placesView);");
  
  parentNode.appendChild(menuPopup);

  addEventListener('keydown', (e)=> {
  if (e.altKey && e.shiftKey && e.keyCode == 66) { // здесь повешено на alt+shift+B (независимо от раскладки), код клавиш здесь смотрите: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode
    e.preventDefault();
    e.stopPropagation();
    setTimeout(()=> menuPopup.openPopupAtScreen(500, 300), 100); // (500, 300) - координаты экрана (x,y), где будет открываться меню
  };
});
})();

Добавлено 28-07-2015 20:46:59
(Как сделать в последнем случае, чтобы появлялось возле курсора - не знаю. Спрашивайте в теме CB.)

Отредактировано turbot (28-07-2015 20:46:59)

Отсутствует

 

№2028-07-2015 21:45:59

OmTatSat
Участник
 
Группа: Members
Зарегистрирован: 25-06-2015
Сообщений: 82
UA: Firefox 38.0

Re: Панель закладок в контекстном меню

turbot пишет

Если же вам нужно клавишами вызывать, то:

скрытый текст

Выделить код

Код:

(function() {
  if (document.getElementById("context_bookmarksToolbarPopup")) return;
  
  var menuPopup = document.createElement("menupopup");
  var parentNode = document.getElementById("mainPopupSet");
  
  menuPopup.setAttribute("id", "context_bookmarksToolbarPopup");
  menuPopup.setAttribute("placespopup", "true");
  menuPopup.setAttribute("context", "placesContext");
  menuPopup.setAttribute("openInTabs", "children");
  menuPopup.setAttribute("tooltip", "bhTooltip");
  menuPopup.setAttribute("popupsinherittooltip", "true");
  menuPopup.setAttribute("onpopupshowing", "if (!this.parentNode._placesView) new PlacesMenu(event, 'place:folder=TOOLBAR')");
  menuPopup.setAttribute("oncommand", "BookmarksEventHandler.onCommand(event, this.parentNode._placesView);");
  menuPopup.setAttribute("onclick", "BookmarksEventHandler.onClick(event, this.parentNode._placesView);");
  
  parentNode.appendChild(menuPopup);

  addEventListener('keydown', (e)=> {
  if (e.altKey && e.shiftKey && e.keyCode == 66) { // здесь повешено на alt+shift+B (независимо от раскладки), код клавиш здесь смотрите: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode
    e.preventDefault();
    e.stopPropagation();
    setTimeout(()=> menuPopup.openPopupAtScreen(500, 300), 100); // (500, 300) - координаты экрана (x,y), где будет открываться меню
  };
});
})();


Добавлено 28-07-2015 20:46:59
(Как сделать в последнем случае, чтобы появлялось возле курсора - не знаю. Спрашивайте в теме CB.)

Супер! ОГРОМНОЕ Спасибо! То что надо. Добавил жест в StrokeIt который нажимает alt shift b, и по жесту появляются закладки) - очень быстро) ещё раз Спасибо за быструю и квалифицированную помощь.

Добавлено 28-07-2015 21:52:03

turbot пишет

Меню закладок появляться будет только при вызове обычного контекстного меню (то бишь, при ПКМ по странице) с зажатым Ctrl'ом (if (!event.ctrlKey) return;). Клавишу-модификатор можно поменять.

выходит не до конца понял, что должно получится от кнопки) эту функцию у меня сейчас выполняет menu wizard

turbot пишет

Если вам это меню нужно по нажатию на саму кнопку, то вот.

на саму кнопку в принципе не нужно, просто для большей ясности происходящего сказал. Даже более того, буду пробовать убрать сами кнопки по Вашим рецептам в 16-ом сообщении

upd. добавил кнопки в панель дополнений и скрыл её, всё работает и ничего лишнего - огонь, я доволен)

Отредактировано OmTatSat (28-07-2015 21:57:51)

Отсутствует

 

№2130-07-2015 09:27:41

OmTatSat
Участник
 
Группа: Members
Зарегистрирован: 25-06-2015
Сообщений: 82
UA: Firefox 38.0

Re: Панель закладок в контекстном меню

turbot можете пожалуйста чуть подправить кнопку которая вызывается на alt shift b, чтобы меню закладок появлялось возле указателя мыши заместо всегда по центру, и чтобы на весь экран?

Отсутствует

 

№2230-07-2015 15:16:42

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 42.0

Re: Панель закладок в контекстном меню

OmTatSat пишет

чтобы меню закладок появлялось возле указателя мыши

turbot пишет

(Как сделать в последнем случае, чтобы появлялось возле курсора - не знаю. Спрашивайте в теме CB.)

OmTatSat пишет

всегда по центру

Координаты сменить можно, в коде откомментировано, что править надо.

OmTatSat пишет

и чтобы на весь экран

Вот это не понял.

Отсутствует

 

№2330-07-2015 17:20:13

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2245
UA: Firefox 31.0

Re: Панель закладок в контекстном меню

turbot пишет

Как сделать в последнем случае, чтобы появлялось возле курсора - не знаю

Может типа

скрытый текст

Выделить код

Код:

(box => {
    var popup = box.appendChild(document.createElement("menupopup"));
    for(var [attributeName, attributeValue] in Iterator({

        placespopup:          "true",
        context:              "placesContext",
        openInTabs:           "children",
        tooltip:              "bhTooltip",
        popupsinherittooltip: "true",
        onpopupshowing:       "if (!this.parentNode._placesView) new PlacesMenu(event, 'place:folder=TOOLBAR')",
        oncommand:            "BookmarksEventHandler.onCommand(event, this.parentNode._placesView);",
        onclick:              "BookmarksEventHandler.onClick(event, this.parentNode._placesView);"

    })) popup.setAttribute(attributeName, attributeValue);

    addEventListener("keydown", e => {
        !e.repeat && !e.ctrlKey && e.shiftKey && e.altKey && !e.metaKey && e.code == "KeyB"
        && popup.openPopupAtScreen(MousePosTracker._x, MousePosTracker._y)
    });

})(this.appendChild(document.createElement("box")));

Отсутствует

 

№2430-07-2015 17:42:09

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 42.0

Re: Панель закладок в контекстном меню

Dumby
О, спасибо. А почему при открытии EVENT_ALERT_DIALOG_OPEN (или какой другой?) проигрывается?

Отсутствует

 

№2531-07-2015 01:33:25

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 42.0

Re: Панель закладок в контекстном меню

Dumby

скрытый текст
У меня, кстати, не работает ваш код после запуска. Только после реинициализации. И это не первый раз. Но в данном случае - не помогает (или я не туда впиндюрить таймаут пытаюсь). Но зато здесь

Выделить код

Код:

&& setTimeout(()=> popup.openPopupAtScreen(MousePosTracker._x, MousePosTracker._y), 100)

- избавляет от звукового алерта.

Может это быть связано с этим: 1148593 – addEventListener should use JS::AutoSetAsyncStackForNewCalls? :rolleyes:

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]