WME Color Highlights City

Adds colours to road segments to show their status

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name                WME Color Highlights City
// @namespace           http://userscripts.org/users/419370
// @description         Adds colours to road segments to show their status
// @include             https://*.waze.com/editor*
// @include             https://*.waze.com/*/editor*
// @version             2.0.0.5
// @grant               GM_xmlhttpRequest
// ==/UserScript==

/* == meine City-Erweiterung ================================================= */


var aNurl;
var aNstatus;
var aNcnt = 100;

var testGM_TM;
var getURL;
var isCRX = false;
var new_version;
var ldr_version = "2.0.0.5";

var hilici = new Object();
hilici.CityKnown = new Array();
hilici.CityUnknown = new Array();
hilici.CityInProgress = new Array();
hilici.CityUnknown = [];
hilici.CityKnown = [];
hilici.CityInProgress = [];
hilici.ldr = ldr_version;

var _HiLiCi = document.createElement('script');


function _aNchecksCity() {
  var cityName = "";
  var countryName = "";
  var countryName2 = [];
  var hStr = "";
  var status = 0;
  var i;

  unsafeWindow.hilici.ldr = ldr_version;
  hilici.CityInProgress   = unsafeWindow.hilici.CityInProgress;
  hilici.CityKnown        = unsafeWindow.hilici.CityKnown;
  hilici.CityUnknown      = unsafeWindow.hilici.CityUnknown;
  console_log(2, "HiLiCi: Cities in progress *: " + hilici.CityInProgress.length +
			  " / known : " + hilici.CityKnown.length +
			  " / unknown : " + hilici.CityUnknown.length);

  // Are there any cities?
  if (hilici.CityInProgress.length > 0) {
	var h = hilici.CityInProgress[0].split(",");
	cityName = h[0];
	countryName = h[1];
	countryName2 = countryName.split("_");
	console_log(2, "HiLiCi: found City: " + cityName + " / Country: " + countryName);
	hStr = '"' + cityName + '"';
	//console.log("HiLiCi: aNchecksCity (aN) ?: " + cityName + ", " + countryName);
	// Search on Web
	aNstatus = undefined;
	aNurl = "http://neumeister.bplaced.net/scripts/waze/"+countryName+".txt";
	var ret = GM_xmlhttpRequest({
	  method: "GET",
	  url: aNurl,
	  headers: {
	    "Accept": "text/xml"            // If not specified, browser defaults will be used.
	  },
	  //synchronous: true,
	  //timeout: 500,
	  onerror: function(response) {
	  	console.log("HiLiCi: aNchecksCity (aN): " + cityName +" error :/");
	  	i = hilici.CityInProgress.indexOf(cityName+","+countryName);
	  	console.log("HiLiCi: aNchecksCity (aN): i: " + i);
	  	hilici.CityInProgress.splice((i==-1)?0:i,1);
		status = 500;
	    },
	  onload: function(response) {
	    console.log("HiLiCi:" + hStr + " Position: " + response.responseText.indexOf(hStr) + " Status: " + response.status);
	    i = hilici.CityInProgress.indexOf(cityName+","+countryName);
	    //console.log("HiLiCi: aNchecksCity (aN): i: " + i);
	    unsafeWindow.hilici.CityInProgress.splice((i==-1)?0:i,1);

	    // country is missing
	    if (response.status == 404) {
	  	console.log("HiLiCi: aNchecksCity (aN): Country not found: " + countryName);
	  	// unsafeWindow.hilici.CityKnown.splice(0, 0, cityName+","+countryName);
		status = 404;
	    } else if (response.status != 200) {
	  	console.log("HiLiCi: aNchecksCity (aN): Status: " + response.status);
	  	//alert("HiLiCi: aNchecksCity (aN): Status: " + response.status + " " + countryName);
		status = response.status;
	  	return true;
	    }

		if (status != 404)
		{
		  // Search in all cities
		  if (response.responseText.indexOf(hStr) >= 0) {
		    if (unsafeWindow.hilici.CityKnown.indexOf(cityName+","+countryName) == -1) {
		  	  unsafeWindow.hilici.CityKnown.splice(0, 0, cityName+","+countryName); // City found
		    }
		    console.log("HiLiCi: aNchecksCity (aN): " + cityName + " found in " + countryName + " :)");
		    return true;
		  } else {
		    if (-1 == unsafeWindow.hilici.CityUnknown.indexOf(cityName+","+countryName)) {
		  	if (unsafeWindow.hilici.CityUnknown.indexOf(cityName+","+countryName) == -1) {
		  	  alert("Unknown City: " + cityName + " (" + countryName + ")");
		  	  unsafeWindow.hilici.CityUnknown.splice(0, 0, cityName+","+countryName); // Unknown City
		  	}
		  	console.log("HiLiCi: aNchecksCity (aN): " + cityName +" not found :(");
		    }
		    return false;
		  }
		}
		else
		{
		  return true;
		}
	  }
	});

	// der 2. Versuch ohne State im Country-Namen. ;-)
	aNstatus = undefined;
	aNurl  = "http://neumeister.bplaced.net/scripts/waze/"+countryName2[0]+".txt";
	ret = GM_xmlhttpRequest({
	  method: "GET",
	  url: aNurl,
	  headers: {
	    "Accept": "text/xml"            // If not specified, browser defaults will be used.
	  },
	  //synchronous: true,
	  //timeout: 500,
	  onerror: function(response) {
	  	console.log("HiLiCi: aNchecksCity (aN): " + cityName +" error :/");
	  	i = hilici.CityInProgress.indexOf(cityName+","+countryName);
	  	console.log("HiLiCi: aNchecksCity (aN): i: " + i);
	  	hilici.CityInProgress.splice((i==-1)?0:i,1);
		status = 500;
	    },
	  onload: function(response) {
	    console.log("HiLiCi:" + hStr + " Position: " + response.responseText.indexOf(hStr) + " Status: " + response.status);
	    i = hilici.CityInProgress.indexOf(cityName+","+countryName);
	    //console.log("HiLiCi: aNchecksCity (aN): i: " + i);
	    //unsafeWindow.hilici.CityInProgress.splice((i==-1)?0:i,1);

	    // country is missing
	    if (response.status == 404) {
	  	console.log("HiLiCi: aNchecksCity (aN): Country not found: " + countryName);
		if (unsafeWindow.hilici.CityKnown.indexOf(cityName+","+countryName) == -1) {
		  unsafeWindow.hilici.CityKnown.splice(0, 0, cityName+","+countryName); // City found
		}
	  	nsafeWindow.hilici.CityKnown.splice(0, 0, cityName+","+countryName);
		status = 404;
	  	return true;
	    }
	    if (response.status != 200) {
	  	console.log("HiLiCi: aNchecksCity (aN): Status: " + response.status);
		status = response.status;
	  	return true;
	    }

		// Search in all cities
		if (response.responseText.indexOf(hStr) >= 0) {
		  if ((x=unsafeWindow.hilici.CityKnown.indexOf(cityName+","+countryName)) == -1) {
			unsafeWindow.hilici.CityKnown.splice(0, 0, cityName+","+countryName); // City found
		  }
		  console.log("HiLiCi: aNchecksCity (aN): " + cityName +" found in " + countryName2[0] + " :)");
		  return true;
		} else {
		  if (-1 == unsafeWindow.hilici.CityUnknown.indexOf(cityName+","+countryName)) {
			if (unsafeWindow.hilici.CityUnknown.indexOf(cityName+","+countryName) == -1) {
			  alert("Unknown City: " + cityName + " (" + countryName + ")");
			  unsafeWindow.hilici.CityUnknown.splice(0, 0, cityName+","+countryName); // Unknown City
			}
			console.log("HiLiCi: aNchecksCity (aN): " + cityName +" not found :(");
		  }
		  return false;
		}
	  }
	});
  }
  return true;
}

