WME Speedhelper

Makes inputting speed data easier

当前为 2015-11-16 提交的版本,查看 最新版本

// ==UserScript==
// @name           WME Speedhelper
// @description    Makes inputting speed data easier
// @namespace      [email protected]
// @grant          none
// @grant          GM_info
// @version        0.2.2
// @match          https://editor-beta.waze.com/*editor/*
// @match          https://www.waze.com/*editor/*
// @author         Broos Gert '2015
// @license        MIT/BSD/X11
// @icon			data:image/png;base64,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
// ==/UserScript==
/* Changelog

*/

// Add Google Varela Round font to make sure signs look the same everywhere (less hassle)
WebFontConfig = {google:{families:['Varela+Round::latin' ]}};
(function() {
    var wf = document.createElement('script');
    wf.src = ('https:' == document.location.protocol ? 'https' : 'http') +
        '://ajax.googleapis.com/ajax/libs/webfont/1/webfont.js';
    wf.type = 'text/javascript';
    wf.async = 'true';
    var s = document.getElementsByTagName('script')[0];
    s.parentNode.insertBefore(wf, s);
})();

/* Borden base64 */
var mssimg = 'data:image/png;base64,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';
var BGa = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAYAAADhAJiYAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAOwwAADsMBx2+oZAAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAAWdEVYdENyZWF0aW9uIFRpbWUAMTEvMTUvMTUXz/AGAAACiElEQVRYhe2YT0sbQRjGn5VNbZAai4cmh5IttDcPK3gRQvQehNzUk4HNVfCag5/BL+BhAx7MB/CekAUvgnsNSthQgtkidROpW93Vtwdp2slM/m9xhT4QyLsz7zM/Znf+SkRECJFmXhqgV/I0ya5h4OfZGWuYSODd5ubEntK4r+y6UEBH1+HbNjAgVY7HMZfJYHF/H3IyGTyQnc+jUyyCfH9k8+cWJETTaSSKxZHAhgK5hoHmxgaeHGc8kN6GZBnxo6Ohr3PgR31bKuFrOj01DACQ7+Nqawt2Pj+kYh91jo+pJklUA7ifparU1nV6sCwu78GyqK3rZKmqMLcGUEvT+jVLQqC7alUIU1cUuiuX+5pxPuUy1RVFCPX94GB0oIuFBc6gmc3So+OMDPNbj45DzWyWh5Ik8gQ9zAG1NE0IM61EUJaqcvW4UXYRiTBDO6IoSJomZmKxqT7qp3YbDVWFZ1nM84/VKqKpVDdmRtl1ocDNM3FdnxoGAGZiMcR1nXv+bXeXiZkeqicS8FutbuGsqiJ5fj41zN9qLC/j3jT/AMgyvnheN2Z6yLdtJvn93l6gMCJP8n24hsEDuYbBrU3R9fXAgUSeP05OeKDeVRsAImMsiqNK5OmenvJAYdF/oGHqAr1dWeEKvUYj8AZFntHVVR4omkoBksRUdMvlwIFEnnOZTPd/uCfG+VyOSb43TbiVSmAwbqXCwADAm6UlJg734goA8zs7TOxZFlo9PTeJWrkcBzOrqgwMAPEWNlQbNKIQbmGJXm6TP/Bcdlsq4Wp7e+AJdVzFNA0fDg/7lr+ugyLwPIN/vrlBTNMgyRPcTUgSomtr+HR5OdIlxOu9bBApFNcx/1qh2w/9Ag1uL5DjL1V0AAAAAElFTkSuQmCC';

var signConfig = {
    NL:  	{'sgn': BGa, 'dim':'36|36', 'ann':'kmh', 'spd':[ 15, 30, 50, 60, 70, 80, 100, 120, 130 ]},
    BE:  	{'sgn': BGa, 'dim':'36|36', 'ann':'kmh', 'spd':[ 30, 50, 70, 90, 100, 120 ]},
    LUX:	{'sgn': BGa, 'dim':'36|36', 'ann':'kmh', 'spd':[ 30, 50, 70, 90, 120 ]},
    AU: 	{'sgn': BGa, 'dim':'36|36', 'ann':'kmh', 'spd':[ 30, 40, 50, 60, 70, 80, 100, 110, 120, 130 ]},
    FR:		{'sgn': BGa, 'dim':'36|36', 'ann':'kmh', 'spd':[ 30, 50, 70, 90, 110, 130 ]},
    HU:		{'sgn': BGa, 'dim':'36|36', 'ann':'kmh', 'spd':[ 30, 40, 50, 60, 70, 80, 90, 130]},
    MX: 	{'sgn': BGa, 'dim':'36|36', 'ann':'kmh', 'spd':[ 10, 60, 70, 80, 90, 100, 110]},
    UK: 	{'sgn': BGa, 'dim':'36|36', 'ann':'mph', 'spd':[ 30, 40, 50, 60]},
    SZ: 	{'sgn': BGa, 'dim':'36|36', 'ann':'kph', 'spd':[ 30, 40, 50, 60, 80, 100, 120]},
    GM:         {'sgn': BGa, 'dim':'36|36', 'ann':'kph', 'spd':[ 7, 30, 50, 60, 70, 80, 100, 120, 130]},
    LG:         {'sgn': BGa, 'dim':'36|36', 'ann':'kmh', 'spd':[ 20, 30, 50, 70, 90, 100 ]},
    LT:         {'sgn': BGa, 'dim':'36|36', 'ann':'kmh', 'spd':[ 30, 40, 50, 60, 70, 80, 90, 110, 120, 130 ]},
    RU:         {'sgn': BGa, 'dim':'36|36', 'ann':'kmh', 'spd':[ 30, 40, 50, 60, 70, 80, 90, 110, 120, 130 ]}
};

