WME MapRaid Regions Turkey

Shows the regions in the Turkey map raid

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name			WME MapRaid Regions Turkey
// @author          Tom 'Glodenox' Puttemans
// @namespace		http://tomputtemans.com
// @description		Shows the regions in the Turkey map raid
// @include			/^https:\/\/(www|beta)\.waze\.com\/(?!user\/)(.{2,6}\/)?editor.*$/
// @version			2.3
// @grant			none
// @copyright		2017 Glodenox, based on work by 2015 rickzabel, based on work by 2014 davielde
// ==/UserScript==
setTimeout(initMapRaidOverlay, 1000);
var mapLayer,
	displayedArea = false;

function convertPoints(list) {
	return list.map(function(point) {
		return new OL.Geometry.Point(point[0], point[1]).transform(new OL.Projection("EPSG:4326"), Waze.map.getProjectionObject());
	});
}

function addRaidPolygon(raidLayer, groupPoints, color, name) {
	var style = {
		strokeColor: "Pink",
		strokeOpacity: 0.8,
		strokeWidth: 3,
		fillColor: '#FFFFFF', // Doesn't matter, opacity is set to 0
		fillOpacity: 0,
		label: name,
		labelOutlineColor: "Black",
		labelOutlineWidth: 3,
		fontSize: 14,
		fontColor: "Pink",
		fontOpacity: 0.85,
		fontWeight: "bold"
	};

	var ring = new OL.Geometry.LinearRing(convertPoints(groupPoints));
	var polygon = new OL.Geometry.Polygon([ ring ]);

	var feature = new OL.Feature.Vector(polygon, { name: name }, style);
	raidLayer.addFeatures([ feature ]);
}

function createLayerToggler(parentGroup, checked, name, toggleCallback) {
	var normalizedName = name.toLowerCase().replace(/\s/g, '');
	var group = document.createElement('li');
	var groupToggler = document.createElement('div');
	groupToggler.className = 'controls-container toggler';
	var groupSwitch = document.createElement('input');
	groupSwitch.id = 'layer-switcher-group_' + normalizedName;
	groupSwitch.className = 'layer-switcher-group_' + normalizedName + ' toggle';
	groupSwitch.type = 'checkbox';
	groupSwitch.checked = checked;
	groupSwitch.addEventListener('click', function() { toggleCallback(groupSwitch.checked); });
	groupToggler.appendChild(groupSwitch);
	var groupLabel = document.createElement('label');
	groupLabel.htmlFor = groupSwitch.id;
	groupLabel.style.display = 'block';
	var groupLabelText = document.createElement('div');
	groupLabelText.className = 'label-text';
	groupLabelText.style.textOverflow = 'ellipsis';
	groupLabelText.style.overflowX = 'hidden';
	groupLabelText.appendChild(document.createTextNode(name));
	groupLabel.appendChild(groupLabelText);
	groupToggler.appendChild(groupLabel);
	group.appendChild(groupToggler);
	if (parentGroup !== null) {
		parentGroup.querySelector('input.toggle').addEventListener('click', function(e) {
			groupSwitch.disabled = !e.target.checked;
			if (toggleCallback) {
				toggleCallback(groupSwitch.checked && e.target.checked);
			}
		});
		parentGroup.querySelector('ul.children').appendChild(group);
	} else {
		group.className = 'group';
		groupToggler.classList.add('main');
		var groupChildren = document.createElement('ul');
		groupChildren.className = 'children';
		group.appendChild(groupChildren);
		document.querySelector('.list-unstyled.togglers').appendChild(group);
	}
	return group;
}

