WME Simple Alert Messages

changes the styling of the segment and venue messages

目前为 2022-10-05 提交的版本。查看 最新版本

// ==UserScript==
// @name         WME Simple Alert Messages
// @namespace    https://fxzfun.com/
// @version      1.01
// @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 */
/* global OpenLayers */

(function() {
    'use strict';

    function fxzAddLockMessage(maxLock) {
        document.querySelector("#fxzMessages").insertAdjacentHTML("beforeEnd", `<span class="fxzMessage locked"><i class="w-icon"></i> Locked to L${maxLock}</span>`);
        document.querySelector(".fxzMessage.locked").addEventListener("click", () => {
            var url = fxzGetUrl();
            var city = document.querySelector(".location-info").innerText.split(",")[0];
            var discordFormat = `:unlock${maxLock}: ${city} - *reason* - <${url}>`;
            copyText(discordFormat);
        });
        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"></i> Out of your EA</span>`);
    }

    function fxzAddMixedMessage() {
        document.querySelector("#fxzMessages").insertAdjacentHTML("beforeEnd", `<span class="fxzMessage mixed"><i class="w-icon"></i> Mixed A/B</span>`);
    }

    function fxzAddPurMessage() {
        document.querySelector("#fxzMessages").insertAdjacentHTML("beforeEnd", `<span class="fxzMessage pur"><i class="w-icon"></i> PUR Request</span>`);
        document.querySelector(".fxzMessage.pur").addEventListener("click", () => { document.querySelector(".venue-alert-pending-changes").click(); });
        document.querySelector(".fxzMessage.pur").title = JSON.parse(document.querySelector("#localeStrings").innerText).edit.venue.update_requests.pending;
    }

    function fxzAddClosureMessage() {
        document.querySelector(".has-closure.segment-alert").style.display = "none";
        document.querySelector("#fxzMessages").insertAdjacentHTML("beforeEnd", `<span class="fxzMessage closure"><i class="w-icon"></i> Has Closures</span>`);
    }

    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;

                fxzAddSimpleMessagesContainer(mode);

                if (mode == "segment") document.querySelector(".segment-details").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("wz-alert.segment-details");

                // TODO: add better out of EA matching, currently will not alert for segments above your rank out of your ea
                if (mode == "segment" && (segDetails.innerText.includes("driving area") || segDetails.innerText.includes("editing area")) && W.loginManager.user.rank >= maxLock) {
                    fxzAddEAMessage();
                }

                if (W.loginManager.user.rank < maxLock) {
                    fxzAddLockMessage(maxLock + 1);
                }

                // mixed segments
                var incDirAlert = document.querySelector(".inconsistent-direction")
                if (incDirAlert && incDirAlert.style.display != "none") {
                    incDirAlert.style.display = "none";
                    fxzAddMixedMessage();
                }

                // pur
                var purAlert = document.querySelector(".venue-alert-pending-changes");
                if (purAlert && purAlert.style.display != "none") {
                    purAlert.style.display = "none";
                    fxzAddPurMessage();
                }

                // closure
                var closureAlert = document.querySelector(".has-closure.segment-alert");
                if (closureAlert && closureAlert.style.display != "none") {
                    closureAlert.style.display = "none";
                    fxzAddClosureMessage();
                }
            }, 100);
        }
    }

    // bootstrap
    if (location.href.match(/^https:\/\/(www|beta)\.waze\.com\/(?!user\/)(.{2,6}\/)?editor\/?.*$/) != null) {
        var i = setInterval(() => {
            if (W.selectionManager.events) {
                clearInterval(i);
                console.log("WME Simple Alert Messages Styling 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;}`;
                document.body.appendChild(style);
            }
        }, 1000);
    }

})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址