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

Будьте в курсе последних изменений в мире Mozilla, следя за нашим микроблогом в Twitter.

№121-08-2013 19:51:45

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

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

Выделить код

Код:

// Показывать количество открытых табов в адресной строке, от 10.05.2019. ..................
(()=> {  
   // Создать в адресной строке счётчик вкладок ....
   var tabCounter = document.createElement("toolbarbutton");
   tabCounter.setAttribute("id", "tabCounter");
   tabCounter.setAttribute("context", "event.stopPropagation()");
   tabCounter.setAttribute("tooltiptext", "Показать меню всех вкладок"); 
   var urlbarIcons = document.getElementById("page-action-buttons"); 
   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.openPopup(tabCounter, "after_start")           
   };


   // Css стиль для счётчика и меню ....
   var uri = makeURI('data:text/css,'+ encodeURIComponent('\
      /* Стиль для кнопки */\
      #tabCounter:hover { color: #FF1493 !important; }\
      /* Стиль добавляет текст на кнопку */\
      #tabCounter .toolbarbutton-icon { display: none !important; }\
      #tabCounter .toolbarbutton-text { display: -moz-box !important; }\
      #tabCounter { -moz-box-orient: horizontal !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();


   // Отслеживать открытие, закрытие вкладок и переключение групп вкладок ....
   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 (21-08-2013 20:23:30)

Отсутствует

 

№223-08-2013 00:01:55

>ORG@niZM<
Участник
 
Группа: Members
Зарегистрирован: 20-08-2013
Сообщений: 66
UA: Firefox 16.0

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

Отредактировано >ORG@niZM< (23-08-2013 00:02:37)

Отсутствует

 

№323-08-2013 08:47:17

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

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

Отсутствует

 

№423-08-2013 09:44:32

>ORG@niZM<
Участник
 
Группа: Members
Зарегистрирован: 20-08-2013
Сообщений: 66
UA: Firefox 16.0

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

Отсутствует

 

№525-08-2013 01:34:38

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

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

Выделить код

Код:

// Показывать количество открытых табов в адресной строке +, от 25.08.2013.
(function () { 
   // Создать в адресной строке счётчик вкладок ....
   var tabCounter = document.createElement("statusbarpanel"); 
   var urlbarIcons = document.getElementById("urlbar-icons"); 
   urlbarIcons.insertBefore( tabCounter, urlbarIcons.firstChild );
   addDestructor(function() { urlbarIcons.removeChild( tabCounter ) });
   tabCounter.id = "tabCounter"; 
    
   
   // Отслеживать клик на счетчике ....
   tabCounter.onclick = function(e) {
      if ( e.button ) return;
   
      tabCounter.textContent = "";   
      var menu = tabCounter.appendChild( document.createElement("menupopup") ); // создать и открыть новое меню
      menu.setAttribute("onmouseup", "gBrowser.selectedTab = gBrowser.visibleTabs[event.target.index]");
      menu.setAttribute("onmouseleave", "this.hidePopup()");

      gBrowser.visibleTabs.forEach(function( tab, i ) {      
         var mItem = document.createElement("menuitem");
         mItem.index = i;         
         mItem.setAttribute("label", tab.label );
         mItem.setAttribute("image", tab.image );
         mItem.setAttribute("class", "menuitem-iconic bookmark-item");
         mItem.setAttribute("selected", tab.selected );
         mItem.setAttribute("unread", tab.hasAttribute("unread"));
         menu.appendChild( mItem );
      });
      menu.showPopup( tabCounter, -1, -1, "popup", "bottomleft", "topleft");  
   };


   // Стиль для счётчика и меню ....
   var uri = makeURI('data:text/css,'+ encodeURIComponent('\
   #tabCounter { -moz-appearance: none !important; border: 0px !important; margin-right: -5px !important; }\
   #urlbar-icons > statusbarpanel:first-child scrollbox { overflow-y: auto !important; }\
   .menuitem-iconic.bookmark-item[unread="true"]:not(:hover) { color: blue !important; }\
   .menuitem-iconic.bookmark-item[selected="true"]:not(:hover) { color: red !important; }\
   '));
   const sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
   sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET); 
   addDestructor(function() { sss.unregisterSheet(uri, sss.AGENT_SHEET) }); 


   // Считать и показывать количество вкладок ....
   function count() {
      setTimeout(function() {
         var all = gBrowser.tabs.length, visible = gBrowser.visibleTabs.length; 
         tabCounter.label = ( all > visible ? gBrowser.visibleTabs.length + '/' : '' ) + all;  
      }, 50 );
   };
   count();


   // Отслеживать открытие, закрытие вкладок и переключение групп вкладок ....
   var tabs = gBrowser.tabContainer;
   addEventListener("TabOpen", count, false, tabs );
   addEventListener("TabClose", count, false, tabs );
   function getChangeTabGroup() {
      addEventListener("TabHide", function c(e) { 
         count();
         setTimeout(function() { getChangeTabGroup() }, 50 ) 
         removeEventListener( e.type, c, false, tabs ); 
      }, false, tabs );
   };
   getChangeTabGroup();
})();

Отредактировано bunda1 (25-08-2013 16:16:01)

Отсутствует

 

№625-08-2013 11:15:02

Inko7
Участник
 
Группа: Members
Зарегистрирован: 09-11-2009
Сообщений: 915
UA: Firefox 23.0

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

Отсутствует

 

№725-08-2013 12:02:22

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

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

Отсутствует

 

№825-08-2013 12:13:20

Inko7
Участник
 
Группа: Members
Зарегистрирован: 09-11-2009
Сообщений: 915
UA: Firefox 23.0

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

Отсутствует

 

№925-08-2013 12:17:15

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

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

Выделить код

Код:

// Отслеживать клик на счетчике ....
tabCounter.onclick = function(e) { alert(self._handlers.length);
   if ( e.button !== 0 ) return;
   
   var menu = tabCounter.appendChild( document.createElement("menupopup") ); // создать и открыть новое меню
   Array.slice( gBrowser.visibleTabs ).forEach(function( tab, i ) {      
         var mItem = document.createElement("menuitem");
         mItem.index = i;         
         mItem.setAttribute("label", tab.label );
         mItem.setAttribute("image", tab.image );
         mItem.setAttribute("class", "menuitem-iconic bookmark-item");
         mItem.setAttribute("selected", tab.selected );
         mItem.setAttribute("unread", tab.hasAttribute('unread') );
         menu.appendChild( mItem );     
   });
   menu.showPopup( tabCounter, -1, -1, "popup", "bottomleft", "topleft");  
   addEventListener("mouseup", function(e) gBrowser.selectedTab = gBrowser.visibleTabs[e.target.index], true, menu );

   addEventListener("popuphiding", function f(e) {  // удалить меню после закрытия
      tabCounter.removeChild( e.target )
  }, false, menu );
   
};

Отредактировано voqabuhe (25-08-2013 12:19:41)

Отсутствует

 

№1025-08-2013 12:31:07

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

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

Отсутствует

 

№1125-08-2013 12:40:14

Inko7
Участник
 
Группа: Members
Зарегистрирован: 09-11-2009
Сообщений: 915
UA: Firefox 23.0

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

Отсутствует

 

№1225-08-2013 12:56:48

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

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

Ок

Отсутствует

 

№1326-08-2013 07:50:03

>ORG@niZM<
Участник
 
Группа: Members
Зарегистрирован: 20-08-2013
Сообщений: 66
UA: Firefox 16.0

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

Отредактировано >ORG@niZM< (26-08-2013 07:50:24)

Отсутствует

 

№1431-08-2013 16:58:51

Inko7
Участник
 
Группа: Members
Зарегистрирован: 09-11-2009
Сообщений: 915
UA: Firefox 23.0

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

Отсутствует

 

№1531-08-2013 17:09:57

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

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

Отсутствует

 

№1601-09-2013 22:06:24

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

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

Выделить код

Код:

// Показывать количество открытых табов на кнопке "Список всех вкладок", от 01.09.2013. ................................
(function () {
  
  var alltabs = document.getElementById('alltabs-button');
  if ( alltabs == null ) return;
  
  // Стиль добавляет текст на кнопку ....
  var uri = makeURI('data:text/css,'+ encodeURIComponent('\
  %button% .toolbarbutton-icon {\
    display: none !important;\
  }\
  %button% .toolbarbutton-text {\
    display: -moz-box !important;\
  }\
  %button% {\
    -moz-box-orient: horizontal !important;\
  }\
  '.replace(/%button%/g, "#alltabs-button" ) ));
   const sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
   sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET); 
   addDestructor(function() { sss.unregisterSheet(uri, sss.AGENT_SHEET) });
  
  // Фокус на активную вкладку в меню всех вкладок ....
  (function() {
    const popup = document.getElementById("alltabs-popup");
    const box = document.getAnonymousElementByAttribute(popup, "class", "popup-internal-box");
    addEventListener("popupshowing", function() {
        var [menuitem] = Array.filter(popup.childNodes, function(menuitem) menuitem.hasAttribute("selected"));
        var boxCenter = box.boxObject.screenY + box.boxObject.height / 2;
        var menuitemCenter = menuitem.boxObject.screenY + menuitem.boxObject.height / 2;
        box.scrollByPixels(menuitemCenter - boxCenter);
    }, false, popup);
  })();  
  
  // Считать и показывать количество вкладок ....
  function count(e) {
     try { window.clearTimeout( tabTimeout ) } catch(e) {};
     tabTimeout = window.setTimeout(function() {
        var all = gBrowser.tabs.length, visible = gBrowser.visibleTabs.length; 
        alltabs.label = ( all > visible ? gBrowser.visibleTabs.length + '/' : '' ) + all;
     }, 50 );
  };
  count();

  // Отслеживать открытие, закрытие вкладок и переключение групп вкладок ....
  var tabs = gBrowser.tabContainer;
  addEventListener("TabOpen", count, false, tabs);
  addEventListener("TabClose", count, false, tabs);
  function getChangeTabGroup() {
    addEventListener("TabHide", function c(e) {
      count();
      setTimeout(function () {
        getChangeTabGroup()
      }, 50 );
      removeEventListener(e.type, c, false, tabs);
    }, false, tabs);
  };
  getChangeTabGroup();
  
})();

Отредактировано bunda1 (01-09-2013 22:35:21)

Отсутствует

 

№1701-09-2013 23:15:13

Inko7
Участник
 
Группа: Members
Зарегистрирован: 09-11-2009
Сообщений: 915
UA: Firefox 23.0

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

Отсутствует

 

№1801-09-2013 23:21:07

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

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

Отсутствует

 

№1902-09-2013 07:09:30

>ORG@niZM<
Участник
 
Группа: Members
Зарегистрирован: 20-08-2013
Сообщений: 66
UA: Firefox 16.0

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

Отсутствует

 

№2002-09-2013 11:21:44

Inko7
Участник
 
Группа: Members
Зарегистрирован: 09-11-2009
Сообщений: 915
UA: Firefox 23.0

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

Отсутствует

 

№2126-09-2013 08:07:25

DarkHeavy
Участник
 
Группа: Members
Зарегистрирован: 23-06-2011
Сообщений: 212
UA: Firefox 25.0

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


Если тебя не помнят — значит тебя не существовало... ©

Отсутствует

 

№2226-09-2013 11:02:37

villa7
Участник
 
Группа: Members
Зарегистрирован: 21-07-2012
Сообщений: 2235
UA: Firefox 25.0

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


Лучше спросить у знающих - чем лезть не зная.

Отсутствует

 

№2329-09-2013 09:06:55

DarkHeavy
Участник
 
Группа: Members
Зарегистрирован: 23-06-2011
Сообщений: 212
UA: Firefox 25.0

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


Если тебя не помнят — значит тебя не существовало... ©

Отсутствует

 

№2429-09-2013 10:08:21

DarkHeavy
Участник
 
Группа: Members
Зарегистрирован: 23-06-2011
Сообщений: 212
UA: Firefox 25.0

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

Заменил. Всё работает.


Если тебя не помнят — значит тебя не существовало... ©

Отсутствует

 

№2529-09-2013 10:28:14

villa7
Участник
 
Группа: Members
Зарегистрирован: 21-07-2012
Сообщений: 2235
UA: Firefox 25.0

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


Лучше спросить у знающих - чем лезть не зная.

Отсутствует

 

Board footer

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