您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds colours to road segments to show their speeds
- // ==UserScript==
- // @name WME Speedlimits
- // @namespace https://greasyfork.org/cs/scripts/12402-wme-speeds
- // @author Martin Kolář (based from WME Color Highlights v. 1.98)
- // @description Adds colours to road segments to show their speeds
- // @match https://*.waze.com/*editor*
- // @version 0.4.11
- // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDowNjg3OEY2RjhFMEIxMUU1OTU1MUU5MjA0ODlFQjA1MCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDowNjg3OEY3MDhFMEIxMUU1OTU1MUU5MjA0ODlFQjA1MCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjA2ODc4RjZEOEUwQjExRTU5NTUxRTkyMDQ4OUVCMDUwIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjA2ODc4RjZFOEUwQjExRTU5NTUxRTkyMDQ4OUVCMDUwIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Dhzo6gAABIFJREFUeNqsV2tMU1kQnsWiVhG6Irrro1Br9IcJoMFH1j+AURLEB2CMGBWNIIgmZhMX/W+IupsYV+NzXR9IEE00+KpBjfiE4ApWs/5YHhbqA4EFWhArwg9nTs+9PffS1kthki/33plzZubcM3Nmju7aSNBKIYhliARELMKECOMyJ8KGsCLKEbcQn7Qo/UGDAzMQuxEZiLEane1BXEQcQNT7GxjkRzYasR/xGpE1COPAx2bxuQe4rkE5YEZU8pWPhMCJ5uZzXTO8DdB54c1FWBCT1IKwuAUweVUaRCQkgt5oBF1oKOP3d3WBy26HtvL78KH0KjifV6mnUsw8QSQjavzFAHlZgYgQmaFz4mB63g4wbszUtGx74XmwHT8Kzpp/1KI2xC9iXIgO6PmvihFnGDdlQ+zJUwH9f2tuDtjPDpj7CrEQ4aKPERkjZEEBIl0RCDt3QfThIwEHwE8py6G/uwc6qypENm1tMOKe6AAFXRF9yyvfvBWi/zwMQ6WJS5aC630zOK3VIns+T9MOKQv2cK/cwTZ3HsSeOAnDRaSLdAoUzG2yLBjHDxmZTLl5CgVXrpbCqdNnBigus1yX3588rYDii5eg4Y0NzNNNsHJFCiQtXeLRuW07WLM3idPXIn4N4qkxVkw1Y6ZiINTW1fldIRnfW7CfGSei58FDR6Dszl1PMGMGkW7VYZVMDiwWuVNS030aohWLkOjYcfd2rVu7hvHpSXS+sAi+o3sxORAtcibEJwww/ODhY59O/VdbC+0dnew9MTGePVOWJbMn8UnuR3d0EM8AmcaYTD6NJSWvgLwdO1lMuFwsjaGxsUmWT5s6lT3Dw8fLPFHuRbeZgjBUcTaHhChGvH33TvFN+0t4Xl0N+wr2Diob1LrJtu57k2hV0n7Tqi23y1hG1Lx4yYJvqERb0CUy+j/57iP0ej2kp63yFP2eHoiKipS/29s7FE8iUe5Fdxc50CByPttsihGkTFQophYpnzVzJoSP/5F937xl4UH7yB0LyCe5L91kW8eLg5yg/z8oB0NcnDyC9ppyWk2UapLyzI3r2ZjikssMEuVty1HMId3qwkS1YAy+rJY4X7G2R23J8rjY8AZ6e3uh+WOLu1mYEwMZaDw9LdVTw81mmBgxAVpb26Cz08FOws2ZGyAxIV5h7d/8XfDlgyKo/6ByTEdxs3gaxv51TnPt10r2C4VgzVLo/EwFk2KgG1EiSqiZGG7yopOqYbdUDan57JMk1MlQMzFcRLqc1c9EVh9vVuV+oIP3/YtkJ7B+UzNB9Xwo9Dr/N2g8MSCIDyIuqTuip4jlYjNKnQw1E9TZBLpyL8Yp6zZIf1x0oJ+3SYoLCP2JjxYLBI0aBWExMdoDLjcbWm/f8NaUJiFa/N2MfLblhnkL4eeVqe62PDISgg0G94Y6HOBqamJtefP1UnA8q/TmV4uWtlxsz6+oS/UQ6BVveOu13ozq+en4u5gdAVAf17HA1x3R393wC7+azUac5geHVqJm4W8+dzfXFfDtWLyep6iu5wYuc6iu5ze1Xs+/CTAA2tuMX1dHe2oAAAAASUVORK5CYII
- // @contributor FZ69617
- // ==/UserScript==
- /*jshint eqnull:true, eqeqeq:true, freeze:true, funcscope:true, maxerr:1000, curly:true, latedef:true, unused:strict, noarg:true, loopfunc:true, undef:true */
- /*jshint -W069 */
- /*jshint browser:true */
- /*global W, I18n, OpenLayers */
- (function() {
- // global variables
- var wmeSpeedsColors = ['#ff0000', '#321325', '#540804', '#BA1200', '#FA4A48', '#F39C6B', '#A7D3A6', '#ADD2C2', '#CFE795', '#F7EF81', '#BDC4A7', '#95AFBA', '#3F7CAC', '#0A369D', '#001C55'];
- var wmeSpeedsColorsMph = ['#ff0000', '#321325', '#702632', '#540804', '#A00027', '#BA1200', '#F15872', '#FA4A48', '#F39C6B', '#A7D3A6', '#ADD2C2', '#CFE795', '#F7EF81', '#BDC4A7', '#95AFBA', '#3F7CAC', '#0A369D', '#001C55', '#000000'];
- var wmeSpeedsMaxSpeed = 130;
- var wmeSpeedsMaxMphSpeed = 85;
- var wmeSpeedsLayer;
- var wmeSpeedsNonDrivableSpeedSegments = [5, 8, 10, 16, 18, 19, 20, 17, 15];
- var wmeSpeedsOtherDrivableSegments = [8, 20, 117, 115];
- var wmeSpeedsNonDrivableSegments = [5, 10, 16, 18, 19];
- var wmeSpeedsMiles = false;
- var wmeSpeedsKmphToMphRatio = 0.621371192;
- var wmeSpeedsInvertSpeedsColors, wmeSpeedsInvertNonDrivableSpeedsColors, wmeSpeedsHighlightOneWay, wmeSpeedsTransparentColors, wmeSpeedsNonDrivableSpeedsColors, wmeSpeedsOtherDrivableSpeedsColors, wmeSpeedsUnverified;
- // language settings
- var wmeSpeedsLanguage = 'en'; // default language
- var wmeSpeedsTranslation = [];
- // cs translation
- wmeSpeedsTranslation['cs'] = {
- 'scriptName': 'WME Speeds',
- 'layerName': 'Rychlosti',
- 'tabName': 'R',
- 'speedsHeadline': 'Barvy segmentů dle rychlostí',
- 'forumLink': '<a href="https://www.waze.com/forum/viewtopic.php?f=22&t=166406" target="_blank">České fórum</a>',
- 'author': 'Autor: <a href="https://www.waze.com/user/editor/martinkolar" target="_blank">martinkolar (5)</a>',
- 'version': 'Verze:',
- 'invertSpeedsTitleNonDrivable': 'Invertovat barvy rychlostí (pouze s možností nastavení rychlosti)',
- 'invertSpeedsContentNonDrivable': 'Zvýrazní jen segmenty bez rychlosti (sjízdné) (červená)',
- 'invertSpeedsTitle': 'Invertovat barvy rychlostí (všechny segmenty)',
- 'invertSpeedsContent': 'Zvýrazní jen segmenty bez rychlosti (nesjízdné) (červená)',
- 'noSpeedsSegmentsTitle': 'Nesjízdné segmenty s rychlostí',
- 'noSpeedsSegmentsContent': 'Zvýrazní nesjízdné segmenty s rychlostmi (růžová)',
- 'noSpeedsSegmentsOtherTitle': 'Jinak sjízdné segmenty s rychlostí',
- 'noSpeedsSegmentsOtherContent': 'Zvýrazní jinak sjízdné segmenty s rychlostmi (růžová)',
- 'transparentColorsTitle': 'Průsvitné barvy',
- 'transparentColorsContent': 'Průsvitné barvy',
- 'unverifiedSegmentsTitle': 'Nepotvrzené rychlosti na segmentech',
- 'unverifiedSegmentsContent': 'Zvýrazní nepotvrzené rychlosti na segmentech'
- };
- // sk translation
- wmeSpeedsTranslation['sk'] = {
- 'tabName': 'R',
- 'speedsHeadline': 'Farby segmentov podľa rýchlostí',
- 'forumLink': '<a href="https://www.waze.com/forum/viewtopic.php?f=22&t=166406" target="_blank">České fórum</a>',
- 'author': 'Autor: <a href="https://www.waze.com/user/editor/martinkolar" target="_blank">martinkolar (CZ)</a>',
- 'version': 'Verzia:',
- 'invertSpeedsTitleNonDrivable': 'Invertovať farby rýchlostí (pouze s možností nastavení rychlosti)',
- 'invertSpeedsContentNonDrivable': 'Zvýrazní iba segmenty bez rýchlosti (sjízdné) (červená)',
- 'invertSpeedsTitle': 'Invertovať farby rýchlostí',
- 'invertSpeedsContent': 'Zvýrazní iba segmenty bez rýchlosti (červená)',
- 'noSpeedsSegmentsTitle': 'Nezjazdné segmenty s rýchlosťou',
- 'noSpeedsSegmentsContent': 'Zvýrazní nezjazdné segmenty s rýchlosťami (ružová)',
- 'noSpeedsSegmentsOtherTitle': 'Inak zjazdné segmenty s rýchlosťou',
- 'noSpeedsSegmentsOtherContent': 'Zvýrazní inak zjazdné segmenty s rýchlosťami (ružová)',
- 'transparentColorsTitle': 'Priehľadné farby',
- 'transparentColorsContent': 'Spriehľadniť farby rýchlostí',
- 'unverifiedSegmentsTitle': 'Nepotvrdené rýchlosti na segmentoch',
- 'unverifiedSegmentsContent': 'Zvýrazniť nepotvrdené rýchlosti na segmentoch',
- 'scriptName': 'WME Speeds',
- 'layerName': 'Rýchlosti'
- };
- // en translation
- wmeSpeedsTranslation['en'] = {
- 'tabName': 'S',
- 'speedsHeadline': 'Colors by speed',
- 'forumLink': '<a href="https://www.waze.com/forum/viewtopic.php?f=819&t=166497" target="_blank">English discussion</a>',
- 'author': 'Author: <a href="https://www.waze.com/user/editor/martinkolar" target="_blank">martinkolar (CZ)</a>',
- 'version': 'Version:',
- 'invertSpeedsTitleNonDrivable': 'Invert speed (only segments with speed settings)',
- 'invertSpeedsContentNonDrivable': 'Highlight segments without set speed (drivable) (red)',
- 'invertSpeedsTitle': 'Invert speed',
- 'invertSpeedsContent': 'Highlight segments without set speed (red)',
- 'noSpeedsSegmentsTitle': 'Non-drivable segments with speeds',
- 'noSpeedsSegmentsContent': 'Highlight non-drivable segments with set speed (pink)',
- 'noSpeedsSegmentsOtherTitle': 'Other-drivable segments with speeds',
- 'noSpeedsSegmentsOtherContent': 'Highlight other-drivable segments with set speed (pink)',
- 'transparentColorsTitle': 'Transparent color',
- 'transparentColorsContent': 'Make speed\'s colors transparent',
- 'unverifiedSegmentsTitle': 'Highlight unverified segments',
- 'unverifiedSegmentsContent': 'Highlight unverified segments',
- 'scriptName': 'WME Speeds',
- 'layerName': 'Speeds'
- };
- // Heb translation
- wmeSpeedsTranslation['he'] = {
- 'tabName': 'S',
- 'speedsHeadline': 'מקרא מהירויות לפי צבעים',
- 'forumLink': '<a href="https://www.waze.com/forum/viewtopic.php?f=819&t=166497" target="_blank">דיון בפורום (אנגלית)</a>',
- 'author': 'יוצר התוסף: martinkolar (CZ)',
- 'version': 'גרסא:',
- 'invertSpeedsTitleNonDrivable': 'הדגש את כל המקטעים ללא מהירות מוגדרת',
- 'invertSpeedsContentNonDrivable': 'הדגש מקטעים מותרים לנהיגה ללא מהירות מוגדרת (אדום)',
- 'invertSpeedsTitle': 'הפוך הגדרות',
- 'invertSpeedsContent': 'הדגש מקטעים ללא מהירות מוגדרת (אדום)',
- 'noSpeedsSegmentsTitle': 'מקטעים שאינם ניתנים לנהיגה עם מהירות מוגדרת',
- 'noSpeedsSegmentsContent': 'הדגש מקטעים שאינם ניתנים לנהיגה עם מהירות מוגדרת (ורוד)',
- 'noSpeedsSegmentsOtherTitle': 'אחר- מקטעים המותרים לנהיגה עם מהירות מוגדרת',
- 'noSpeedsSegmentsOtherContent': 'הדגש מקטעים המותרים לנהיגה עם מהירות מוגדרת (ורוד)',
- 'transparentColorsTitle': 'מצב שקיפות',
- 'transparentColorsContent': 'הפעל מצב שקיפות צבעי מהירויות',
- 'unverifiedSegmentsTitle': 'הדגש מקטעים לא מאומתים',
- 'unverifiedSegmentsContent': 'הדגש מקטעים לא מאומתים',
- 'scriptName': 'WME Speeds',
- 'layerName': 'מהירויות'
- };
- // pl translation
- wmeSpeedsTranslation['pl'] = {
- 'scriptName': 'WME Speeds',
- 'layerName': 'Ograniczenia prękości',
- 'tabName': 'P',
- 'speedsHeadline': 'Kolory ograniczeń prędkości',
- 'forumLink': 'Forum: <a href="https://www.waze.com/forum/viewtopic.php?f=819&t=166497" target="_blank">angielskie</a> | <a href="https://www.waze.com/forum/viewtopic.php?f=22&t=166406" target="_blank">czeskie</a>',
- 'author': 'Autor: <a href="https://www.waze.com/user/editor/martinkolar" target="_blank">martinkolar (CZ)</a>',
- 'version': 'Wersja:',
- 'invertSpeedsTitleNonDrivable': 'Inwersja kolorów (tylko z opcją ograniczenia)',
- 'invertSpeedsContentNonDrivable': 'Zaznacza drogi bez ustawionych ograniczeń prędkości z dostępną opcją ograniczenia (czerwony)',
- 'invertSpeedsTitle': 'Inwersja kolorów',
- 'invertSpeedsContent': 'Zaznacza drogi bez ustawionych ograniczeń prędkości (czerwony)',
- 'noSpeedsSegmentsTitle': 'Nieprzejezdne drogi z prędkościami',
- 'noSpeedsSegmentsContent': 'Zaznacza nieprzejezdne drogi z ustawionymi ograniczeniami prędkości (różowy)',
- 'noSpeedsSegmentsOtherTitle': 'Inne przejezdne drogi z prędkościami',
- 'noSpeedsSegmentsOtherContent': 'Zaznacza inne przejezdne drogi z ustawionymi ograniczeniami prędkości (różowy)',
- 'transparentColorsTitle': 'Przeźroczyste kolory',
- 'transparentColorsContent': 'Przeźroczyste kolory ograniczeń',
- 'unverifiedSegmentsTitle': 'Niezweryfikowane prędkości',
- 'unverifiedSegmentsContent': 'Wyróżnia segmenty z niezweryfikowanymi ograniczeniami prędkości'
- };
- /* =========================================================================== */
- function highlightSpeedsSegments() {
- wmeSpeedsInvertSpeedsColors = getId('_wmeSpeedsInvert').checked;
- wmeSpeedsInvertNonDrivableSpeedsColors = getId('_wmeSpeedsInvertNonDrivable').checked;
- wmeSpeedsNonDrivableSpeedsColors = getId('_wmeSpeedsNonDrivable').checked;
- wmeSpeedsOtherDrivableSpeedsColors = getId('_wmeSpeedsOtherDrivable').checked;
- wmeSpeedsTransparentColors = getId('_wmeSpeedsTransparentColors').checked;
- wmeSpeedsUnverified = getId('_wmeSpeedsUnverifed').checked;
- wmeSpeedsHighlightOneWay = false;
- var roadGroupSelector = document.getElementById('layer-switcher-group_road');
- if (wmeSpeedsLayer.getVisibility() && roadGroupSelector.checked) {
- var speedDiv = wmeSpeedsMiles ? 5 : 10;
- var maxSpeed = wmeSpeedsMiles ? wmeSpeedsMaxMphSpeed : wmeSpeedsMaxSpeed;
- var speedsColors = wmeSpeedsMiles ? wmeSpeedsColorsMph : wmeSpeedsColors;
- var speedOpacity = wmeSpeedsTransparentColors ? 0.5 : 1;
- var speedValue = wmeSpeedsMiles ? kmphToMph : function(x) { return x; };
- var features = [];
- for (var seg in W.model.segments.objects) {
- var segment = W.model.segments.getObjectById(seg);
- if (!isOnScreen(segment)) {
- continue;
- }
- var attributes = segment.attributes;
- var roadType = attributes.roadType;
- if ((wmeSpeedsNonDrivableSpeedsColors && wmeSpeedsNonDrivableSegments.indexOf(roadType) !== -1) ||
- (wmeSpeedsOtherDrivableSpeedsColors && wmeSpeedsOtherDrivableSegments.indexOf(roadType) !== -1)) {
- if (typeof attributes.fwdMaxSpeed === 'number' || typeof attributes.revMaxSpeed === 'number') {
- features.push(new OpenLayers.Feature.Vector(segment.getOLGeometry().clone(), {}, {
- strokeColor: '#DC0073',
- strokeWidth: 8,
- strokeOpacity: speedOpacity
- }));
- }
- continue;
- }
- var speed1 = { index: 0, allow: attributes.fwdDirection, unverified: attributes.fwdMaxSpeedUnverified };
- var speed2 = { index: 0, allow: attributes.revDirection, unverified: attributes.revMaxSpeedUnverified };
- if (!speed1.allow && !speed2.allow) {
- continue;
- }
- if (speed1.allow && typeof attributes.fwdMaxSpeed === 'number') {
- speed1.value = speedValue(attributes.fwdMaxSpeed);
- speed1.exact = (speed1.value % speedDiv) === 0;
- if (speed1.value >= maxSpeed) {
- speed1.index = Math.ceil(maxSpeed / speedDiv);
- }
- else {
- speed1.index = Math.ceil(speed1.value / speedDiv);
- }
- }
- if (speed2.allow && typeof attributes.revMaxSpeed === 'number') {
- speed2.value = speedValue(attributes.revMaxSpeed);
- speed2.exact = (speed2.value % speedDiv) === 0;
- if (speed2.value >= maxSpeed) {
- speed2.index = Math.ceil(maxSpeed / speedDiv);
- }
- else {
- speed2.index = Math.ceil(speed2.value / speedDiv);
- }
- }
- speed1.color = speedsColors[speed1.index];
- speed2.color = speedsColors[speed2.index];
- if ((!wmeSpeedsInvertSpeedsColors && !wmeSpeedsInvertNonDrivableSpeedsColors) && ((speed1.index === 0 && speed2.index === 0) || (!speed2.allow && speed1.index === 0) || (!speed1.allow && speed2.index === 0))) {
- continue;
- }
- if (wmeSpeedsInvertSpeedsColors && ((speed1.index === 0 && speed2.index === 0) || (!speed2.allow && speed1.index === 0) || (!speed1.allow && speed2.index === 0))) {
- features.push(new OpenLayers.Feature.Vector(segment.getOLGeometry().clone(), {}, {
- strokeColor: '#ff0000',
- strokeWidth: 8,
- strokeOpacity: speedOpacity
- }));
- continue;
- }
- if (wmeSpeedsInvertNonDrivableSpeedsColors && ((speed1.index === 0 && speed2.index === 0) || (!speed2.allow && speed1.index === 0) || (!speed1.allow && speed2.index === 0)) && wmeSpeedsNonDrivableSpeedSegments.indexOf(roadType) === -1) {
- features.push(new OpenLayers.Feature.Vector(segment.getOLGeometry().clone(), {}, {
- strokeColor: '#ff0000',
- strokeWidth: 8,
- strokeOpacity: speedOpacity
- }));
- continue;
- }
- if (wmeSpeedsInvertSpeedsColors || wmeSpeedsInvertNonDrivableSpeedsColors) {
- continue;
- }
- if (wmeSpeedsHighlightOneWay && ((!attributes.fwdDirection && typeof attributes.fwdMaxSpeed === 'number') ||
- (!attributes.revDirection && typeof attributes.revMaxSpeed === 'number'))) {
- features.push(new OpenLayers.Feature.Vector(segment.getOLGeometry().clone(), {}, {
- strokeColor: attributes.fwdDirection ? '#ffffff' : '#999999',
- strokeDashstyle: '15 15',
- strokeWidth: 8,
- strokeOpacity: speedOpacity
- }));
- continue;
- }
- var oneSpeed = null;
- if (speed1.allow && speed2.allow) {
- if (speed1.index === 0 || speed2.index === 0) {
- features.push(new OpenLayers.Feature.Vector(segment.getOLGeometry().clone(), {}, {
- strokeColor: '#ff00ff',
- strokeWidth: 8,
- strokeOpacity: speedOpacity
- }));
- continue;
- }
- if ((speed1.index === speed2.index) && (speed1.exact === speed2.exact) &&
- (!wmeSpeedsUnverified || (speed1.unverified === speed2.unverified))) {
- oneSpeed = speed1;
- }
- }
- else if (speed1.allow) {
- oneSpeed = speed1;
- }
- else if (speed2.allow) {
- oneSpeed = speed2;
- }
- if (oneSpeed !== null) {
- if (wmeSpeedsUnverified && oneSpeed.unverified) {
- features.push(new OpenLayers.Feature.Vector(segment.getOLGeometry().clone(), {}, {
- strokeColor: oneSpeed.color,
- strokeDashstyle: '1 14',
- strokeLinecap: 'round',
- strokeWidth: 8,
- strokeOpacity: speedOpacity
- }));
- }
- else {
- features.push(new OpenLayers.Feature.Vector(segment.getOLGeometry().clone(), {}, {
- strokeColor: oneSpeed.color,
- strokeDashstyle: oneSpeed.exact ? 'none' : '4 1',
- strokeLinecap: oneSpeed.exact ? 'round' : 'butt',
- strokeWidth: 8,
- strokeOpacity: speedOpacity
- }));
- }
- continue;
- }
- if ((attributes.fwdDirection && attributes.fwdMaxSpeed === 126) ||
- (attributes.revDirection && attributes.revMaxSpeed === 126)) {
- features.push(new OpenLayers.Feature.Vector(segment.getOLGeometry().clone(), {}, {
- strokeColor: '#ff00ff',
- strokeWidth: 8,
- strokeOpacity: speedOpacity
- }));
- continue;
- }
- // draw two speeds
- var speed1Dotted = speed1.allow && wmeSpeedsUnverified && speed1.unverified;
- var speed2Dotted = speed2.allow && wmeSpeedsUnverified && speed2.unverified;
- if (speed1.allow) {
- if (speed1Dotted) {
- features.push(new OpenLayers.Feature.Vector(segment.getOLGeometry().clone(), {}, {
- strokeColor: speed1.color,
- strokeDashstyle: speed2Dotted ? '1 14' : '1 29',
- strokeLinecap: 'round',
- strokeWidth: 8,
- strokeOpacity: speedOpacity
- }));
- }
- else {
- features.push(new OpenLayers.Feature.Vector(segment.getOLGeometry().clone(), {}, {
- strokeColor: speed1.color,
- //strokeDashstyle: speed1.exact ? "15 15" : "4 1 4 1 4 1 0 15",
- //strokeDashstyle: speed1.exact ? "0 8 15 7" : "0 8 4 1 4 1 4 1 0 7",
- strokeDashstyle: speed1.exact ? (speed2Dotted ? '0 8 15 7' : '15 15') : (speed2Dotted ? '0 8 4 1 4 1 4 1 0 7' : '4 1 4 1 4 1 0 15'),
- strokeLinecap: 'butt',
- strokeWidth: 8,
- strokeOpacity: speedOpacity
- }));
- }
- }
- if (speed2.allow) {
- if (speed2Dotted) {
- features.push(new OpenLayers.Feature.Vector(segment.getOLGeometry().clone(), {}, {
- strokeColor: speed2.color,
- strokeDashstyle: '1 29',
- strokeLinecap: 'round',
- strokeWidth: 8,
- strokeOpacity: speedOpacity
- }));
- }
- else {
- features.push(new OpenLayers.Feature.Vector(segment.getOLGeometry().clone(), {}, {
- strokeColor: speed2.color,
- //strokeDashstyle: speed2.exact ? "0 15 15 0" : "0 15 4 1 4 1 4 1",
- //strokeDashstyle: speed2.exact ? (speed1Dotted ? "0 8 15 7" : "8 15 7 0") : (speed1Dotted ? "0 8 4 1 4 1 4 1 0 7" : "3 1 4 15 4 1 2 0"),
- strokeDashstyle: speed2.exact ? (speed1Dotted ? '0 8 15 7' : '0 15 15 0') : (speed1Dotted ? '0 8 4 1 4 1 4 1 0 7' : '0 15 4 1 4 1 4 1'),
- strokeLinecap: 'butt',
- strokeWidth: 8,
- strokeOpacity: speedOpacity
- }));
- }
- }
- } // end of loop
- wmeSpeedsLayer.removeAllFeatures();
- wmeSpeedsLayer.addFeatures(features);
- }
- } // end of function
- function makeSpeedsTab() {
- var addon = document.createElement('section');
- addon.innerHTML += '<h3 style="margin-bottom: 5px;">' + fe_t('speedsHeadline') + '</h3>';
- function optionHtml(id, title_t, content_t) {
- return '<label title="' + fe_t(content_t) + '"><input id="' + id + '" type="checkbox"/>' + fe_t(title_t) + '</label><br>';
- }
- addon.innerHTML += optionHtml('_wmeSpeedsInvert', 'invertSpeedsTitle', 'invertSpeedsContent');
- addon.innerHTML += optionHtml('_wmeSpeedsInvertNonDrivable', 'invertSpeedsTitleNonDrivable', 'invertSpeedsContentNonDrivable');
- addon.innerHTML += optionHtml('_wmeSpeedsNonDrivable', 'noSpeedsSegmentsTitle', 'noSpeedsSegmentsContent');
- addon.innerHTML += optionHtml('_wmeSpeedsOtherDrivable', 'noSpeedsSegmentsOtherTitle', 'noSpeedsSegmentsOtherContent');
- addon.innerHTML += optionHtml('_wmeSpeedsUnverifed', 'unverifiedSegmentsTitle', 'unverifiedSegmentsContent');
- addon.innerHTML += optionHtml('_wmeSpeedsTransparentColors', 'transparentColorsTitle', 'transparentColorsContent');
- var speedsForTab = wmeSpeedsMiles ? wmeSpeedsColorsMph : wmeSpeedsColors;
- addon.innerHTML += '<div style="margin-top: 10px;"></div>';
- for (var i = 1; i < speedsForTab.length; i++) {
- var actualSpeedForTab;
- if ((i + 1) === speedsForTab.length) {
- if (wmeSpeedsMiles) {
- actualSpeedForTab = ' > ' + wmeSpeedsMaxMphSpeed + ' mph';
- }
- else {
- actualSpeedForTab = ' > ' + wmeSpeedsMaxSpeed + ' km/h';
- }
- }
- else if (wmeSpeedsMiles) {
- actualSpeedForTab = (i * 5) + ' mph';
- }
- else {
- actualSpeedForTab = (i * 10) + ' km/h';
- }
- addon.innerHTML += '<div style="width: 28%; float: left;background-color: ' + speedsForTab[i] + ';padding:2px 0;border-radius:5px;color:' + getContrastColor(speedsForTab[i]) + ';font-size:14px;text-align:center;margin: 0 3px 3px;">' + actualSpeedForTab + '</div>';
- }
- addon.innerHTML += '<p style="font-size:11px;margin-top:15px;clear:both;">' + fe_t('forumLink') + '<br>' + fe_t('author') + '<br>' + fe_t('version') + ' <a href="https://greasyfork.org/scripts/12402" target="_blank">' + GM_info.script.version + '</a></p>';
- const { tabLabel, tabPane } = W.userscripts.registerSidebarTab("sidepanel-wme-speeds");
- tabLabel.innerHTML = '<img src="' + GM_info.script.icon + '" width="16" height="16" style="margin-top: -2px;">';
- tabLabel.title = 'WME Speeds';
- tabLabel.id = "sidepanel-wme-speeds";
- tabPane.appendChild(addon);
- return tabPane;
- }
- /* helper function */
- function getElementsByClassName(classname, node) {
- 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 getId(node) {
- return document.getElementById(node);
- }
- function changeLayer() {
- var roadGroupSelector = document.getElementById('layer-switcher-group_road');
- var layerSelector = document.getElementById('layer-switcher-item_speeds');
- if (roadGroupSelector.checked && layerSelector.checked) {
- highlightSpeedsSegments();
- }
- else {
- wmeSpeedsLayer.removeAllFeatures();
- }
- if (layerSelector.checked) {
- localStorage.DrawSegmentSpeeds = true;
- }
- else {
- localStorage.DrawSegmentSpeeds = false;
- }
- }
- function kmphToMph(kmph) {
- return Math.round(kmph * wmeSpeedsKmphToMphRatio);
- }
- function fe_t(name, params) { // function for translation
- if (typeof params === 'object') {
- var returnString = wmeSpeedsTranslation[wmeSpeedsLanguage][name];
- for (var i in params) {
- do {
- returnString = returnString.replace('{' + i + '}', params[i]);
- } while (returnString.indexOf('{' + i + '}') !== -1);
- }
- return returnString;
- }
- else {
- return wmeSpeedsTranslation[wmeSpeedsLanguage][name];
- }
- }
- function isOnScreen(segment) {
- var e = W.map.getExtent();
- var eg = e.toGeometry();
- return eg.intersects(segment.getOLGeometry());
- }
- function getContrastColor(hex_color) {
- var r = parseInt(hex_color.substr(1, 2), 16);
- var g = parseInt(hex_color.substr(3, 2), 16);
- var b = parseInt(hex_color.substr(5, 2), 16);
- var yiq = ((r * 299) + (g * 587) + (b * 114)) / 1000;
- return (yiq >= 128) ? 'black' : 'white';
- }
- /* =========================================================================== */
- async function initialiseSpeedsHighlights() {
- if (wmeSpeedsTranslation[I18n.locale] != null) {
- wmeSpeedsLanguage = I18n.locale;
- }
- wmeSpeedsLayer = new OpenLayers.Layer.Vector(fe_t('layerName'), {
- displayInLayerSwitcher: true,
- uniqueName: '__DrawSegmentSpeeds'
- });
- // I18n.translations.en.layers.name["__DrawSegmentSpeeds"] = fe_t('scriptName');
- W.map.addLayer(wmeSpeedsLayer);
- var roadGroupSelector = document.getElementById('layer-switcher-group_road');
- if (roadGroupSelector !== null) {
- var roadGroup = roadGroupSelector.parentNode.parentNode.getElementsByTagName('UL')[0];
- var toggler = document.createElement('li');
- var checkbox = document.createElement('wz-checkbox');
- checkbox.id = 'layer-switcher-item_speeds';
- checkbox.className = 'hydrated';
- checkbox.disabled = !roadGroupSelector.checked;
- if (localStorage.DrawSegmentSpeeds === 'true') {
- checkbox.checked = 'checked';
- }
- checkbox.appendChild(document.createTextNode(fe_t('layerName')));
- toggler.appendChild(checkbox);
- roadGroup.appendChild(toggler);
- checkbox.addEventListener('click', function(e) {
- wmeSpeedsLayer.setVisibility(e.target.checked);
- });
- roadGroupSelector.addEventListener('click', function(e) {
- wmeSpeedsLayer.setVisibility(e.target.checked & checkbox.checked);
- checkbox.disabled = !e.target.checked;
- });
- }
- if (localStorage.DrawSegmentSpeeds === 'true') {
- wmeSpeedsLayer.setVisibility(localStorage.DrawSegmentSpeeds === 'true');
- }
- else {
- wmeSpeedsLayer.setVisibility(false);
- }
- // begin periodic updates
- //window.setInterval(highlightSpeedsSegments,333);
- // trigger code when page is fully loaded, to catch any missing bits
- window.addEventListener('load', function() {
- var mapProblems = getId('map-problems-explanation');
- if (mapProblems !== null) {
- mapProblems.style.display = 'none';
- }
- });
- if (W.model.isImperial) {
- wmeSpeedsMiles = true;
- }
- var tabPane = makeSpeedsTab();
- await W.userscripts.waitForElementConnected(tabPane);
- // restore saved settings
- if (localStorage.WMESpeedsScript) {
- console.log('WME Speeds: Loading Options');
- var options = JSON.parse(localStorage.WMESpeedsScript);
- getId('_wmeSpeedsInvert').checked = options[1];
- getId('_wmeSpeedsNonDrivable').checked = options[2];
- getId('_wmeSpeedsOtherDrivable').checked = options[3];
- getId('_wmeSpeedsTransparentColors').checked = options[4];
- getId('_wmeSpeedsUnverifed').checked = options[5];
- getId('_wmeSpeedsInvertNonDrivable').checked = options[6];
- }
- // overload the WME exit function
- var saveWmeSpeedsOptions = function() {
- if (localStorage) {
- console.log('WME Speeds: Saving Options');
- var options = [];
- // preserve previous options which may get lost after logout
- if (localStorage.WMESpeedsScript) {
- options = JSON.parse(localStorage.WMESpeedsScript);
- }
- options[1] = getId('_wmeSpeedsInvert').checked;
- options[2] = getId('_wmeSpeedsNonDrivable').checked;
- options[3] = getId('_wmeSpeedsOtherDrivable').checked;
- options[4] = getId('_wmeSpeedsTransparentColors').checked;
- options[5] = getId('_wmeSpeedsUnverifed').checked;
- options[6] = getId('_wmeSpeedsInvertNonDrivable').checked;
- localStorage.WMESpeedsScript = JSON.stringify(options);
- }
- };
- // register some events...
- W.map.events.register('zoomend', null, highlightSpeedsSegments);
- W.map.events.register('changelayer', null, changeLayer);
- //W.map.events.register("movestart", null, highlightSpeedsSegments);
- //W.map.events.register("move", null, highlightSpeedsSegments);
- W.map.events.register('moveend', null, highlightSpeedsSegments);
- window.addEventListener('load', highlightSpeedsSegments);
- //W.map.baseLayer.events.register("loadend", null, highlightSpeedsSegments);
- W.model.events.register('mergeend', null, highlightSpeedsSegments);
- //W.vent.on("operationPending", highlightSpeedsSegments);
- W.app.layout.model.on('operationDone', highlightSpeedsSegments);
- // save options
- window.addEventListener('beforeunload', saveWmeSpeedsOptions, false);
- getId('_wmeSpeedsInvert').onclick = highlightSpeedsSegments;
- getId('_wmeSpeedsNonDrivable').onclick = highlightSpeedsSegments;
- getId('_wmeSpeedsOtherDrivable').onclick = highlightSpeedsSegments;
- getId('_wmeSpeedsTransparentColors').onclick = highlightSpeedsSegments;
- getId('_wmeSpeedsUnverifed').onclick = highlightSpeedsSegments;
- getId('_wmeSpeedsInvertNonDrivable').onclick = highlightSpeedsSegments;
- // initial highlight
- highlightSpeedsSegments();
- }
- /* engage! =================================================================== */
- document.addEventListener("wme-map-data-loaded", initialiseSpeedsHighlights, {once: true});
- })();
- /* end ======================================================================= */