Открывать закладки левым кликом в новой вкладке не закрывая меню закладок(Firefox 24 +)
Автор: bunda1
Версия: от 11.10.2016.
Описание: Kод дает возможность открывать левым кликом закладки в новой вкладке не закрывая меню закладок, если папка с закладками находится на панели закладок или в меню закладкок.
Если нажать Ctrl левый клик откроет закладку в текущей вкладке и меню закроется.
Меню автоматически закроется при уходе курсора с меню.
В строке кода:
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);
Отредактировано bunda1 (05-03-2013 23:09:44)
Отсутствует
bunda1
Спасибо, замечательная кнопка. Даёт возможность отказаться от Stay-Open Menu. Вот только, если можешь добавь открытие закладки в текущей вкладке, например с Ctrl+ЛКМ
Отсутствует
Спасибо, замечательная кнопка. Даёт возможность отказаться от Stay-Open Menu. Вот только, если можешь добавь открытие закладки в текущей вкладке, например с Ctrl+ЛКМ
Отредактировано bunda1 (19-10-2012 20:36:23)
Отсутствует
bunda1
О, спасибо теперь просто супер, но для полного счастья, как сделать, чтобы после открытия в текущей вкладке меню тоже не закрывалось?
Отсутствует
О, спасибо теперь просто супер, но для полного счастья, как сделать, чтобы после открытия в текущей вкладке меню тоже не закрывалось?
Не получается. Попробую открыть закладку в текущей вкладке двойным левым кликом.
Отредактировано bunda1 (19-10-2012 21:20:36)
Отсутствует
Открывать закладки левым кликом в новой вкладке не закрывая меню закладок +(Firefox 10 +)
Автор: bunda1
Описание: Kод дает возможность открывать левым кликом закладки в новой вкладке или удалять закладки средним кликом на закладке не закрывая меню закладок, если папка с закладками находится на панели закладок или в меню закладкок. Меню автоматически закроется при уходе курсора с меню.
Если адрес текущей страницы about:newtab, about:blank, chrome://browser/content/bookmarks/bookmarksPanel.xul левый клик откроет закладку в текущей вкладке.
Если нажать Ctrl левый клик откроет закладку в текущей вкладке и меню закроется.
Использование: положите код в любую 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); };
Отредактировано bunda1 (20-10-2012 17:04:50)
Отсутствует
А вариант с удалением закладок по 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); };
Отредактировано bunda1 (20-10-2012 20:29:32)
Отсутствует
bunda1
Спасибо. Конечно СКМ удалять удобней, но не для тех, кто привык так открывать закладки, я так десятка два закладок по удалял. А с Ctrl+СКМ вполне безопасно.
Отсутствует
Открывать/удалять закладки средним кликом не закрывая меню закладок
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); };
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 ); } };
Отредактировано 2k1dmg (05-11-2012 17:06:59)
Отсутствует
Открывать закладки левым кликом в новой вкладке не закрывая меню закладок + 2( Firefox 10 + )
Автор: bunda1
Версия: от 02.05.2013.
Описание: Kод даёт возможность:
1. открывать закладки левым кликом в новой вкладке,
2. открывать закладки средним кликом в текущей вкладке,
3. удалять закладки двойным правым кликом на закладке не закрывая меню закладок.
Код работает для папок с закладками которые находятся на панели закладок или в меню закладок.
Меню закладок автоматически закроется при уходе курсора с меню, это можно отключить если в начале кода переключить переменную: autoClose на false.
Если адрес текущей страницы about:newtab, about:blank, chrome://browser/content/bookmarks/bookmarksPanel.xul левый клик откроет закладку в текущей вкладке.
Если нажать Ctrl левый клик откроет закладку в текущей вкладке и меню закроется.
Использование: положите код в любую 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 );
Отредактировано bunda1 (02-05-2013 22:18:27)
Отсутствует
С этой кнопкой перестают работать практически все Bookmarklet
Ой, я про это не подумал.
Буду исправлять.
Отсутствует
bunda1
После открытия редактора кнопки её производительность увеличивается в три раза. т.е открывает по ПКМ сразу три вкладки
Добавлено 10-11-2012 02:56:02
зы Первый клик после закрытия редактора срабатывает нормально, а потом начинает троить.
Отредактировано voqabuhe (10-11-2012 02:56:02)
Отсутствует
mettis пишет: А почему после открытия из Закладок открывается 2 одинаковые ссылки?С которым кодом проблема ?
Открывать закладки левым кликом в новой вкладке не закрывая меню закладок + 2(Firefox 10 +)
Отсутствует
А можно просто чтобы меню не закрывалось?
Кнопки мыши оставить по умолчанию.
А меню закрывалось только по клику либо по странице либо по другим элементам интерфейса браузера.
Отсутствует
А можно просто чтобы меню не закрывалось?
Кнопки мыши оставить по умолчанию.
А меню закрывалось только по клику либо по странице либо по другим элементам интерфейса браузера.
/* Открывать закладки левым кликом в новой вкладке или открывать закладки средним кликом на закладке не закрывая меню закладок или двойным правым кликом удалять закладки от 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 );
Отредактировано bunda1 (30-04-2013 22:01:54)
Отсутствует