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

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

№5107-10-2016 23:54:51

_zt
Участник
 
Группа: Members
Зарегистрирован: 10-11-2014
Сообщений: 1420
UA: Firefox 46.0

Re: [CB]Показывать количество табов в адресной строке

bunda1

bunda1 пишет

Показывать количество открытых табов в адресной строке +, от 19.04.2016

1. А нельзя ли сделать, чтобы в меню отображалась структура дерева вкладок, как это сделано в обычной кнопке списка вкладок, при использовании treestyletab?

скрытый текст
3845c451ba91.png

2. И еще бы, выделение не загруженных вкладок, так же как непрочитанных.
3. И как отодвинуть цифру в адресной строке от того же Memory Monitor или любого другого виджета?

Отредактировано _zt (08-10-2016 16:22:06)

Отсутствует

 

№5208-10-2016 18:13:48

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: [CB]Показывать количество табов в адресной строке

_zt пишет

1. А нельзя ли сделать, чтобы в меню отображалась структура дерева вкладок, как это сделано в обычной кнопке списка вкладок, при использовании treestyletab?

Не знаю как это сделать.

Добавлено 08-10-2016 18:14:51

_zt пишет

2. И еще бы, выделение не загруженных вкладок, так же как непрочитанных.

Можно. Какой цвет для непрочитанных?

Отредактировано bunda1 (08-10-2016 18:14:51)

Отсутствует

 

№5308-10-2016 20:37:58

_zt
Участник
 
Группа: Members
Зарегистрирован: 10-11-2014
Сообщений: 1420
UA: Firefox 46.0

Re: [CB]Показывать количество табов в адресной строке

bunda1

bunda1 пишет

Можно. Какой цвет для непрочитанных?

Незагруженных. Непрочитанные и так там есть. У меня в CTR так стоит #FFCCCC, в меню наверное лучше #FF6666 или около того и если возможно то курсивом.

Отсутствует

 

№5416-10-2016 19:40:38

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: [CB]Показывать количество табов в адресной строке

_zt пишет

Незагруженных. Непрочитанные и так там есть. У меня в 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();
})();

Отсутствует

 

№5517-10-2016 07:10:50

_zt
Участник
 
Группа: Members
Зарегистрирован: 10-11-2014
Сообщений: 1420
UA: Firefox 46.0

Re: [CB]Показывать количество табов в адресной строке

bunda1
Я вашу мысль понял и для busy действительно работает, но мне хотелось не для "загружаемых", а для "не загруженных". CTR или UnloadTabs или UnloadTab и некоторые другие расширения умеют выгружать вкладки из памяти, вот такие и хотелось бы маркировать.

Отсутствует

 

№5617-10-2016 10:43:41

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: [CB]Показывать количество табов в адресной строке

_zt пишет

для "загружаемых", а для "не загруженных". 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();
})();

Отсутствует

 

№5717-10-2016 12:55:01

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

Re: [CB]Показывать количество табов в адресной строке

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

Отсутствует

 

№5818-10-2016 02:51:19

_zt
Участник
 
Группа: Members
Зарегистрирован: 10-11-2014
Сообщений: 1420
UA: Firefox 46.0

Re: [CB]Показывать количество табов в адресной строке

bunda1
Отлично. Подумайте все же над древовидным отображением вкладок. Вот эта кнопка перехватывает древовидную структуру, но не маркирует элементы. Может у вас получится к ней маркировку прикрутить или наоборот, к своей кнопке прикрутить отображение дерева вкладок.

скрытый текст
e986057bc9fe.png

Отсутствует

 

№5914-01-2017 07:23:18

rsuan
Участник
 
Группа: Members
Зарегистрирован: 30-12-2010
Сообщений: 116
UA: Firefox 45.0

Re: [CB]Показывать количество табов в адресной строке

Здравствуйте. Искал кнопку для вывода меню открытых вкладок, подсказали эту тему. Хороший вариант, единственное что мне не хватает - сортировки типа "история последних используемых вкладок" для быстрого перехода к недавним вкладкам. Т.е. прошлая вкладка будет первым пунктом, позапрошлая вторым, и так далее.

Древовидное отображение вкладок, думаю, не нужно. Для этого ведь есть расширение TreeStyleTab, им можно расположить вкладки слева или справа в древовидном виде, и настроить автоскрытие панели вкладок. А функционала меню вкладок с сортировкой по использованию не нашёл.

Отсутствует

 

№6014-01-2017 14:07:36

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: [CB]Показывать количество табов в адресной строке

rsuan пишет

Здравствуйте. Искал кнопку для вывода меню открытых вкладок, подсказали эту тему. Хороший вариант, единственное что мне не хватает - сортировки типа "история последних используемых вкладок" для быстрого перехода к недавним вкладкам. Т.е. прошлая вкладка будет первым пунктом, позапрошлая вторым, и так далее.

В меню вкладок первыми будут прочитанные в текущей сессии вкладки отсортированные по времени посещаемости остальные вкладки будут в том порядке как на панели вкладок:

Выделить код

Код:

// Показывать количество открытых табов в адресной строке, от 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)

Отсутствует

 

№6114-01-2017 18:11:09

_zt
Участник
 
Группа: Members
Зарегистрирован: 10-11-2014
Сообщений: 1420
UA: Firefox 46.0

Re: [CB]Показывать количество табов в адресной строке

rsuan
TreeStyle у меня стоит и именно для него это и нужно (как вы вообще представляете себе дерево без подобного расширения? :dumb: ), так как при свернутых в нем ветвях проблематично искать вкладку, приходится подводить курсор к каждому узлу и просматривать дочки в тултипе, а сплошной список вкладок в меню данной кнопки ни как не облегчает поиск среди сотни вкладок.

