WME Map Tiles Update

Show the last server update

目前為 2014-11-26 提交的版本,檢視 最新版本

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

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

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name        WME Map Tiles Update
// @version     1.00
// @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 UKdate=[], UKdateabbr=[], LOCdate=[], update=[], url = '', idx = '';

/* 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]);
        UKdateabbr.push(MTUI18n.translations.en.date.abbr_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 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;
}

/* 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 '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 = 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 += ".td { padding-right:15px; }";
    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; }";
    css += "#Info_content { z-index: 1040; 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_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";
        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";
        getFunctionWithArgs(Back_Info, []); });
    divinfo.appendChild(divclose);

    MTUhandle.appendChild(div);   
    //console.log("WME Map Tiles Update - HTML OK");
}
function Back_Info() {
    lastupd=[]; whenupd=[];
    var ret = GM_xmlhttpRequest( { 
       method:  "GET",
       url:     'http://status.waze.com/category/main/feed/',
       headers: { "Accept": "text/xml" },
       onerror: function(r) { console.log("WME Map Tiles Update: Error: " + r); },
       onload:  function(r) { 
           // Get XML data
           var parser=new DOMParser();
           var xml = parser.parseFromString(r.responseText,'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);
           }
           update.sort();
           
           // Last updates by server
           for (var i=0; update[i]; i++) { 
               if (update[i][1] == "North America Tile Updates") { whenupd[0]=update[i][0]; lastupd[0]=update[i][2]; }
               else if (update[i][1] == "International Tile Updates") { whenupd[1]=update[i][0]; lastupd[1]=update[i][2]; }
               else if (update[i][1] == "Israel Tile Updates") { 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: "+ update[i]);
           }

           // Date
           var a = whenupd[idx].split(' ');
           var b = lastupd[idx].substring(lastupd[idx].indexOf("updated to:")).split(' ');
           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");
               var whendate=a[1] +" "+ translateabbr(a[2]) +" "+ a[3];
               var lastdate=b[3].replace(',','') +" "+ translate(b[2]) +" "+ b[4];
               if (c) { 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");
               var whendate=a[1] +" "+ translate(a[2]) +" "+ a[3];
               var lastdate=b[3].replace(',','') +" "+ translate(b[2]) +" "+ b[4];
               if (c) {var probdate=c[1] +" "+ translate(c[2]) +" "+ c[3]; }
           }
           else { 
               var lang = new Array("Last update","Performed","Last probem","Home time","Map time");
               var whendate=translateabbr(a[2]) +" "+ a[1] +", "+ a[3];
               var lastdate=b[2] +" "+ b[3] +" "+ b[4];
               if (c) {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>" + MTUI18n.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[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);
           }
       }
    } );
    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); }
    } 
    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"); }            
    } );
}
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;
    timermaphours = setTimeout(maphours, 1000);
}

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