// ==UserScript==
// @name Project Endor (Zoltar)
// @namespace https://greasyfork.org/en/users/12709
// @version 1.0.03
// @description easy clicks for zoltars
// @author feihtality
// @match https://www.google.com/evaluation/endor/*
// @grant none
// ==/UserScript==
/*jshint esnext:true*/
(function() {
'use strict';
var _p = document.querySelector('p');
if (!/previewand/.test(document.referrer) && _p && /An error occurred/.test(_p.textContent)) document.location.reload();
if (!/NOT a/.test(document.querySelector('h2').textContent)) return;
function make(tag) { return document.createElement(tag); }
function get(val) { return document.querySelector('input[value="'+val+'"]'); }
function get2(val) { return document.querySelector(`input[ng-true-value="'${val}'"]`); }
var div = document.body.appendChild(make('DIV')),
p1 = div.appendChild(make('P')), p2 = div.appendChild(make('P')), p3 = div.appendChild(make('P')),
p4 = div.appendChild(make('P')), p5 = div.appendChild(make('p')), p6 = div.appendChild(make('P')),
panel = {
p1: {
node: p1, options: {radio: true},
provider : { controller: make('BUTTON'), target: get('DIRECT_PROVIDER') },
retailer : { controller: make('BUTTON'), target: get('RETAILER') },
referral : { controller: make('BUTTON'), target: get('REFERRAL_AGGREGATOR') },
search : { controller: make('BUTTON'), target: get('SEARCH_ENGINE') },
market : { controller: make('BUTTON'), target: get('MARKETPLACE') },
deals : { controller: make('BUTTON'), target: get('DEALS_PROVIDER') },
content : { controller: make('BUTTON'), target: get('CONTENT_PUBLISHER') },
},
p2: {
node: p2, options: {radio: true},
physnone : { controller: make('BUTTON'), target: get('NONE') },
single : { controller: make('BUTTON'), target: get('LOCAL_SINGLETON') },
singleRegionBranch : { controller: make('button'), target: get('SINGLE_REGION_BRANCHES') },
multiRegionBranch : { controller: make('button'), target: get('MULTIPLE_REGION_BRANCHES') },
},
p3: {
node: p3, options: {radio: false},
virtual: { controller: make('button'), target: get2('VIRTUAL') },
custLoc: { controller: make('button'), target: get2('CUSTOMER_LOCATION') },
busiLoc: { controller: make('button'), target: get2('BUSINESS_LOCATION') },
},
p4: {
node: p4, options: {radio: true},
goods : { controller: make('BUTTON'), target: get('GOODS') },
services : { controller: make('BUTTON'), target: get('SERVICES') },
both : { controller: make('BUTTON'), target: get('BOTH') },
},
p5: {
node: p5, options: {radio: true},
direct : { controller: make('BUTTON'), target: get('DIRECT') },
both : { controller: make('BUTTON'), target: document.querySelector('input[value=BOTH]:not([name=product_type])') },
indirect : { controller: make('BUTTON'), target: get('INDIRECT') },
},
p6: {
node: p6, options: {radio: true},
SUBMIT : { controller: make('BUTTON'), target: document.querySelector('input[type=submit]') },
}
};
div.style.cssText = "z-index:10; position:fixed; top:10%;right:50%; background:#eee; opacity:0.9; transform:translateX(50%);";
div.className = 'zoltarpanel';
var css = document.head.appendChild(document.createElement('STYLE'));
css.innerHTML = '.zoltarpanel p {margin:5px}';
function sel(group, item) {
item.controller.onclick = () => {
var prev = group.node.querySelector('[style]');
if (prev && group.options.radio === true) prev.style.background = '';
item.target.click();
if (group.options.radio === false) item.controller.style.background = item.controller.style.background === 'lightgreen' ? '' : 'lightgreen';
else item.controller.style.background = 'lightgreen';
scroller(item.target);
};
}
function scroller(loc, dt) {
var getPos = function(el) { var offset = 0; while(el) { offset += el.offsetTop; el = el.offsetParent; } return offset; },
target = getPos(loc),
pos = window.scrollY,
dpos = Math.ceil((target-pos)/3);
dt = dt ? dt-1 : 25;
if (target === pos || dpos === 0 || dt === 0) return;
window.scrollBy(0,dpos);
setTimeout( () => scroller(loc, dt), dt);
}
for (var j of Object.keys(panel)) {
for (var k of Object.keys(panel[j])) {
if (k === 'node' || k === 'options') continue;
panel[j].node.appendChild(panel[j][k].controller);
panel[j][k].controller.textContent = k;
sel(panel[j], panel[j][k]);
}
}
})();