changes the styling of the segment and venue messages
当前为
// ==UserScript==
// @name WME Simple Alert Messages
// @namespace https://fxzfun.com/
// @version 2.0
// @description changes the styling of the segment and venue messages
// @author FXZFun
// @match https://*.waze.com/*/editor*
// @match https://*.waze.com/editor*
// @exclude https://*.waze.com/user/editor*
// @icon https://www.google.com/s2/favicons?sz=64&domain=waze.com
// @grant none
// @license GNU GPL v3
// ==/UserScript==
/* global W, OpenLayers */
(function() {
'use strict';
function fxzAddLockMessage(maxLock) {
document.querySelector("#fxzMessages").insertAdjacentHTML("beforeEnd", `<span class="fxzMessage locked"><i class="w-icon w-icon-lock-fill"></i> Locked to L${maxLock}</span>`);
document.querySelector(".fxzMessage.locked").addEventListener("click", () => {
var url = fxzGetUrl();
var city = document.querySelector(".location-info").innerText.split(",")[0];
if (document.querySelector(".wmecitiesoverlay-region") != null) city = document.querySelector(".wmecitiesoverlay-region").innerText;
var discordFormat = `:unlock${maxLock}: ${city} - *reason* - <${url}>`;
copyText(discordFormat);
document.querySelector(".fxzMessage.locked").innerHTML = `<span class="fxzMessage locked"><i class="w-icon w-icon-copy"></i> Copied!</span>`;
});
document.querySelector(".fxzMessage.locked").title = "Copy unlock request for Discord";
}
function fxzAddEAMessage() {
document.querySelector("#fxzMessages").insertAdjacentHTML("beforeEnd", `<span class="fxzMessage ea"><i class="w-icon w-icon-alert-fill"></i> Out of your EA</span>`);
}
function fxzAddMixedMessage() {
document.querySelector("#fxzMessages").insertAdjacentHTML("beforeEnd", `<span class="fxzMessage mixed"><i class="w-icon w-icon-round-trip"></i> Mixed A/B</span>`);
}
function fxzAddPurMessage() {
document.querySelector("#fxzMessages").insertAdjacentHTML("beforeEnd", `<span class="fxzMessage pur"><i class="w-icon w-icon-location-update-fill"></i> PUR Request</span>`);
document.querySelector(".fxzMessage.pur").addEventListener("click", () => { document.querySelector(".venue-alerts wz-alert span[slot=action]").click(); });
document.querySelector(".fxzMessage.pur").title = JSON.parse(document.querySelector("#localeStrings").innerText).edit.venue.update_requests.pending;
}
function fxzAddClosureMessage() {
document.querySelector("#fxzMessages").insertAdjacentHTML("beforeEnd", `<span class="fxzMessage closure"><i class="w-icon w-icon-closure"></i> Has Closures</span>`);
document.querySelector(".fxzMessage.closure").addEventListener("click", () => { document.querySelector("wz-tabs").shadowRoot.querySelectorAll(".wz-tab-label")[1].click(); });
}
function fxzAddSimpleMessagesContainer(mode) {
var fxzMessagesDiv = document.createElement("div");
fxzMessagesDiv.id = "fxzMessages";
if (mode == "segment") document.querySelector("#edit-panel .panel-header-component").insertAdjacentElement("afterEnd", fxzMessagesDiv);
else if (mode == "venue") document.querySelector(".venue-panel-header").insertAdjacentElement("afterEnd", fxzMessagesDiv);
}
function fxzGetUrl() {
var lonlat = new OpenLayers.LonLat(W.map.getCenter().lon, W.map.getCenter().lat);
lonlat.transform(new OpenLayers.Projection('EPSG:900913'), new OpenLayers.Projection('EPSG:4326'));
var zoom = W.map.getZoom();
var segments = [];
var venues = [];
W.selectionManager.getSelectedFeatures().forEach(item => {
if (item.model.type == "segment") {
segments.push(item.model.attributes.id);
} else if (item.model.type == "venue") {
venues.push(item.model.attributes.id);
}
});
var url = location.href.split("?")[0] + `?env=${W.map.wazeMap.regionCode}&lat=${lonlat.lat}&lon=${lonlat.lon}&zoomLevel=${zoom}`;
if (segments.length > 0) url += "&segments=" + segments.join(",");
if (venues.length > 0) url += "&venues=" + venues.join(",");
return url;
}
function copyText(textContent) {
var text = document.createElement("textarea");
text.style = "position: fixed;top:0;left:0;width:2px;height:2px;";
text.innerHTML = textContent;
document.body.appendChild(text);
text.select();
document.execCommand("copy");
text.style = "display: none";
}
function fxzSelectionChange() {
if (W.selectionManager.getSelectedFeatures().length > 0) {
var mode = W.selectionManager.getSelectedFeatures()[0].model.type;
// wait for panel to open
var i2Count = 0;
var i2 = setInterval(()=>{
if (document.querySelector("#edit-panel").style.display != "none" || i2Count++ > 20) clearInterval(i2);
else return;
var msgBox = document.getElementById("fxzMessages");
if (msgBox) msgBox.innerHTML = "";
else fxzAddSimpleMessagesContainer(mode);
// clear other messages
if (mode == "segment") document.querySelector(".segment-alerts").style.display = "none";
else if (mode == "venue") document.querySelector(".venue-alerts").style.display = "none";
// locked message
var maxLock = Math.max(...Array.from(W.selectionManager.getSelectedFeatures()).map(item => item.model.attributes.lockRank));
var segDetails = document.querySelector(".segment-alerts");
// out of ea
if (mode == "segment" && segDetails.innerText.includes("You can only edit segments in your driven area")) {
fxzAddEAMessage();
}
if (W.loginManager.user.rank < maxLock) {
fxzAddLockMessage(maxLock + 1);
}
// mixed segments
if (document.querySelector("wz-alerts-group").innerText.includes("not in the same direction")) {
fxzAddMixedMessage();
}
// pur
if (document.querySelector("wz-alerts-group").innerText.includes("pending update")) {
fxzAddPurMessage();
}
// closure
if (document.querySelector("wz-alerts-group").innerText.includes("closure")) {
fxzAddClosureMessage();
}
}, 100);
}
}
function initialize() {
console.log("WME Simple Alert Messages Loaded");
W.selectionManager.events.register('selectionchanged', this, fxzSelectionChange);
// run preselected from url
if (W.selectionManager.getSelectedFeatures().length > 0) fxzSelectionChange();
// add styling
var style = document.createElement("style");
style.innerHTML = `/* WME Simple Alert Messages Styling */
#fxzMessages {margin-top: 5px; margin-left: 10px;}
.fxzMessage {padding: 7px 10px; border-radius: 10px; width: fit-content; margin-left: 5px; white-space: nowrap;}
.fxzMessage .w-icon {font-size: 20px;vertical-align: middle;}
.fxzMessage.locked {background-color: #FE5F5D; cursor: pointer;}
.fxzMessage.ea {background-color: #FF9800;}
.fxzMessage.mixed {background-color: #42A5F5;}
.fxzMessage.pur {background-color: #C9B5FF; cursor: pointer;}
.fxzMessage.closure {background-color: #FE5F5D; cursor: pointer;}`;
document.body.appendChild(style);
}
// bootstrap
W?.userscripts?.state?.isReady ? initialize() : document.addEventListener("wme-ready", initialize, { once: true });
})();