Greasy Fork is available in English.

Project Endor (Zoltar)

easy clicks for zoltars

Versione datata 16/12/2015. Vedi la nuova versione l'ultima versione.

// ==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]);
        }
    }
})();