WME Map Tiles Update

Show the last server update and different times

当前为 2016-04-11 提交的版本,查看 最新版本

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         WME Map Tiles Update
// @version      1.08
// @description  Show the last server update and different times
// @namespace    Sebiseba
// @copyright    Sebiseba 2014-2016
// @include      https://www.waze.com/editor/*
// @include      https://www.waze.com/*/editor/*
// @include      https://editor-beta.waze.com/*
// @exclude      https://www.waze.com/user/*editor/*
// @exclude      https://www.waze.com/*/user/*editor/*
// @connect      http://status.waze.com/category/main/feed/
// @connect      https://maps.googleapis.com/maps/api/timezone
// @grant        GM_xmlhttpRequest
// @grant        unsafeWindow
// ==/UserScript==
/* jshint -W097 */
'use strict';

/***
Thanks
   dummyd2 and Myriades for their help and optimizations
   nhanway, SkiDooGuy, doctorkb & sketch for their feedback
   fsmallmann for its translation Brazilian Portuguese
***/

// **********************************
// **  DOWNLOAD HELPER BY DUMMYD2  **
// **********************************

/******** AUTO INJECTED PART ***************/

function MTUdownloadHelperInjected() {
    window.MTUDownloadHelper = {
        jobs: [], _waitForData: function (id)
        {
            if (this.jobs.length <= id) {
                this.jobs[id].callback({
                    url: null,
                    data: null,
                    callback: this.jobs[id].callback,
                    status: 'error',
                    error: 'Request not found'
                });
            }
            else
            {
                if (this.jobs[id].status == 'success' || this.jobs[id].status == 'error')
                    this.jobs[id].callback(this.jobs[id]);
                else
                {
                    if (this.jobs[id].status == 'downloading' && this.jobs[id].progressCallback) {
                        this.jobs[id].progressCallback(this.jobs[id]);
                    }
                    var _this = this;
                    window.setTimeout(function () {
                        _this._waitForData(id);
                    }, 500);
                }
            }
        },
        add: function (params, callback, progressCallback)
        {
            this.jobs.push({
                params: params,
                data: null,
                callback: callback,
                progressCallback: progressCallback,
                status: 'added',
                progression: 0,
                error: ''
            });
            var id = this.jobs.length - 1;
            var _this = this;
            window.setTimeout(function () { _this._waitForData(id); }, 500);
        }
    };
}
var MTUdownloadHelperInjectedScript = document.createElement('script');
MTUdownloadHelperInjectedScript.textContent = '' + MTUdownloadHelperInjected.toString() + ' \n' + 'MTUdownloadHelperInjected();';
MTUdownloadHelperInjectedScript.setAttribute('type', 'application/javascript');
document.body.appendChild(MTUdownloadHelperInjectedScript);

/******** SANDBOX PART ***************/

function lookFordownloadHelperJob() {
    for (var i = 0; i < unsafeWindow.MTUDownloadHelper.jobs.length; i++) {
        if (unsafeWindow.MTUDownloadHelper.jobs[i].status == 'added') {
            unsafeWindow.MTUDownloadHelper.jobs[i].status = cloneInto('downloading', unsafeWindow.MTUDownloadHelper.jobs[i]);
            var f = function () {
                var job = i;
                GM_xmlhttpRequest({
                    method: unsafeWindow.MTUDownloadHelper.jobs[job].params.method,
                    headers: unsafeWindow.MTUDownloadHelper.jobs[job].params.headers,
                    data: unsafeWindow.MTUDownloadHelper.jobs[job].params.data,
                    synchronous: false,
                    timeout: 3000,
                    url: unsafeWindow.MTUDownloadHelper.jobs[job].params.url,
                    //job: i,
                    onerror: function (r) { unsafeWindow.MTUDownloadHelper.jobs[job].status = cloneInto('error', unsafeWindow.MTUDownloadHelper.jobs[job]); },
                    ontimeout: function (r) { unsafeWindow.MTUDownloadHelper.jobs[job].status = cloneInto('error', unsafeWindow.MTUDownloadHelper.jobs[job]); },
                    onload: function (r) {
                        unsafeWindow.MTUDownloadHelper.jobs[job].status = cloneInto('success', unsafeWindow.MTUDownloadHelper.jobs[job]);
                        unsafeWindow.MTUDownloadHelper.jobs[job].data = cloneInto(r.responseText, unsafeWindow.MTUDownloadHelper.jobs[job]);
                    },
                    onprogress: function (r) { unsafeWindow.MTUDownloadHelper.jobs[job].progression = cloneInto(r.total == 0 ? 0 : (r.loaded / r.total), unsafeWindow.MTUDownloadHelper.jobs[job]); }
                });
            }();
        }
    }
    window.setTimeout(lookFordownloadHelperJob, 2000);
}
window.setTimeout(lookFordownloadHelperJob);

