exsidas
BANNED | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору /*Initialization Code*/ // 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") ); | Всего записей: 925 | Зарегистр. 18-10-2010 | Отправлено: 21:04 27-10-2017 | Исправлено: exsidas, 21:05 27-10-2017 |
|