Отредактировано _zt (14-01-2017 18:12:30)

Отсутствует

 

№6202-02-2017 11:20:24

ag4
Участник
 
Группа: Members
Зарегистрирован: 02-02-2017
Сообщений: 2
UA: Firefox 51.0

Re: [CB]Показывать количество табов в адресной строке

Приветствую. После выхода новой версии FF (51.0.1) у вас работает этот счетчик?
У меня сломался.. :(

Отсутствует

 

№6302-02-2017 11:33:53

toltec
Участник
 
Группа: Members
Зарегистрирован: 03-12-2013
Сообщений: 20
UA: Firefox 51.0

Re: [CB]Показывать количество табов в адресной строке

ag4
Все работает. У Вас точно последняя исправленная версия CustomButtons?

Отсутствует

 

№6402-02-2017 12:45:01

ag4
Участник
 
Группа: Members
Зарегистрирован: 02-02-2017
Сообщений: 2
UA: Firefox 51.0

Re: [CB]Показывать количество табов в адресной строке

toltec
Поставил отсюда http://custombuttons.sourceforge.net/forum/viewtopic.php?f=5&t=3743 и теперь работает.
Спасибо!

Отсутствует

 

№6513-02-2017 09:09:32

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

Re: [CB]Показывать количество табов в адресной строке

bunda1
Доброе утро а можно сделать что то похоже на это?
LJskY5G.png
показывает сколко слева и справа + общее колличество(18) и номер текущей вкладки(11).
это я сделал в https://addons.mozilla.org/ru/firefox/addon/tab-counter/?src=api
хотелось бы отказаться от расширение.

Отсутствует

 

№6614-02-2017 10:29:49

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: [CB]Показывать количество табов в адресной строке

mahtanoronra пишет

bunda1
Доброе утро а можно сделать что то похоже на это?
LJskY5G.png

Выделить код

Код:

// Показывать количество открытых табов в адресной строке, от 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();
})();

Отсутствует

 

№6702-08-2017 17:12:16

rsuan
Участник
 
Группа: Members
Зарегистрирован: 30-12-2010
Сообщений: 116
UA: Firefox 52.0

Re: [CB]Показывать количество табов в адресной строке

Обновил на версию 52.2.1 esr (была 45.9 esr), счётчик в адресной строке пропал. Код использую крайний.

Отредактировано rsuan (02-08-2017 17:17:19)

Отсутствует

 

№6810-08-2017 14:15:54

Stkvsky
Участник
 
Группа: Members
Зарегистрирован: 26-06-2012
Сообщений: 1700
UA: Firefox 55.0

Re: [CB]Показывать количество табов в адресной строке

Ребята, а можете достать из этого кода только счетчик открытых вкладок и все, в виде кнопки?

Отсутствует

 

№6912-09-2017 14:25:56

becool
Участник
 
Группа: Members
Зарегистрирован: 30-08-2014
Сообщений: 268
UA: Firefox 45.0

Re: [CB]Показывать количество табов в адресной строке

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

Отсутствует

 

№7012-09-2017 17:46:53

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Palemoon 27.0

Re: [CB]Показывать количество табов в адресной строке

becool пишет

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();
})();

Отсутствует

 

№7112-09-2017 18:36:25

becool
Участник
 
Группа: Members
Зарегистрирован: 30-08-2014
Сообщений: 268
UA: Firefox 45.0

Re: [CB]Показывать количество табов в адресной строке

good2.gif
Премного благодарен!

Отсутствует

 

№7220-11-2017 00:15:38

broker
Участник
 
Группа: Members
Зарегистрирован: 23-06-2015
Сообщений: 103
UA: unknown 0.0

Re: [CB]Показывать количество табов в адресной строке

На 57 не работает, можно поправить

Отсутствует

 

№7322-11-2017 13:34:13

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: [CB]Показывать количество табов в адресной строке

broker пишет

На 57 не работает, можно поправить

А у тебя Сustom Buttons на Firefox 57 вообще работает?

Отсутствует

 

№7422-11-2017 16:04:36

broker
Участник
 
Группа: Members
Зарегистрирован: 23-06-2015
Сообщений: 103
UA: unknown 0.0

Re: [CB]Показывать количество табов в адресной строке

bunda1

А у тебя Сustom Buttons на Firefox 57 вообще работает?

Да! В теме Сustom Buttons  Infocatcher и Dumby поделились "распорками" "костылями" все работает:D .Со всех кнопок не работают кнопки: папка загрузки,Кнопка для управления масштабом страницы в адресной строке,Показывать потребление памяти в адресной строке,Показывать количество открытых табов в адресной строке.
Думал так и останусь на 48 но не все так страшно.Save+ Работает обновил кнопку все пучком:cool:

Отредактировано broker (22-11-2017 16:12:43)

Отсутствует

 

№7525-11-2017 14:42:52

Coroner
Участник
 
Группа: Members
Зарегистрирован: 29-10-2012
Сообщений: 3972
UA: Firefox 57.0

Re: [CB]Показывать количество табов в адресной строке

broker пишет

Показывать потребление памяти в адресной строке

Мне помогли починить её на руборде, спасибо gyra и другим пользователям... Только с положением её относительно остальных элементов в урл не так всё просто:

скрытый текст
jplxlrvzez7tgmppmrw9xuszfyw.png

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

Выделить код

Код:

margin-right: -8px !important;
  margin-top: 2px !important;


Но при этом попадает под те элементы, которые там в урл находятся.

Оригинал самой кнопки (той, которой у меня) я на форуме найти не могу. :angel:
Если надо — могу выслать свой вариант. Цвет, шрифт и действия по нажатиям на счётчик подстроите под себя.

Отредактировано Coroner (25-11-2017 14:45:02)

Отсутствует

 

Board footer

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