Skip to content

Instantly share code, notes, and snippets.

@2k1dmg 2k1dmg/context-search-2.js
Last active Jan 28, 2016

Embed
What would you like to do?
(function() {
// Context Search 2 2016-01-19
'use strict';
let options = {
loadInBackground: false,
// true - открывать вкладки в фоне
pinnedEngineName: '',
// оставить пустым если не нужно закреплять
// определенный поисковик
// примеры pinnedEngineName: 'Google' или pinnedEngineName: 'Яндекс' или pinnedEngineName: ''
hideDefaultEngineInPopupSubMenu: false,
// true - не добавлять поисковик по умолчанию в выпадающий список (подменю) поисковиков
campactMenu: true,
// true - поисковики в выпадающем списке (подменю) без назаваний
campactMenuLengthPerLine: 5,
// максимальное количество элементов в одной строке
// от 3 до 10, по умолчанию 5
searchBySite: {
enable: true,
// true - добавить поисковики по сайту
iconsOn: true,
// true - добавить иконки для поисковиков по сайту
useDefaultNamesList: true,
// true - использовать список поисковиков по умолчанию
addCustomNames: false,
// true - добавить свои поисковики по сайту
customNamesList: [
['Rambler', ['Rambler', 'Рамблер']]
]
// например ['Rambler', ['Rambler', 'Рамблер']]
// первая ячека название на английском
// вторая ячека массив с предполагаемыми именами поисковика
// может состоять из нескольких значений
// ['Name1', ['Name1']],
// ['Name2', ['Name2', 'Имя2']],
// ['Name3', ['Name3', 'Имя3', 'Nev3']]
},
searchImageByText: {
enable: true,
// true - добавить поиск изображения по тексту
useDefaultNamesList: true,
addCustomNames: false,
customNamesList: [
[
'name',
'link',
'image'
]
]
},
searchByImage: {
enable: true,
// true - добавить поиск по изображению
useDefaultNamesList: true,
addCustomNames: false,
customNamesList: [
[
'name',
'link',
'image'
]
]
},
searchInCache: {
enable: true,
// true - добавить поиск в кэше
// нужно доработать
useDefaultNamesList: true,
addCustomNames: false,
customNamesList: [
[
'name',
'link',
'image'
]
]
},
defaultIcon: 'chrome://mozapps/skin/places/defaultFavicon.png'
};
if (Services.appinfo.OS == 'Darwin' &&
devicePixelRatio >= 2) {
options.defaultIcon = 'chrome://mozapps/skin/places/defaultFavicon@2x.png';
}
function _localize(sid) {
let strings = {
en: {
searchBySite: 'Search this site',
searchImageByText: 'Search image by text',
searchByImage: 'Search by image',
searchInCache: 'Search this page in cache'
},
ru: {
searchBySite: 'Поиск по этому сайту',
searchImageByText: 'Поиск изображения по тексту',
searchByImage: 'Поиск по изображению',
searchInCache: 'Поиск этой страницы в кэше'
}
};
let getBrowserUILocale = function() {
let prefsServices = Services.prefs;
if (!prefsServices.getBoolPref('intl.locale.matchOS')) {
try {
let locale = prefsServices.getCharPref('general.useragent.locale');
if (locale.substr(0, 9) == 'chrome://') {
return prefsServices.getComplexValue('general.useragent.locale',
Components.interfaces.nsIPrefLocalizedString).data;
}
return locale;
}
catch (ex) {}
}
try {
return Components.classes['@mozilla.org/chrome/chrome-registry;1']
.getService(Components.interfaces.nsIXULChromeRegistry)
.getSelectedLocale('global');
}
catch (ex) {
return 'en-US';
}
};
let locale = ''; // ru, en
if (!locale)
locale = getBrowserUILocale().match(/^[a-z]*/)[0];
_localize = function(sid) {
return strings[locale] && strings[locale][sid] || strings.en[sid] || sid;
};
return _localize(sid);
}
let XULNS = 'http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul';
let XHTMLNS = 'http://www.w3.org/1999/xhtml';
let contextSearcherObj = {
initialized: false,
init: function() {
if (this.initialized)
return;
this.initialized = true;
this.nodeIds = {
searchMenu: 'context-search-2-by-2k1dmg-menu',
searchMenuPopup: 'context-search-2-by-2k1dmg-popup',
searchByImageMenu: 'context-search-2-by-2k1dmg-image-search-menu',
searchByImageMenuPopup: 'context-search-2-by-2k1dmg-image-search-popup'
};
if (document.getElementById(this.nodeIds.searchMenu))
return;
let searchService = Services.search;
let contextMenu = document.getElementById('contentAreaContextMenu');
let searchSelect = document.getElementById('context-searchselect');
searchSelect.style.display = 'none';
let searchMenu = contextMenu
.insertBefore(document.createElementNS(XULNS, 'menu'), searchSelect);
this.searchService = searchService;
this.contextMenu = contextMenu;
this.searchSelect = searchSelect;
this.searchMenu = searchMenu;
this.param = {
isPinnedEngine: false,
pinnedEngineName: ''
};
try {
this.createSearchMenu();
if (options.searchByImage.enable)
this.createSearchByImageMenu();
}
catch (ex) {
this.destroy();
Components.utils.reportError(ex);
return;
}
if (options.campactMenu)
this.loadSheet(window, this.makeCSS());
let observeStatus = this.observeStatus = new MutationObserver(function() {
searchMenu.hidden = searchSelect.hidden;
});
observeStatus.observe(searchSelect, {
attributes: true,
attributeFilter: ['hidden']
});
Services.obs.addObserver(this, 'browser-search-engine-modified', false);
contextMenu.addEventListener('popupshowing', this, false);
if (typeof addDestructor == 'function' && // userChromeJS/uc
addDestructor != ('addDestructor' in window && window.addDestructor)) {
addDestructor(function(reason) {
this.destroy(reason);
}, this);
}
},
destroy: function(reason) {
if (!this.initialized)
return;
this.initialized = false;
if (this.observeStatus)
this.observeStatus.disconnect();
Services.obs.removeObserver(this, 'browser-search-engine-modified', false);
let contextMenu = this.contextMenu;
if (!contextMenu)
return;
contextMenu.removeEventListener('popupshowing', this, false);
if (this.searchMenu)
contextMenu.removeChild(this.searchMenu);
if (this.searchByImageMenu)
contextMenu.removeChild(this.searchByImageMenu);
if (this.searchSelect)
this.searchSelect.style.removeProperty('display');
this.removeSheet(window, this.makeCSS());
},
update: function() {
this.searchMenu.textContent = '';
this.createSearchMenu();
this.updateTimeoutID = null;
},
get isSeaMonkey() {
delete this.isSeaMonkey;
return this.isSeaMonkey = Services.appinfo.name == 'SeaMonkey';
},
observe: function(subject, topic, data) {
switch (topic) {
case 'browser-search-engine-modified':
if (typeof this.updateTimeoutID == 'number') {
window.clearTimeout(this.updateTimeoutID);
this.updateTimeoutID = null;
}
this.updateTimeoutID = window.setTimeout(function() {
this.update();
}.bind(this), 1000);
break;
}
},
handleEvent: function(e) {
switch (e.type) {
case 'popupshowing':
this.popupshowingEvent(e);
break;
}
},
popupshowingEvent: function(e) {
let trgId = e.target.id;
if (trgId) {
if (trgId == 'contentAreaContextMenu') {
this.contextMenuPopup(e);
if (this.searchByImageMenu)
this.searchByImageMenuPopup(e);
}
else if (trgId == this.nodeIds.searchMenuPopup)
this.searchMenuPopup(e);
}
},
makeCSS: function() {
return '@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");\n' +
'#' + this.nodeIds.searchMenuPopup + ' > hbox > spacer[campactMenu="true"] {\n' +
' width: 26px !important;\n' +
'}\n' +
'@media (min-resolution: 2dppx) {\n' +
' #' + this.nodeIds.searchMenuPopup + ' > hbox > spacer[campactMenu="true"] {\n' +
' width: 52px !important;\n' +
' }\n' +
'}\n' +
'#' + this.nodeIds.searchMenuPopup + ' > hbox > .menuitem-iconic[campactMenu="true"] {\n' +
' width: 36px !important;\n' +
' height: 26px !important;\n' +
' -moz-box-pack: center !important;\n' +
'}\n' +
'@media (min-resolution: 2dppx) {\n' +
' #' + this.nodeIds.searchMenuPopup + ' > hbox > .menuitem-iconic[campactMenu="true"] {\n' +
' width: 72px !important;\n' +
' height: 52px !important;\n' +
' }\n' +
'}\n' +
'#' + this.nodeIds.searchMenuPopup + ' > hbox > .menuitem-iconic > image {\n' +
' width: 16px !important;\n' +
' height: 16px !important;\n' +
'}\n' +
'@media (min-resolution: 2dppx) {\n' +
' #' + this.nodeIds.searchMenuPopup + ' > hbox > .menuitem-iconic > image {\n' +
' width: 32px !important;\n' +
' height: 32px !important;\n' +
' }\n' +
'}\n' +
'#' + this.nodeIds.searchMenuPopup + ' > hbox > .menuitem-iconic > *:not(image) {\n' +
' display: none !important;\n' +
'}';
},
SHEET_TYPE: {
'agent': 'AGENT_SHEET',
'user': 'USER_SHEET',
'author': 'AUTHOR_SHEET'
},
isTypeValid: function(type) {
return type in SHEET_TYPE;
},
makeCSSURI: function(url) {
if (!/css$/.test(url))
url = 'data:text/css,' + encodeURIComponent(url);
return this.ios.newURI(url, null, null);
},
get ios() {
delete this.ios;
return this.ios = Services.io;
},
getDOMWindowUtils: function(window) {
return window.QueryInterface(Ci.nsIInterfaceRequestor).
getInterface(Ci.nsIDOMWindowUtils);
},
loadSheet: function(window, url, type) {
if (!(type && type in SHEET_TYPE))
type = 'author';
type = this.SHEET_TYPE[type];
if (!(url instanceof Ci.nsIURI))
url = this.makeCSSURI(url);
let winUtils = this.getDOMWindowUtils(window);
try {
winUtils.loadSheet(url, winUtils[type]);
}
catch (e) {};
},
removeSheet: function(window, url, type) {
if (!(type && type in SHEET_TYPE))
type = 'author';
type = this.SHEET_TYPE[type];
if (!(url instanceof Ci.nsIURI))
url = this.makeCSSURI(url);
let winUtils = this.getDOMWindowUtils(window);
try {
winUtils.removeSheet(url, winUtils[type]);
}
catch (e) {};
},
getSelection: function() {
if ('gBrowser' in window &&
gBrowser.selectedTab.linkedBrowser.isRemoteBrowser) {
return gContextMenuContentData.selectionInfo.text;
}
else if ('BrowserUtils' in window) {
return BrowserUtils.getSelectionDetails(window).text;
}
var fe = document.commandDispatcher.focusedElement;
if(fe) try {
return fe.value.substring(fe.selectionStart, fe.selectionEnd);
}
catch(e) {}
return document.commandDispatcher.focusedWindow.getSelection();
},
searchCommandHandler: function(event, trg) {
let inBg = options.loadInBackground || false;
if (event.type == 'click' && event.button && event.button == 1) {
inBg = !inBg;
}
let searchBySite = '';
let _gBrowser = gBrowser || getBrowser();
if (event.target.hasAttribute('searchBySite')) {
searchBySite = ' site:' + _gBrowser.currentURI.host;
}
else if (event.target.hasAttribute('searchInCache')) {
searchBySite = content.location.href;
}
let selectedText = this.getSelection();
if (event.target.engine.imageLink) {
_gBrowser.loadOneTab(event.target.engine.imageLink + selectedText, {
relatedToCurrent: true,
inBackground: inBg
});
}
else if (event.target.engine.cacheLink) {
_gBrowser.loadOneTab(event.target.engine.cacheLink + searchBySite, {
relatedToCurrent: true,
inBackground: inBg
});
}
else {
let submission = event.target.engine.getSubmission(selectedText + searchBySite, null);
_gBrowser.loadOneTab(submission.uri.spec, {
relatedToCurrent: true,
postData: submission.postData,
inBackground: inBg
});
}
if (trg == 'menu') {
setTimeout(function() {
document.getElementById('contentAreaContextMenu').hidePopup();
}, 0);
}
},
contextMenuPopup: function(e) {
let searchService = this.searchService;
let contextMenu = this.contextMenu;
let menu = this.searchMenu;
let selectedText = this.getSelection();
if (!selectedText)
return;
let ellipsis = '\u2026';
try {
ellipsis = prefsServices.getComplexValue('intl.ellipsis', Ci.nsIPrefLocalizedString).data;
}
catch (ex) {}
if (selectedText.length > 15)
selectedText = selectedText.substr(0, 15) + ellipsis;
let currentBrowserEngine = this.isSeaMonkey ? 'currentEngine' : 'defaultEngine';
let engineName = this.param.isPinnedEngine ? this.param.pinnedEngineName : searchService[currentBrowserEngine].name;
let menuLabel;
let searchFormattedString = [
'contextMenuSearch',
'contextMenuSearchText',
'searchSelected' // SeaMonkey
];
let getMenuLabel = function(str) {
let bundle;
try {
if (this.isSeaMonkey) {
bundle = document.getElementById('contentAreaCommandsBundle');
}
else {
bundle = gNavigatorBundle;
}
return bundle.getFormattedString(str, [engineName, selectedText]);
}
catch (ex) {
return false;
}
};
for (let i = 0, len = searchFormattedString.length; i < len; i++) {
menuLabel = getMenuLabel.call(this, searchFormattedString[i]);
if (menuLabel)
break;
else if (!menuLabel && i == searchFormattedString.length - 1)
menuLabel = engineName;
}
menu.label = menuLabel;
},
searchMenuPopup: function(e) {
let popup = e.target;
let items;
if (!popup.items) {
let itemsObj = popup.getElementsByTagName('menuitem');
popup.items = [];
Array.slice(itemsObj).forEach(function(elem) {
if (typeof elem == 'object' &&
elem.nodeName == 'menuitem' &&
elem.hasAttribute('searchBySite') ||
elem.hasAttribute('searchInCache'))
popup.items.push(elem);
});
items = popup.items;
}
else {
items = popup.items;
}
let menus;
if (!popup.menus) {
let itemsObj = popup.getElementsByTagName('menu');
popup.menus = [];
Array.slice(itemsObj).forEach(function(elem) {
if (typeof elem == 'object' &&
elem.nodeName == 'menu' &&
elem.hasAttribute('searchBySite') ||
elem.hasAttribute('searchInCache'))
popup.menus.push(elem);
});
menus = popup.menus;
}
else {
menus = popup.menus;
}
let siteSearchDomain;
let _gBrowser = gBrowser || getBrowser();
let isDomain = function() {
try {
siteSearchDomain = _gBrowser.currentURI.host;
}
catch (ex) {
return false;
}
return true;
};
if (isDomain()) {
items.forEach(function(elem) {
elem.removeAttribute('disabled');
});
menus.forEach(function(elem) {
if (elem.hasAttribute('searchBySite'))
elem.setAttribute('tooltiptext', siteSearchDomain);
else if (elem.hasAttribute('searchInCache'))
elem.setAttribute('tooltiptext', content.document.title);
elem.removeAttribute('disabled');
});
}
else {
items.forEach(function(elem) {
elem.setAttribute('disabled', 'true');
});
menus.forEach(function(elem) {
if (elem.hasAttribute('searchBySite') ||
elem.hasAttribute('searchInCache'))
elem.removeAttribute('tooltiptext');
elem.setAttribute('disabled', 'true');
});
}
},
createSearchMenu: function() {
let searchService = this.searchService;
let contextMenu = this.contextMenu;
let menu = this.searchMenu;
let engines = searchService.getVisibleEngines({});
menu.setAttribute('id', this.nodeIds.searchMenu);
menu.setAttribute('class', 'menu-iconic');
this.param.isPinnedEngine = false;
this.param.pinnedEngineName = '';
let pinnedEngineName = options.pinnedEngineName;
if (pinnedEngineName != '') {
for (let i in engines) {
if (engines[i].name != pinnedEngineName)
continue;
menu.setAttribute('label', engines[i].name);
menu.setAttribute('image', engines[i].iconURI.spec);
menu.engine = engines[i];
this.param.isPinnedEngine = true;
this.param.pinnedEngineName = pinnedEngineName;
break;
}
}
let currentBrowserEngine = this.isSeaMonkey ? 'currentEngine' : 'defaultEngine';
if (!this.param.isPinnedEngine) {
menu.setAttribute('label', searchService[currentBrowserEngine].name);
menu.setAttribute('image', (searchService[currentBrowserEngine].iconURI ? searchService[currentBrowserEngine].iconURI.spec : options.defaultIcon));
menu.engine = searchService[currentBrowserEngine];
}
menu.gObj = this;
menu.setAttribute('onclick', 'if (event.target == this && event.target.engine) this.gObj.searchCommandHandler(event, "menu");');
menu.popup = menu.appendChild(document.createElementNS(XULNS, 'menupopup'));
let popup = this.searchMenu.popup;
popup.setAttribute('id', this.nodeIds.searchMenuPopup);
let counterMaxLength = options.campactMenuLengthPerLine;
if (typeof counterMaxLength != 'number' ||
3 > counterMaxLength || counterMaxLength > 10)
counterMaxLength = 5;
let counter = 0;
let hBox;
let itemCreateCampact = function(engine, last) {
if (counter == 0) {
hBox = document.createElementNS(XULNS, 'hbox');
let item = document.createElementNS(XULNS, 'spacer');
item.setAttribute('campactMenu', 'true');
hBox.appendChild(item);
}
counter++;
let item = document.createElementNS(XULNS, 'menuitem');
item.engine = engine;
item.setAttribute('class', 'menuitem-iconic');
item.setAttribute('tooltiptext', engine.name);
let image = document.createElementNS(XULNS, 'image');
image.setAttribute('src', (engine.iconURI ? engine.iconURI.spec : options.defaultIcon));
item.appendChild(image);
item.setAttribute('campactMenu', 'true');
hBox.appendChild(item);
if (counter == counterMaxLength || last) {
popup.appendChild(hBox);
counter = 0;
}
};
let separator = {};
let itemCreate = function(engine, reason) {
let item = document.createElementNS(XULNS, 'menuitem');
item.setAttribute('class', 'menuitem-iconic');
item.engine = engine;
if (reason && !separator[reason]) {
if (!separator['menuseparator']) {
let sep = separator['menuseparator'] = document.createElementNS(XULNS, 'menuseparator');
popup.appendChild(sep);
}
let subMenu = separator[reason] = document.createElementNS(XULNS, 'menu');
subMenu.setAttribute('class', 'menu-iconic');
subMenu.setAttribute('label', _localize(reason));
subMenu.setAttribute(reason, 'true');
subMenu.popup = subMenu.appendChild(document.createElementNS(XULNS, 'menupopup'));
popup.appendChild(subMenu);
}
if (reason == 'searchBySite') {
item.setAttribute('label', engine.name);
if (options.searchBySite.iconsOn) {
item.setAttribute('src', (engine.iconURI ? engine.iconURI.spec : options.defaultIcon));
}
item.setAttribute(reason, 'true');
}
else if (reason == 'searchImageByText' ||
reason == 'searchInCache') {
item.setAttribute('label', engine.name);
item.setAttribute('src', (engine.iconURI_spec != '' ? engine.iconURI_spec : options.defaultIcon));
item.setAttribute(reason, 'true');
}
else {
item.setAttribute('label', engine.name);
item.setAttribute('src', (engine.iconURI ? engine.iconURI.spec : options.defaultIcon));
}
if (reason) {
let subMenu = separator[reason];
subMenu.popup.appendChild(item);
}
else
popup.appendChild(item);
};
for (let i in engines) {
if (options.hideDefaultEngineInPopupSubMenu &&
this.param.isPinnedEngine &&
engines[i].name == pinnedEngineName ||
options.hideDefaultEngineInPopupSubMenu && !this.param.isPinnedEngine &&
engines[i].name == searchService[currentBrowserEngine].name) {
continue;
}
if (options.campactMenu)
itemCreateCampact(engines[i], i == engines.length - 1);
else
itemCreate(engines[i]);
}
let itemCreateSearchBySite = function() {
let namesList = [];
if (options.searchBySite.useDefaultNamesList) {
let defaultNamesList = [
['Google', ['Google']],
['Yandex', ['Yandex', 'Яндекс']],
['Yahoo', ['Yahoo']],
['Bing', ['Bing']],
['DuckDuckGo', ['DuckDuckGo']]
];
namesList = namesList.concat(defaultNamesList);
}
if (options.searchBySite.addCustomNames &&
Array.isArray(options.searchBySite.customNamesList)) {
namesList = namesList.concat(options.searchBySite.customNamesList);
}
namesList.forEach(function(elem) {
for (let i in engines) {
if (!(elem[1].some(function(listName) {
return listName == engines[i].name
})
)
)
continue;
itemCreate(engines[i], 'searchBySite');
break;
}
});
};
if (options.searchBySite.enable) {
itemCreateSearchBySite();
}
let itemCreateSearchImageByText = function() {
let namesList = [];
if (options.searchImageByText.useDefaultNamesList) {
let defaultNamesList = [
[
'Google',
'https://www.google.ru/search?tbm=isch&q=',
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAB41BMVEUAAAB7wUJ6wUJ6wUJ6wUL1nxn1oBn1oBn1nxl6wUJ6wUJ6wUJrvUT1mxr1nxn1nxlfu0Z8wkLznhv0mhp6wUJWuUdaukfLrSv4rhX1nxl5wUJyv0TQrCnyjhz1kyH2pRj1oBl7wkNbukfzjR3zkxv1liHuMDXuGTf2rxN7wUJeu0apuDfzjhz1nBvuNizwZi/3sxP2pBh9wkGvuTbvoRvuJy/xcC33qRhbl7F2uGOMwT94havnRTzuMjjwTTNRislRjcZ5uVpnvU0rk9Fhjr3aTkPuLTVQkM1PgsKHxD9/w0JfnKsAouPtHCTvQDRRkM1Qjstfn6p2jLHvOzDvQDVQkM1Rkc1RjstOh8Z/h6buLirtGyTvOzHvQDXwQDVPkcftPzdRkc1QkMxRkM0xlNLuNSzwQDXvQDVQkM1Rkc1QkM1Rkc3vQDTvQDXvQDXwQDV7wUL2oBr1nxn2oBl6wUJ7wkN9wkF9wkJ6wUP0lRv3qhf1oBn4rhX3qhb1nhp8wkL0nBruGjLuIzf3qRZ/w0JcukbuLCntIzl+wkFkvEbtGyVPhMRyv0QAmNfuLCruMDVRkc1ViccKltTvQDVRhcUAmdfvQDRRks5RiskcltTwQzdQkM07k9DtGyPvQzdQkMzvPzSgiRCBAAAAcHRSTlMAM9bsfmzq30TnaEIQF1b390JR9nP98873iO4nsPyvO3Vly1783sVB8T/5j+2SiIXyKITTeqTRY0ThWl/g9jAn2cBPbNfJFWXVrOjTge5EeeC0qPBsYPfUstjGvOP+dnp0+pmBR1GEikvl8paC8etfYXu9TgAAAAlwSFlzAAAASAAAAEgARslrPgAAAQJJREFUGNM1j8VWQzEARAco8NDiLsXdXQvF3d3dIQ2vOBR3CQSCFPtUUg7Mbu5i7hnY2Npp8Bd7B0cFToQQZxdXwE1xN9JVLVRiUsmah6eXNzVKQOFD1PUNXz//za0ASul2IKBRg4IREroThnAt1cmlCFMkoqJ3Y2LjEL+nSJBgTkxK3k9JPThMSz/KsMoyj0+ysoGc07PcvF97fsH5RSFQVHxZUmrt+quycvO1oeKmsur2rlqCGlaLuvqG+4dGNPFmCVpYK9D2+NQOdIhOoKubPff0vrz29Q8MvvGhYTAZC3sfGf34FFwIgTHLFxufmASmpme+OeeYnZtf+L+/uLS88gMT2kW5QAjbFwAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxMi0wNC0wNlQxMDoxMzowNSswNDowMIQ8zwwAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTItMDQtMDZUMTA6MTM6MDUrMDQ6MDD1YXewAAAAAElFTkSuQmCC'
],
[
'Yandex',
'http://images.yandex.ru/yandsearch?text=',
'data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAABILAAASCwAAAAAAAAAAAAAAkdx+AJHc5wCR3P8Akdz/AJHc/wCR3P8Akdz/AJHc/wCR3P8Akdz/AJHc/wCR3JYArvIAAK7yAACu8gAArvIAA5Pd5wCr8P8ArvL/AK7y/wCu8v8ArvL/AK7y/wCu8v8ArvL/AK7y/wCu8v8CnOT/A5PdewCu8gAArvIAAK7yAAeV3/8AsPP/ALDz/wCw8/8AsPP/ALDz/wCw8/8AsPP/ALDz/wCw8/8AsPP/Aa3x/weW4P8Hld8PALDzAACw8wAMmOH///////////////////////////////////////////////////////////8GpOr/DJjhigCy9AAAsvQAEZzk//////8VpOn/Fbr1/xW69f+c4fv/ddb5/xW69f8VuvX/Fbr1/x2o6v//////AbT0/w+f5v8RnOQ8ALX1ABeg5v//////F6bp/xe48/8XuPP/hdf3/4XX9/80wPT/F7jz/xe48/8dqOr//////wC49v8IsPD/F6DmpQC49gAepOn//////wOe6P8DrvD/A67w/1/G8/9fxvP/TsLy/wSu8P8DrvD/CaHo//////8Au/j/ALv4/xep7f8epOlmJKjs//////9GvfD/ft78/37e/P///////////+f5/v+A3/z/ft78/03A8P//////AL75/wC++f8Huvf/JKjszyut7///////OLvw/2Pa/P9j2vz///////////+R5f3/Y9r8/2Pa/P8/vvD//////wDC+v8Awvr/CL74/yut788xsfL//////ya48P9F1fz/RdX8///////N8/7/RdX8/0XV/P9F1fz/Lrnw//////8Axfv/AMX7/yW29P8xsfJmOLX1//////8XtfD/KNH8/yjR/P/8/v//UNr9/yjR/P8o0fz/KNH8/x+48P//////AMn8/xTC+v84tfWlAMn8AD659///////ALHw/wCx8P8AsfD/Gbjw/wCx8P8AsfD/ALHw/wCx8P8JtPD//////wPM/v83u/j/Prn3PADN/gBDvfr///////////////////////////////////////////////////////////8lxvz/Q736igTR/gAE0f4ASMD8/xLV//8S1f//EtX//xLV//8S1f//EtX//xLV//8S1f//EtX//xLV//8Y0///R8D8/0jA/A8S1f8AEtX/AEzD/uRa2f//XNz//1zc//9c3P//XNz//1zc//9c3P//XNz//1zc//9c3P//Ucv+/0zD/nhc3P8AXNz/AFzc/wBPxf97T8X/5E/F//9Pxf//T8X//0/F//9Pxf//T8X//0/F//9Pxf//T8X//0/F/5Zc3P8AXNz/AFzc/wBc3P8AAA8AAAAHAAAAAwAAAAMAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAMAAAADAAAABwAAAA8AAA=='
]
];
namesList = namesList.concat(defaultNamesList);
}
if (options.searchImageByText.addCustomNames &&
Array.isArray(options.searchImageByText.customNamesList)) {
namesList = namesList.concat(options.searchImageByText.customNamesList);
}
namesList.forEach(function(elem) {
let engine = {};
engine.name = elem[0];
engine.imageLink = elem[1];
engine.iconURI_spec = elem[2]; //
itemCreate(engine, 'searchImageByText');
});
};
if (options.searchImageByText.enable) {
itemCreateSearchImageByText();
}
let itemCreateSearchInCache = function() {
let namesList = [];
if (options.searchInCache.useDefaultNamesList) {
let defaultNamesList = [
[
'Google',
'https://www.google.com/search?q=cache:',
'data:image/x-icon;base64,AAABAAIAEBAAAAAAAAB9AQAAJgAAACAgAAAAAAAA8gIAAKMBAACJUE5HDQoaCgAAAA1JSERSAAAAEAAAABAIBgAAAB/z/2EAAAFESURBVDjLpZNJSwNBEIXnt4lE4kHxovgT9BDwJHqPy0HEEOJBiAuCRg+KUdC4QS4KrpC4gCBGE3NQ48JsnZ6eZ3UOM6gjaePhQU93v6+qq2q0pqgeJj2S8EdJT1hr0OxBtKCD5iEd8QxDYpvhvOBAuMDKURX9C9aPu4GA1GEVkzvMg10UBfYveWAWgYAP00V01fa+R9M2bA51wJvhIn3qR+ybt3D3JNQBE5sMjCIOLFpoHzOwdsLRO22qA6R6kiZiWwxUvy/PUQZIhYZ1vFM9cvcOOsYNdcBgysISdSJBnZjJMlR0Fw8vAp0xoz5gao/h+NZBy4i/10XGwrPA+hmvDyhVRG2Avu/LwcrkFADZa16L1h330w1RNgc3DiJzCpPYRm1bpveXX11clQR28xwblHpk1vq1iP/5mcoS0CoXDZiL0vsJ+dzfl+3T/VYAAAAASUVORK5CYIKJUE5HDQoaCgAAAA1JSERSAAAAIAAAACAIBgAAAHN6evQAAAK5SURBVFjDxVfrSxRRFJ9/Jta/oyWjF5XQm6D6EkHRgygIIgjUTcueVgqVWSRRkppEUQYWWB8ye1iGWilWlo/Ude489s7M6Zw7D9dlt53dmd29cFiWvXvO77x+51xpaaUsoSxBaUWZQ4ECy5xji2xKZDyCMlMEw6lCNiOSgwZKJK1SkcKeSealfP64t0mBjl4Ow39MkDUL0p2RSROOtqhZdeUEYM1pBl39XCg/fEeFtWcY7G9W4csvUxjlBkCsQ4Nt9QyWVfvT6RsAKXw3aoDGATZeYIt+W1kjw7cJG0RctWDTRebbKd8A6h5pwsDb70ba3w/eUr3wt/cmwgfw6Yft4TNMQaY7o1P2ncm4FT4ANQH/jQBJ2xv7kqIXEADDql8eS3+n8bku7oxNm+EDIM/dU92upb3T/NJGeaNbDx/AsbsLRUY5Xn92caWXY5d8RV6gWllxSg4fAEnTC90DQW13BLlgXR2D3dcUeDVkwOthA1bXspxILWcm3HdThcfvufB26LcJpkOEAz9NKI/lzqpSEC7feol5EWnpSeSlIxCALUkApmULdjUqxQVAQnl3D/X/yQda4QBEq2TYc12By091MQ17Bg3R88nHKlQbVmHvj89awNBLYrwT9zXY2aBAxTkGFdiSxP/Jp6FLDw+AS7GfsdJTJ2EqSO5khD43nGfBARy/ZxOQgZHe7GPM1jzUvChUtmnBAXQPcKGMJp3fdFGq6NByEhiAO4b/YptFfQJwNyQ/bZkVQGcf90Ja25ndIyrKBOa/f8wIpwi3X1G8UcxNu7ozUS7tiH0jBswwS3RIaF1w6LYKU/ML2+8sGnjygQswtKrVIy/Qd9qQP6LnO64q4fPAKpxyZIymHo1jWk6p1ag2BsdNwQMHcC+M5kHFJX+YlPxpVlbCx2mZ5DzPI04k4kUwHHdskU3pH76iftG8yWlkAAAAAElFTkSuQmCC'
],
[
'Archive.org',
'http://web.archive.org/web/*/',
'data:image/x-icon;base64,AAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAABILAAASCwAAAAAAAAAAAAABAQH/AQEB/wEBAf8BAQH/AgIC/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AQEB/wAAAP8BAQH/AQEB/wAAAP8CAgL/AgIC/wEBAf8CAgL/AQEB/wQEBP8EBAT/BAQE/wQEBP8EBAT/BAQE/wQEBP8EBAT/BQUF/wUFBf8EBAT/BAQE/wQEBP8EBAT/BAQE/wQEBP8EBAT/BAQE/wUFBf8EBAT/BAQE/wQEBP8FBQX/BQUF/wEBAf8AAAD/AQEB/wICAv8BAQH/AAAA/wAAAP8CAgL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wEBAf8AAAD/AgIC/wEBAf8BAQH/BgYG/wAAAP+ysrL/4uLi/9/f3//g4OD/4ODg/9/f3//g4OD/4eHh/+Hh4f/h4eH/4eHh/+Hh4f/h4eH/4eHh/+Hh4f/h4eH/4ODg/+Hh4f/h4eH/4eHh/+Hh4f/h4eH/3d3d/97e3v8qKir/AQEB/wMDA/8BAQH/AgIC/wAAAP8EBAT/AAAA/7CwsP/Hx8f/w8PD/8fHx//FxcX/xcXF/8XFxf/Gxsb/xsbG/8bGxv/Gxsb/xsbG/8bGxv/Gxsb/xsbG/8bGxv/FxcX/xcXF/8bGxv/FxcX/xcXF/8XFxf/Dw8P/1NTU/ywsLP8AAAD/BAQE/wEBAf8AAAD/AAAA/wEBAf8BAQH/AAAA/0pKSv9NTU3/TExM/0xMTP9LS0v/TExM/01NTf9NTU3/TU1N/01NTf9NTU3/TU1N/01NTf9NTU3/TU1N/0xMTP9NTU3/TU1N/0xMTP9MTEz/SkpK/01NTf8SEhL/AAAA/wICAv8CAgL/BAQE/wEBAf8BAQH/AQEB/wAAAP8NDQ3//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////3l5ef8BAQH/BgYG/wAAAP8CAgL/AQEB/wEBAf8DAwP/AAAA/wMDA/8oKCj/LS0t/zExMf8tLS3/Kioq/ysrK/8sLCz/Ly8v/zAwMP8qKir/LCws/yoqKv8oKCj/LCws/zAwMP8rKyv/KSkp/ykpKf8qKir/MDAw/y8vL/8rKyv/ERER/wAAAP8BAQH/AgIC/wICAv8BAQH/AAAA/wEBAf8CAgL/AAAA/wUFBf+rq6v/7Ozs/3V1df8AAAD/AAAA/zs7O//j4+P/4uLi/zo6Ov8AAAD/AAAA/wQEBP+rq6v/7Ozs/4WFhf8AAAD/AAAA/zw8PP/k5OT/4+Pj/zk5Of8AAAD/BQUF/wAAAP8BAQH/AQEB/wAAAP8BAQH/AAAA/wMDA/8AAAD/ISEh/+Hh4f//////uLi4/wkJCf8CAgL/bW1t////////////bW1t/wICAv8CAgL/ISEh/+Hh4f//////wMDA/woKCv8CAgL/bW1t////////////bW1t/wEBAf8HBwf/AgIC/wEBAf8AAAD/AQEB/wEBAf8AAAD/AwMD/wAAAP8cHBz/2NjY//////+4uLj/BwcH/wAAAP9lZWX//f39//////9nZ2f/AAAA/wAAAP8ZGRn/2dnZ//////+3t7f/CAgI/wAAAP9oaGj//Pz8//7+/v9mZmb/AAAA/wYGBv8AAAD/AgIC/wEBAf8BAQH/AwMD/wICAv8BAQH/AAAA/xsbG//Y2Nj//////7i4uP8GBgb/AAAA/2pqav///////v7+/2VlZf8AAAD/AAAA/xsbG//Y2Nj//////7m5uf8HBwf/AAAA/2VlZf///////////2VlZf8AAAD/BQUF/wEBAf8DAwP/AQEB/wAAAP8AAAD/AAAA/wQEBP8AAAD/HR0d/9ra2v//////urq6/wgICP8AAAD/Z2dn////////////aGho/wAAAP8AAAD/HR0d/9vb2///////urq6/wcHB/8AAAD/aGho////////////aWlp/wAAAP8FBQX/AAAA/wEBAf8BAQH/AAAA/wAAAP8AAAD/AgIC/wAAAP8cHBz/29vb//////+4uLj/BgYG/wAAAP9mZmb///////////9nZ2f/AAAA/wAAAP8aGhr/2tra//////+4uLj/BwcH/wAAAP9lZWX///////////9mZmb/AAAA/wUFBf8AAAD/AAAA/wAAAP8AAAD/AAAA/wEBAf8DAwP/AAAA/xwcHP/a2tr//////7i4uP8GBgb/AAAA/2ZmZv///////////2dnZ/8AAAD/AAAA/xsbG//b29v//////7m5uf8JCQn/AAAA/2hoaP///////////2dnZ/8AAAD/BQUF/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wMDA/8AAAD/Ghoa/9nZ2f//////ubm5/wYGBv8AAAD/ZmZm////////////ZmZm/wAAAP8AAAD/Gxsb/9ra2v//////uLi4/wcHB/8AAAD/ZmZm//7+/v/+/v7/ZmZm/wAAAP8EBAT/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AwMD/wAAAP8aGhr/2NjY//////+6urr/BgYG/wAAAP9mZmb///////////9mZmb/AAAA/wAAAP8aGhr/2NjY//////+5ubn/BwcH/wAAAP9nZ2f//v7+//////9nZ2f/AAAA/wQEBP8AAAD/AAAA/wAAAP8AAAD/AAAA/wEBAf8DAwP/AAAA/xwcHP/a2tr//////7q6uv8HBwf/AAAA/2ZmZv///////////2ZmZv8AAAD/AAAA/xoaGv/Y2Nj//////7i4uP8GBgb/AAAA/2ZmZv/9/f3//v7+/2ZmZv8AAAD/BAQE/wAAAP8AAAD/AAAA/wAAAP8AAAD/AQEB/wMDA/8AAAD/HBwc/9vb2///////urq6/wgICP8AAAD/ZmZm////////////Z2dn/wAAAP8AAAD/Gxsb/9nZ2f//////urq6/wcHB/8AAAD/Z2dn////////////Z2dn/wAAAP8EBAT/AAAA/wAAAP8AAAD/AAAA/wAAAP8CAgL/BAQE/wAAAP8dHR3/29vb//////+8vLz/BwcH/wAAAP9nZ2f///////////9mZmb/AAAA/wAAAP8bGxv/29vb//////+6urr/BgYG/wAAAP9nZ2f///////////9mZmb/AAAA/wYGBv8AAAD/AQEB/wEBAf8AAAD/AQEB/wMDA/8DAwP/AAAA/x0dHf/a2tr/+fn5/7CwsP8GBgb/AAAA/2pqav/5+fn/+fn5/2tra/8AAAD/AAAA/xwcHP/Z2dn/+fn5/7m5uf8JCQn/AAAA/2xsbP/5+fn/+fn5/2tra/8AAAD/BwcH/wEBAf8CAgL/AQEB/wEBAf8CAgL/AwMD/wMDA/8AAAD/FxcX/9zc3P//////l5eX/wcHB/8DAwP/YGBg////////////XFxc/wQEBP8FBQX/GBgY/97e3v//////s7Oz/wkJCf8EBAT/XV1d////////////W1tb/wEBAf8EBAT/AQEB/wMDA/8DAwP/AAAA/wEBAf8DAwP/AQEB/wEBAf8AAAD/LS0t/1RUVP8hISH/AAAA/wAAAP8BAQH/TExM/0tLS/8AAAD/AAAA/wAAAP8AAAD/LS0t/1NTU/8bGxv/AAAA/wAAAP8BAQH/TExM/0tLS/8BAQH/AAAA/wEBAf8AAAD/AQEB/wAAAP8CAgL/AQEB/wEBAf8AAAD/BwcH/8XFxf++vr7/tbW1/729vf/Kysr/y8vL/8fHx/+2trb/tra2/8bGxv/Ly8v/yMjI/8rKyv+7u7v/tbW1/8DAwP/Ly8v/y8vL/8XFxf+1tbX/srKy/8nJyf9PT0//AAAA/wYGBv8CAgL/AAAA/wEBAf8AAAD/AQEB/wEBAf8KCgr//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////3Jycv8AAAD/BwcH/wEBAf8DAwP/AQEB/wAAAP8BAQH/AAAA/wgICP95eXn/fX19/319ff9/f3//gICA/4CAgP+BgYH/gICA/39/f/+BgYH/gYGB/4CAgP+AgID/gICA/4GBgf+AgID/gICA/4GBgf9/f3//fX19/3l5ef9+fn7/MjIy/wAAAP8DAwP/AQEB/wEBAf8AAAD/AQEB/wICAv8AAAD/BgYG/4+Pj/+Tk5P/j4+P/4uLi/+Hh4f/hISE/4ODg/+CgoL/gYGB/4KCgv+CgoL/goKC/4KCgv+BgYH/f39//39/f/+EhIT/hoaG/4eHh/+MjIz/kpKS/5WVlf8uLi7/AAAA/wMDA/8AAAD/AAAA/wEBAf8AAAD/AQEB/wQEBP8EBAT/SUlJ/1RUVP+BgYH/wsLC/////////////////////////////////////////////////////////////////////////////f39/6+vr/9iYmL/S0tL/xkZGf8AAAD/AwMD/wEBAf8DAwP/AQEB/wEBAf8BAQH/AAAA/wYGBv8AAAD/AAAA/wAAAP8AAAD/AQEB/wgICP9RUVH/paWl/8rKyv/a2tr/+fn5///////5+fn/2tra/8vLy/+ampr/T09P/xQUFP8DAwP/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AQEB/wEBAf8CAgL/AQEB/wICAv8BAQH/AAAA/wQEBP8EBAT/AwMD/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xsbG/9nZ2f/i4uL/2dnZ/8ZGRn/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AgIC/wQEBP8CAgL/AgIC/wAAAP8DAwP/AgIC/wEBAf8AAAD/AQEB/wEBAf8AAAD/AgIC/wICAv8BAQH/AgIC/wMDA/8DAwP/AgIC/wQEBP8HBwf/AAAA/wAAAP8AAAD/AAAA/wAAAP8HBwf/BQUF/wMDA/8BAQH/AQEB/wMDA/8CAgL/AQEB/wEBAf8CAgL/AQEB/wAAAP8CAgL/AgIC/wICAv8AAAD/AAAA/wMDA/8CAgL/AwMD/wMDA/8BAQH/AQEB/wUFBf8DAwP/AgIC/wAAAP8EBAT/BwcH/wcHB/8HBwf/BAQE/wICAv8BAQH/AgIC/wEBAf8BAQH/AgIC/wICAv8BAQH/AAAA/wEBAf8AAAD/AgIC/wICAv8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA='
]
];
namesList = namesList.concat(defaultNamesList);
}
if (options.searchInCache.addCustomNames &&
Array.isArray(options.searchInCache.customNamesList)) {
namesList = namesList.concat(options.searchInCache.customNamesList);
}
namesList.forEach(function(elem) {
let engine = {};
engine.name = elem[0];
engine.cacheLink = elem[1];
engine.iconURI_spec = elem[2]; // !!! это не engine.iconURI.spec
itemCreate(engine, 'searchInCache');
});
};
if (options.searchInCache.enable) {
itemCreateSearchInCache();
}
popup.gObj = this;
popup.setAttribute('oncommand', 'if (!event.target.engine || event.target.nodeName == "menu") return; this.gObj.searchCommandHandler(event);');
popup.setAttribute('onclick', 'checkForMiddleClick(this, event);');
},
searchByImageCommandHandler: function(event) {
let inBg = options.loadInBackground || false;
if (event.type == 'click' && event.button && event.button == 1) {
inBg = !inBg;
}
let searchByImageMenu = this.searchByImageMenu;
let link = event.target.link;
let imageLink = searchByImageMenu.imageSrc;
if (imageLink.indexOf('data:') == 0) {
this.searchByImageByData(imageLink, inBg);
return;
}
else if (imageLink.indexOf('file:') == 0) {
this.searchByImageByFile(imageLink, inBg);
return;
}
else {
imageLink = encodeURIComponent(imageLink)
}
let _gBrowser = gBrowser || getBrowser();
_gBrowser.loadOneTab(link + imageLink, {
relatedToCurrent: true,
inBackground: inBg
});
},
// searchByImageByData() and searchByImageByFile() based on
// Google Image Search 0.5 by Nishan Naseer
// https://addons.mozilla.org/ru/firefox/addon/google-similar-images
searchByImageByData: function(src, inBg) {
let _gBrowser = gBrowser || getBrowser();
//let tab = gBrowser.addTab(this.searchByImageMenu.popup.googleURL);
let tab = _gBrowser.loadOneTab(this.searchByImageMenu.popup.googleURL, {
relatedToCurrent: true
});
let newTabBrowser = _gBrowser.getBrowserForTab(tab);
newTabBrowser.addEventListener('load', function byData(e) {
newTabBrowser.removeEventListener(e.type, byData, true);
if (src) {
try {
let image_url;
let sub;
let form = newTabBrowser.contentDocument.getElementById('qbf');
let inputs = form.getElementsByTagName('input');
for (let k = 0; k < inputs.length; k++) {
let i = inputs[k];
if (i.name && i.name == 'image_url') {
image_url = i;
}
if (i.type && i.type == 'submit') {
sub = i;
}
}
image_url.value = src;
sub.click();
src = null;
}
catch (ex) {}
}
}, true);
if (!inBg) {
getBrowser().selectedTab = tab;
}
},
searchByImageByFile: function(src, inBg) {
//Canvas to get contents in base-64
let canvas = gContextMenu.target.ownerDocument.createElementNS(XHTMLNS, 'canvas');
let image = new Image();
image.src = src;
canvas.width = image.width;
canvas.height = image.height;
let ctx = canvas.getContext('2d');
ctx.drawImage(image, 0, 0);
let dataURL = canvas.toDataURL('image/png');
let _gBrowser = gBrowser || getBrowser();
//let tab = gBrowser.addTab(this.searchByImageMenu.popup.googleURL);
let tab = _gBrowser.loadOneTab(this.searchByImageMenu.popup.googleURL, {
relatedToCurrent: true
});
let newTabBrowser = _gBrowser.getBrowserForTab(tab);
newTabBrowser.addEventListener('load', function byFile(e) {
newTabBrowser.removeEventListener(e.type, byFile, true);
if (src) {
try {
let image_url;
let sub;
let form = newTabBrowser.contentDocument.getElementById('qbf');
let inputs = form.getElementsByTagName('input');
for (let k = 0; k < inputs.length; k++) {
let i = inputs[k];
if (i.name && i.name == 'image_url') {
image_url = i;
}
if (i.type && i.type == 'submit') {
sub = i;
}
}
image_url.value = dataURL;
sub.click();
src = null;
}
catch (ex) {}
}
}, true);
if (!inBg) {
getBrowser().selectedTab = tab;
}
},
searchByImageMenuPopup: function(e) {
let searchByImageMenu = this.searchByImageMenu;
searchByImageMenu.hidden = !gContextMenu.onImage;
let src = gContextMenu.mediaURL || gContextMenu.imageURL || gContextMenu.bgImageURL;
if (!src || !(/^((ht|f)tps?:\/\/|data:image|file:)/.test(src))) {
searchByImageMenu.hidden = true;
return;
}
let popup = searchByImageMenu.popup;
let items;
if (!popup.items) {
let itemsObj = popup.getElementsByTagName('menuitem');
popup.items = [];
Array.slice(itemsObj).forEach(function(elem) {
if (typeof elem == 'object' &&
elem.nodeName == 'menuitem' &&
elem.getAttribute('label') != 'Google')
popup.items.push(elem);
});
items = popup.items;
}
else {
items = popup.items;
}
if (/^(data:image|file:)/.test(src)) {
items.forEach(function(elem) {
elem.setAttribute('disabled', 'true');
});
}
else {
items.forEach(function(elem) {
elem.removeAttribute('disabled');
});
}
searchByImageMenu.imageSrc = src;
},
createSearchByImageMenu: function() {
let menu = document.createElement('menu');
let insertMenu = document.getElementById('context-sep-copyimage');
insertMenu.parentNode.insertBefore(menu, insertMenu);
this.searchByImageMenu = menu;
menu.setAttribute('id', this.nodeIds.searchByImageMenu);
menu.setAttribute('class', 'menu-iconic');
menu.setAttribute('label', _localize('searchByImage'));
menu.setAttribute('image', 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAK6wAACusBgosNWgAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNXG14zYAAAElSURBVDiNY/z//z8DJYCRkIKsthv/kRX9Z2BgmFalARdiIcaGKZXqcH5O+01U+ay2G3MYGBiSiXUmmofnsBDSjEUTMkiBe2Eq1JnZ7TcZBHhZGNythBl0lLkZODmYGX7++sdw/sZnhl3H3zF8+voHwwsYFkR5ijNICLMzTF31hOHnr38MHGxMDJlhMgwv3vxkWL7jJYpaJmzu0lTigWtmYGBg+PHrH8P0VU8YtJV5MNRiNYCfmxmuGQZ+/PrHwMmOqRyrAX///WfgYEOV4mBjwjAUpwHHL31iyA6XgRvCwcbEkBUmw3DuxmcMtVgDkYONicHLVoTBSJOXgYONieHHz38Ml+98Ydh88DXDtx//CBtACmBiYGCYS4H+OYyU5kasgUgKAADN8WLFzlj9rgAAAABJRU5ErkJggg==');
this.searchByImageMenu.popup = menu.appendChild(document.createElementNS(XULNS, 'menupopup'));
let popup = this.searchByImageMenu.popup;
popup.setAttribute('id', this.nodeIds.searchByImageMenuPopup);
popup.googleURL = 'https://www.google.com/searchbyimage';
let namesList = [];
if (options.searchByImage.useDefaultNamesList) {
let defaultNamesList = [
[
'Google',
'https://www.google.com/searchbyimage?image_url=',
'data:image/x-icon;base64,AAABAAIAEBAAAAEAIABoBAAAJgAAACAgAAABACAAqBAAAI4EAAAoAAAAEAAAACAAAAABACAAAAAAAAAEAAASCwAAEgsAAAAAAAAAAAAA9IVCSvSFQuf0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hULk9IVCSvSFQub0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQuf0hUL/9IVC//SFQv/0hUL/9Y1O//rIq//+7+f//eXX//vUvf/7z7X/96Fu//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//vYwv/97OH/9ZRZ//SFQv/0hUL/9IhG//zbx//3om7/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/97uX/+buW//SFQv/0hUL/9IVC//SFQv/5upT/+9O6//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/+b6b//zezP/0iEf/9IVC//SFQv/1klf//ezh//vPtP/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/3qXr/+siq//m8lv/5wqD//vTu//3t4//1klb/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0h0b//vbx//zi0//1j1H/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/2nmn/+bmS/////v/4sIX/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/5uJH///v5//eoef/1jU//+82y//afav/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL//vXw//vOs//0hUL/9IVC//ekcf/96+D/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//728v/4sIX/9IVC//SFQv/4s4n///v4//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/6yKn/+byX//SFQv/0hkT//eTV//vWv//0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IZE//m6lP/5u5b//OHQ///+/f/6y6//96d3//SFQv/0hUL/9IVC//SFQv/0hULm9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hULm9IVCSfSFQub0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hULm9IVCSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABACAAAAAAAAAQAAASCwAAEgsAAAAAAAAAAAAA9IVCAPSFQif0hUKt9IVC8vSFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQvL0hUKt9IVCJ/SFQgD0hUIo9IVC7/SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hULv9IVCKPSFQq30hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUKt9IVC8fSFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQvP0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9YtL//i2jv/828f//vLr///7+P///Pv//vTu//3n2v/6zbH/96Nw//SFQ//0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//ekcv/+8+z////////////+9fD/+9K5//m9mf/4to7/+buV//vSuf/++PT//OPT//aYYP/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/2l13///r3/////////fv/+b2Z//SIRv/0hUL/9IVC//SFQv/0hUL/9IVC//WNT//84M///vXv//aZYf/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//vPtP////////////i0i//0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//WQUv///Pr//OPU//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL//eTV///////+9O7/9IVD//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//3m2P//////9ppi//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/718H///////3s4f/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL//vDn///////4soj/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//erff////////38//WTWP/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//iziv////////////iwhf/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//rMsP///////eXW//WSVv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/4sYb///z7/////////Pv/9ZFV//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//ixhv/+8Of//vn1//rMsP/4rH//9plh//WQUv/1j1L/+s2x//////////////////m9mf/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SGQ//2nmn/+buW//vNsv/82sb//e3j/////////////////////v/5wZ//9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/83Mj////////////++fb/+K+C//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9ZRZ/////////////vTt//aaYv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/1lFr////////////6xqf/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//ehbf/70bj//end//3o2////v3///////3l1//0iEb/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/5wqD////////////96t7/96Z2//WOUP/2nWf//NvH//zcyP/1i0z/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/96l6/////////////vLr//WPUf/0hUL/9IVC//SFQv/0h0b//end//3k1f/0iUn/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/8387////////////4sYf/9IVC//SFQv/0hUL/9IVC//SFQv/6w6L///////nBn//0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC///69////////vj1//SIR//0hUL/9IVC//SFQv/0hUL/9IVC//m+mv///////e3j//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL///r3///////8387/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/+syw///////++fb/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/95NX///////vUvP/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/97OH///////7y6//0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//i2jv///////N/O//SFQv/0hUL/9IVC//SFQv/0hUL/96Nx////////////+s2x//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IdF//zh0P//+/j/9ZJW//SFQv/0hUL/9IVC//SKSv/96t7///////738v/1k1f/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9YxN//vUvf/96+D/96Z0//WNT//3om///ebY/////////Pv/+LKI//WVW//0h0X/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//agbP/7zbL//enc//749P////////////////////////////3r4P/3p3f/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hULx9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC8/SFQq30hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUKt9IVCJ/SFQu/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC7/SFQif0hUIA9IVCJfSFQq30hULx9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC8fSFQq30hUIl9IVCAIAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAB'
],
[
'Yandex',
'http://images.yandex.ru/yandsearch?rpt=imageview&&img_url=',
'data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAABILAAASCwAAAAAAAAAAAAAAkdx+AJHc5wCR3P8Akdz/AJHc/wCR3P8Akdz/AJHc/wCR3P8Akdz/AJHc/wCR3JYArvIAAK7yAACu8gAArvIAA5Pd5wCr8P8ArvL/AK7y/wCu8v8ArvL/AK7y/wCu8v8ArvL/AK7y/wCu8v8CnOT/A5PdewCu8gAArvIAAK7yAAeV3/8AsPP/ALDz/wCw8/8AsPP/ALDz/wCw8/8AsPP/ALDz/wCw8/8AsPP/Aa3x/weW4P8Hld8PALDzAACw8wAMmOH///////////////////////////////////////////////////////////8GpOr/DJjhigCy9AAAsvQAEZzk//////8VpOn/Fbr1/xW69f+c4fv/ddb5/xW69f8VuvX/Fbr1/x2o6v//////AbT0/w+f5v8RnOQ8ALX1ABeg5v//////F6bp/xe48/8XuPP/hdf3/4XX9/80wPT/F7jz/xe48/8dqOr//////wC49v8IsPD/F6DmpQC49gAepOn//////wOe6P8DrvD/A67w/1/G8/9fxvP/TsLy/wSu8P8DrvD/CaHo//////8Au/j/ALv4/xep7f8epOlmJKjs//////9GvfD/ft78/37e/P///////////+f5/v+A3/z/ft78/03A8P//////AL75/wC++f8Huvf/JKjszyut7///////OLvw/2Pa/P9j2vz///////////+R5f3/Y9r8/2Pa/P8/vvD//////wDC+v8Awvr/CL74/yut788xsfL//////ya48P9F1fz/RdX8///////N8/7/RdX8/0XV/P9F1fz/Lrnw//////8Axfv/AMX7/yW29P8xsfJmOLX1//////8XtfD/KNH8/yjR/P/8/v//UNr9/yjR/P8o0fz/KNH8/x+48P//////AMn8/xTC+v84tfWlAMn8AD659///////ALHw/wCx8P8AsfD/Gbjw/wCx8P8AsfD/ALHw/wCx8P8JtPD//////wPM/v83u/j/Prn3PADN/gBDvfr///////////////////////////////////////////////////////////8lxvz/Q736igTR/gAE0f4ASMD8/xLV//8S1f//EtX//xLV//8S1f//EtX//xLV//8S1f//EtX//xLV//8Y0///R8D8/0jA/A8S1f8AEtX/AEzD/uRa2f//XNz//1zc//9c3P//XNz//1zc//9c3P//XNz//1zc//9c3P//Ucv+/0zD/nhc3P8AXNz/AFzc/wBPxf97T8X/5E/F//9Pxf//T8X//0/F//9Pxf//T8X//0/F//9Pxf//T8X//0/F/5Zc3P8AXNz/AFzc/wBc3P8AAA8AAAAHAAAAAwAAAAMAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAMAAAADAAAABwAAAA8AAA=='
],
[
'TinEye',
'http://www.tineye.com/search/?pluginver=firefox-1.0&url=',
'data:image/x-icon;base64,AAABAAEAEBAAAAAAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAACxeDVItHk157iAO//WtW7/482G/+XOhv/lzYL/1L98/5mTcf8UKUP/CwsM/xwcG/8AAAD/AAAA/wAAAOcAAA5ItHo25LV7Nv+1ezb/tXs2/8GPSf/EoGj/s5hw/6KPdf93bWT/ZFdK/2daTP9hVEj/XU9C/zIpH/8EAgH/AAAA5LV7Nv+1ezb/tXs2/7V7Nv+1ezb/uIA+/8eea//Wtof/48eU/+PKkv/iyJP/4MeV/9u/kf/HqHz/rI1p/3tmT/+1ezb/tXs2/7V7Nv+1ezb/zKV0/+PKlP/hxXr/zbFk/8esYf/VuW7/3sFz/+LFdf/gw3P/48Z3/+nPjv/dwJD/tXs2/7V7Nv+1ezb/y6Nx/9/Gg/+NekT/V0wv/5uSfP95cmH/JiES/zAqGv86Mh3/W08v/3lpQP+Wg03/zLFn/7V7Nv+1ezb/uoVH/8myg/+VgUr/AAAA/2xpZf/i4+X/+fn5/0JAO/8AAAD/LCkl/768uf+/vr3/Mi8q/x0ZEP+2fDf/tXs2/6WGX/+pklP/JyES/0dFQP96eHX/W1tc//////9ua2X/DAoH/6Wim/+EhIX//////6ejnP8AAAD/wo1F/8GLQ//Conf/tZ1e/wYDAP9pZmH/6+vs/9/f3/////3/Pjoz/zo2Lf/Jycb/UlJT//////+xraX/AAAA/8OORv/Djkb/1bF+/821cf83MSD/MC4s//n49P//////l5OJ/wMCAP9IRDr/////////////////ZGBW/wAAAP/Djkb/w45G/8qkcP+sllr/wKtw/zw5Mf9MSUb/VlNM/wIBAP8AAAD/FxUP/9PQyv/8+/j/rKig/wkHA/8AAAD/w45G/8OORv+1jlj/l4hm/8etZv/QuHf/m4xk/21hSP9PRjX/Mi0j/xsYFf87NzD/VFBK/xUVFf8FBwz/CQsQ/8OORv/Djkb/g2I1/8Oea//Mt4z/uJxU/56hhv92nLj/l6ut/56poP+gpJL/mJeC/5aMbP+bjmv/m49t/52Qbv/Djkb/uItP/05PUP+zjlv/yptc/9C3jP9gYFP/ABVH/wAzc/8IP4T/FUuM/xhSmP99lZ3/5sRv/9S6cf/Lsmr/w45G/1B7rv8bbdT/LWy5/8OORv/Djkf/yqRw/zswIP8AAAD/AAAA/wAAAP8AAAD/Fyk8/5CKZ/+ahU3/modW/8GNReeEj5r/L37g/0Jxqf/Cjkf/w45G/8OORv/Fllb/clYw/zoqFf8hGQ3/IhwU/x4ZFf9HRUD/vaJ5/86pdee+ikU/woxEyZ6HZ/+8jEz/w45G/8OORv/Djkb/w45G/8OORv/Djkb/v4tF/8ORTf/GlFD/xJBJ/8KMRMm+ikU/gAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAE='
]
];
namesList = namesList.concat(defaultNamesList);
}
if (options.searchByImage.addCustomNames &&
Array.isArray(options.searchByImage.customNamesList)) {
namesList = namesList.concat(options.searchByImage.customNamesList);
}
let itemCreate = function(name, link, image) {
let item = document.createElementNS(XULNS, 'menuitem');
item.setAttribute('class', 'menuitem-iconic');
item.setAttribute('src', image);
item.setAttribute('label', name);
item.link = link;
popup.appendChild(item);
};
namesList.forEach(function(elem) {
itemCreate(elem[0], elem[1], elem[2]);
});
let contextMenu = this.contextMenu;
popup.gObj = this;
popup.setAttribute('oncommand', 'this.gObj.searchByImageCommandHandler(event);');
popup.setAttribute('onclick', 'checkForMiddleClick(this, event);');
}
};
contextSearcherObj.init();
}());
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.