function setNew() {
  new_version = "";
  var ret = GM_xmlhttpRequest({
    method: "GET",
    url: "http://neumeister.bplaced.net/scripts/waze/version.txt",
    headers: {
	  "Accept": "text/xml"            // If not specified, browser defaults will be used.
    },
	onerror: function(response) {
	  alert("\'versionb.txt\' not found");
	},
    onload: function(response) {
	  new_version= response.responseText;
	  unsafeWindow.hilici.new = new_version;
	}
  });
  unsafeWindow.hilici.new = new_version;
  unsafeWindow.hilici.ldr = ldr_version;
}

function init_script() {
  var ret = GM_xmlhttpRequest({
    method: "GET",
    url: "http://neumeister.bplaced.net/scripts/waze/hilici2.user.js",
    headers: {
	  "Accept": "text/xml"            // If not specified, browser defaults will be used.
    },
	onerror: function(response) {
	  alert("\'HiLiCi\' not loaded");
	},
    onload: function(response) {
	  _HiLiCi.text = response.responseText;
	  _HiLiCi.type = 'text/javascript';
	  _HiLiCi.async = false;
	  _HiLiCi.onload = function() {
        };
	  document.head.appendChild(_HiLiCi);

	  unsafeWindow.hilici.new = new_version;
	}
  });
}

window.setInterval(_aNchecksCity, 1601);
window.setTimeout(setNew, 800);
init_script();