>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Сustom Buttons http://forum.mozilla-russia.org/viewforum.php?id=34 >Панель закладок в контекстном меню http://forum.mozilla-russia.org/viewtopic.php?id=67756 |
xseed > 02-07-2015 20:19:07 |
Нашел код из дополнения "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 на горячую клавишу, при нажатии появился пункт "Закладки". Но мне бы хотелось, чтобы в контекстном меню появился не пункт Закладки, а только пункт "Панель закладок". |
turbot > 02-07-2015 20:27:21 |
xseed пишет
Использовать 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); })(); |
xseed > 02-07-2015 22:44:46 |
turbot пишет
Получилось! Добавил созданную кнопку в контекстное меню через меню Вид - Панели инструментов - Изменить. |
turbot > 02-07-2015 22:51:53 |
xseed пишет
Это он о нынешнем. Он-то как раз апологет Custom Buttons (и ). xseed пишет
Нет, если хотите xseed пишет
(ну разве что с userChrome.js, но это теже яйца, только сбоку). |
xseed > 02-07-2015 23:14:56 |
xseed пишет
Не долго счастье было. Оказывается, Панель закладок появилась, но ни один пункт в ней не открывается! То есть я нажимаю любой пункт, контекстное меню, как и положено, исчезает, но ссылка не открывается, то есть ничего не происходит, 10 вкладок попытался открыть, но даже в консоли браузера ничего не появляется... Что это может быть? |
turbot > 03-07-2015 01:21:04 |
xseed |
turbot > 03-07-2015 06:07:19 |
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); })(); Работает, вроде. |
bezuma > 03-07-2015 07:10:00 |
turbot |
voqabuhe > 03-07-2015 13:34:50 |
Есть же кнопка от Dumby и исправление к ней №9174 03-07-2015 13:37:40 |
turbot > 03-07-2015 15:06:35 |
voqabuhe |
voqabuhe > 04-07-2015 00:08:03 |
turbot пишет
Ну мимо, но почти рядом. Да и ссылка здесь будет уместна, если кто будет искать по панель закладок |
xseed > 04-07-2015 01:31:28 |
turbot пишет
turbot, большое вам спасибо! А вот интересно, можно ли в Firefox создать собственное Контекстное меню, вызываемое отдельной горячей клавишей? И как в этом случае код кнопки будет выглядеть? Хотелось бы, конечно, чтобы для Панели закладок было отдельное контекстное меню, ведь в этом случае не потребуется перемещаться на пункт Панель закладок, что более удобно. Например, назначив открытие Панели закладок на CTRL-RMB. |
turbot > 04-07-2015 02:29:06 |
xseed |
turbot > 04-07-2015 17:09:23 |
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); })(); |
xseed > 06-07-2015 14:33:46 |
Получилось! turbot, спасибо за очередную функцию! Теперь можно открывать закладки не выходя из полноэкранного режима! |
turbot > 06-07-2015 16:28:23 |
xseed пишет
Ага, известная проблема. Скройте кнопку стилем, чтоб не мешалась: в userChrome.css. (Как узнать нужный селектор) 06-07-2015 16:33:23 xseed пишет
Нет. Большинство кнопок (например, если весь ее код обернут в функцию) можно совмещать в одну. Обычно автором указывается, можно ли запихивать в существующие. Тут, да, я забыл, указываю: |
OmTatSat > 28-07-2015 16:11:21 |
скрытый текст turbot пишет
попробовал добавить эту кнопку, но ни по нажатию на неё ни по горячей клавише ничего не происходит, подскажите пожалуйста подробно для нуба как правильно её добавить. П.С. добавлял в вкладку инициализация, вкладку кода оставил пустой |
turbot > 28-07-2015 17:37:05 |
OmTatSat 28-07-2015 17:39:14 |
turbot > 28-07-2015 20:41:19 |
Если же вам нужно клавишами вызывать, то: скрытый текст Выделить код Код:(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 |
OmTatSat > 28-07-2015 21:45:59 |
turbot пишет
Супер! ОГРОМНОЕ Спасибо! То что надо. Добавил жест в StrokeIt который нажимает alt shift b, и по жесту появляются закладки) - очень быстро) ещё раз Спасибо за быструю и квалифицированную помощь. 28-07-2015 21:52:03 turbot пишет
выходит не до конца понял, что должно получится от кнопки) эту функцию у меня сейчас выполняет menu wizard turbot пишет
на саму кнопку в принципе не нужно, просто для большей ясности происходящего сказал. Даже более того, буду пробовать убрать сами кнопки по Вашим рецептам в 16-ом сообщении upd. добавил кнопки в панель дополнений и скрыл её, всё работает и ничего лишнего - огонь, я доволен) |
OmTatSat > 30-07-2015 09:27:41 |
turbot можете пожалуйста чуть подправить кнопку которая вызывается на alt shift b, чтобы меню закладок появлялось возле указателя мыши заместо всегда по центру, и чтобы на весь экран? |
turbot > 30-07-2015 15:16:42 |
OmTatSat пишет
turbot пишет
OmTatSat пишет
Координаты сменить можно, в коде откомментировано, что править надо. OmTatSat пишет
Вот это не понял. |
Dumby > 30-07-2015 17:20:13 |
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"))); |
turbot > 30-07-2015 17:42:09 |
Dumby |
turbot > 31-07-2015 01:33:25 |
Dumby скрытый текст У меня, кстати, не работает ваш код после запуска. Только после реинициализации. И это не первый раз. Но в данном случае - не помогает (или я не туда впиндюрить таймаут пытаюсь). Но зато здесь Выделить код Код:&& setTimeout(()=> popup.openPopupAtScreen(MousePosTracker._x, MousePosTracker._y), 100) - избавляет от звукового алерта. Может это быть связано с этим: 1148593 – addEventListener should use JS::AutoSetAsyncStackForNewCalls? |
Dumby > 31-07-2015 10:58:34 |
turbot пишет
Ну, это не наш код (мы бы до такого не додумались), Сейчас поставил FF 42.0a1 (2015-07-30), запилил новый чистый профиль, Закрыл FF, открыл FF. Нажимаю Alt+Shift+B, и ... Но оказалось, что MousePosTracker пасёт не те координаты, которые я ожидал. скрытый текст Выделить код Код:(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); var x, y; addEventListener("mousemove", e => {x = e.screenX, y = e.screenY}); addEventListener("keydown", e => { if (!e.repeat && !e.ctrlKey && e.shiftKey && e.altKey && !e.metaKey && e.code == "KeyB") { e.preventDefault(); e.stopPropagation(); e.stopImmediatePropagation(); popup.openPopupAtScreen(x, y); } }, true); })(this.appendChild(document.createElement("box"))); |
turbot > 31-07-2015 18:13:56 |
Dumby пишет
Это тонкий намек, что надо на"ты" перейти, или отказ от претензий? (буду, до прояснения, считать что первое ) Dumby пишет
Ага, виноват, поленился на чистом проверить. Нашел виновника непоявления. Проблема возникает (проверял на чистом профиле) если кнопка расположена на аддон-баре от Classic Theme Restorer скрытом кнопкой [CB]Спрятать панель дополнений, поправленой (испорченой?) под него скрытый текст Выделить код Код:// Спрятать панель дополнений от 11.02.2014. this.onclick = function(e) { if ( e.button == 0 ) pref.value = pref.value ? false : true; }; var right = 4; // отступ справа в px var s = 'CB.hideAddonBar2' cbu.isPref(s, false ); var pref = Application.prefs.get(s); function toggleButton() { document.getElementById("ctraddon_extra-bar2").setAttribute('hideElements', pref.value ); var icon = self.ownerDocument.getAnonymousElementByAttribute( self, "class", "toolbarbutton-icon"); icon.style.transform = pref.value ? "rotate(180deg)" : ""; // перевернуть иконку self.tooltipText = pref.value ? 'Показать панель дополнений' : 'Спрятать панель дополнений'; }; toggleButton(); gPrefService.addObserver( s, toggleButton, false ); addDestructor(function() { gPrefService.removeObserver( s, toggleButton, false ) }); // Стиль для панели дополнений ................................ var uri = makeURI('data:text/css,'+ encodeURIComponent('\ /* минимальный и прозрачный */\ #ctraddon_extra-bar2 {\ margin: 0!important;\ border-color: transparent!important;\ width: auto;\ height: 24px!important;\ max-height: 24px!important;\ min-height: 24px!important;\ position: fixed;\ padding-right: 2px!important;\ right: ' + right + 'px;\ background: transparent !important;\ z-index: 999 !important;\ }\ #ctraddon_extra-bar2 .toolbarbutton-menubutton-dropmarker {\ width: 15px!important;\ max-width: 15px!important;\ min-width: 15px!important;\ }\ #ctraddon_extra-bar2 toolbarbutton {\ vertical-align: middle !important;\ height: 24px!important;\ max-height: 24px!important;\ min-height: 24px!important;\ }\ /* если открыть настройку инструментов */\ #ctraddon_extra-bar2[customizing] {\ background: -moz-Dialog;\ border-radius: 7px 0 0 0;\ visibility: visible !important;\ }\ /* убираем лишние элементы, убираем кнопки при добавлении атрибута hideElements */\ #ctraddon_extra-bar2-closebutton,\ #ctraddon_extra-bar2:not([customizing])[hideElements="true"] label,\ #ctraddon_extra-bar2:not([customizing])[hideElements="true"] hbox,\ #ctraddon_extra-bar2:not([customizing])[hideElements="true"] .statusbarpanel-iconic,\ #ctraddon_extra-bar2:not([customizing])[hideElements="true"] toolbarbutton-icon,\ #ctraddon_extra-bar2:not([customizing])[hideElements="true"] statusbarpanel,\ #ctraddon_extra-bar2:not([customizing])[hideElements="true"] toolbaritem,\ #ctraddon_extra-bar2:not([customizing])[hideElements="true"] toolbarbutton:not([id="' + _id + '"]):not([id="custombuttons-button29"]),\ #ctraddon_extra-bar2:not([customizing])[hideElements="true"] #UserScriptLoader-icon {\ display: none !important;\ }\ \ #ctraddon_extra-bar2 > statusbar > .statusbar-resizerpanel {\ position: relative;\ margin-right:-4px;\ }\ ')); const sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService); sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET); addDestructor(function() { sss.unregisterSheet(uri, sss.AGENT_SHEET) }); Кто виноват, что делать?.. Кнопка, CTR? А вот звуковой алерт (с предыдущим вариантом кнопки) возникает и на новом профиле. |
lakostis > 01-08-2015 03:15:50 |
Тема перенесена из форума «Firefox» в форум «Сustom Buttons». |
OmTatSat > 01-08-2015 09:21:49 |
turbot пишет
на весь экран скрытый текст не на весь скрытый текст |
turbot > 01-08-2015 16:43:02 |
OmTatSat (это для последнего варианта Dumby) |
Dumby > 01-08-2015 22:03:48 |
turbot пишет
Проблема ещё и в том, что она в выключенном состоянии, при перемещении по вкладкам
Да, ты прав. Действительно, лучше добавлять не к кнопке. Спасибо. скрытый текст Выделить код Код:gBrowser.currentURI.spec == "about:customizing" || (popupset => { var data = { "folder=TOOLBAR": {code: "KeyB", ctrlKey: false, shiftKey: true, altKey: true, metaKey: false} , "folder=BOOKMARKS_MENU": {code: "KeyM", ctrlKey: false, shiftKey: true, altKey: true, metaKey: false} , "folder=UNFILED_BOOKMARKS": {code: "KeyU", ctrlKey: false, shiftKey: true, altKey: true, metaKey: false} , "sort=8&maxResults=16": {code: "KeyN", ctrlKey: false, shiftKey: true, altKey: true, metaKey: false} }; popupset.id = "CB" + _id.slice(20) + "-popupset"; addDestructor(() => popupset.remove()); var popups = []; for(var [place, shortcut] in Iterator(data)) { var box = popupset.appendChild(document.createElement("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:" + place + "');", oncommand: "BookmarksEventHandler.onCommand(event, this.parentNode._placesView);", onclick: "BookmarksEventHandler.onClick(event, this.parentNode._placesView);" })) popup.setAttribute(attributeName, attributeValue); popups.push(popup); popup.shortcut = shortcut; } var x, y; addEventListener("mousemove", e => {x = e.screenX; y = e.screenY}); addEventListener("keydown", e => { popups.some(popup => { for(var property in popup.shortcut) { if (popup.shortcut[property] != e[property]) return false; } e.preventDefault(); e.stopPropagation(); e.stopImmediatePropagation(); popup.openPopupAtScreen(x, y + 1); return true; }); }, true); })(document.documentElement.appendChild(document.createElement("popupset"))); |
turbot > 01-08-2015 22:27:37 |
Dumby пишет
Упс, это я не для того тулбара кнопку дал. Впрочем, что с ним, что с #ctraddon_addon-bar - одна проблема. Dumby пишет
Да, спасибо. А саму "Спрятать панель" нельзя как-то поправить, чтобы таких проблем не было? Или в каких случаях, у каких кнопок, такая проблема будет? 01-08-2015 22:56:22 |
Dumby > 02-08-2015 13:12:00 |
turbot пишет
Что там поправлять, она же ничего не делает, только
Может так скрытый текст Выделить код Код:addEventListener("contextmenu", e => { if ( e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey && e instanceof Event && (e.target.ownerGlobal.top == content || e.target == gBrowser) ) { e.preventDefault(); popups[0].openPopupAtScreen(x, y + 1); } }, true, gBrowser); |
OmTatSat > 02-08-2015 15:13:00 |
turbot Dumby Спасибо Вам |
turbot > 02-08-2015 15:27:33 |
Dumby пишет
Вот и мне непонятно. Но факт. Без этой кнопки на этом тулбаре - проблемы нет. Пробовал задержку выставлять, перед регистрацией стиля, - не помогает... Dumby пишет
Ага, спасибо, идеально. |
xseed > 27-01-2016 22:35:03 |
turbot, здравствуйте! PS: Еще хотел спросить. А возможно ли повесить на отдельное контекстное меню текущие открытые вкладки, и вызывать его например, при помощи сочетания ALT-RMB? Было бы очень удобно. Во первых, при открытии большого количества вкладок их поместится больше на экране, т.к. их расположение в виде контекстного меню будет более плотным, друг под другом, и в результате на экране будет видно больше текста в названии для каждой вкладки. Во-вторых, в полноэкранном режиме можно будет полностью Скрыть панели инструментов, в результате на экране освободится больше места. |
OmTatSat > 31-01-2016 00:05:55 |
xseed пишет
реализовал подобное с помощью https://addons.mozilla.org/ru/firefox/addon/enhanced-middle-click/?src=api |
xseed > 13-02-2016 03:02:35 |
xseed пишет
Глюк в CB, надо было обновить его. |