function displayCurrentRaidLocation() {
	var raidMapCenter = Waze.map.getCenter();
	var raidCenterPoint = new OL.Geometry.Point(raidMapCenter.lon, raidMapCenter.lat);
	var locationDiv = document.querySelector('#topbar-container > div > div > div.location-info-region > div');
	var mapRaidDiv = locationDiv.querySelector('strong');
	if (mapRaidDiv === null) {
		mapRaidDiv = document.createElement('strong');
		mapRaidDiv.style.marginLeft = '5px';
		locationDiv.appendChild(mapRaidDiv);
	}

	for (i = 0; i < mapLayer.features.length; i++) {
		if (mapLayer.features[i].geometry.components[0].containsPoint(raidCenterPoint)) {
			mapRaidDiv.textContent = '[MapRaid Region: ' + mapLayer.features[i].attributes.name + ']';
			displayedArea = true;
			return;
		}
	}
	if (displayedArea) {
		mapRaidDiv.textContent = '';
		displayedArea = false;
	}
}

function initMapRaidOverlay() {
	if (typeof Waze === 'undefined' || typeof Waze.map === 'undefined' || typeof Waze.loginManager === 'undefined' || !document.querySelector('#topbar-container > div > div > div.location-info-region > div') || !document.getElementById('layer-switcher-group_display')) {
		setTimeout(initMapRaidOverlay, 800);
		return;
	}
	if (!Waze.loginManager.user) {
		Waze.loginManager.events.register("login", null, initMapRaidOverlay);
		Waze.loginManager.events.register("loginStatus", null, initMapRaidOverlay);
		if (!Waze.loginManager.user) {
			return;
		}
	}

	if (localStorage.MapRaidTurkeyVisible === undefined) {
		localStorage.MapRaidTurkeyVisible = true;
	}

	createLayerToggler(document.getElementById('layer-switcher-group_display').parentNode.parentNode, localStorage.MapRaidTurkeyVisible == "true", 'Map Raid: Turkey', function(checked) {
		localStorage.MapRaidTurkeyVisible = checked;
		mapLayer.setVisibility(checked);
	});

	mapLayer = new OL.Layer.Vector("Turkey MapRaid Regions", {
		uniqueName: "__TurkeyMapRaid"
	});

	addRaidPolygon(mapLayer, [
		[42.69561767578125,39.549059262117225],[43.010101318359375,39.76263058076128],[43.497716188430786,39.67894097730899],[43.43128893524408,39.204610728388005],[42.620661333203316,39.417696096875744],[42.69561767578125,39.549059262117225]
	], '#000000', 'Zone 1');
	addRaidPolygon(mapLayer, [
		[43.497716188430786,39.67894097730899],[44.004364013671875,39.5919321362032],[44.25567626953125,39.095962936305476],[44.29846487939358,38.975942418124326],[43.43128893524408,39.204610728388005],[43.497716188430786,39.67894097730899]
	], '#000000', 'Zone 2');
	addRaidPolygon(mapLayer, [
		[42.620661333203316,39.417696096875744],[43.43128893524408,39.204610728388005],[43.36888633668423,38.75509005308555],[42.38730479031801,39.00714958747274],[42.620661333203316,39.417696096875744]
	], '#000000', 'Zone 3');
	addRaidPolygon(mapLayer, [
		[43.43128893524408,39.204610728388005],[44.29846487939358,38.975942418124326],[44.35455322265625,38.81831117374662],[44.489366076886654,38.46627354266224],[43.36888633668423,38.75509005308555],[43.43128893524408,39.204610728388005]
	], '#000000', 'Zone 4');
	addRaidPolygon(mapLayer, [
		[42.38730479031801,39.00714958747274],[43.36888633668423,38.75509005308555],[43.3322748541832,38.490036313376024],[43.435463793575764,38.224909322395355],[42.12787080556154,38.54790520111358],[42.38730479031801,39.00714958747274]
	], '#000000', 'Zone 5');
	addRaidPolygon(mapLayer, [
		[43.36888633668423,38.75509005308555],[44.489366076886654,38.46627354266224],[44.53857421875,38.33734763569316],[44.32854317128658,38.00347620947195],[43.435463793575764,38.224909322395355],[43.3322748541832,38.490036313376024],[43.36888633668423,38.75509005308555]
	], '#000000', 'Zone 6');
	addRaidPolygon(mapLayer, [
		[42.12787080556154,38.54790520111358],[43.435463793575764,38.224909322395355],[43.635060377418995,37.70932128214528],[42.73123741149902,37.903477608621344],[42.60772705078125,38.06971703320484],[42.08930969238281,38.479394673276474],[42.12787080556154,38.54790520111358]
	], '#000000', 'Zone 7');
	addRaidPolygon(mapLayer, [
		[43.435463793575764,38.224909322395355],[44.32854317128658,38.00347620947195],[44.28863525390625,37.93986540897977],[44.67864990234375,37.72293542866175],[44.63932603597641,37.49316143117623],[43.635060377418995,37.70932128214528],[43.435463793575764,38.224909322395355]
	], '#000000', 'Zone 8');
	addRaidPolygon(mapLayer, [
		[42.73123741149902,37.903477608621344],[43.635060377418995,37.70932128214528],[43.846435546875,37.1570331488852],[42.762908935546875,37.32430451813815],[42.83294677734375,37.76637243960179],[42.73123741149902,37.903477608621344]
	], '#000000', 'Zone 9');
	addRaidPolygon(mapLayer, [
		[43.635060377418995,37.70932128214528],[44.63932603597641,37.49316143117623],[44.63470458984375,37.46613860234406],[44.85992431640625,37.3002752813443],[44.809112548828125,37.13842453422676],[44.636077880859375,37.16469418870222],[44.290008544921875,36.92793899776678],[44.119720458984375,37.08969207312267],[44.235076904296875,37.196424509917655],[44.034576416015625,37.289350362163624],[43.846435546875,37.1570331488852],[43.635060377418995,37.70932128214528]
	], '#000000', 'Zone 10');
	Waze.map.addLayer(mapLayer);
	mapLayer.setVisibility(localStorage.MapRaidTurkeyVisible == "true");

	var areaJumper = document.getElementById('mapraidDropdown');
	if (!areaJumper) {
		areaJumper = document.createElement('select');
		areaJumper.id = 'mapraidDropdown';
		areaJumper.style.marginTop = '4px';
		areaJumper.style.display = 'block';
		var areaPlaceholder = document.createElement('option');
		areaPlaceholder.textContent = 'Jump to Map Raid area';
		areaJumper.appendChild(areaPlaceholder);
		areaJumper.addEventListener('change', function() {
			Waze.map.setCenter(areaJumper.selectedOptions[0].centroid);
			areaJumper.selectedIndex = 0;
			areaJumper.blur();
		});
	}
	var areaJumperRegion = document.createElement('optgroup');
	areaJumperRegion.label = 'Turkey (Oct 15 - Oct 23, 2017)';
	mapLayer.features.forEach(function(feature) {
		var area = document.createElement('option');
		area.textContent = feature.attributes.name;
		area.centroid = feature.geometry.getCentroid().toLonLat();
		areaJumperRegion.appendChild(area);
	});
	areaJumper.appendChild(areaJumperRegion);

	if (!document.getElementById('mapraidDropdown')) {
		// Deal with new layout
		if (window.getComputedStyle(document.getElementById('edit-buttons').parentNode).display == 'flex') {
			var areaJumperContainer = document.createElement('div');
			areaJumperContainer.style.flexGrow = '1';
			areaJumperContainer.style.paddingTop = '6px';
			areaJumper.style.width = '80%';
			areaJumper.style.margin = '0 auto';
			areaJumperContainer.appendChild(areaJumper);
			document.getElementById('edit-buttons').parentNode.insertBefore(areaJumperContainer, document.getElementById('edit-buttons'));
		} else {
			document.getElementById('edit-buttons').parentNode.insertBefore(areaJumper, document.getElementById('edit-buttons'));
		}
	}

	displayCurrentRaidLocation();
	Waze.map.events.register("moveend", null, displayCurrentRaidLocation);
	Waze.map.events.register("zoomend", null, displayCurrentRaidLocation);
}