您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Facilitates the standardization of segments
当前为
// ==UserScript== // @name WAZEPT Segments // @version 2020.08.23 // @description Facilitates the standardization of segments // @author J0N4S13 ([email protected]) // @include /^https:\/\/(www|beta)\.waze\.com\/(?!user\/)(.{2,6}\/)?editor.*$/ // @exclude https://www.waze.com/user/*editor/* // @exclude https://www.waze.com/*/user/*editor/* // @grant none // @namespace https://greasyfork.org/users/218406 // ==/UserScript== (function() { var version = GM_info.script.version; setTimeout(function() {var myVar = setInterval(myTimer ,500);}, 2000); var indexselected = ""; var valueselected = ""; var array_data = {}; var array_roads = {}; function receivedata() { return new Promise(resolve => { var url_data = "https://spreadsheets.google.com/feeds/list/1s_vcC-ENS7JdkVmVH2QceGMA058tan2UUPlQGd6AhwU/1/public/values?alt=json"; $.getJSON(url_data, function(data) { var entry = data.feed.entry; $(entry).each(function(){ var elem = [this.gsx$emoji.$t, this.gsx$descricao.$t, this.gsx$bloqueio.$t]; array_data[ this.gsx$funcionalidade.$t ] = elem; array_roads[this.gsx$funcionalidade.$t] = [this.gsx$emoji.$t, this.gsx$descricao.$t]; }); }); var timer = setInterval(check_data, 100); function check_data() { if(eval("array_data['SEG_ESTACIONAMENTO'] !== undefined")) { clearInterval(timer); resolve('true'); } } }); } function optionsUser() { var $auto_link; var $settings = $('<li><a href="#sidepanel-LAND" data-toggle="tab" aria-expanded="true">LAND</a></li>'); $("#user-tabs ul").append($settings); var $home = $('<div id="sidepanel-LAND" class="tab-pane"><b>WME Landmark</b><br><br><b><i>Definições</i></b><br><br>'); var div_sidepnale = document.createElement("div"); div_sidepnale.id = "sidepanel-LAND"; div_sidepnale.className = "tab-pane"; var label_home = document.createElement("label"); label_home.innerHTML = 'WAZEPT Landmark (Version: ' + version + ")"; label_home.style.cssText = 'font-size: 15px;color:blue;'; div_sidepnale.appendChild(label_home); $("div.tab-content")[0].prepend(div_sidepnale); } async function dataCall() { var result = await receivedata(); //optionsUser(); } setTimeout(() => { dataCall(); }, 500); function myTimer() { var n_bloqueio; var nivel; var lvl_atual; var lvl_max; var typeData = null; if(eval("W.selectionManager.getSelectedFeatures()[0] !== undefined")) typeData = W.selectionManager.getSelectedFeatures()[0].model.type; if(typeData == "segment") { if (!$("#signsroad").length) { var signsroad = document.createElement("div"); signsroad.id = 'signsroad'; $.each(array_roads, function(func , emoji) { // The sign background var addsign = document.createElement("div"); addsign.id = 'sign_' + func; // Get width/height of sign background img addsign.style.cssText = 'cursor:pointer;float:left;width:34px;height:34px;'; // Credits for some of these parts go to t0cableguy & Rickzabel addsign.onclick = function() { indexselected = func; if(indexselected == 'SEG_ESTACIONAMENTO') { defineRoadType(20); defineSpeed("30"); defineLockRankRoad(array_data['SEG_ESTACIONAMENTO'][0]); defineStreetRoad(""); } if(indexselected == 'SEG_SECUNDARIA') { defineRoadType(1); defineSpeed("50"); defineLockRankRoad(array_data['SEG_SECUNDARIA'][0]); } if(indexselected == 'SEG_PRINCIPAL') { defineRoadType(2); defineSpeed("50"); defineLockRankRoad(array_data['SEG_PRINCIPAL'][0]); } if(indexselected == 'SEG_MUNICIPAL') { defineRoadType(7); defineSpeed("90"); defineLockRankRoad(array_data['SEG_MUNICIPAL'][0]); } if(indexselected == 'SEG_NACIONAL') { defineRoadType(6); defineSpeed("90"); defineLockRankRoad(array_data['SEG_NACIONAL'][0]); } if(indexselected == 'SEG_RESERVADA') { defineRoadType(3); defineSpeed("100"); defineLockRankRoad(array_data['SEG_RESERVADA'][0]); } if(indexselected == 'SEG_AUTOESTRADA') { defineRoadType(3); defineSpeed("120"); defineLockRankRoad(array_data['SEG_AUTOESTRADA'][0]); } if(indexselected == 'LD_ROTUNDA') { let coords = []; let segsfeitos = []; let segmentos = W.selectionManager.getSelectedFeatures()[0].model.getRoundabout().attributes.segIDs; let primeiro = W.selectionManager.getSelectedFeatures()[0].model.attributes.id; let segmento = primeiro; let feitos = 0; do{ let seg = W.selectionManager.model.segments.getObjectById(segmento); let geo = seg.geometry.components for (let i=0; i<geo.length - 1; i++) { let linha = [geo[i].x, geo[i].y]; coords.push(linha); } W.selectionManager.model.nodes.getObjectById(seg.attributes.toNodeID).attributes.segIDs.forEach(function(aux){ if(aux != segmento && segmentos.includes(aux) && !segsfeitos.includes(aux)) { segsfeitos.push(segmento); segmento = aux; } }); feitos++; } while (feitos < segmentos.length) let AddLandmark= require("Waze/Action/AddLandmark"); var wazefeatureVectorLandmark = require("Waze/Feature/Vector/Landmark"); var poi = new wazefeatureVectorLandmark(); var geometry = new OpenLayers.Geometry.Polygon(); var TabLine2 = []; for (var n=0; n < coords.length; n++) { var point = new OpenLayers.Geometry.Point(coords[n][0] ,coords[n][1]); TabLine2.push(point); } var LineString2 = new OpenLayers.Geometry.LinearRing(TabLine2); poi.geometry = new OpenLayers.Geometry.Polygon(LineString2); poi.attributes.categories = new Array("FARM","JUNCTION_INTERCHANGE"); let rank = array_data['LD_ROTUNDA'][0]; rank--; let bloquear; if(W.loginManager.user.rank >= rank) bloquear = rank; else bloquear = W.loginManager.user.rank; poi.attributes.lockRank = bloquear; W.model.actionManager.add(new AddLandmark(poi)); } if(indexselected == 'DATA_PORTAGENS') { let myRoad = W.selectionManager.getSelectedFeatures()[0].model.attributes; var from = ""; var to = ""; var sentido = ""; if(myRoad.fwdDirection == true && myRoad.revDirection == true) { $( "#divSentidos" ).show(); } else { if(myRoad.fwdDirection == true) //A to B { from = myRoad.fromNodeID; to = myRoad.toNodeID; sentido = "TRUE"; } else if(myRoad.revDirection == true)//B to A { from = myRoad.toNodeID; to = myRoad.fromNodeID; sentido = "FALSE"; } var $temp = $("<input>"); $("body").append($temp); $temp.val(sentido + "|" + $('a[class=permalink]').attr('href') + "|" + from + "|" + to).select(); document.execCommand("copy"); $temp.remove(); } } } if($('span[class=full-address]').text().indexOf('Portugal') != -1 || func == "DATA_PORTAGENS") { var emojivalue = document.createElement("div"); emojivalue.id = 'emoji_' + func; emojivalue.style.cssText = 'text-align:center;font-size:14px;visibility:visible;'; emojivalue.innerHTML = emoji[0]; emojivalue.title = emoji[1]; addsign.appendChild(emojivalue); signsroad.appendChild(addsign); } }); var btnAB = document.createElement("button"); btnAB.innerHTML = 'A->B'; btnAB.id = 'btnAB'; btnAB.style.cssText = 'height: 20px;font-size:11px'; btnAB.onclick = function() { let myRoad = W.selectionManager.getSelectedFeatures()[0].model.attributes; if(myRoad.fwdDirection == true) //A to B { var $temp = $("<input>"); $("body").append($temp); $temp.val("TRUE" + "|" + $('a[class=permalink]').attr('href') + "|" + myRoad.fromNodeID + "|" + myRoad.toNodeID).select(); document.execCommand("copy"); $temp.remove(); } } var btnBA = document.createElement("button"); btnBA.innerHTML = 'B->A'; btnBA.id = 'btnBA'; btnBA.style.cssText = 'height: 20px;font-size:11px'; btnBA.onclick = function() { let myRoad = W.selectionManager.getSelectedFeatures()[0].model.attributes; if(myRoad.revDirection == true) //B to A { var $temp = $("<input>"); $("body").append($temp); $temp.val("FALSE" + "|" + $('a[class=permalink]').attr('href') + "|" + myRoad.toNodeID + "|" + myRoad.fromNodeID).select(); document.execCommand("copy"); $temp.remove(); } } var divSentidos = document.createElement("div"); divSentidos.id = 'divSentidos'; divSentidos.appendChild(btnAB); divSentidos.appendChild(btnBA); var divLandmarkScript = document.createElement("div"); divLandmarkScript.id = 'divLandmarkScript'; divLandmarkScript.style.cssText = 'float:left;'; divLandmarkScript.appendChild(signsroad); divLandmarkScript.appendChild(divSentidos); $("div #segment-edit-general").prepend(divLandmarkScript); $( "#divSentidos" ).hide(); } } } function getSelectedVenue() { const features = WazeWrap.getSelectedFeatures(); // Be sure to check for features.length === 1, in case multiple venues are currently selected. return features.length === 1 && features[0].model.type === 'venue' ? features[0].model : undefined; } function defineSpeed (speed) { let UpdateObject= require("Waze/Action/UpdateObject"); $.each(W.selectionManager.getSelectedFeatures(), function(i, segment) { var seg_id = segment.model.getID(); var seg = W.model.segments.getObjectById(seg_id); if(segment.model.attributes.fwdMaxSpeed == null && segment.model.attributes.fwdMaxSpeed == null) W.model.actionManager.add(new UpdateObject(seg, {'fwdMaxSpeed': speed, 'revMaxSpeed': speed})); else if(segment.model.attributes.fwdMaxSpeed == null) W.model.actionManager.add(new UpdateObject(seg, {'fwdMaxSpeed': speed})); else if(segment.model.attributes.fwdMaxSpeed == null) W.model.actionManager.add(new UpdateObject(seg, {'revMaxSpeed': speed})); }); } function defineRoadType (type) { let UpdateObject= require("Waze/Action/UpdateObject"); $.each(W.selectionManager.getSelectedFeatures(), function(i, segment) { var seg_id = segment.model.getID(); var seg = W.model.segments.getObjectById(seg_id); W.model.actionManager.add(new UpdateObject(seg, {'roadType': type})); }); } function defineLockRankRoad (rank) { let UpdateObject= require("Waze/Action/UpdateObject"); rank--; var bloquear; if(W.loginManager.user.rank >= rank) bloquear = rank; else bloquear = W.loginManager.user.rank; $.each(W.selectionManager.getSelectedFeatures(), function(i, segment) { let lock = segment.model.attributes.lockRank; var seg_id = segment.model.getID(); var seg = W.model.segments.getObjectById(seg_id); if(lock < bloquear) W.model.actionManager.add(new UpdateObject(seg, {'lockRank': bloquear})); }); } function defineStreetRoad(street) { let UpdateFeatureAddress = require("Waze/Action/UpdateFeatureAddress"); $.each(W.selectionManager.getSelectedFeatures(), function(i, segment) { var seg_id = segment.model.getID(); if(seg_id == "-100") { $("input[id=empty-street]").prop('checked', true).change().focusout(); $("input[id=empty-city]").prop('checked', true).change().focusout(); $(".save-button.waze-btn.waze-btn-blue.waze-btn-smaller").trigger('click'); } else { var seg = W.model.segments.getObjectById(seg_id); var address = segment.model.getAddress().attributes; var newAddressAtts = { streetName: street, emptyStreet: street==""?true:false, cityName: "", emptyCity: true, countryID: address.country.id }; W.model.actionManager.add(new UpdateFeatureAddress(seg, newAddressAtts,{streetIDField:"primaryStreetID"})); } }); } })();