bunda1
Показывать количество открытых табов в адресной строке +, от 19.04.2016
1. А нельзя ли сделать, чтобы в меню отображалась структура дерева вкладок, как это сделано в обычной кнопке списка вкладок, при использовании treestyletab?
Отредактировано _zt (08-10-2016 16:22:06)
Отсутствует
1. А нельзя ли сделать, чтобы в меню отображалась структура дерева вкладок, как это сделано в обычной кнопке списка вкладок, при использовании treestyletab?
Не знаю как это сделать.
Добавлено 08-10-2016 18:14:51
2. И еще бы, выделение не загруженных вкладок, так же как непрочитанных.
Можно. Какой цвет для непрочитанных?
Отредактировано bunda1 (08-10-2016 18:14:51)
Отсутствует
bunda1
Можно. Какой цвет для непрочитанных?
Незагруженных. Непрочитанные и так там есть. У меня в CTR так стоит #FFCCCC, в меню наверное лучше #FF6666 или около того и если возможно то курсивом.
Отсутствует
Незагруженных. Непрочитанные и так там есть. У меня в CTR так стоит #FFCCCC, в меню наверное лучше #FF6666 или около того и если возможно то курсивом.
// Показывать количество открытых табов в адресной строке, от 16.10.2016. .................. (()=> { // Создать в адресной строке счётчик вкладок .... var tabCounter = document.createElement("statusbarpanel"); tabCounter.setAttribute("id", "tabCounter"); tabCounter.setAttribute("context", "event.stopPropagation()"); tabCounter.setAttribute("tooltiptext", "Показать меню всех вкладок"); var urlbarIcons = document.getElementById("urlbar-icons"); urlbarIcons.insertBefore(tabCounter, urlbarIcons.firstChild); addDestructor(()=> tabCounter.remove() ); // Отслеживать клик на счетчике .... tabCounter.onclick =e=> { if ( e.target.localName == "menuitem" ) return; tabCounter.textContent = ""; // удалить старое меню // создать новое меню всех вкладок текущей группы var array = ["label", "image", "selected", "unread", "busy"]; var menu = tabCounter.appendChild(document.createElement("menupopup")); gBrowser.visibleTabs.forEach(tab=> { var mItem = menu.appendChild(document.createElement("menuitem")); mItem.tab = tab; mItem.setAttribute("class", "menuitem-iconic bookmark-item"); array.forEach(atrr=> mItem.setAttribute(atrr, tab.getAttribute(atrr)) ); }); // периодически обновлять открытое меню menu.interval = setInterval(()=> menuReload(), 150); addEventListener("popuphidden", ()=> clearInterval(menu.interval), false, menu); // обновить меню function menuReload() { [...menu.children].forEach(el=> { array.forEach(atrr=> el.setAttribute(atrr, el.tab.getAttribute(atrr)) ); }) }; // автоматически закрывать меню при ухода курсора, длительность увода - 450 мс menu.onmouseover =()=> this.f = true; menu.onmouseleave =()=> { this.f = false; setTimeout(()=> !this.f && menu.hidePopup(), 450) }; // отслеживать клики на пунктах меню menu.onmouseup =e=> { e.preventDefault(); var mItem = e.target, tab = mItem.tab; if ( e.button == 0 ) gBrowser.selectedTab = tab; else { mItem.remove(); gBrowser.removeTab(tab); } menuReload(); }; // фокус на активную вкладку в меню при открытии var box = document.getAnonymousElementByAttribute(menu, "class", "popup-internal-box"); addEventListener("popupshowing", ()=> { var menuitem = [...menu.children].filter(el=> el.getAttribute("selected", "true") )[0]; menuitem.setAttribute('_moz-menuactive', true); var menuitemCenter = menuitem.boxObject.screenY + menuitem.boxObject.height/2; var boxCenter = box.boxObject.screenY + box.boxObject.height/2; box.scrollByPixels(menuitemCenter - boxCenter); }, false, menu); menu.showPopup(tabCounter, -1, -1, "popup", "bottomleft", "topleft"); // открыть меню }; // Css стиль для счётчика и меню .... var uri = makeURI('data:text/css,'+ encodeURIComponent('\ #tabCounter:hover { color: #FF1493 !important; }\ #tabCounter > menupopup scrollbox { overflow-y: auto !important; }\ #tabCounter > menupopup > menuitem[unread="true"] { color: blue !important; }\ #tabCounter { -moz-appearance: none !important; border: 0 !important; margin-right: -8px !important; }\ #tabCounter > menupopup > menuitem[selected="true"] { color: red !important; font-weight: bold !important; }\ #tabCounter > menupopup > menuitem[busy="true"] { color: #FF6666 !important; font-style: italic !important; }\ ')); var sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService); sss.loadAndRegisterSheet(uri, 0); addDestructor(()=> sss.unregisterSheet(uri, 0) ); // Считать и показывать количество вкладок .... function count() { try { window.clearTimeout(count.timeout) } catch(e) {}; count.timeout = window.setTimeout(()=> { var all = gBrowser.tabs.length, visible = gBrowser.visibleTabs.length; tabCounter.label = (all > visible ? visible + '/' : '') + all; }, 350); }; count(); // Отслеживать открытие, закрытие вкладок и переключение групп вкладок .... var tabs = gBrowser.tabContainer; addEventListener("TabOpen", count, false, tabs); addEventListener("TabClose", count, false, tabs); function getChangeTabGroup() { addEventListener("TabHide", function c(e) { count(); setTimeout(()=> getChangeTabGroup(), 50); removeEventListener(e.type, c, false, tabs); }, false, tabs); }; getChangeTabGroup(); })();
Отсутствует
bunda1
Я вашу мысль понял и для busy действительно работает, но мне хотелось не для "загружаемых", а для "не загруженных". CTR или UnloadTabs или UnloadTab и некоторые другие расширения умеют выгружать вкладки из памяти, вот такие и хотелось бы маркировать.
Отсутствует
для "загружаемых", а для "не загруженных". CTR или UnloadTabs или UnloadTab и некоторые другие расширения умеют выгружать вкладки из памяти, вот такие и хотелось бы маркировать.
// Показывать количество открытых табов в адресной строке, от 16.10.2016. .................. (()=> { // Создать в адресной строке счётчик вкладок .... var tabCounter = document.createElement("statusbarpanel"); tabCounter.setAttribute("id", "tabCounter"); tabCounter.setAttribute("context", "event.stopPropagation()"); tabCounter.setAttribute("tooltiptext", "Показать меню всех вкладок"); var urlbarIcons = document.getElementById("urlbar-icons"); urlbarIcons.insertBefore(tabCounter, urlbarIcons.firstChild); addDestructor(()=> tabCounter.remove() ); // Отслеживать клик на счетчике .... tabCounter.onclick =e=> { if ( e.target.localName == "menuitem" ) return; tabCounter.textContent = ""; // удалить старое меню // создать новое меню всех вкладок текущей группы var array = ["label", "image", "selected", "unread", "pending"]; var menu = tabCounter.appendChild(document.createElement("menupopup")); gBrowser.visibleTabs.forEach(tab=> { var mItem = menu.appendChild(document.createElement("menuitem")); mItem.tab = tab; mItem.setAttribute("class", "menuitem-iconic bookmark-item"); array.forEach(atrr=> mItem.setAttribute(atrr, tab.getAttribute(atrr)) ); }); // периодически обновлять открытое меню menu.interval = setInterval(()=> menuReload(), 150); addEventListener("popuphidden", ()=> clearInterval(menu.interval), false, menu); // обновить меню function menuReload() { [...menu.children].forEach(el=> { array.forEach(atrr=> el.setAttribute(atrr, el.tab.getAttribute(atrr)) ); }) }; // автоматически закрывать меню при ухода курсора, длительность увода - 450 мс menu.onmouseover =()=> this.f = true; menu.onmouseleave =()=> { this.f = false; setTimeout(()=> !this.f && menu.hidePopup(), 450) }; // отслеживать клики на пунктах меню menu.onmouseup =e=> { e.preventDefault(); var mItem = e.target, tab = mItem.tab; if ( e.button == 0 ) gBrowser.selectedTab = tab; else { mItem.remove(); gBrowser.removeTab(tab); } menuReload(); }; // фокус на активную вкладку в меню при открытии var box = document.getAnonymousElementByAttribute(menu, "class", "popup-internal-box"); addEventListener("popupshowing", ()=> { var menuitem = [...menu.children].filter(el=> el.getAttribute("selected", "true") )[0]; menuitem.setAttribute('_moz-menuactive', true); var menuitemCenter = menuitem.boxObject.screenY + menuitem.boxObject.height/2; var boxCenter = box.boxObject.screenY + box.boxObject.height/2; box.scrollByPixels(menuitemCenter - boxCenter); }, false, menu); menu.showPopup(tabCounter, -1, -1, "popup", "bottomleft", "topleft"); // открыть меню }; // Css стиль для счётчика и меню .... var uri = makeURI('data:text/css,'+ encodeURIComponent('\ #tabCounter:hover { color: #FF1493 !important; }\ #tabCounter > menupopup scrollbox { overflow-y: auto !important; }\ #tabCounter > menupopup > menuitem[unread="true"] { color: blue !important; }\ #tabCounter { -moz-appearance: none !important; border: 0 !important; margin-right: -8px !important; }\ #tabCounter > menupopup > menuitem[selected="true"] { color: red !important; font-weight: bold !important; }\ #tabCounter > menupopup > menuitem[pending="true"] { color: #FF6666 !important; font-style: italic !important; }\ ')); var sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService); sss.loadAndRegisterSheet(uri, 0); addDestructor(()=> sss.unregisterSheet(uri, 0) ); // Считать и показывать количество вкладок .... function count() { try { window.clearTimeout(count.timeout) } catch(e) {}; count.timeout = window.setTimeout(()=> { var all = gBrowser.tabs.length, visible = gBrowser.visibleTabs.length; tabCounter.label = (all > visible ? visible + '/' : '') + all; }, 350); }; count(); // Отслеживать открытие, закрытие вкладок и переключение групп вкладок .... var tabs = gBrowser.tabContainer; addEventListener("TabOpen", count, false, tabs); addEventListener("TabClose", count, false, tabs); function getChangeTabGroup() { addEventListener("TabHide", function c(e) { count(); setTimeout(()=> getChangeTabGroup(), 50); removeEventListener(e.type, c, false, tabs); }, false, tabs); }; getChangeTabGroup(); })();
Отсутствует
bunda1
Тогда логично бы было, если есть хоть одна не прочитанная вкладка, сделать что бы и цифра в адресной строке менялась на соответствующий цвет.
Отсутствует
bunda1
Отлично. Подумайте все же над древовидным отображением вкладок. Вот эта кнопка перехватывает древовидную структуру, но не маркирует элементы. Может у вас получится к ней маркировку прикрутить или наоборот, к своей кнопке прикрутить отображение дерева вкладок.
Отсутствует
Здравствуйте. Искал кнопку для вывода меню открытых вкладок, подсказали эту тему. Хороший вариант, единственное что мне не хватает - сортировки типа "история последних используемых вкладок" для быстрого перехода к недавним вкладкам. Т.е. прошлая вкладка будет первым пунктом, позапрошлая вторым, и так далее.
Древовидное отображение вкладок, думаю, не нужно. Для этого ведь есть расширение TreeStyleTab, им можно расположить вкладки слева или справа в древовидном виде, и настроить автоскрытие панели вкладок. А функционала меню вкладок с сортировкой по использованию не нашёл.
Отсутствует
Здравствуйте. Искал кнопку для вывода меню открытых вкладок, подсказали эту тему. Хороший вариант, единственное что мне не хватает - сортировки типа "история последних используемых вкладок" для быстрого перехода к недавним вкладкам. Т.е. прошлая вкладка будет первым пунктом, позапрошлая вторым, и так далее.
В меню вкладок первыми будут прочитанные в текущей сессии вкладки отсортированные по времени посещаемости остальные вкладки будут в том порядке как на панели вкладок:
// Показывать количество открытых табов в адресной строке, от 14.01.2017. .................. (()=> { // Создать в адресной строке счётчик вкладок .... var tabCounter = document.createElement("statusbarpanel"); tabCounter.setAttribute("id", "tabCounter"); tabCounter.setAttribute("context", "event.stopPropagation()"); tabCounter.setAttribute("tooltiptext", "Показать меню всех вкладок"); var urlbarIcons = document.getElementById("urlbar-icons"); urlbarIcons.insertBefore(tabCounter, urlbarIcons.firstChild); addDestructor(()=> tabCounter.remove() ); // Отслеживать клик на счетчике .... tabCounter.onclick =e=> { if ( e.target.localName == "menuitem" ) return; tabCounter.textContent = ""; // удалить старое меню // Создать массив с вкладками и сортировать по посещаемости var tabsArray = gBrowser.visibleTabs; tabsArray.sort((a, b)=> b.getAttribute('data') - a.getAttribute('data')); // создать новое меню всех вкладок текущей группы var array = ["label", "image", "selected", "unread", "pending"]; var menu = tabCounter.appendChild(document.createElement("menupopup")); tabsArray.forEach(tab=> { var mItem = menu.appendChild(document.createElement("menuitem")); mItem.tab = tab; mItem.setAttribute("class", "menuitem-iconic bookmark-item"); array.forEach(atrr=> mItem.setAttribute(atrr, tab.getAttribute(atrr)) ); }); // периодически запускать обновление меню menu.interval = setInterval(()=> menuReload(), 200); addEventListener("popuphidden", ()=> clearInterval(menu.interval), false, menu); // обновить меню function menuReload() { [...menu.children].forEach(el=> { array.forEach(atrr=> el.setAttribute(atrr, el.tab.getAttribute(atrr)) ); }) }; // автоматически закрывать меню при ухода курсора, длительность увода - 450 мс menu.onmouseover =()=> this.f = true; menu.onmouseleave =()=> { this.f = false; setTimeout(()=> !this.f && menu.hidePopup(), 450) }; // отслеживать клики на пунктах меню menu.onmouseup =e=> { e.preventDefault(); var mItem = e.target, tab = mItem.tab; if ( e.button == 0 ) gBrowser.selectedTab = tab; else { mItem.remove(); gBrowser.removeTab(tab); } menuReload(); }; // фокус на активную вкладку в меню при открытии var box = document.getAnonymousElementByAttribute(menu, "class", "popup-internal-box"); addEventListener("popupshowing", ()=> { var menuitem = [...menu.children].filter(el=> el.getAttribute("selected", "true") )[0]; menuitem.setAttribute('_moz-menuactive', true); var menuitemCenter = menuitem.boxObject.screenY + menuitem.boxObject.height/2; var boxCenter = box.boxObject.screenY + box.boxObject.height/2; box.scrollByPixels(menuitemCenter - boxCenter); }, false, menu); menu.showPopup(tabCounter, -1, -1, "popup", "bottomleft", "topleft"); // открыть меню }; // Css стиль для счётчика и меню .... var uri = makeURI('data:text/css,'+ encodeURIComponent('\ #tabCounter:hover { color: #FF1493 !important; }\ #tabCounter > menupopup scrollbox { overflow-y: auto !important; }\ #tabCounter > menupopup > menuitem[unread="true"],\ #tabCounter > menupopup > menuitem[pending="true"] { color: blue !important; }\ #tabCounter { -moz-appearance: none !important; border: 0 !important; margin-right: -8px !important; }\ #tabCounter > menupopup > menuitem[selected="true"] { color: red !important; font-weight: bold !important; }\ ')); var sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService); sss.loadAndRegisterSheet(uri, 0); addDestructor(()=> sss.unregisterSheet(uri, 0) ); // Считать и показывать количество вкладок .... function count() { try { window.clearTimeout(count.timeout) } catch(e) {}; count.timeout = window.setTimeout(()=> { var all = gBrowser.tabs.length, visible = gBrowser.visibleTabs.length; tabCounter.label = (all > visible ? visible + '/' : '') + all; }, 350); }; count(); // Добавить к вкладке как аргумент время посещаемости вкладки .... addEventListener("TabSelect", (e, tab = e.target)=> { tab.setAttribute('data', Date.now()); }, true, gBrowser.tabContainer); // Отслеживать открытие, закрытие вкладок и переключение групп вкладок .... var tabs = gBrowser.tabContainer; addEventListener("TabOpen", count, false, tabs); addEventListener("TabClose", count, false, tabs); function getChangeTabGroup() { addEventListener("TabHide", function c(e) { count(); setTimeout(()=> getChangeTabGroup(), 50); removeEventListener(e.type, c, false, tabs); }, false, tabs); }; getChangeTabGroup(); })();
Отредактировано bunda1 (14-01-2017 14:12:08)
Отсутствует
rsuan
TreeStyle у меня стоит и именно для него это и нужно (как вы вообще представляете себе дерево без подобного расширения? ), так как при свернутых в нем ветвях проблематично искать вкладку, приходится подводить курсор к каждому узлу и просматривать дочки в тултипе, а сплошной список вкладок в меню данной кнопки ни как не облегчает поиск среди сотни вкладок.
Отредактировано _zt (14-01-2017 18:12:30)
Отсутствует
bunda1
Доброе утро а можно сделать что то похоже на это?
показывает сколко слева и справа + общее колличество(18) и номер текущей вкладки(11).
это я сделал в https://addons.mozilla.org/ru/firefox/addon/tab-counter/?src=api
хотелось бы отказаться от расширение.
Отсутствует
bunda1
Доброе утро а можно сделать что то похоже на это?
// Показывать количество открытых табов в адресной строке, от 16.10.2016. .................. (()=> { // Создать в адресной строке счётчик вкладок .... var tabCounter = document.createElement("statusbarpanel"); tabCounter.setAttribute("id", "tabCounter"); tabCounter.setAttribute("context", "event.stopPropagation()"); tabCounter.setAttribute("tooltiptext", "Показать меню всех вкладок"); var urlbarIcons = document.getElementById("urlbar-icons"); urlbarIcons.insertBefore(tabCounter, urlbarIcons.firstChild); addDestructor(()=> tabCounter.remove() ); // Отслеживать клик на счетчике .... tabCounter.onclick =e=> { if ( e.target.localName == "menuitem" ) return; tabCounter.textContent = ""; // удалить старое меню // создать новое меню всех вкладок текущей группы var array = ["label", "image", "selected", "unread", "pending"]; var menu = tabCounter.appendChild(document.createElement("menupopup")); gBrowser.visibleTabs.forEach(tab=> { var mItem = menu.appendChild(document.createElement("menuitem")); mItem.tab = tab; mItem.setAttribute("class", "menuitem-iconic bookmark-item"); array.forEach(atrr=> mItem.setAttribute(atrr, tab.getAttribute(atrr)) ); }); // периодически запускать обновление меню menu.interval = setInterval(()=> menuReload(), 200); addEventListener("popuphidden", ()=> clearInterval(menu.interval), false, menu); // обновить меню function menuReload() { [...menu.children].forEach(el=> { array.forEach(atrr=> el.setAttribute(atrr, el.tab.getAttribute(atrr)) ); }) }; // автоматически закрывать меню при ухода курсора, длительность увода - 450 мс menu.onmouseover =()=> this.f = true; menu.onmouseleave =()=> { this.f = false; setTimeout(()=> !this.f && menu.hidePopup(), 450) }; // отслеживать клики на пунктах меню menu.onmouseup =e=> { e.preventDefault(); var mItem = e.target, tab = mItem.tab; if ( e.button == 0 ) gBrowser.selectedTab = tab; else { mItem.remove(); gBrowser.removeTab(tab); } menuReload(); }; // фокус на активную вкладку в меню при открытии var box = document.getAnonymousElementByAttribute(menu, "class", "popup-internal-box"); addEventListener("popupshowing", ()=> { var menuitem = [...menu.children].filter(el=> el.getAttribute("selected", "true") )[0]; menuitem.setAttribute('_moz-menuactive', true); var menuitemCenter = menuitem.boxObject.screenY + menuitem.boxObject.height/2; var boxCenter = box.boxObject.screenY + box.boxObject.height/2; box.scrollByPixels(menuitemCenter - boxCenter); }, false, menu); menu.showPopup(tabCounter, -1, -1, "popup", "bottomleft", "topleft"); // открыть меню }; // Css стиль для счётчика и меню .... var uri = makeURI('data:text/css,'+ encodeURIComponent('\ #tabCounter:hover { color: #FF1493 !important; }\ #tabCounter > menupopup scrollbox { overflow-y: auto !important; }\ #tabCounter > menupopup > menuitem[unread="true"],\ #tabCounter > menupopup > menuitem[pending="true"] { color: blue !important; }\ #tabCounter { -moz-appearance: none !important; border: 0 !important; margin-right: -8px !important; }\ #tabCounter > menupopup > menuitem[selected="true"] { color: red !important; font-weight: bold !important; }\ ')); var sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService); sss.loadAndRegisterSheet(uri, 0); addDestructor(()=> sss.unregisterSheet(uri, 0) ); // Считать и показывать количество вкладок .... function count() { try { window.clearTimeout(count.timeout) } catch(e) {}; count.timeout = window.setTimeout(()=> { var all = gBrowser.tabs.length, visible = gBrowser.visibleTabs.length, num = gBrowser.mCurrentTab._tPos; tabCounter.label = num + "(" + (num+1) + " из " + ((all > visible ? visible + '/' : '') + all) + ")" + (visible-num); }, 350); }; count(); // Отслеживать открытие, закрытие вкладок и переключение групп вкладок .... var tabs = gBrowser.tabContainer; addEventListener("TabOpen", count, false, tabs); addEventListener("TabClose", count, false, tabs); addEventListener("TabSelect", count, false, tabs); function getChangeTabGroup() { addEventListener("TabHide", function c(e) { count(); setTimeout(()=> getChangeTabGroup(), 50); removeEventListener(e.type, c, false, tabs); }, false, tabs); }; getChangeTabGroup(); })();
Отсутствует
bunda1, сделай, пожалуйста, версию, которая просто показывает общее число вкладок в окне без дробей, без подразделения на группы.
// Показывать количество открытых табов в адресной строке, от 16.10.2016. .................. (()=> { // Создать в адресной строке счётчик вкладок .... var tabCounter = document.createElement("statusbarpanel"); tabCounter.setAttribute("id", "tabCounter"); tabCounter.setAttribute("context", "event.stopPropagation()"); tabCounter.setAttribute("tooltiptext", "Показать меню всех вкладок"); var urlbarIcons = document.getElementById("urlbar-icons"); urlbarIcons.insertBefore(tabCounter, urlbarIcons.firstChild); addDestructor(()=> tabCounter.remove() ); // Отслеживать клик на счетчике .... tabCounter.onclick =e=> { if ( e.target.localName == "menuitem" ) return; tabCounter.textContent = ""; // удалить старое меню // создать новое меню всех вкладок текущей группы var array = ["label", "image", "selected", "unread", "pending"]; var menu = tabCounter.appendChild(document.createElement("menupopup")); [...gBrowser.tabs].forEach(tab=> { var mItem = menu.appendChild(document.createElement("menuitem")); mItem.tab = tab; mItem.setAttribute("class", "menuitem-iconic bookmark-item"); array.forEach(atrr=> mItem.setAttribute(atrr, tab.getAttribute(atrr)) ); }); // периодически запускать обновление меню menu.interval = setInterval(()=> menuReload(), 200); addEventListener("popuphidden", ()=> clearInterval(menu.interval), false, menu); // обновить меню function menuReload() { [...menu.children].forEach(el=> { array.forEach(atrr=> el.setAttribute(atrr, el.tab.getAttribute(atrr)) ); }) }; // автоматически закрывать меню при ухода курсора, длительность увода - 450 мс menu.onmouseover =()=> this.f = true; menu.onmouseleave =()=> { this.f = false; setTimeout(()=> !this.f && menu.hidePopup(), 450) }; // отслеживать клики на пунктах меню menu.onmouseup =e=> { e.preventDefault(); var mItem = e.target, tab = mItem.tab; if ( e.button == 0 ) gBrowser.selectedTab = tab; else { mItem.remove(); gBrowser.removeTab(tab); } menuReload(); }; // фокус на активную вкладку в меню при открытии var box = document.getAnonymousElementByAttribute(menu, "class", "popup-internal-box"); addEventListener("popupshowing", ()=> { var menuitem = [...menu.children].filter(el=> el.getAttribute("selected", "true") )[0]; menuitem.setAttribute('_moz-menuactive', true); var menuitemCenter = menuitem.boxObject.screenY + menuitem.boxObject.height/2; var boxCenter = box.boxObject.screenY + box.boxObject.height/2; box.scrollByPixels(menuitemCenter - boxCenter); }, false, menu); menu.showPopup(tabCounter, -1, -1, "popup", "bottomleft", "topleft"); // открыть меню }; // Css стиль для счётчика и меню .... var uri = makeURI('data:text/css,'+ encodeURIComponent('\ #tabCounter:hover { color: #FF1493 !important; }\ #tabCounter > menupopup scrollbox { overflow-y: auto !important; }\ #tabCounter > menupopup > menuitem[unread="true"],\ #tabCounter > menupopup > menuitem[pending="true"] { color: blue !important; }\ #tabCounter { -moz-appearance: none !important; border: 0 !important; margin-right: -8px !important; }\ #tabCounter > menupopup > menuitem[selected="true"] { color: red !important; font-weight: bold !important; }\ ')); var sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService); sss.loadAndRegisterSheet(uri, 0); addDestructor(()=> sss.unregisterSheet(uri, 0) ); // Считать и показывать количество вкладок .... function count() { try { window.clearTimeout(count.timeout) } catch(e) {}; count.timeout = window.setTimeout(()=> { tabCounter.label = gBrowser.tabs.length; }, 350); }; count(); // Отслеживать открытие, закрытие вкладок и переключение групп вкладок .... var tabs = gBrowser.tabContainer; addEventListener("TabOpen", count, false, tabs); addEventListener("TabClose", count, false, tabs); function getChangeTabGroup() { addEventListener("TabHide", function c(e) { count(); setTimeout(()=> getChangeTabGroup(), 50); removeEventListener(e.type, c, false, tabs); }, false, tabs); }; getChangeTabGroup(); })();
Отсутствует
bunda1
А у тебя Сustom Buttons на Firefox 57 вообще работает?
Да! В теме Сustom Buttons Infocatcher и Dumby поделились "распорками" "костылями" все работает .Со всех кнопок не работают кнопки: папка загрузки,Кнопка для управления масштабом страницы в адресной строке,Показывать потребление памяти в адресной строке,Показывать количество открытых табов в адресной строке.
Думал так и останусь на 48 но не все так страшно.Save+ Работает обновил кнопку все пучком
Отредактировано broker (22-11-2017 16:12:43)
Отсутствует
Показывать потребление памяти в адресной строке
Мне помогли починить её на руборде, спасибо gyra и другим пользователям... Только с положением её относительно остальных элементов в урл не так всё просто:
Оригинал самой кнопки (той, которой у меня) я на форуме найти не могу.
Если надо — могу выслать свой вариант. Цвет, шрифт и действия по нажатиям на счётчик подстроите под себя.
Отредактировано Coroner (25-11-2017 14:45:02)
Отсутствует