// ==UserScript==
// @name Alternative search engines 2
// @description Adds search on other sites for google, bing, yandex, duckduckgo
// @namespace 2k1dmg@userscript
// @license MIT
// @version 0.3.2
// @grant none
// @noframes
// @match *://yandex.com/*
// @match *://yandex.ru/*
// @match *://ya.ru/*
// @match *://www.google.com/*
// @match *://www.google.ru/*
// @match *://www.bing.com/*
// @match *://duckduckgo.com/*
// ==/UserScript==
// 2024-08-11
(function() {
'use strict';
var SEARCH_ON = '• ';
var SEARCH_END = ' •';
var LINK_BOX_ID = 'oeid-box';
var ENGINES_SEPARATOR = ' - ';
var POSITION = 'left';
var ENGINES = [
['Yandex', 'https://yandex.ru/yandsearch?text='],
['Ya', 'https://ya.ru/yandsearch?text='],
['Google', 'https://www.google.com/search?q='],
['Bing', 'https://www.bing.com/search?q='],
['DuckDuckGo', 'https://duckduckgo.com/?q=']
];
var PLACEHOLDER_SELECTORS = [
'.content__left', // yandex
'.content__left', // ya
'#center_col',/*'#result-stats',*/ // google
'.sb_count', // bing
'#react-duckbar'/*.results--main*/ // duckduckgo
].join(',');
var INPUT_FIELD_SELECTORS = [
'.HeaderForm-Input', // yandex
'.HeaderForm-Input', // ya
'textarea.gLFyf', // google
'#sb_form_q', // bing
'#search_form_input' // duckduckgo
].join(',');
function addCSSStyle() {
var cssStyle = document.createElement('style');
cssStyle.type = 'text/css';
cssStyle.textContent = [
'#' + LINK_BOX_ID + ' {',
' display: inline-block;',
' padding-right: 10px;',
' padding-bottom: 10px;',
' color: rgb(115, 115, 115);' ,
' font-family: Verdana,sans-serif;',
' font-size: 9pt;',
' text-align: ' + POSITION + ';',
' z-index: 10000;',
'}',
'#' + LINK_BOX_ID + ' > a {',
' text-decoration: none;',
'}'
].join('\n');
document.head.appendChild(cssStyle);
}
function createLinkBox() {
var domain = document.domain.split('.').splice(-2, 2)[0];
var fragment = document.createDocumentFragment();
var divNode = document.createElement('div');
divNode.id = LINK_BOX_ID;
fragment.appendChild(divNode);
divNode.appendChild(document.createTextNode(SEARCH_ON));
ENGINES.forEach(function(engine) {
if(engine[0].toLowerCase() == domain) {
return;
}
var node = document.createElement('a');
node.target = '_blank';
node.href = engine[1];
node.textContent = engine[0];
divNode.appendChild(node);
divNode.appendChild(document.createTextNode(ENGINES_SEPARATOR));
});
divNode.lastChild.textContent = SEARCH_END;
return fragment;
}
function linkBoxMouseOver(event) {
var aHref = event.target;
if(aHref.nodeName.toLowerCase() != 'a') {
return;
}
var engineSource;
ENGINES.forEach(function(engine) {
if(engine[0] == aHref.textContent) {
engineSource = engine[1];
return;
}
});
var engineURL;
var engineParam = '';
if(Array.isArray(engineSource)) {
engineParam = engineSource[1];
engineURL = engineSource[0];
}
else if(typeof engineSource == 'string') {
engineURL = engineSource;
}
else {
return;
}
var searchText = document.querySelector(INPUT_FIELD_SELECTORS);
if(engineURL && searchText && searchText.value.length > 0) {
aHref.href = engineURL + encodeURIComponent(searchText.value) + engineParam;
}
}
function linkBoxMouseOut(event) {
var aHref = event.target;
if(aHref.nodeName.toLowerCase() != 'a') {
return;
}
ENGINES.forEach(function(engine) {
if(engine[0] == aHref.textContent) {
aHref.href = engine[1];
return;
}
});
}
if(document.getElementById(LINK_BOX_ID)) {
return;
}
var results = document.querySelector(PLACEHOLDER_SELECTORS);
if(!results) {
return;
}
addCSSStyle();
var fragment = createLinkBox();
var domain = document.domain.split('.').splice(-2, 2)[0];
if(domain == 'duckduckgo') {
results.firstChild.appendChild(fragment);
} else {
results.insertBefore(fragment, results.firstChild);
}
var linkBox = document.querySelector('#'+LINK_BOX_ID);
if(domain == 'duckduckgo') {
linkBox.setAttribute('style', 'padding-top: 10px;');
}
linkBox.addEventListener('mouseover', linkBoxMouseOver);
linkBox.addEventListener('mouseout', linkBoxMouseOut);
})();