WME Map Tiles Update

Show the last server update

当前为 2014-11-06 提交的版本,查看 最新版本

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name        WME Map Tiles Update
// @version     0.93
// @description Show the last server update
// @namespace   Sebiseba
// @include     https://www.waze.com/editor/*
// @include     https://www.waze.com/*/editor/*
// @include     https://editor-beta.waze.com/*
// @grant       GM_xmlhttpRequest
// @copyright   Sebiseba 2014
// ==/UserScript==

WME_MUpdate_Version = GM_info.script.version;

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

var icon_info="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";
var icon_close="iVBORw0KGgoAAAANSUhEUgAAAAsAAAALCAYAAACprHcmAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAABbSURBVHjajJBLFsAgCAOB5724OjmZXbUvxWjLys+MQryqpv2sYWaWmf4FApjBmx10rx84M70LACb/GnzJQgcXmAU1R6geVUsLzC8qIXbDKOGVhoqOz8cp417XAOaUPpt0thLzAAAAAElFTkSuQmCC";
var icon_sound="iVBORw0KGgoAAAANSUhEUgAAAAsAAAALCAYAAACprHcmAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAABPSURBVHjanJBBCsAwCATHkH/t232ZPQWKTTR0b8oMrFpEAODuASDJOGS8B0m2pBbuhLlbZmFVGxTJ/Uu47fwbzofOE7T797gFP3AFAjwDAFvBI9XFk8v8AAAAAElFTkSuQmCC";
var icon_nosound="iVBORw0KGgoAAAANSUhEUgAAAAsAAAALCAYAAACprHcmAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAABGSURBVHjalJFRDgAgCEK9/6nezeirVWqlH07GkDE0QJIM0MTZAAvsR5lQkgXihQ+xF3kuON/2M0ZJXHZuZ/62Ue6588ExABR+dP06GSeuAAAAAElFTkSuQmCC";

var UKdate=new Array();
var LOCdate=new Array();
var url = '';

/* helper function */

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 getFunctionWithArgs(func, args) {
    return (
        function () {
            var json_args = JSON.stringify(args);
            return function() {
                var args = JSON.parse(json_args);
                func.apply(this, args);
            }
        }
    )();
}

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; MTUI18n.translations.en.date.month_names[i]; i++) {
        UKdate.push(MTUI18n.translations.en.date.month_names[i]);
        LOCdate.push(MTUI18n.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 addZero(i) {
    if (i < 10) { i = "0" + i; }
    return i;
}

/* Bootstrap */

function MTUpdate_bootstrap() {
  if (typeof unsafeWindow === "undefined") {
    unsafeWindow    = ( function () {
      var dummyElem = document.createElement('p');
      dummyElem.setAttribute('onclick', 'return window;');
      return dummyElem.onclick();
    }) ();
  }

  /* begin running the code! */

    console.log("WME Map Tiles Update: " + WME_MUpdate_Version + " starting");
    MTUinit();
}

/* Verif */

function MTUinit(){
    // Waze object needed
    MTUWaze = unsafeWindow.Waze;
    if(typeof(MTUWaze) === 'undefined'){
        console.error("WME Map Tiles Update - MTUWaze : NOK");
        window.setTimeout(MTUinit, 500);
        return;
    }
     MTUlocation = MTUWaze.location;
    if(typeof(MTUlocation) === 'undefined'){
        console.error("WME Map Tiles Update - MTUlocation : NOK");
        window.setTimeout(MTUinit, 500);
        return;
    }    
    //    Traductions
     MTUI18n = unsafeWindow.I18n;
    if(typeof(MTUI18n) === 'undefined'){
        console.error("WME Map Tiles Update - MTUI18n : NOK");
        setTimeout(MTUinit, 500);
        return;
    }  
    // Waze GUI needed
   MTUhandle = getElementsByClassName("control-top olControlPanZoomBar olControlNoSelect")[0];
    if(MTUhandle == null){
        console.error("WME Map Tiles Update - MTUhandle : NOK");
        setTimeout(MTUinit, 1000);
        return;
    }
    
    // Detect Country Server (World/US/Israel)
    MTUenv = MTUlocation.code;
    console.info("WME Map Tiles Update - Serveur : " + MTUenv);
    switch(MTUenv){
        case "row":
            url = "http://status.waze.com/category/main/international-tile-updates/";
            break;
        case 'usa':
            url = "http://status.waze.com/category/main/north-america-tile-updates/";
            break;
        case 'il':
            url = "http://status.waze.com/category/main/israel-tile-updates/";
            break;
    }
    
    //    Then running
    lastupdate = localStorage.getItem("MTUlastupdate");
    if (!lastupdate) { localStorage.setItem("MTUlastupdate", ""); }
    
    // Translation
    MTULang = MTUI18n.locale;
    console.info("WME Map Tiles Update - Langue: " + MTULang);
    html(url); 
    trans_month();
    Back_Info();
}

/* Script */

function html(url) {
    
    //CSS
    var cssElt = document.createElement("style");
    cssElt.type = "text/css";
    var css = "#Info_div { z-index: 1040; margin-top:200px; margin-left:5px; }";
    css += "#Info_server { z-index: 1040; float:left; width:22px; height:22px; background: url(data:image/png;base64," +icon_info +") no-repeat left top; }";
    css += "#Info_text { z-index: 1045; float:left; width:250px; }";
    css += "#Info_content { z-index: 1040; float:left; height:170px; width:295px; margin-left:5px; line-height:20px; padding:8px 5px 0 5px; color:white; background-color: rgba(0,0,0,0.7); border-radius:5px; }";
    if (MTULang == "fr") { css += "#Info_text .td { width:125px; }"; }
    else { css += "#Info_text .td { width:90px; }"; }
    css += "#Info_close { z-index: 1050; 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"; });
    divicon.onmouseout=  (function() { getId("Info_content").style.display="none"; getId("Info_server").style.opacity="0.5"; });
    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";
        getFunctionWithArgs(Back_Info, []); });
    divinfo.appendChild(divclose);
	
    MTUhandle.appendChild(div);   
    console.log("WME Map Tiles Update - HTML OK");
}