/*******************/

function run_MTU(){
    var WME_MUpdate_Version = "1.08";
    var icon_info="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";
    var icon_close="iVBORw0KGgoAAAANSUhEUgAAAAsAAAALCAYAAACprHcmAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAABbSURBVHjajJBLFsAgCAOB5724OjmZXbUvxWjLys+MQryqpv2sYWaWmf4FApjBmx10rx84M70LACb/GnzJQgcXmAU1R6geVUsLzC8qIXbDKOGVhoqOz8cp417XAOaUPpt0thLzAAAAAElFTkSuQmCC";
    var UKdate=[], UKdateabbr=[], LOCdate=[], update=[], url = '', idx = '';
    function getId(node) {
        return document.getElementById(node);
    }
    function getElementsByClassName(classname, node) {
        if(!node) node = document.getElementsByTagName("body")[0];
        var a = [];
        var re = new RegExp('\\b' + classname + '\\b');
        var els = node.getElementsByTagName("*");
        for (var i=0,j=els.length; i<j; i++)
            if (re.test(els[i].className)) a.push(els[i]);
        return a;
    }
    function translate_server(lang){
        var elt="", trad = new Array(
            "en","SERVER", "en-GB","SERVER", "es","SERVIDOR", "es-419","SERVIDOR", "fr","SERVEUR", "it","SERVER", "ru","сервер", "ja","サーバー",
            "he","שרת", "de","SERVER", "ro","SERVER", "tr","SUNUCU", "af","BEDIENER", "cs","SERVER", "ko","서버", "ms","SERVER",
            "pl","SERWER", "pt-BR","SERVIDOR", "pt-PT","SERVIDOR", "hu","SZERVER", "nl","SERVER", "sv","SERVER", "no","SERVER", "sk","SERVERA",
            "da","SERVER", "gl","GWEINYDDWR", "lt","SERVERIS", "zh","SERVER", "bg","СЪРВЪРА","fi","SERVER", "hr","SERVER"
        );

        var i=-1;
        for(elt in trad){
            i++;
            if (trad[elt]==lang){
                return trad[i+1];
            }
        }
        return "SERVER";
    }
    function trans_month() {
        for (var i=1; I18n.translations.en.date.month_names[i]; i++) {
            UKdate.push(I18n.translations.en.date.month_names[i]);
            UKdateabbr.push(I18n.translations.en.date.abbr_month_names[i]);
            LOCdate.push(I18n.translations[MTULang].date.month_names[i]);
        }
    }
    function translate(str) {
        str = str[0].toUpperCase() + str.substring(1);
        for (var i=0; UKdate[i]; i++) { str = str.replace(UKdate[i], LOCdate[i]); }
        return str;
    }
    function translateabbr(str) {
        str = str[0].toUpperCase() + str.substring(1);
        for (var i=0; UKdate[i]; i++) { str = str.replace(UKdateabbr[i], LOCdate[i]); }
        return str;
    }
    function addZero(i) {
        if (i < 10) { i = "0" + i; }
        return i;
    }
    function IsJsonString(str) {
        try {
            JSON.parse(str);
        } catch (e) {
            return false;
        }
        return true;
    }
    function MTUpdate_bootstrap() {
        console.log("WME Map Tiles Update: " + WME_MUpdate_Version + " starting");
        MTUinit();
    }
    function MTUinit(){
        if(typeof(Waze.location) === 'undefined'){ window.setTimeout(MTUinit, 500); return; }
        if(typeof(I18n) === 'undefined'){ setTimeout(MTUinit, 500); return; }
        MTUhandle = getElementsByClassName("olControlPanZoomBar olControlNoSelect")[0];
        if(MTUhandle == null){ setTimeout(MTUinit, 1000); return; }

        // Detect Country Server (World/US/Israel)
        MTUenv = Waze.location.code;
        console.info("WME Map Tiles Update - Serveur : " + MTUenv);
        switch(MTUenv){
            case 'usa': url = "http://status.waze.com/category/main/north-america-tile-updates/"; idx=0; break;
            case "row": url = "http://status.waze.com/category/main/international-tile-updates/"; idx=1; break;
            case 'il': url = "http://status.waze.com/category/main/israel-tile-updates/"; idx=2; break;
            default: idx=3;
        }

        //    Then running
        lastupdate = localStorage.getItem('MTUlastupdate');
        if (!lastupdate || !IsJsonString(lastupdate)) { localStorage.setItem('MTUlastupdate', '{"usa":"","row":"","il":""}'); }

        // Translation
        MTULang = I18n.locale;
        console.info("WME Map Tiles Update - Langue: " + MTULang);
        html(url);
        trans_month();
        Back_Info();
    }
    function html(url) {
        //CSS
        var cssElt = document.createElement("style");
        cssElt.type = "text/css";
        var css = "#Info_div { z-index:10;margin-top:18px;margin-left:5px; }";
        css += ".td { padding-right:15px; }";
        css += "#Info_server { z-index:10;float:left;width:22px;height:22px;background:url(data:image/png;base64," +icon_info +") no-repeat left top; }";
        css += "#Info_text { z-index:11;float:left; }";
        //css += "#Info_content { z-index:10;float:left;margin-left:5px;line-height:20px;padding:8px 5px 5px 8px;color:white;background-color:rgba(0,0,0,0.7);border-radius:5px;display:none; }";
        css += "#Info_content { z-index:10;position:fixed;margin-left:30px;line-height:20px;padding:8px 5px 5px 8px;color:white;background-color:rgba(0,0,0,0.7);border-radius:6px;display:none; }";
        css += "#Info_close { z-index:11;float:right;width:11px;height:11px;margin-right:3px;background:url(data:image/png;base64," +icon_close +") no-repeat right top; }";
        cssElt.innerHTML = css;
        document.body.appendChild(cssElt);

        //HTML
        var div = document.createElement('div');
        div.id="Info_div";

        var divicon = document.createElement('div');
        divicon.id="Info_server";
        divicon.onmouseover= (function() {
            getId("Info_content").style.display="block";
            getId("Info_server").style.opacity="1";
            gettimezone();
        });
        divicon.onmouseout=  (function() {
            getId("Info_content").style.display="none";
            getId("Info_server").style.opacity="0.5";
            clearTimeout(timermaphours);
        });
        divicon.onclick= (function() { window.open(url); });
        div.appendChild(divicon);

        var divinfo = document.createElement('div');
        divinfo.id="Info_content";
        div.appendChild(divinfo);

        var divtext = document.createElement('div');
        divtext.id="Info_text";
        divinfo.appendChild(divtext);

        var divclose = document.createElement('div');
        divclose.id="Info_close";
        divclose.onclick= (function() {
            getId("Info_content").style.backgroundColor="rgba(" + [0,0,0,0.7].join(",") + ")";
            getId('Info_content').style.display="none";
            getId('Info_server').style.opacity="0.5";
            (function(){ Back_Info(); });
        });
        divinfo.appendChild(divclose);

        MTUhandle.appendChild(div);
        //console.log("WME Map Tiles Update - HTML OK");
    }
    function Back_Info() {
        lastupd=[]; whenupd=[];
        try {
            var params = {url:"http://status.waze.com/category/main/feed/", headers:{"User-Agent":"Mozilla/5.0", "Accept":"text/plain"}, data:null, method:"GET"};
            MTUDownloadHelper.add(params, function (data) {
                if (data.status == 'success') {
                    // Get XML data
                    var parser=new DOMParser();
                    var xml = parser.parseFromString(data.data,'text/xml');
                    var profiles = xml.getElementsByTagName("item");
                    for (var i=0; i<profiles.length; i++) {
                        var title = profiles[i].getElementsByTagName("title")[0].childNodes[0].nodeValue;
                        var pubdate = profiles[i].getElementsByTagName("pubDate")[0].childNodes[0].nodeValue.substring(4);
                        var category = profiles[i].getElementsByTagName("category")[0].childNodes[0].nodeValue;
                        update[i]=new Array(pubdate,category,title);
                    }

                    // Last updates by server
                    for (var i=0; update[i]; i++) {
                        if (update[i][1] == "North America Tile Updates") { if (!whenupd[0]) { whenupd[0]=update[i][0]; lastupd[0]=update[i][2]; } }
                        else if (update[i][1] == "International Tile Updates") { if (!whenupd[1]) { whenupd[1]=update[i][0]; lastupd[1]=update[i][2]; } }
                        else if (update[i][1] == "Israel Tile Updates") { if (!whenupd[2]) { whenupd[2]=update[i][0]; lastupd[2]=update[i][2]; } }
                        else { whenupd[3]=update[i][0]; lastupd[3]=update[i][2]; }
                        //console.log("WME Map Tiles Update ("+i+"): "+ update[i]);
                        //console.log("WME Map Tiles Update: USA "+ whenupd[0] +" / Word "+ whenupd[1] +" / Israel "+ whenupd[2] +" / Problem "+ whenupd[3]);
                    }

                    // Date
                    var a = whenupd[idx].split(' ');
                    if (lastupd[idx].indexOf("updated to:")==-1){
                        var t=whenupd[idx].split(' ');
                        var b=["","",translateabbr(t[2]),t[1],t[3],t[4].substring(0,5),t[5]];
                        var probdate=lastupd[idx];
                        if (MTULang != "en" && MTULang != "en-GB") { lastupd[3]=t[1]+" "+translateabbr(t[2])+" "+t[3]; }
                        else { lastupd[3]=translateabbr(t[2])+" "+t[1]+" "+t[3]; }
                    }
                    else { var b = lastupd[idx].substring(lastupd[idx].indexOf("updated to:")).split(' '); }
                    if (b[3].length == 1) { var b3 = "0"+ b[3]; } else { var b3 = b[3]; }
                    if (whenupd[3]) { var c = whenupd[3].split(' '); }

                    if (MTULang == "fr") {
                        var lang = new Array("Mis &agrave; jour jusqu'au","Fait le","Dernier problème","Heure locale","Heure carte","Heure UTC");
                        var whendate=a[1] +" "+ translateabbr(a[2]) +" "+ a[3];
                        var lastdate=b3.replace(',','') +" "+ translate(b[2]) +" "+ b[4];
                        if (c && !probdate) { var probdate=c[1] +" "+ translateabbr(c[2]) +" "+ c[3]; }
                    }
                    else if (MTULang == "pt-BR" || MTULang == "pt-PT") {
                        var lang = new Array("Dados de","Efetuado em","Última problema","Hora local","Hora mapa","Hora UTC");
                        var whendate=a[1] +" "+ translate(a[2]) +" "+ a[3];
                        var lastdate=b3.replace(',','') +" "+ translate(b[2]) +" "+ b[4];
                        if (c && !probdate) {var probdate=c[1] +" "+ translate(c[2]) +" "+ c[3]; }
                    }
                    else {
                        var lang = new Array("Last update","Performed","Last probem","Home time","Map time","UTC time");
                        var whendate=translateabbr(a[2]) +" "+ a[1] +", "+ a[3];
                        var lastdate=b[2] +" "+ b3 +" "+ b[4];
                        if (c && !probdate) {var probdate=translateabbr(c[2]) +" "+ c[1] +", "+ c[3]; }
                    }
                    // Time
                    var step = new Date().getTimezoneOffset()/60;
                    var whentimeutc=a[4].substring(0,5);
                    var lasttimeutc=b[5];
                    if ((a[4].substring(0,2) - step) < 10) { var whentimeloc="0"+ (a[4].substring(0,2) - step) +":"+ a[4].substring(3,5); } else { var whentimeloc=a[4].substring(0,2) - step +":"+ a[4].substring(3,5); }
                    if ((b[5].substring(0,2) - step) < 10) { var lasttimeloc="0"+ (b[5].substring(0,2) - step) +":"+ b[5].substring(3,5); } else { var lasttimeloc=b[5].substring(0,2) - step +":"+ b[5].substring(3,5); }

                    var serv=translate_server(MTULang);
                    var content = "<table><tr><td class='td'>" + serv + " : </td><td><b>" + I18n.translations[MTULang].envs[MTUenv] +" ";
                    content += " </b></td></tr>";
                    content += "<tr><td class='td'>"+ lang[0] + " :</td><td><span style='color:#93C4D3;'><b>" + lastdate + "</b></span></td></tr>";
                    content += "<tr><td class='td'>&nbsp;</td><td><span style='color:#59899e;'><b>"+ lasttimeutc +" UTC / "+ lasttimeloc +" local</b></span></td></tr>";
                    content += "<tr><td class='td'>"+ lang[1] + " :</td><td><span style='color:#93C4D3;'><b>" + whendate + "</b></span></td></tr>";
                    content += "<tr><td class='td'>&nbsp;</td><td><span style='color:#59899e;'><b>"+ whentimeutc +" UTC / "+ whentimeloc +" local</b></span></td></tr>";
                    content += "<tr><td colspan='2'><div style='height:1px; background-color:#59899e;'></div></td></tr>";
                    if (lastupd[3]) {
                        content += "<tr><td class='td'>"+ lang[2] + " :</td><td><span style='color:#F23456;'><b>" + probdate + "</b></span></td></tr>";
                        content += "<tr><td class='td'>&nbsp;</td><td><span style='color:#F23456; font-size:11px;'><b>"+ lastupd[3] +"</b></span></td></tr>";
                        content += "<tr><td colspan='2'><div style='height:1px; background-color:#59899e;'></div></td></tr>";
                    }
                    content += "<tr><td class='td'>"+ lang[5] + " : </td><td><div id='utchours' style='color:#93C4D3; font-weight:bold;'></div></td></tr>";
                    content += "<tr><td class='td'>"+ lang[3] + " : </td><td><div id='localhours' style='color:#93C4D3; font-weight:bold;'></div></td></tr>";
                    content += "<tr><td class='td'>"+ lang[4] + " : </td><td><div id='maphours' style='color:#93C4D3; font-weight:bold; float:left;'></div><div id='tzname' style='color:#59899e; font-weight:bold; font-size:10px; float:left; padding-left:5px;'></div></td></tr></table>";
                    getId('Info_text').innerHTML = content;

                    gettimezone();

                    // If new update
                    var lastdate = JSON.parse(localStorage.getItem('MTUlastupdate'));
                    if (lastdate[MTUenv] != whenupd[idx]) {
                        lastdate[MTUenv] = whenupd[idx];
                        getId("Info_content").style.display="block";
                        getId("Info_server").style.opacity="1";
                        getId("Info_content").style.backgroundColor="rgba(" + [25,50,0,0.7].join(",") + ")";
                        localStorage.setItem('MTUlastupdate', JSON.stringify(lastdate));
                        if(typeof(timerupd) != 'undefined') { clearTimeout(timerupd ); }
                    } else {
                        timerupd = setTimeout(function() {
                            getId("Info_content").style.backgroundColor="rgba(" + [0,0,0,0.7].join(",") + ")";
                            getId('Info_content').style.display="none";
                            getId('Info_server').style.opacity="0.5";
                            clearTimeout(timermaphours);
                        }, 5000);
                    }
                }
            }, null);
        }
        catch (e) { console.error("Error @ upload data:", e); }

        setTimeout(Back_Info, 1000*60*30);
    }

    function gettimezone() {
        var a = getElementsByClassName("WazeControlPermalink")[0].innerHTML;
        var b = a.substring(a.indexOf("https")).split('?');
        var c = b[1].split(/"/g);
        var d = c[0].split('&amp;');
        for (i=0; d[i]; i++) {
            if (d[i].substring(0,3)=="lon") { var lon = d[i].substring(4); }
            if (d[i].substring(0,3)=="lat") { var lat = d[i].substring(4); }
        }
        try {
            console.log("https://maps.googleapis.com/maps/api/timezone/json?location="+ lat +","+ lon +"&timestamp="+ Math.floor(new Date().getTime()/1000) +"&language="+MTULang);
            var params = {url:"https://maps.googleapis.com/maps/api/timezone/json?location="+ lat +","+ lon +"&timestamp="+ Math.floor(new Date().getTime()/1000) +"&language="+MTULang, headers:{"User-Agent":"Mozilla/5.0", "Accept":"text/plain"}, data:null, method:"GET"};
            MTUDownloadHelper.add(params, function (data) {
                if (data.status == 'success') {
                    var timezone = JSON.parse(data.data);
                    tz = timezone.rawOffset*1000 + timezone.dstOffset*1000;
                    console.log("WME Map Tiles Update - Loading Time Zone Success");
                    getId('tzname').innerHTML=" ("+timezone.timeZoneId.replace(/\_/g,' ')+")";
                    maphours();
                }
            }, null);
        }
        catch (e) { console.error("Error @ upload data:", e); }
    }
    function maphours() {
        //Local time
        var d = new Date();
        var h = addZero(d.getHours());
        var m = addZero(d.getMinutes());
        var s = addZero(d.getSeconds());
        getId('localhours').innerHTML= h +":"+ m +":"+ s;

        //Map time
        var utc = d.getTime() + (d.getTimezoneOffset() * 60000);
        var dtz=utc+tz;
        var md = new Date(dtz);
        var mh = addZero(md.getHours());
        var mm = addZero(md.getMinutes());
        var ms = addZero(md.getSeconds());
        getId('maphours').innerHTML= mh +":"+ mm +":"+ ms;

        // UTC Time
        var ud = new Date(utc);
        var uh = addZero(ud.getHours());
        var um = addZero(ud.getMinutes());
        var us = addZero(ud.getSeconds());
        getId('utchours').innerHTML= uh +":"+ um +":"+ us;

        timermaphours = setTimeout(maphours, 1000);
    }
    MTUpdate_bootstrap();
}
var MTUscript = document.createElement('script');
MTUscript.textContent = '' + run_MTU.toString() + ' \n' + 'run_MTU();';
MTUscript.setAttribute('type', 'application/javascript');
document.body.appendChild(MTUscript);