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

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

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

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

   

wvxwxvw

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
// 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;  
   });    
})();
 
// Добавить подменю "Поиск изображения в ..." в контекстном меню изображений, от 05.06.2015. .............
((contextMenu) => {
  var menu = document.createElement("menu");      
  menu.setAttribute("label", "Искать изображение в ...");
  menu.setAttribute("class", "menu-iconic");
  menu.setAttribute("image", "https://www.google.lv/favicon.ico");
   
  contextMenu.insertBefore( menu, document.getElementById("context-viewimage") );  
  addEventListener("popupshowing", ()=> menu.hidden = !gContextMenu.onImage, false, contextMenu);
  addDestructor(()=> contextMenu.removeChild(menu) );
   
  var array = [
        [ 'Google', 'https://www.google.lv/favicon.ico', 'http://www.google.com/searchbyimage?image_url=' ],
        [ 'Яндекс', 'http://yastatic.net/morda-logo/i/favicon_islands.ico', 'http://yandex.ru/images/search?rpt=imageview&img_url=' ],
        [ 'Tineye', 'http://tineye.com/favicon.ico', 'http://tineye.com/search?pluginver=bookmark_1.0&url=' ]
        ];
  var menuPopup = menu.appendChild( document.createElement("menupopup") );              
  array.forEach(function( m ) {  
       var mItem = menuPopup.appendChild( document.createElement("menuitem") );
       mItem.setAttribute("label", m[0]);        
       mItem.setAttribute("image", m[1]);
       mItem.setAttribute("class", "menuitem-iconic");
       mItem.finder = m[2];
  });
   
  menuPopup.onclick =e=> {
     var url = e.target.finder +
              encodeURIComponent(gContextMenu.imageURL);
     e.button ? gBrowser.selectedTab = gBrowser.addTab(url) : gBrowser.addTab(url);
     setTimeout(()=> contextMenu.hidePopup(), 20);
  };
   
})(document.getElementById("contentAreaContextMenu") );

Всего записей: 5677 | Зарегистр. 02-04-2015 | Отправлено: 14:23 21-01-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