function Back_Info() {
    //Request
    var ret = GM_xmlhttpRequest( {
        method:  "GET",
        url:     url,
        headers: { "Accept": "text/xml" },
        onerror: function(r) { console.log("WME Map Tiles Update: Error: " + r); },
        onload:  function(r) { 
            
            // List of updates            
            var MTUposStart = [], idx = r.responseText.indexOf("<article id=\"post-");
            while (idx != -1) {
                MTUposStart.push(idx);
                idx = r.responseText.indexOf("<article id=\"post-", idx + 1);
            }

            var MTUposEnd = [], idx = r.responseText.indexOf("</article>");
            while (idx != -1) {
                MTUposEnd.push(idx);
                idx = r.responseText.indexOf("</article>", idx + 1);
            }  
            
            var MTUfirstpost =r.responseText.substring(MTUposStart[0],MTUposEnd[0]);
            var MTUsecondpost=r.responseText.substring(MTUposStart[1],MTUposEnd[1]);
            
            // Delays ?
            if (MTUfirstpost.indexOf("successfully updated to") != -1) { var MTUpost=MTUfirstpost; }
            else { 
                var MTUpost=MTUsecondpost, MTUdelays=MTUfirstpost;
                //if (MTUdelays) { getId("Info_content").style.backgroundColor="rgba(" + [60,0,0,0.8].join(",") + ")"; }
            }
            
            // Last Update
            var a=MTUpost.substring(MTUpost.indexOf("status.waze.com"),MTUpost.indexOf("bookmark"));
            var b = a.split(new RegExp("[ /;]+", "g"));
            MTUdate = b[4].split('-');
            MTUtime1 = MTUdate[10].substring(0,2) +":"+ MTUdate[10].substring(2,4);
            MTUlastdate = b[4].substring(44);
            
            // posted in
            var a=MTUpost.substring(MTUpost.indexOf("datetime"),MTUpost.indexOf("</time>"));
            var b = a.split('>');
            MTUdate2 = b[1].split(' ');
            var c = b[0].split('T');
            MTUtime2 = c[1].substring(0,5);
            
          
            // UTC to local time
            MTUtime1
            var step = new Date().getTimezoneOffset()/60;
            var localtime1=MTUdate[10].substring(0,2) - step +":"+ MTUdate[10].substring(2,4);
            if ((MTUtime2.substring(0,2) - step) < 10) { var localtime2="0"+ (MTUtime2.substring(0,2) - step) +":"+ MTUtime2.substring(3,5); }
            else { var localtime2=MTUtime2.substring(0,2) - step +":"+ MTUtime2.substring(3,5); }
            
            // Post dates
            if (MTULang == "fr") { 
                var lang = new Array("Mis &agrave; jour jusqu'au","Fait le","(Retard)","Heure locale","Heure carte");
                var date1=MTUdate[8] +" "+ translate(MTUdate[7]) +" "+ MTUdate[9];
                var date2=MTUdate2[1].replace(',','') +" "+ translate(MTUdate2[0]) +" "+ MTUdate2[2];
            }
            else if (MTULang == "pt-BR" || MTULang == "pt-PT") {
                var lang = new Array("Dados de","Efetuado em","(Atraso)","Hora local","Hora mapa");
                var date1=MTUdate[8] +" de "+ translate(MTUdate[7]) + " de "+ MTUdate[9];
                var date2=MTUdate2[1].replace(',','') +" de "+ translate(MTUdate2[0]) + " de " + MTUdate2[2];
            }
            else { 
                var lang = new Array("Last update","Performed","(Delay)","Home time","Map time");
                var date1=translate(MTUdate[7]) +" "+ MTUdate[8] +", "+ MTUdate[9];
                var date2=translate(MTUdate2[0]) +" "+ MTUdate2[1] +" "+ MTUdate2[2];
            }
            var serv=translate_server(MTULang);
            var content = "<table style='width:285px;'><tr><td class='td'>" + serv + " : </td><td><b>" + MTUI18n.translations[MTULang].envs[MTUenv] +" ";
            if (MTUdelays) { content += "<span style='color:#F00;'> "+lang[2]+"</span>"; }
            content += " </b></td></tr>";
            content += "<tr><td class='td'>"+ lang[0] + " :</td><td><span style='color:#93C4D3;'><b>" + date1 + "</b></span></td></tr>";
            content += "<tr><td class='td'>&nbsp;</td><td><span style='color:#59899e;'><b>"+ MTUtime1 +" UTC / "+ localtime1 +" local</b></span></td></tr>";
            content += "<tr><td class='td'>"+ lang[1] + " :</td><td><span style='color:#93C4D3;'><b>" + date2 + "</b></span></td></tr>";
            content += "<tr><td class='td'>&nbsp;</td><td><span style='color:#59899e;'><b>"+ MTUtime2 +" UTC / "+ localtime2 +" local</b></span></td></tr>";
            content += "<tr><td colspan='2' class='td'><div style='height:1px; background-color:#59899e;'></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:#93C4D3; font-weight:bold; font-size:10px; float:left; padding-left:5px;'></div></td></tr></table>";
            getId('Info_text').innerHTML = content;
            gettimezone();
            
            // If new date
            var lastdate = localStorage.getItem("MTUlastupdate");
            if (lastdate != MTUlastdate) { 
                getId("Info_content").style.display="block";
                getId("Info_server").style.opacity="1";
                getId("Info_content").style.backgroundColor="rgba(" + [25,50,0,0.8].join(",") + ")";
                localStorage.setItem("MTUlastupdate", MTUlastdate);
                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"; }, 5000);
            }
        }
    } );
    
    setTimeout(Back_Info, 1000*60);
}
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); }
    } 
    var a = Math.floor(new Date().getTime()/1000);
    timezone="";
    var ret = GM_xmlhttpRequest( {
        method:        "GET",
        url:        "https://maps.googleapis.com/maps/api/timezone/json?location="+ lat +","+ lon +"&timestamp="+ a +"&language="+MTULang,
        headers:    { "Accept": "text/xml" },
        onload:        function(r) { 
            timezone = JSON.parse(r.responseText); 
            tz = timezone.rawOffset;
            console.log("WME Map Tiles Update - Loading Time Zone Success");
            getId('tzname').innerHTML=" ("+timezone.timeZoneId+")";
            maphours();
        },
        onerror: function(r) { console.error("WME Map Tiles Update - Loading Time Zone failed"); }            
    } );
    setTimeout(gettimezone, 30000); // No more (Google > Users of the free API: 2,500 requests per 24 hour period. 5 requests per second.)
}
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 offset = new Date().getTimezoneOffset()*60;
    var dtz = new Date().getTime()+ (tz +offset)*1000;
    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;
    setTimeout(maphours, 1000);
}

/* begin running the code! */
MTUpdate_bootstrap();