你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式
你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式
你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式
你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式
你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式
你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式
(我已經安裝了使用者樣式管理器,讓我安裝!)
// ==UserScript==
// @name WAZEPT Segments
// @version 2020.06.02
// @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 = {'<img src="https://dl.dropboxusercontent.com/s/b6okbz2mstwhauk/Untitled-10.png" height="18" width="18">': "Segmento de Estacionamento",
'<img src="https://dl.dropboxusercontent.com/s/wrmouj57afh1ysd/transferir.png" height="18" width="18">': "Segmento de Rua Secundária",
'<img src="https://dl.dropboxusercontent.com/s/dclmik8vs3j3d5s/x-12-512.png" height="18" width="18">': "Segmento de Rua Principal",
'<img src="https://dl.dropboxusercontent.com/s/4h6hjirwycrhvp2/94-512.png" height="18" width="18">': "Segmento de Estrada Municipal",
'<img src="https://dl.dropboxusercontent.com/s/q3qwa65aazgwxn8/portugal-1489214_960_720.png" height="18" width="18">': "Segmento de Estrada Nacional",
'<img src="https://dl.dropboxusercontent.com/s/78xugquz11k5bbo/H25.png" height="18" width="18">': "Segmento de Via Reservada a Automoveis e Motociclos",
'<img src="https://dl.dropboxusercontent.com/s/bvn94z1ytak6yb4/H24.png" height="18" width="18">': "Segmento de Autoestrada",
'🚗': "Dados de Portagens",
'🌍': "Rotundas"};
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$bloqueio.$t]
array_data[ this.gsx$funcionalidade.$t ] = elem;
});
});
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(emoji , title) {
// The sign background
var addsign = document.createElement("div");
addsign.id = 'sign_' + emoji;
// 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 = emoji;
if(indexselected == '<img src="https://dl.dropboxusercontent.com/s/b6okbz2mstwhauk/Untitled-10.png" height="18" width="18">')
{
defineRoadType(20);
defineSpeed("30");
defineLockRankRoad(array_data['SEG_ESTACIONAMENTO'][0]);
defineStreetRoad("");
}
if(indexselected == '<img src="https://dl.dropboxusercontent.com/s/wrmouj57afh1ysd/transferir.png" height="18" width="18">')
{
defineRoadType(1);
defineSpeed("50");
defineLockRankRoad(array_data['SEG_SECUNDARIA'][0]);
}
if(indexselected == '<img src="https://dl.dropboxusercontent.com/s/dclmik8vs3j3d5s/x-12-512.png" height="18" width="18">')
{
defineRoadType(2);
defineSpeed("50");
defineLockRankRoad(array_data['SEG_PRINCIPAL'][0]);
}
if(indexselected == '<img src="https://dl.dropboxusercontent.com/s/4h6hjirwycrhvp2/94-512.png" height="18" width="18">')
{
defineRoadType(7);
defineSpeed("90");
defineLockRankRoad(array_data['SEG_MUNICIPAL'][0]);
}
if(indexselected == '<img src="https://dl.dropboxusercontent.com/s/q3qwa65aazgwxn8/portugal-1489214_960_720.png" height="18" width="18">')
{
defineRoadType(6);
defineSpeed("90");
defineLockRankRoad(array_data['SEG_NACIONAL'][0]);
}
if(indexselected == '<img src="https://dl.dropboxusercontent.com/s/78xugquz11k5bbo/H25.png" height="18" width="18">')
{
defineRoadType(3);
defineSpeed("100");
defineLockRankRoad(array_data['SEG_RESERVADA'][0]);
}
if(indexselected == '<img src="https://dl.dropboxusercontent.com/s/bvn94z1ytak6yb4/H24.png" height="18" width="18">')
{
defineRoadType(3);
defineSpeed("120");
defineLockRankRoad(array_data['SEG_AUTOESTRADA'][0]);
}
if(indexselected == '🌍')
{
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 == '🚗')
{
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 || emoji == "🚗")
{
var emojivalue = document.createElement("div");
emojivalue.id = 'emoji_' + emoji;
emojivalue.style.cssText = 'text-align:center;font-size:14px;visibility:visible;';
emojivalue.innerHTML = emoji;
emojivalue.title = title;
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"}));
}
});
}
})();