// initialize WMESpeedhelper and do some checks
function WMESpeedhelper_bootstrap() {
    WMESpeedhelper_init();
}

function WMESpeedhelper_init() {

    //create the WMESpeedhelper object
    var WMESpeedhelper = {};
    var editpanel =  $("#edit-panel");

    // Check initialisation
    if (typeof Waze == 'undefined' || typeof I18n == 'undefined') {
        setTimeout(WMESpeedhelper_init, 660);
        log('Waze object unavailable, map still loading');
        return;
    }
    if (editpanel === undefined) {
        setTimeout(WMESpeedhelper_init, 660);
        log('edit-panel info unavailable, map still loading');
        return;
    }

    // check for changes in the edit-panel
    var speedlimitsObserver = new MutationObserver(function(mutations) {
        mutations.forEach(function(mutation) {

            // Mutation is a NodeList and doesn't support forEach like an array
            for (var i = 0; i < mutation.addedNodes.length; i++) {

                var addedNode = mutation.addedNodes[i];
                
                // Only fire up if it's a node
                if (addedNode.nodeType === Node.ELEMENT_NODE) {
                    var speedlimitDiv = addedNode.querySelector('div.controls.speed-limit');

                    if (speedlimitDiv) {
                        WMESpeedhelper.makeSigns(speedlimitDiv);
                    }
                }
            }
        });
    });
    speedlimitsObserver.observe(document.getElementById('edit-panel'), { childList: true, subtree: true });

    // Show friendly message to users of unsupported countries (for now)
    WMESpeedhelper.showMessage = function() {
        // Check if this message isn't allready on screen (bugcheck, can't reproduce myself)
        if (!$("#_cnt").length) {
            var mD = document.createElement("div");
            mD.id = '_cnt';
            mD.style.cssText = 'margin:5px 0 10px 0;border:1px solid red;padding:5px;border-radius:5px';

            var mI = document.createElement("img");
            mI.id = '_img';
            mI.style.cssText = 'float:left;margin-right:5px;';
            mI.src = mssimg;

            var mT = document.createElement("div");
            mT.id = '_text';
            mT.innerHTML = '<b><a href="https://gf.qytechs.cn/en/scripts/13774-wme-speedhelper" target="_blank">WME Speedhelper 0.2.0</a></b><br>Your country is currently not supported yet. If you want me to add it, follow <a href="https://gf.qytechs.cn/en/scripts/13774-wme-speedhelper" target="_blank">this link</a> and look for the "missing country?" section in the description.';

            var cleardiv = document.createElement("div");
            cleardiv.id = 'cleardiv';
            cleardiv.style.cssText ='clear:both;margin-bottom:5px;';

            mD.appendChild(mI);
            mD.appendChild(mT);
            mD.appendChild(cleardiv);
            $("div.controls.speed-limit").prepend(mD);
        }
    };

    // The big one...
    WMESpeedhelper.makeSigns = function(reciever) {
        //log("COUNTRY CODE: " + Waze.model.countries.top.abbr);
        var ABBR =  signConfig[Waze.model.countries.top.abbr];

        // Country code not found? Show user friendly message with info to get his/her country added
        if (typeof ABBR == 'undefined') {
            WMESpeedhelper.showMessage();
            return;
        }

        // check if we're not adding to existing signs
        if (!$("#signsholder").length) {
            var signsholder = document.createElement("div");
            signsholder.id = 'signsholder';

            //Get the correct list of speedsigns to make
            ABBR.spd.forEach(function(speed) {
                // The sign background
                var addsign = document.createElement("div");
                addsign.id = 'signsholder';
                
                // Get width/height of sign background img
                var dims = ABBR.dim.split('|');
                addsign.style.cssText = 'cursor:pointer;float:left;width:'+dims[0]+'px;height:'+dims[1]+'x;background-image: url(\''+ ABBR.sgn + '\');';
                addsign.onclick =  function() {
                    $("input[name=fwdMaxSpeed]").val(speed).change();
                    $("input[name=revMaxSpeed]").val(speed).change();
                };

                // The speed value
                var speedvalue = document.createElement("div");
                speedvalue.id = 'spd_'+ speed;
                speedvalue.style.cssText = 'text-align:center;line-height:'+dims[1]+'px;font-size:11px;font-family:\'Varela Round\',sans-serif;color:#000; font-weight:bold;';
                speedvalue.innerHTML = speed;
                addsign.appendChild(speedvalue);
                signsholder.appendChild(addsign);
            });

            // CSS Clear after the floats
            var cleardiv = document.createElement("div");
            cleardiv.id = 'cleardiv';
            cleardiv.style.cssText ='clear:both;margin-bottom:5px;';

            // Add everything to the stage
            signsholder.appendChild(cleardiv);
            $("div.controls.speed-limit").prepend(signsholder);
            log('ready');
        }
    };

    function log(message) {
        if (typeof message === 'string') {
            console.log('WMESpeedhelper: ' + message);
        } else {
            console.log('WMESpeedhelper: ', message);
        }
    }
}

setTimeout(WMESpeedhelper_bootstrap, 3000);

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址