Greasy Fork is available in English.

WME Map Tiles Update

Show the last server update

Verzia zo dňa 18.09.2014. Pozri najnovšiu verziu.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, Greasemonkey alebo Violentmonkey.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie, ako napríklad Tampermonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, % alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey alebo Userscripts.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie, ako napríklad Tampermonkey.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie správcu používateľských skriptov.

(Už mám správcu používateľských skriptov, nechajte ma ho nainštalovať!)

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

(Už mám správcu používateľských štýlov, nechajte ma ho nainštalovať!)

// ==UserScript==
// @name        WME Map Tiles Update
// @version     0.82
// @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;

var icon_info="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";
var icon_close="iVBORw0KGgoAAAANSUhEUgAAAAsAAAALCAYAAACprHcmAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAABbSURBVHjajJBLFsAgCAOB5724OjmZXbUvxWjLys+MQryqpv2sYWaWmf4FApjBmx10rx84M70LACb/GnzJQgcXmAU1R6geVUsLzC8qIXbDKOGVhoqOz8cp417XAOaUPpt0thLzAAAAAElFTkSuQmCC";

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

/**
Thanks to dummyd2 and Myriades for their help and optimizations
**/

/* 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; 
}

/* 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, 500);
        return;
    }
    
    // Detect Country Server (World/US/Israel)
    var MTUenv = MTUlocation.code;
    console.info("WME Map Tiles Update - Serveur : " + MTUenv);
    var url = '';
    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", ""); }
    
    MTULang = MTUI18n.locale;
    html(url); 
    trans_month();
    Back_Info(url,MTUenv);
}

/* 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_content { z-index: 1040; float:left; width:300px; height:70px; margin-left:5px; padding:8px 0 0 5px; color:white; background-color: rgba(0,0,0,0.6); border-radius:5px; }";
    css += "#Info_text { z-index: 1045; float:left; }";
    css += "#Info_close { z-index: 1045; 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_server').style.opacity="0.5"; getId('Info_content').style.display="none"; });
    divinfo.appendChild(divclose);
	
    MTUhandle.appendChild(div);   
    console.log("WME Map Tiles Update - HTML OK");
}

function Back_Info(url,MTUenv) {
    //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) { 
            // Last update
            var MTUposStart = r.responseText.indexOf("successfully-updated-to-");
            var MTUposEnd = r.responseText.indexOf("vcard");
            var MTULastUpdate = r.responseText.substring(MTUposStart,MTUposEnd);
            var MTUDate = MTULastUpdate.split(new RegExp("[ /;]+", "g"));
            var MTUlastdate = MTUDate[0].substring(24);
            var MTUdate = MTUlastdate.split('-');

            // When
            var MTUpos2 = MTULastUpdate.indexOf("datetime"); 
            var MTUDate2 = MTULastUpdate    .substring(MTUpos2).split(new RegExp("[>;]+", "g"));
            MTUDate2 = MTUDate2[1].split(new RegExp("[<;]+", "g"));
            var MTUdate2 = MTUDate2[0].split(' ');
            console.info("WME Map Tiles Update - Text: " + MTUDate2[0]);

            // Detect Language
            var MTULang = MTUI18n.locale;
            console.info("WME Map Tiles Update - Langue: " + MTULang);

            // Post dates
            if (MTULang == "fr") { var txt1 ="Mis &agrave; jour jusqu'au", txt2="Fait le", date1=MTUdate[1] +" "+ translate(MTUdate[0]) +" "+ MTUdate[2], date2=MTUdate2[1].replace(',','') +" "+ translate(MTUdate2[0]) +" "+ MTUdate2[2]; }
            else { var txt1 ="Last update", txt2="Performed", date1=translate(MTUdate[0]) + " " + MTUdate[1] + ", " + MTUdate[2], date2=translate(MTUdate[0]) + " " + MTUdate2[1] + " " + MTUdate2[2]; }
            var serv=translate_server(MTULang), time=MTUdate[3] +" "+ MTUdate[4];
                var content = "<b>" + serv + " : </b>" + MTUI18n.translations[MTULang].envs[MTUenv] +" <br />";
                content += txt1 + " : <span style='color:#93C4D3;'><b>" + date1 + "</b></span> <span style='color:#59899e;'><b>" + time + "</b></span><br/>";
                content += txt2 + " : <span style='color:#93C4D3;'><b>" + date2 + "</b></span>";
               getId('Info_text').innerHTML = content;

            // If new date
            var lastdate = localStorage.getItem("MTUlastupdate");
            if (lastdate != MTUlastdate) { 
                getId("Info_content").style.display="block";
                getId("Info_server").style.opacity="1";
                localStorage.setItem("MTUlastupdate", MTUlastdate);
            }
            setTimeout(function() { getId('Info_content').style.display="none"; getId('Info_server').style.opacity="0.5"; }, 5000);
        }
    } );
    
    setTimeout(getFunctionWithArgs(Back_Info, [url, MTUenv]), 1000*60*30);
}

/* begin running the code! */

MTUpdate_bootstrap();