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