Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » Расширения для Firefox/Mozilla Firefox Extensions (часть 8)

Модерирует : gyra, Maz

gyra (16-09-2017 13:48): Расширения для Firefox/Mozilla Firefox Extensions (часть 9)  Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

   

drage



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
// Кнопка для управления масштабом страницы в адресной строке, от 24.11.2016. ..........................
(()=> {
   // Удалить из адресной строки FF51 стандартную кнопку масштаба ....
   var but = document.getElementById('urlbar-zoom-button');
   if (but) but.style.display = "none";
   
   // Создать в адресной строке кнопку масштаба ....
   var zoomButton = document.createElement("statusbarpanel");
   
   var urlbarIcons = document.getElementById("urlbar-icons");
   urlbarIcons.insertBefore(zoomButton, urlbarIcons.lastChild); // перед последней кнопкой адресной строки
   addDestructor(()=> zoomButton.remove());
     
   updateZoomButton();  
   zoomButton.id = "zoomButton";
   zoomButton.tooltipText = "Л: Менять масштаб страницы или только текста\nС: Единый масштаб для всех страниц \nП: Сбросить масштаб на 100% ";
 
   
   // Отслеживать клики на кнопке масштаба ....            
   addEventListener("click", e=> {                  
      if ( e.button == 0 ) ZoomManager.toggleZoom(); // переключить режим изминения масштаба
       
      if ( e.button == 1 ) { // единый масштаб для всех страниц
           cbu.isPref("CB.zoom.allEvenly", false);
           cbu.setPrefs("CB.zoom.allEvenly", !cbu.getPrefs("CB.zoom.allEvenly") );
           cbu.setPrefs("CB.zoom.Percent", ZoomManager.zoom.toFixed(2) );
                 
           updateZoomButton();
           }
 
      if ( e.button == 2 ) { e.preventDefault(); FullZoom.reset(); }; // сбросить масштаб
               
   }, false, zoomButton);
 
         
   // Менять масштаб колесиком мыши на кнопке масштаба ....
   addEventListener("DOMMouseScroll", e=> {
      e.detail > 0 ? FullZoom.reduce() : FullZoom.enlarge();
   }, false, zoomButton);
           
 
   // Следим за изменением масштаба и запускаем обновление кнопки ....
   var str = "{ setTimeout(()=> { updateZoomButton() }, 50);";
   var handleEvent = parseInt(Services.appinfo.version) > 33 ? FullZoom.handleEvent : FullZoom._handleMouseScrolled;
   var array = [FullZoom.reset, FullZoom.reduce, FullZoom.enlarge, ZoomManager.toggleZoom, handleEvent];
   array.forEach(func=> { setTimeout(()=> { eval( (func.toString().replace('_', '.').match(/function ([^(]*)\(/)[1] + " = " + func.toString().replace("{", str)) )}, 50) });  
   addDestructor(()=> {  
      array.forEach(func=> { eval( (func.toString().replace('_', '.').match(/function ([^(]*)\(/)[1] + " = " + func.toString()).replace(str,"{") ) });  
   });    
   
   
   // Показывать текущий масштаб страницы на кнопке и изменять цвет и шрифт отображения масштаба ....
   function updateZoomButton(e) {
      zoomButton.label = Math.round(ZoomManager.zoom*100) + "%";  
      setTimeout(()=> {  
         zoomButton.style.fontWeight = ZoomManager.useFullZoom ? '' : 'bold';
         zoomButton.style.color = cbu.getPrefs("CB.zoom.allEvenly") ? "red" : "";
      }, 5);
       
      // запомнить текущий масштаб в 'about:config'
      if ( e == undefined ) {  
           try { window.clearTimeout(zoomButton.prefTimeout) } catch(e) {};
           zoomButton.prefTimeout = window.setTimeout(()=> {
              cbu.setPrefs("CB.zoom.Percent", ZoomManager.zoom.toFixed(2) )  
           }, 250);
           }      
   };
     
     
   // Устанавливать единый масштаб для всех страниц если это разрешено в 'about:config' ....
   addEventListener("TabAttrModified", e=> {
      if ( e.target.linkedBrowser.currentURI.spec !== gBrowser.currentURI.spec ) return;
             
      if ( cbu.getPrefs("CB.zoom.allEvenly") && content.location.protocol.startsWith("http") ) {
           var value = cbu.getPrefs("CB.zoom.Percent");
           if ( ZoomManager.zoom.toFixed(2) == value ) return;
 
           setTimeout(()=> {  
              gBrowser.markupDocumentViewer[ZoomManager.useFullZoom ? 'fullZoom' : 'textZoom'] = value;
              updateZoomButton(e);    
           }, 0);  
           }      
      else  
           updateZoomButton(e);
                 
   }, true, gBrowser.tabContainer);    
})();
// Настройка функций кликов мыши для кнопки ..............
this.onclick = this.oncontextmenu = e => {
 
 
     // действие при клике ЛКМ ....
     if ( e.button == 0 ) FullZoom.enlarge();
           
     // действие при клике СКМ ....    
     if ( e.button == 1 ) cbu.setPrefs(s, !cbu.getPrefs(s));
     
     // действие при клике ПКМ ....    
     if ( e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey ) {  
          e.preventDefault();
          FullZoom.reduce();            
          }
     
     showTooltip();          
};
this.setAttribute("ondblclick", "event.preventDefault()");
 
 
// Менять масштаб колесиком мыши на кнопке ..............
this.onwheel =e=> {
   e.deltaY > 0 ? FullZoom.reduce() : FullZoom.enlarge();
   showTooltip();
};
 
 
// Создать подсказку и показывать у кнопки при вызове функции ..............
function showTooltip() {
   var tooltip = self.lastChild;
   if ( !tooltip ) {
        tooltip = self.appendChild(document.createElement("tooltip"));
        tooltip.style.cssText = "font-weight: bold !important; color: red !important;";
        }
   self.tooltipText = ""      
   tooltip.label = Math.floor((ZoomManager.zoom + 0.005) * 100) + "%";
   tooltip.showPopup(self, -1, -1, "popup", "topleft", "topright");
   self.onmouseleave =()=> { tooltip.hidePopup(self.onmouseleave = null); self.tooltipText = self.label };
};
// Подсказка для кнопки ..............
this.onmouseover =()=> {
   var value = Math.floor((ZoomManager.zoom + 0.005) * 100) + "%";                    
   this.tooltipText = "Zoom: " + value + "\nЛ: увеличить масштаб \nП: уменьшить масштаб ";                                                      
};
 
// Установить нужную иконку кнопки при старте браузера или при изменениях настроек 'about:config' ..............
var s = "browser.zoom.full";
function toggleImage() {
   self.image = cbu.getPrefs(s)
   ? 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACQklEQVQ4jaWSzUtUYRTGf+97rzM6V22YVBQJa1GbPjCiIMJFzaJNYosiiSAooV0ryWW7Nv0DiYXRJnAVtgqMaBEEFShJovmRM43jfDsfd+aO9973bWVIjBZ0ls/znIdzznPgP0vsRYxPvt/KFUqVRHLLS6RE36sXtxpqZSPwZP/A1aagdSBkRXqlGe7bTJcxgkev/LPB9ZsPxoslh0zOJpkqkUiWsLoHXzfSmo3AuhfsysYKxBNFFpezlIoFlG8DdADZfScYvv1oJpO1WVjK8PHTUj6+vpJWfhmUS0vn0Nu/rnDoyOmoXd0mnamQXH1+w9l69xAMhNGMGew5ta9B/5nLI0ppao6HXd0GJzbjVuafSLMVabQjDItg+OLTPQ0Gr41O2NVtsjmbjdiX6R3crS5PC9mMkEECbSfuNjTo7Dzc79Q98oUqyXSZaurl0A5XTU0NmaaJECZCGBjNx0Z2uN/PcX9sKleuycjc/CbLqzHUdg7QCCOENCyQAdAK7dsor0xl45mAXTEWSkS+LiRZWVnEq62h3C0QAmm0Icx2pBFCyABaK7SuA1Y/2LMC4PylsZlivScaj33HrXzDKX2+gxZ9SImUzSADKF/9DIXPTiAkWnto38k7+TcHTYB0qTOaSf/ArS5Ttxen8cuTAChQuw7m1rqGjUBHFHzQKgIgWiIXRptazz32amu4tTXcylwPsPln3jsVDA9orV3QPtqrfRBW772KcuIVt570lJtvVfX18F7NAKZ1fBbtd2vtOdKw+n4B6skL1gRzZQAAAAAASUVORK5CYII='
   : 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAwElEQVQ4jd3RMWpCQRSF4S/iBtyCELHW1sIV6ALiRnQH4hJ0ByF2Ym8aG1Ml8Ji3ArXRDZhUA+bx3qCWHjgw3Jn57+XcF1fq0JXQF7vUvYxw4bfKGWHO4mFA9AfLJCAjdOhG9+jPWVxDmrSSgLIGGz4jYMwEaslQCtqyLdbuAgwYxvOJM9SrHscRoUFjwLDFKwTy97Igb93CG6P4p3KCQF6sHdhPma1YJwGBvF22phLdFeKTAv6F+MP3gf2R462AP7hdbq8C1bDsAAAAAElFTkSuQmCC';
};
toggleImage();
gPrefService.addObserver(s, toggleImage, false);
addDestructor(()=> gPrefService.removeObserver(s, toggleImage) );
// Context Search, от 29.01.2014. ................................
(function () {
   var searchService = Cc["@mozilla.org/browser/search-service;1"].getService(Ci.nsIBrowserSearchService);  
 
   var searchSelect = document.getElementById('context-searchselect');  
   searchSelect.collapsed = false; // удалить стандартный пункт меню для поиска
 
   
   // Создать новый пункт меню для поиска ....
   var contextMenu = document.getElementById("contentAreaContextMenu");
   var menu = contextMenu.insertBefore( document.createElement('menu'), searchSelect ); // над каким пунктом меню показывать
   menu.setAttribute("class", "menu-iconic");
   
   // устанавливать иконку, название и поисковик для нового пункта меню
   function setMenu() {  
      menu.engine = searchService.currentEngine;
      menu.setAttribute("label", "Искать в...");
         };
   setMenu();    
 
   // наблюдатель за стандартным пунктом меню 'Копировать' прячет меню поиска
   var copy = document.getElementById('context-copy');  
   var setHiddenMenu = new MutationObserver(function() {
          menu.hidden = copy.hidden || copy.disabled;          
   });
   setHiddenMenu.observe( copy, { attributes: true, attributeFilter: ["hidden", "disabled"] } );
   
   
   // Создать подменю с поисковиками ....  
   var menuPopup = menu.appendChild( document.createElement("menupopup") );  
   menuPopup.setAttribute('style', 'overflow: scroll');  
     
   // создать пункты в подменю
   function setItemsToMenuPopup(e) {
      menuPopup.textContent = "";      
 
      var engines = searchService.getVisibleEngines({});
      engines.forEach(function( engine ) {
         var mItem = document.createElement("menuitem");
         mItem.setAttribute("label", engine.name );
         mItem.setAttribute("class", "menuitem-iconic");
         mItem.setAttribute("src", engine.iconURI.spec );
         mItem.engine = engine;
         menuPopup.appendChild( mItem );
      });
 
   };  
   setItemsToMenuPopup();
   
   
   // Установить действие для клика на меню и подменю ....
   menu.setAttribute("onmouseup", "\
      var background = ( event.button == 0 ) ? false : true;\
      var clip = gClipboard.read();\
      goDoCommand('cmd_copy');\
      setTimeout(function() {\
         document.getElementById('contentAreaContextMenu').hidePopup();\
         var submission = event.target.engine.getSubmission( gClipboard.read(), null );\
         gBrowser.loadOneTab( submission.uri.spec, null, null, submission.postData, background, false );\
         gClipboard.write( clip );\
      }, 0);\
   ");      
       
   
   // Наблюдатель за изменениями в поисковиках пересоздаёт меню и подменю ....  
   var getEngineModified = {
      observe: function(subject, topic, data) {  
         if ( /changed|removed|current/.test( data ) ) { setMenu(); setItemsToMenuPopup() };              
      }
   };
   Services.obs.addObserver( getEngineModified, "browser-search-engine-modified", false );    
   
   
   // Удалять наблюдатели и меню, показать стандартный пункт ....
   addDestructor(function() {
      contextMenu.removeChild( menu );            
      setHiddenMenu.disconnect();
      Services.obs.removeObserver( getEngineModified, "browser-search-engine-modified", false );
       
      searchSelect.collapsed = false;  
   });    
 
 
 
})(document.getElementById("contentAreaContextMenu") );

Всего записей: 556 | Зарегистр. 01-06-2016 | Отправлено: 17:38 26-08-2017 | Исправлено: drage, 17:41 26-08-2017
   

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Программы » Расширения для Firefox/Mozilla Firefox Extensions (часть 8)
gyra (16-09-2017 13:48): Расширения для Firefox/Mozilla Firefox Extensions (часть 9)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru