WME Map Tiles Update

Show the last server update and different times

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

// ==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(' '); }
                    console.log(b);
                    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);

QingJ © 2025

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