>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Сustom Buttons http://forum.mozilla-russia.org/viewforum.php?id=34 >[CB]Открывать закладки левым кликом в новой вкладке не закрывая меню http://forum.mozilla-russia.org/viewtopic.php?id=56625 |
bunda1 > 09-10-2012 21:15:48 |
Открывать закладки левым кликом в новой вкладке не закрывая меню закладок(Firefox 24 +) В строке кода: Выделить код Код:var current = ["about:newtab", "about:blank", "chrome://browser/content/bookmarks/bookmarksPanel.xul"]; можно указать адреса страниц где левый клик откроет закладку в текущей вкладке Использование: создайте новую Custom Buttons кнопку и положите код в инициализацию. Не обязательно создавать новую CB кнопку, можно использовать уже существующую. Выделить код Код:// Открывать закладки левым кликом в новой вкладке не закрывая меню закладок, от 11.10.2016. ................ function openBook(e, target = e.originalTarget) { if ( target.localName !== "menuitem" || !(target._placesNode && PlacesUtils.nodeIsURI(target._placesNode) ) ) return; if ( e.button == 0 ) { // ЛКМ e.preventDefault(); e.stopPropagation(); // открыть в новой или в текущей вкладке если это указанная вкладка .... var itemUri = target._placesNode.uri; var current = ["about:newtab", "about:blank", "chrome://browser/content/bookmarks/bookmarksPanel.xul"]; ~current.indexOf(content.location.href) || e.ctrlKey ? gBrowser.loadURI(itemUri) : gBrowser.addTab(itemUri); setTimeout(()=> document.getElementById('placesContext').hidePopup(), 50); }; // автоматически закрыть все меню закладок при уходе курсора .... var menu = target.parentNode; if ( !menu || menu.localName !== 'menupopup' ) return; menu.onmouseover =()=> menu.f = true; menu.onmouseleave =()=> { menu.f = false; setTimeout(()=> { if ( menu.f ) return; for ( var node = menu; node; node = node.parentNode ) node.nodeName == 'menupopup' && node.hidePopup(); menu.onmouseleave = null; }, 500); }; } !this.hasAttribute("initialized") && addEventListener("mouseup", openBook, true); |
voqabuhe > 18-10-2012 15:33:06 |
bunda1 |
bunda1 > 19-10-2012 20:13:19 |
voqabuhe пишет
|
voqabuhe > 19-10-2012 21:04:31 |
bunda1 |
bunda1 > 19-10-2012 21:19:45 |
voqabuhe пишет
Не получается. Попробую открыть закладку в текущей вкладке двойным левым кликом. |
voqabuhe > 19-10-2012 21:30:09 |
bunda1 пишет
А если СКМ? |
Пандёнок > 20-10-2012 00:27:37 |
voqabuhe |
bunda1 > 20-10-2012 13:45:40 |
Открывать закладки левым кликом в новой вкладке не закрывая меню закладок +(Firefox 10 +) Использование: положите код в любую Custom Buttons кнопку, в инициализацию. Не обязательно создавать новую CB кнопку, можно использовать уже существующую. Выделить код Код:/* Открывать закладки левым кликом в новой вкладке не закрывая меню закладок удалять закладки средним кликом на закладке .............................*/ function openRemoveBook(aEvent) { var target = aEvent.originalTarget; // стоп, если не левый клик и закладка из меню закладок .... if ( target.localName !== "menuitem" || !(target._placesNode && PlacesUtils.nodeIsURI(target._placesNode) ) ) return; var bookMenu = target.parentNode; // стоп, если не левый клик и закладка из меню закладок .... if ( target.localName !== "menuitem" || !(target._placesNode && PlacesUtils.nodeIsURI(target._placesNode) ) ) return; // если левый клик .... if ( aEvent.button == 0) { aEvent.preventDefault(); aEvent.stopPropagation(); // открыть в новой или в текущей вкладке если это указанная вкладка .... var itemUri = target._placesNode.uri; // получить адрес закладки var current = ["about:newtab", "about:blank", "chrome://browser/content/bookmarks/bookmarksPanel.xul"]; (current.indexOf(content.location.href) !== -1 || aEvent.ctrlKey)? gBrowser.loadURI( itemUri ): gBrowser.addTab( itemUri ); }; // если средний клик .... if ( aEvent.button == 1) { aEvent.preventDefault(); aEvent.stopPropagation(); // удалить закладку .... var itemId = target._placesNode.itemId; PlacesUtils.bookmarks.removeItem(itemId); }; // блокировать повторный запуск обработчика при открытии несколько закладок из одного меню закладок .... if ( this.stopListener ) return; this.stopListener = true; // обработчик закрывает меню при ухода мыши с меню и удаляет себя .... window.addEventListener('mouseover', function(event) { var name = event.target.nodeName; if ( name == 'menu' || name == 'menupopup' || name == 'menuitem' || name == 'menuseparator') return; setTimeout(function() { bookMenu.hidePopup() }, 400); // закрыть меню через 400 ms window.removeEventListener("mouseover", arguments.callee, false); this.stopListener = false; // удалить флаг }, false); } window.addEventListener("mouseup", openRemoveBook, false); this.onDestroy = function() { window.removeEventListener("mouseup", openRemoveBook, false); }; |
voqabuhe > 20-10-2012 20:00:07 |
А вариант с удалением закладок по Ctrl+СКМ будет? |
bunda1 > 20-10-2012 20:27:44 |
voqabuhe пишет
вариант с удалением закладок по Ctrl+СКМ Выделить код Код:/* Открывать закладки левым кликом в новой вкладке не закрывая меню закладок удалять закладки Ctrl+ средним кликом на закладке .............................*/ function openRemoveBook(aEvent) { var target = aEvent.originalTarget; // стоп, если не закладка из меню закладок .... if ( target.localName !== "menuitem" || !(target._placesNode && PlacesUtils.nodeIsURI(target._placesNode) ) ) return; var target = aEvent.originalTarget; var bookMenu = target.parentNode; // стоп, если не левый клик и закладка из меню закладок .... if ( target.localName !== "menuitem" || !(target._placesNode && PlacesUtils.nodeIsURI(target._placesNode) ) ) return; // если левый клик .... if ( aEvent.button == 0) { aEvent.preventDefault(); aEvent.stopPropagation(); // открыть в новой или в текущей вкладке если это указанная вкладка .... var itemUri = target._placesNode.uri; // получить адрес закладки var current = ["about:newtab", "about:blank", "chrome://browser/content/bookmarks/bookmarksPanel.xul"]; (current.indexOf(content.location.href) !== -1 || aEvent.ctrlKey)? gBrowser.loadURI( itemUri ): gBrowser.addTab( itemUri ); }; // если Ctrl+ средний клик .... if ( aEvent.ctrlKey && !aEvent.shiftKey && !aEvent.altKey && !aEvent.metaKey && aEvent.button == 1 ) { aEvent.preventDefault(); aEvent.stopPropagation(); // удалить закладку .... var itemId = target._placesNode.itemId; PlacesUtils.bookmarks.removeItem(itemId); }; // блокировать повторный запуск обработчика при открытии несколько закладок из одного меню закладок .... if ( this.stopListener ) return; this.stopListener = true; // обработчик закрывает меню при ухода мыши с меню и удаляет себя .... window.addEventListener('mouseover', function(event) { var name = event.target.nodeName; if ( name == 'menu' || name == 'menupopup' || name == 'menuitem' || name == 'menuseparator') return; setTimeout(function() { bookMenu.hidePopup() }, 400); // закрыть меню через 400 ms window.removeEventListener("mouseover", arguments.callee, false); this.stopListener = false; // удалить флаг }, false); } window.addEventListener("mouseup", openRemoveBook, false); this.onDestroy = function() { window.removeEventListener("mouseup", openRemoveBook, false); }; |
voqabuhe > 20-10-2012 21:36:12 |
bunda1 |
2k1dmg > 27-10-2012 15:38:15 |
Открывать/удалять закладки средним кликом не закрывая меню закладок скрытый текст
Shift + Middle Click = Открыть закладку в активной вкладке Ctrl + Middle Click = Действие по умолчанию для СКМ ([about:config - browser.tabs.loadBookmarksInBackground;false] - открыть закладку в активной вкладке и закрыть меню) Ctrl + Shift + Middle Click = Удалить закладку Выделить код Код:function openBookMC(e) { if ( e.target.localName !== 'menuitem' ) return; if ( e.button == 1 && !e.ctrlKey && !e.shiftKey ) { e.stopPropagation(); openUILinkIn( e.originalTarget._placesNode.uri, "tabshifted" ); }; if ( e.button == 1 && !e.ctrlKey && e.shiftKey ) { e.stopPropagation(); openUILinkIn( e.originalTarget._placesNode.uri, "tab" ); }; if ( e.button == 1 && e.ctrlKey && e.shiftKey ) { e.stopPropagation(); PlacesUtils.bookmarks.removeItem( e.originalTarget._placesNode.itemId ); }; }; window.addEventListener("click", openBookMC, true); this.onDestroy = function() { window.removeEventListener("click", openBookMC, true); }; v2 Выделить код Код:function openBookMC(e) { if ( e.target.localName == 'menuitem' ) { if ( e.target.getAttribute("scheme") != 'javascript' ) { if ( e.button == 1 && !e.ctrlKey && !e.shiftKey ) { e.stopPropagation(); openUILinkIn( e.target._placesNode.uri, "tabshifted" ); } if ( e.button == 1 && !e.ctrlKey && e.shiftKey ) { e.stopPropagation(); openUILinkIn( e.target._placesNode.uri, "tab" ); } } if ( e.button == 1 && e.ctrlKey && e.shiftKey ) { e.stopPropagation(); PlacesUtils.bookmarks.removeItem( e.target._placesNode.itemId ); } } } var popUpMenus = ["PlacesToolbar","bookmarks-menu-button","appmenu_bookmarksPopup","appmenu_historyMenupopup","bookmarksMenu","history-menu"]; for ( var i = 0; i < popUpMenus.length; i++ ) { var mItiemPopup = document.getElementById( popUpMenus[i] ); mItiemPopup.addEventListener( "click", openBookMC, true ); } this.onDestroy = function() { for ( var i = 0; i < popUpMenus.length; i++ ) { var mItiemPopup = document.getElementById( popUpMenus[i] ); mItiemPopup.removeEventListener( "click", openBookMC, true ); } }; |
bunda1 > 27-10-2012 16:51:28 |
Открывать закладки левым кликом в новой вкладке не закрывая меню закладок + 2( Firefox 10 + ) Меню закладок автоматически закроется при уходе курсора с меню, это можно отключить если в начале кода переключить переменную: autoClose на false. Если адрес текущей страницы about:newtab, about:blank, chrome://browser/content/bookmarks/bookmarksPanel.xul левый клик откроет закладку в текущей вкладке. Использование: положите код в любую Custom Buttons кнопку, в инициализацию. Не обязательно создавать новую CB кнопку, можно использовать уже существующую. Код инициализации: Выделить код Код:/* Открывать закладки левым кликом в новой вкладке или открывать закладки средним кликом на закладке не закрывая меню закладок или двойным правым кликом удалять закладки от 02.05.2013. */ function openOrRemoveBook(e) { var type = e.type; var target = e.originalTarget; var bookMenu = target.parentNode; // стоп, если не закладка из меню закладок .... if ( target.localName !== "menuitem" || !target._placesNode ) return; var autoClose = true; // true => автоматически закрывать меню закладок // если левый клик открыть закладку в новой или в текущей вкладке если это указанная вкладка .... if ( type == 'mouseup' && e.button == 0 ) { e.preventDefault(); e.stopPropagation(); var itemUri = target._placesNode.uri; // получить адрес закладки var bookmarklet = ( itemUri.substr(0, 11) == "javascript:"); var current = ["about:newtab", "about:blank", "chrome://browser/content/bookmarks/bookmarksPanel.xul"]; ( bookmarklet || current.indexOf(content.location.href) !== -1 || e.ctrlKey ) ? gBrowser.loadURI( itemUri ) : gBrowser.addTab( itemUri ); }; // если средний клик открыть закладку в текущей .... if ( type == 'click' && e.button == 1 ) { e.stopPropagation(); gBrowser.loadURI( target._placesNode.uri ) }; // если это двойной правый клик удалить закладку и закрыть контекстное меню ...... if ( type == 'mouseup' && e.button == 2 ) { if ( bookMenu.open == true ) { e.preventDefault(); setTimeout(function() { document.getElementById("placesContext").hidePopup() }, 0); try { PlacesUtils.bookmarks.removeItem( target._placesNode.itemId )} catch(e) { }; } bookMenu.open = true; setTimeout(function() { bookMenu.open = false }, 400); // сбросить флаг по таймеру }; // автоматически закрыть все меню закладок при уходе курсора .... if ( !autoClose ) return; if ( bookMenu.stopListener ) return; // блокировать повторный запуск обработчика для текущего меню закладок bookMenu.stopListener = true; // обработчик закрывает меню при ухода мыши с меню и удаляет себя addEventListener("mouseover", function close(e) { if ( !/menu/.test( e.originalTarget.nodeName ) ) { clearTimeout( bookMenu.timer ); bookMenu.timer = setTimeout(function() { removeEventListener("mouseover", close, false, window ); bookMenu.stopListener = false; // отключить блокировку запуска for ( var node = bookMenu; node; node = node.parentNode ) { if ( node.nodeName == 'menupopup' ) node.hidePopup(); // закрыть все меню закладок } }, 700 ); // закрыть меню через 700 ms } else clearTimeout( bookMenu.timer ); }, false ); }; addEventListener("mouseup", openOrRemoveBook, true, window ); addEventListener("click", openOrRemoveBook, true, window ); За помощь в создании кода спасибо 2k1dmg и Dumby |
voqabuhe > 04-11-2012 13:29:42 |
bunda1 |
bunda1 > 04-11-2012 15:26:08 |
voqabuhe пишет
Ой, я про это не подумал. |
voqabuhe > 04-11-2012 22:42:59 |
bunda1 |
voqabuhe > 10-11-2012 02:51:46 |
bunda1 10-11-2012 02:56:02 |
Dumby > 10-11-2012 08:59:15 |
voqabuhe Просто опечатка. Там, в самом конце кода, |
voqabuhe > 10-11-2012 12:05:37 |
Dumby |
mettis > 28-02-2013 23:38:17 |
А почему после открытия из Закладок открывается 2 одинаковые ссылки? |
bunda1 > 01-03-2013 00:49:27 |
mettis пишет
С которым кодом проблема ? |
mettis > 01-03-2013 14:07:14 |
bunda1 пишет
Открывать закладки левым кликом в новой вкладке не закрывая меню закладок + 2(Firefox 10 +) |
bunda1 > 01-03-2013 22:27:08 |
mettis |
questman > 05-03-2013 10:27:34 |
А можно просто чтобы меню не закрывалось? |
bunda1 > 05-03-2013 23:08:35 |
questman пишет
Выделить код Код:/* Открывать закладки левым кликом в новой вкладке или открывать закладки средним кликом на закладке не закрывая меню закладок или двойным правым кликом удалять закладки от 20.04.2013. */ function openOrRemoveBook(e) { var type = e.type; var target = e.originalTarget; var bookMenu = target.parentNode; // стоп, если не закладка из меню закладок .... if ( target.localName !== "menuitem" || !target._placesNode ) return; // если левый клик открыть закладку в новой или в текущей вкладке если это указанная вкладка .... if ( type == 'mouseup' && e.button == 0 ) { e.preventDefault(); e.stopPropagation(); var itemUri = target._placesNode.uri; // получить адрес закладки var bookmarklet = ( itemUri.substr(0, 11) == "javascript:"); var current = ["about:newtab", "about:blank", "chrome://browser/content/bookmarks/bookmarksPanel.xul"]; ( bookmarklet || current.indexOf(content.location.href) !== -1 || e.ctrlKey ) ? gBrowser.loadURI( itemUri ) : gBrowser.addTab( itemUri ); }; // если средний клик открыть закладку в текущей .... if ( type == 'click' && e.button == 1 ) { e.stopPropagation(); gBrowser.loadURI( target._placesNode.uri ) }; // если это двойной правый клик удалить закладку и закрыть контекстное меню ...... if ( type == 'mouseup' && e.button == 2 ) { if ( bookMenu.open == true ) { e.preventDefault(); setTimeout(function() { document.getElementById("placesContext").hidePopup() }, 0); PlacesUtils.bookmarks.removeItem( target._placesNode.itemId ); } bookMenu.open = true; setTimeout(function() { bookMenu.open = false }, 400); // сбросить флаг по таймеру }; }; addEventListener("mouseup", openOrRemoveBook, true, window ); addEventListener("click", openOrRemoveBook, true, window ); |
questman > 06-03-2013 09:08:35 |
Мне нужно вот так: скрытый текст Выделить код Код:function openOrRemoveBook(e){ var type = e.type; var target = e.target; // стоп, если не закладка из меню закладок .... if(target.localName !== "menuitem" || !target._placesNode) return; // если левый клик меню не закрывается if(type == 'mouseup' && e.button == 0){ e.preventDefault(); e.stopPropagation(); var itemUri = target._placesNode.uri; // получить адрес закладки var bookmarklet = ( target.getAttribute("scheme") == 'javascript' ); var current = ["about:newtab", "about:blank", "chrome://browser/content/bookmarks/bookmarksPanel.xul", bookmarklet]; (bookmarklet || current.indexOf(content.location.href) !== -1 || e.ctrlKey) ? gBrowser.loadURI(itemUri): gBrowser.addTab(itemUri); }; // если средний клик меню не закрывается if(type == 'click' && e.button == 1){ e.stopPropagation(); gBrowser.addTab(target._placesNode.uri) }; }; window.addEventListener("mouseup", openOrRemoveBook, true); window.addEventListener("click", openOrRemoveBook, true); this.onDestroy = function(){ window.removeEventListener("click", openOrRemoveBook, true); window.removeEventListener("mouseup", openOrRemoveBook, true); }; bunda1 проверь пожалуйста верна ли редакция кода под себя |
mettis > 06-03-2013 17:02:31 |
bunda1 а что поводу открытия одинаковых ссылок из закладок? нашли ошибку? |
bunda1 > 06-03-2013 23:52:27 |
questman пишет
Нормально все 07-03-2013 00:02:29 mettis пишет
Нет, и у меня открывается только одна ссылка. В коде есть проблема с авто закрытием которую я пока не решил. |
sissterr > 18-04-2013 17:24:28 |
у меня тоже на 20м открывается по 3-7 вкладок |
bunda1 > 18-04-2013 19:32:32 |
sissterr пишет
Проблема наблюдается сразу после запуска браузера ? |
sissterr > 18-04-2013 22:16:25 |
bunda1, |
adidharma > 19-04-2013 02:29:55 |
sissterr пишет
А версия CustomButtons какая? У меня такое было со старой. Нужно поставить самую последнюю dev-версию отсюда, например: custombuttons-0.0.5.6pre5-20130226 |
sissterr > 19-04-2013 14:11:10 |
adidharma, пасибки, эта работает. хотя предыдущую скачала с другого места с точно таким названием. |
villa7 > 19-04-2013 15:32:16 |
sissterr пишет
http://forum.mozilla-russia.org/viewtopic.php?pid=575006#p575006 |
bunda1 > 19-04-2013 23:22:14 |
sissterr пишет
Такое уже есть в FF или я что то не понял |
villa7 > 17-07-2013 13:07:07 |
bunda1 |
bunda1 > 17-07-2013 19:19:30 |
villa7 пишет
Выделить код Код:function openBookmark(e) { var type = e.type; var target = e.originalTarget; var bookMenu = target.parentNode; // стоп, если не закладка из меню закладок .... if ( target.localName !== "menuitem" || !target._placesNode ) return; // если левый клик открыть закладку в новой вкладке .... if ( type == 'mouseup' && e.button == 0 ) { e.preventDefault(); e.stopPropagation(); var itemUri = target._placesNode.uri; // получить адрес закладки var bookmarklet = ( itemUri.substr(0, 11) == "javascript:"); var current = ["about:newtab", "about:blank", "chrome://browser/content/bookmarks/bookmarksPanel.xul"]; ( bookmarklet || current.indexOf(content.location.href) !== -1 || e.ctrlKey ) ? gBrowser.loadURI( itemUri ) : gBrowser.selectedTab = gBrowser.addTab( itemUri ); }; }; addEventListener("mouseup", openBookmark, true, window ); |
villa7 > 17-07-2013 20:43:46 |
bunda1 |
bunda1 > 17-07-2013 21:46:38 |
villa7 Выделить код Код:function openBookmark(e) { var type = e.type; var target = e.originalTarget; var bookMenu = target.parentNode; // стоп, если не закладка из меню закладок .... if ( target.localName !== "menuitem" || !target._placesNode ) return; // если левый клик открыть закладку в новой вкладке .... if ( type == 'mouseup' && e.button == 0 ) { e.preventDefault(); e.stopPropagation(); var itemUri = target._placesNode.uri; // получить адрес закладки var bookmarklet = ( itemUri.substr(0, 11) == "javascript:"); var current = ["about:newtab", "about:blank", "chrome://browser/content/bookmarks/bookmarksPanel.xul"]; ( bookmarklet || current.indexOf(content.location.href) !== -1 || e.ctrlKey ) ? gBrowser.loadURI( itemUri ) : gBrowser.selectedTab = gBrowser.addTab( itemUri ); for ( var node = bookMenu; node; node = node.parentNode ) { if ( node.nodeName == 'menupopup' ) node.hidePopup(); // закрыть все меню закладок } }; }; addEventListener("mouseup", openBookmark, true, window ); |
villa7 > 17-07-2013 22:42:06 |
bunda1 |
Inko7 > 01-09-2013 18:49:23 |
решил приспособить этот код под среднюю кнопку мыши. |
bunda1 > 01-09-2013 21:36:28 |
Inko7 пишет
Это потому что по умолчанию средняя кнопка открывает закладку по клику а не при отпускании кнопки, то есть если произошло событие click Выделить код Код:function openBookmark(e) { var type = e.type; var target = e.originalTarget; var bookMenu = target.parentNode; // стоп, если не закладка из меню закладок .... if ( target.localName !== "menuitem" || !target._placesNode ) return; // если левый клик открыть закладку в новой вкладке .... if ( type == 'click' && e.button == 0 ) { e.preventDefault(); e.stopPropagation(); var itemUri = target._placesNode.uri; // получить адрес закладки var bookmarklet = ( itemUri.substr(0, 11) == "javascript:"); var current = ["about:newtab", "about:blank", "chrome://browser/content/bookmarks/bookmarksPanel.xul"]; ( bookmarklet || current.indexOf(content.location.href) !== -1 || e.ctrlKey ) ? gBrowser.loadURI( itemUri ) : gBrowser.selectedTab = gBrowser.addTab( itemUri ); }; }; addEventListener("click", openBookmark, true, window ); |
Inko7 > 01-09-2013 23:10:48 |
bunda1 пишет
наверное и внутри условия нужно поменять на type == 'click' ? |
bunda1 > 01-09-2013 23:16:07 |
Inko7 пишет
Точно, а что за проверка ? |
Inko7 > 02-09-2013 11:39:58 |
bunda1 пишет
например: |
Infocatcher > 02-09-2013 17:00:07 |
Inko7 пишет
Вот, кстати, пример: https://forum.mozilla-russia.org/viewto … 33#p621233 |
Inko7 > 02-09-2013 17:17:12 |
Infocatcher Все получилось! |
bunda1 > 15-09-2013 14:51:40 |
Открывать закладки средним кликом в новой вкладке не закрывая меню закладок ( Firefox 10 + ) Выделить код Код:// Открывать закладки средним кликом в новой вкладке не закрывая меню закладок, от 16.09.2013. ................................ (function() { const str = 'p"', rep = 'p" && !aEvent.button', obj = BookmarksEventHandler, func = obj.onClick; eval("BookmarksEventHandler.onClick = " + String.replace(func, str, rep)); addDestructor(function() obj.onClick = func); })(); |
difabor > 21-09-2013 22:07:36 |
У меня есть ряд вопросов-предложений касательно СВ в контексте работы с закладками. 1. Возможно ли создание кнопки которая будет имитировать открытие какого-то фолдера из бара закладок? Если да, то такая кнопка по мощности будет в 3 раза сильнее. 2. Возможна ли работа кнопки не по кликам, а по фазам клика? Поясню подробнее, что я имею в виду. 3. Возможна ли обработка двумерного списка? 4. Возможно ли работать по сочетанию кнопок мышки? |
bunda1 > 23-09-2013 21:24:04 |
difabor пишет
Custom_Buttons/Bookmarks_Folder at master · Infocatcher/Custom_Buttons · GitHub 23-09-2013 21:32:53 difabor пишет
Возможна конечно, я думаю с разным кликами + меню проблем нет. А вот как там открыть закладки не знаю, но думаю тоже возможно. Но лично мне такая кнопка субъективно не нравится. 23-09-2013 21:35:33 difabor пишет
Вот это как раз легче всего. 23-09-2013 21:39:35 difabor пишет
Обработка двумерного списка тоже возможна, насчёт расцветить не знаю. |
difabor > 23-09-2013 23:32:48 |
bunda1 пишет
Спасибо! Но я и не собирался создавать отдельные кнопки на закладки/фолдеры. Я предполагал "растворить" закладки/фолдеры в функциональных кнопках. bunda1 пишет
Если расцветить невозможно - есть ли возможность как-то выделить участки - точками или каким-то другим путём? |
Крошка Ру > 24-09-2013 00:56:43 |
difabor , Нет, я не в попытке оспорить первенство, а к тому что чтобы продвинуть эти идеи в жизнь, нужно приложить тинанические усилия И после уже сложно будет себя считать неквалифицированным пользователем... но тогда потеряется первоночальный смысл начинания |
Northtech > 09-05-2015 13:21:55 |
bunda1, а есть такая же кнопка, только чтобы СКМ (колёсико) открывать ссылки в новой фоновой вкладке не закрывая меню, а остальные кнопки действовали как полагается по умолчанию? |
bunda1 > 09-05-2015 14:02:53 |
Northtech пишет
09-05-2015 14:04:46 |
Northtech > 09-05-2015 17:08:50 |
bunda1 благодарю, не заметил) |
becool > 11-07-2015 02:41:40 |
bunda1 пишет
А для боковой панели закладок такое не сотворить? |
bunda1 > 11-07-2015 12:13:10 |
becool пишет
Выделить код Код:// Управление закладками, от 25.10.2014. ................................ (function func() { // страницы где левый клик открывает закладку в текущей странице var current = ["about:newtab", "about:blank", "chrome://browser/content/bookmarks/bookmarksPanel.xul"]; const background = true; // открывать закладку в фоновой вкладке const nextToCurrent = false; // открывать закладку рядом с текущей вкладкой const menuAutoClose = true; // автоматически закрыть меню закладок при уходе курсора function handleClick(e) { var target = e.originalTarget; var sidebar = target.ownerDocument.defaultView.top !== content && target.id == 'bookmarks-view-children'; if ( !sidebar && !target._placesNode ) return; // стоп, если не закладка, папка, разделитель // получить закладку, адрес, папку и id закладки, другие переменные if ( sidebar ) { var tree = target.parentNode; var box = tree.treeBoxObject; var row = box.getRowAt(e.clientX, e.clientY); var node = tree.view.nodeForTreeIndex(row); } var node = sidebar ? node : target._placesNode, id = node.itemId, uri = node.uri, button = e.button, type = e.type, isFolder = PlacesUtils.nodeIsContainer(node), isURI = PlacesUtils.nodeIsURI(node); // двойной клик добавляет закладку или удаляет закладку, разделитель .... if ( button !== 1 && type == 'mouseup' ) { if ( button == 0 && func.flag == true && isFolder ) { addBookmark(node, false); sidebar && tree.view.toggleOpenState(row); } if ( button == 2 && func.flag == true && !isFolder ) { setTimeout(function() { target.ownerDocument.getElementById("placesContext").hidePopup() try { PlacesUtils.bookmarks.removeItem(id) } catch(e) {}; }, 0); } func.flag = true; setTimeout(function() func.flag = false, 400 ); } if ( isFolder ) return; // стоп, если папка закладок if ( button == 0 ) window.clearTimeout( func.timer ); // сбросить таймер длинного клика // блокировать действие по умолчанию для клика и отжатия .... if ( button !== 2 && /click|mouseup/.test(type) ) { e.preventDefault(); e.stopPropagation(); } // левый длинный клик добавляет текущую вкладку в закладки под нажатой закладкой .... if ( button == 0 && type == 'mousedown' ) { func.loadBook = true; func.timer = setTimeout(function() { func.loadBook = false; addBookmark(node.parent, id); }, 400 ); } // левый клик открывает закладку в новой или текущей вкладке .... if ( button == 0 && type == 'mouseup' && func.loadBook && isURI ) { ( uri.startsWith("javascript") || current.indexOf(content.location.href) !== -1 || e.ctrlKey ) ? gBrowser.loadURI( uri ) : gBrowser.loadOneTab( uri, {relatedToCurrent: nextToCurrent, inBackground: background, referrerURI: null } ); } // средний клик открывает закладку в текущей вкладке .... if ( button == 1 && type == 'click' && isURI ) { gBrowser.loadURI( uri ); } // автоматически закрыть все меню закладок при уходе курсора .... var menu = target.parentNode; if ( !menuAutoClose || !menu || menu.localName !== 'menupopup' || type !== 'click' || button == 2 ) return; menu.onmouseover = function() menu.f = true; menu.onmouseleave = function() { menu.f = false; setTimeout(function() { if ( menu.f ) return; for ( var node = menu; node; node = node.parentNode ) node.nodeName == 'menupopup' && node.hidePopup(); menu.onmouseleave = null; }, 500); }; }; ["click", "dragstart", "mouseup", "mousedown"] .forEach(function(type) addEventListener(type, handleClick, true) ); // добавить страницу в закладки в указанной папке .... function addBookmark(folder, id) { var title = gBrowser.mCurrentTab.label; var folderId = PlacesUtils.getConcreteItemId(folder); var index = id ? PlacesUtils.bookmarks.getItemIndex(id) + 1 : 0; var readOnlyFolder = PlacesUtils.nodeIsQuery(folder) || PlacesUtils.annotations.itemHasAnnotation(folderId, PlacesUtils.LMANNO_FEEDURI); if ( !readOnlyFolder ) PlacesUtils.bookmarks.insertBookmark(folderId, gBrowser.currentURI, index, title); // всплывающая подсказка if ( id ) return; var al = Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService); if ( readOnlyFolder ) { al.showAlertNotification("chrome://global/skin/icons/error-16.png", folder.title, "Не поддерживается"); return; } var icon = gBrowser.mCurrentTab.image || "chrome://global/skin/icons/information-16.png"; al.showAlertNotification(icon, "Добавил в папку " + (folder.title || "(без заголовка)") + ":", title.slice(0, 100)); }; })(); |
becool > 11-07-2015 12:44:11 |
bunda1, СКМ сделай пожалуйста открыть в новой фоновой вкладке. |
bunda1 > 11-07-2015 12:47:52 |
becool пишет
Выделить код Код:// Управление закладками, от 25.10.2014. ................................ (function func() { // страницы где левый длинный клик открывает закладку в текущей странице var current = ["about:newtab", "about:blank", "chrome://browser/content/bookmarks/bookmarksPanel.xul"]; const background = false; // открывать закладку в фоновой вкладке const nextToCurrent = true; // открывать закладку рядом с текущей вкладкой const menuAutoClose = true; // автоматически закрыть меню закладок при уходе курсора function handleClick(e) { var target = e.originalTarget; var sidebar = target.ownerDocument.defaultView.top !== content && target.id == 'bookmarks-view-children'; if ( !sidebar && !target._placesNode ) return; // стоп, если не закладка, папка, разделитель // получить закладку, адрес, папку и id закладки, другие переменные if ( sidebar ) { var tree = target.parentNode; var box = tree.treeBoxObject; var row = box.getRowAt(e.clientX, e.clientY); var node = tree.view.nodeForTreeIndex(row); } var node = sidebar ? node : target._placesNode, id = node.itemId, uri = node.uri, button = e.button, type = e.type, isFolder = PlacesUtils.nodeIsContainer(node), isURI = PlacesUtils.nodeIsURI(node); // двойной клик добавляет закладку или удаляет закладку, разделитель .... if ( button !== 1 && type == 'mouseup' ) { if ( button == 0 && func.flag == true && isFolder ) { addBookmark(node, false); sidebar && tree.view.toggleOpenState(row); } if ( button == 2 && func.flag == true && !isFolder ) { setTimeout(function() { target.ownerDocument.getElementById("placesContext").hidePopup() try { PlacesUtils.bookmarks.removeItem(id) } catch(e) {}; }, 0); } func.flag = true; setTimeout(function() func.flag = false, 400 ); } if ( isFolder ) return; // стоп, если папка закладок if ( button == 0 ) window.clearTimeout( func.timer ); // сбросить таймер длинного клика // блокировать действие по умолчанию для клика и отжатия .... if ( button !== 2 && /click|mouseup/.test(type) ) { e.preventDefault(); e.stopPropagation(); } // левый длинный клик добавляет текущую вкладку в закладки под нажатой закладкой .... if ( button == 0 && type == 'mousedown' ) { func.loadBook = true; func.timer = setTimeout(function() { func.loadBook = false; addBookmark(node.parent, id); }, 400 ); } // левый клик открывает закладку в новой или текущей вкладке .... if ( button == 0 && type == 'mouseup' && func.loadBook && isURI ) { ( uri.startsWith("javascript") || current.indexOf(content.location.href) !== -1 || e.ctrlKey ) ? gBrowser.loadURI( uri ) : gBrowser.loadOneTab( uri, {relatedToCurrent: nextToCurrent, inBackground: background, referrerURI: null } ); } // средний клик открывает закладку в текущей вкладке .... if ( button == 1 && type == 'click' && isURI ) { gBrowser.loadOneTab( uri, {relatedToCurrent: nextToCurrent, inBackground: true, referrerURI: null } ); } // автоматически закрыть все меню закладок при уходе курсора .... var menu = target.parentNode; if ( !menuAutoClose || !menu || menu.localName !== 'menupopup' || type !== 'click' || button == 2 ) return; menu.onmouseover = function() menu.f = true; menu.onmouseleave = function() { menu.f = false; setTimeout(function() { if ( menu.f ) return; for ( var node = menu; node; node = node.parentNode ) node.nodeName == 'menupopup' && node.hidePopup(); menu.onmouseleave = null; }, 500); }; }; ["click", "dragstart", "mouseup", "mousedown"] .forEach(function(type) addEventListener(type, handleClick, true) ); // добавить страницу в закладки в указанной папке .... function addBookmark(folder, id) { var title = gBrowser.mCurrentTab.label; var folderId = PlacesUtils.getConcreteItemId(folder); var index = id ? PlacesUtils.bookmarks.getItemIndex(id) + 1 : 0; var readOnlyFolder = PlacesUtils.nodeIsQuery(folder) || PlacesUtils.annotations.itemHasAnnotation(folderId, PlacesUtils.LMANNO_FEEDURI); if ( !readOnlyFolder ) PlacesUtils.bookmarks.insertBookmark(folderId, gBrowser.currentURI, index, title); // всплывающая подсказка if ( id ) return; var al = Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService); if ( readOnlyFolder ) { al.showAlertNotification("chrome://global/skin/icons/error-16.png", folder.title, "Не поддерживается"); return; } var icon = gBrowser.mCurrentTab.image || "chrome://global/skin/icons/information-16.png"; al.showAlertNotification(icon, "Добавил в папку " + (folder.title || "(без заголовка)") + ":", title.slice(0, 100)); }; })(); |
becool > 11-07-2015 12:57:57 |
const menuAutoClose = true; // автоматически закрыть меню закладок при уходе курсора |
bunda1 > 11-07-2015 12:59:40 |
becool пишет
Нет. |
becool > 11-07-2015 13:00:29 |
bunda1, большое спасибо! |
ifln > 04-10-2016 12:04:57 |
Пользуюсь кнопкой Открывать закладки левым кликом в новой вкладке не закрывая меню закладок, удалять закладки Ctrl+ средним кликом на закладке |
stluka > 09-10-2016 12:33:16 |
Для такую кнопку можно сделать? |
bunda1 > 10-10-2016 19:31:28 |
stluka пишет
Выделить код Код:// Открывать закладки левым кликом в новой вкладке не закрывая меню закладок, от 03.09.2016. ................ function openBook(e, target = e.originalTarget) { if ( target.localName !== "menuitem" || !(target._placesNode && PlacesUtils.nodeIsURI(target._placesNode) ) ) return; if ( e.button == 0 ) { // если правый клик e.preventDefault(); e.stopPropagation(); // открыть в новой или в текущей вкладке если это указанная вкладка .... var itemUri = target._placesNode.uri; var current = ["about:newtab", "about:blank", "chrome://browser/content/bookmarks/bookmarksPanel.xul"]; ~current.indexOf(content.location.href) || e.ctrlKey ? gBrowser.loadURI(itemUri) : gBrowser.addTab(itemUri); setTimeout(()=> document.getElementById('placesContext').hidePopup(), 50); }; // автоматически закрыть все меню закладок при уходе курсора .... var menu = target.parentNode; if ( !menu || menu.localName !== 'menupopup' ) return; menu.onmouseover =()=> menu.f = true; menu.onmouseleave =()=> { menu.f = false; setTimeout(()=> { if ( menu.f ) return; for ( var node = menu; node; node = node.parentNode ) node.nodeName == 'menupopup' && node.hidePopup(); menu.onmouseleave = null; }, 500); }; } !this.hasAttribute("initialized") && addEventListener("mouseup", openBook, true); |
difabor > 11-10-2016 06:20:21 |
Можно ли сделать так, чтобы закладка, у которой чекбокс "Открывать в боковой панели" установлен, открывалась бы в боковой панели? |
stluka > 11-10-2016 15:49:14 |
bunda1 спасибо за ответ. НО ... Вставил код в раздел /*Initialization Code*/ новой кнопки. Вытянул кнопку на панель. Жму ЛКМ не реагирует, СКМ не реагирует, ПКМ выпадает меню для редактирования, удаления и т.д. для кнопки. |
bunda1 > 11-10-2016 20:34:21 |
stluka пишет
Ну так и задумано, кнопка и не должна реагировать на ЛКМ и СКМ. Мой код дает возможность открывать левым кликом закладки в новой вкладке не закрывая меню закладок, если папка с закладками находится на панели закладок или в меню закладкок. Если нажать Ctrl левый клик откроет закладку в текущей вкладке и меню закроется. Меню автоматически закроется при уходе курсора с меню. |
stluka > 12-10-2016 09:22:06 |
bunda1 пишет
Понял, спасибо. |
becool > 19-03-2017 19:10:30 |
bunda1, сделай, пожалуйста, актуальный вариант кода, чтоб вместо ЛКМ было СКМ. |
bunda1 > 20-03-2017 22:49:45 |
becool пишет
Выделить код Код:// Открывать закладки левым кликом в новой вкладке не закрывая меню закладок, от 11.10.2016. ................ function openBook(e, target = e.originalTarget) { if ( target.localName !== "menuitem" || !(target._placesNode && PlacesUtils.nodeIsURI(target._placesNode) ) ) return; if ( e.button == 1 ) { // ЛКМ e.preventDefault(); e.stopPropagation(); // открыть в новой или в текущей вкладке если это указанная вкладка .... var itemUri = target._placesNode.uri; var current = ["about:newtab", "about:blank", "chrome://browser/content/bookmarks/bookmarksPanel.xul"]; ~current.indexOf(content.location.href) || e.ctrlKey ? gBrowser.loadURI(itemUri) : gBrowser.addTab(itemUri); setTimeout(()=> document.getElementById('placesContext').hidePopup(), 50); }; // автоматически закрыть все меню закладок при уходе курсора .... var menu = target.parentNode; if ( !menu || menu.localName !== 'menupopup' ) return; menu.onmouseover =()=> menu.f = true; menu.onmouseleave =()=> { menu.f = false; setTimeout(()=> { if ( menu.f ) return; for ( var node = menu; node; node = node.parentNode ) node.nodeName == 'menupopup' && node.hidePopup(); menu.onmouseleave = null; }, 500); }; } !this.hasAttribute("initialized") && addEventListener("click", openBook, true); |
becool > 21-03-2017 06:49:52 |
bunda1, премного благоарен! |
becool > 26-03-2017 10:49:08 |
bunda1, небольшая проблемка: например, я хочу удалить закладку, ПКМ по закладке вызывает контекстное меню закладки, при наведении мыши на "удалить", все меню закладок изчезает. |
bunda1 > 27-03-2017 20:44:04 |
becool пишет
Выделить код Код:// Открывать закладки средным кликом в новой вкладке не закрывая меню закладок, от 27.03.2017. ................ function openBook(e, target = e.originalTarget) { if ( target.localName !== "menuitem" || !(target._placesNode && PlacesUtils.nodeIsURI(target._placesNode) ) ) return; if ( e.button == 1 && e.type == 'click' ) { // ЛКМ e.preventDefault(); e.stopPropagation(); // открыть в новой или в текущей вкладке если это указанная вкладка .... var itemUri = target._placesNode.uri; var current = ["about:newtab", "about:blank", "chrome://browser/content/bookmarks/bookmarksPanel.xul"]; ~current.indexOf(content.location.href) || e.ctrlKey ? gBrowser.loadURI(itemUri) : gBrowser.addTab(itemUri); setTimeout(()=> document.getElementById('placesContext').hidePopup(), 50); }; // автоматически закрыть все меню закладок при уходе курсора .... var menu = target.parentNode; if ( !menu || menu.localName !== 'menupopup' || e.type !== 'click' || e.button == 2 ) return; menu.onmouseover =()=> menu.f = true; menu.onmouseleave =()=> { menu.f = false; setTimeout(()=> { if ( menu.f ) return; for ( var node = menu; node; node = node.parentNode ) node.nodeName == 'menupopup' && node.hidePopup(); menu.onmouseleave = null; }, 500); }; } !this.hasAttribute("initialized") && ["click", "mouseup"].forEach(type=> addEventListener(type, openBook, true) ); |
becool > 27-03-2017 23:23:16 |
bunda1, теперь порядок, спасибо! |
Stkvsky > 09-06-2019 10:37:39 |
bunda1 скрытый текст Выделить код Код:/* Открывать закладки левым кликом в новой вкладке не закрывая меню закладок удалять закладки средним кликом на закладке .............................*/ function openRemoveBook(aEvent) { var target = aEvent.originalTarget; // стоп, если не левый клик и закладка из меню закладок .... if ( target.localName !== "menuitem" || !(target._placesNode && PlacesUtils.nodeIsURI(target._placesNode) ) ) return; var bookMenu = target.parentNode; // стоп, если не левый клик и закладка из меню закладок .... if ( target.localName !== "menuitem" || !(target._placesNode && PlacesUtils.nodeIsURI(target._placesNode) ) ) return; // если левый клик .... if ( aEvent.button == 0) { aEvent.preventDefault(); aEvent.stopPropagation(); // открыть в новой или в текущей вкладке если это указанная вкладка .... var itemUri = target._placesNode.uri; // получить адрес закладки var current = ["about:newtab", "about:blank", "chrome://browser/content/bookmarks/bookmarksPanel.xul"]; (current.indexOf(content.location.href) !== -1 || aEvent.ctrlKey)? gBrowser.loadURI( itemUri ): gBrowser.addTab( itemUri ); }; // если средний клик .... if ( aEvent.button == 1) { aEvent.preventDefault(); aEvent.stopPropagation(); // удалить закладку .... var itemId = target._placesNode.itemId; PlacesUtils.bookmarks.removeItem(itemId); }; // блокировать повторный запуск обработчика при открытии несколько закладок из одного меню закладок .... if ( this.stopListener ) return; this.stopListener = true; // обработчик закрывает меню при ухода мыши с меню и удаляет себя .... window.addEventListener('mouseover', function(event) { var name = event.target.nodeName; if ( name == 'menu' || name == 'menupopup' || name == 'menuitem' || name == 'menuseparator') return; setTimeout(function() { bookMenu.hidePopup() }, 400); // закрыть меню через 400 ms window.removeEventListener("mouseover", arguments.callee, false); this.stopListener = false; // удалить флаг }, false); } window.addEventListener("mouseup", openRemoveBook, false); this.onDestroy = function() { window.removeEventListener("mouseup", openRemoveBook, false); }; |
Garalf > 09-06-2019 15:48:48 |
Stkvsky пишет
И чтобы в 66+ работала... |
bunda1 > 10-06-2019 22:22:13 |
Stkvsky пишет
Garalf пишет
Выделить код Код:/* Открывать закладки левым кликом в новой вкладке не закрывая меню закладок удалять закладки средним кликом на закладке, от 09.06.2019. .............*/ function openBook(e, target = e.originalTarget) { if ( target.localName != "menuitem" || !(target._placesNode && PlacesUtils.nodeIsURI(target._placesNode) ) ) return; e.preventDefault(); e.stopPropagation(); // открыть закладку в новой вкладке .... if ( e.button == 0 && e.type == 'mouseup' ) { // ЛКМ // открыть в новой вкладке или для указанных адресов в текущей вкладке .... var itemUri = target._placesNode.uri; var array = ["about:newtab", "about:blank", "chrome://browser/content/bookmarks/bookmarksPanel.xul"]; var where = (~array.indexOf(gBrowser.currentURI.spec) || e.ctrlKey) ? "current" : "tab"; openLinkIn(itemUri, where, { inBackground: false, relatedToCurrent: true, triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal() }); setTimeout(()=> document.getElementById('placesContext').hidePopup(), 50); }; // удалить закладку .... if ( e.button == 1 ) { // СКМ setTimeout(()=> { var itemId = target._placesNode.itemId; try { PlacesUtils.bookmarks.removeItem(itemId) } catch(e) {}; }, 0); }; // автоматически закрыть все меню закладок при уходе курсора .... var menu = target.parentNode; if ( !menu || menu.localName != 'menupopup' ) return; menu.onmouseover =()=> menu.f = true; menu.onmouseleave =()=> { menu.f = false; setTimeout(()=> { if ( menu.f ) return; for ( var node = menu; node; node = node.parentNode ) node.nodeName == 'menupopup' && node.hidePopup(); menu.onmouseleave = null; }, 500); }; } !self.hasAttribute("initialized") && ["click", "mouseup"].forEach(type=> addEventListener(type, openBook, true)); |
bezuma > 11-06-2019 06:26:13 |
bunda1 |
Garalf > 11-06-2019 07:19:03 |
bezuma пишет
Да, подтверждаю. Есть такое. Просьба починить. |
bunda1 > 11-06-2019 09:24:44 |
bezuma пишет
Выделить код Код:/* Открывать закладки левым кликом в новой вкладке не закрывая меню закладок удалять закладки средним кликом на закладке, от 11.06.2019. .............*/ function openBook(e, target = e.originalTarget) { if ( target.localName != "menuitem" || !(target._placesNode && PlacesUtils.nodeIsURI(target._placesNode) ) ) return; // блокировать действия по умолчанию для левого клика .... if ( e.button == 0 ) { // ЛКМ e.preventDefault(); e.stopPropagation(); }; // открыть закладку в новой вкладке или для указанных адресов в текущей вкладке .... if ( e.button == 0 && e.type == "mouseup" ) { // ЛКМ var itemUri = target._placesNode.uri; var array = ["about:newtab", "about:blank", "chrome://browser/content/bookmarks/bookmarksPanel.xul"]; var where = (~array.indexOf(gBrowser.currentURI.spec) || e.ctrlKey) ? "current" : "tab"; openLinkIn(itemUri, where, { inBackground: false, relatedToCurrent: true, triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal() }); setTimeout(()=> document.getElementById('placesContext').hidePopup(), 50); }; // удалить закладку .... if ( e.button == 1 && e.type == "mouseup" ) { // СКМ setTimeout(()=> { var itemId = target._placesNode.itemId; try { PlacesUtils.bookmarks.removeItem(itemId) } catch(e) {}; }, 0); }; // автоматически закрыть все меню закладок при уходе курсора .... var menu = target.parentNode; if ( !menu || menu.localName != 'menupopup' || e.type != 'click' || e.button == 2 ) return; menu.onmouseover =()=> menu.f = true; menu.onmouseleave =()=> { menu.f = false; setTimeout(()=> { if ( menu.f ) return; for ( var node = menu; node; node = node.parentNode ) node.nodeName == 'menupopup' && node.hidePopup(); menu.onmouseleave = null; }, 500); }; } !self.hasAttribute("initialized") && ["click", "mouseup", "mousedown"].forEach(type=> addEventListener(type, openBook, true)); |
Stkvsky > 11-06-2019 10:11:20 |
bunda1 |
bezuma > 11-06-2019 10:44:42 |
bunda1 |