WME Lane Guidance Click Saver

Set the straight options by default on new lane guidance changes

安裝腳本?
作者推薦腳本

您可能也會喜歡 WME Layer Saver

安裝腳本
// ==UserScript==
// @name            WME Lane Guidance Click Saver
// @author          HBiede
// @namespace       hbiede.com
// @description     Set the straight options by default on new lane guidance changes
// @include         /^https:\/\/(www|beta)\.waze\.com\/(?!user\/)(.{2,6}\/)?editor.*$/
// @version         2020.05.29.001
// @grant           none
// @license         MIT
// @copyright       2020 HBiede
// ==/UserScript==

/* global W */

setTimeout(initLaneGuidanceClickSaver, 1000);

function setTurns() {
    let lanesPane = document.getElementsByClassName("lanes")[0];
    let left = (lanesPane.getElementsByClassName("angle--135").length > 0 ? "angle--135"
                      : (lanesPane.getElementsByClassName("angle--90").length > 0 ? "angle--90" : "angle--45"));
    let right = (lanesPane.getElementsByClassName("angle-135").length > 0 ? "angle-135"
                      : (lanesPane.getElementsByClassName("angle-90").length > 0 ? "angle-90" : "angle-45"));

    let turnSections = lanesPane.getElementsByClassName("turn-lane-edit");
    for (let i = 0; i < turnSections.length; i++) {
        // Check if the lanes are already set. If already set, don't change anything
        let alreadySet = 0;
        let laneCheckboxes = turnSections[i].getElementsByTagName("input");
        for (let j = 0; j < laneCheckboxes.length && !alreadySet; j++) {
            if (laneCheckboxes[j].checked !== undefined) {
                if (laneCheckboxes[j].checked === true) {
                    alreadySet++;
                }
            }
        }
        if (alreadySet === 0 && laneCheckboxes && laneCheckboxes.length > 0) {
            if (turnSections[i].getElementsByClassName("angle-0").length > 0) {
                // Set all lanes for straight turns
                for (let j = 0; j < laneCheckboxes.length; j++) {
                    if (laneCheckboxes[j].checked !== undefined && laneCheckboxes[j].checked === false) {
                        laneCheckboxes[j].click();
                    }
                }
            } else if (turnSections[i].getElementsByClassName(left).length > 0
                       && laneCheckboxes[0].checked !== undefined
                       && laneCheckboxes[0].checked === false) {
                laneCheckboxes[0].click();
            } else if (turnSections[i].getElementsByClassName(right).length > 0
                       && laneCheckboxes[laneCheckboxes.length - 1].checked !== undefined
                       && laneCheckboxes[laneCheckboxes.length - 1].checked === false) {
                laneCheckboxes[laneCheckboxes.length - 1].click();
            }
        }
    }
}

function initLaneGuidanceClickSaver() {
    if (typeof W === 'undefined' || typeof W.map === 'undefined' || typeof W.loginManager === 'undefined') {
        setTimeout(initLaneGuidanceClickSaver, 800);
        return;
    }
    if (!W.loginManager.user) {
        // init on login for non-logged in users
        W.loginManager.events.register("login", null, initLaneGuidanceClickSaver);
        W.loginManager.events.register("loginStatus", null, initLaneGuidanceClickSaver);
        if (!W.loginManager.user) {
            return;
        }
    }

    let laneObserver = new MutationObserver(function (mutations) {
        if (W.selectionManager.getSelectedFeatures()[0] && W.selectionManager.getSelectedFeatures()[0].model.type === "segment") {
            let laneCountInput = document.getElementsByName("laneCount");
            if (laneCountInput.length > 0) {
                laneCountInput[0].addEventListener(
                    'change',
                    function() {
                        // wait for the input to appear
                        setTimeout(setTurns(), 50);
                    },
                    false
                );
            }

            let laneToolsButtons = document.getElementsByClassName("lt-add-lanes");
            for (let i = 0; i < laneToolsButtons.length; i++) {
                laneToolsButtons[i].addEventListener(
                    'click',
                    function() {
                        // wait for the input to appear
                        setTimeout(setTurns(), 50);
                    },
                    false
                );
            }
        }
    });

    laneObserver.observe(document.getElementById("edit-panel"), {
        childList: true,
        subtree: true
    });
}

QingJ © 2025

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