WME Lane Guidance Click Saver

Set the straight options by default on new lane guidance changes

安装此脚本
作者推荐脚本

您可能也喜欢WME Layer Saver

安装此脚本

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==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
    });
}