WME Shortcuts+

Shortcuts for multiple WME functions

目前为 2024-11-13 提交的版本。查看 最新版本

// ==UserScript==
// @name         WME Shortcuts+
// @description  Shortcuts for multiple WME functions
// @icon		 data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAABEZJREFUeAHtW1tLHDEU3v6N3mj7+9qHvrUsODOuN0QUQV+8Kz4IPnh7UvGGiqKgiCuuqHVXWC8oXvEunvJNmyGZzI66ZtvdmANDMrszyfm+nCQnJ5NIhBPLsj7atp2wbZs0veLRaPQdB/lPlojeOI7zU1PQUmNalvVDIKGoqOjbawHP4fzqkmDb9nvuR4mt8vJyamlpodbW1oK6oHNZWZmEx4f1bcSyrF++H92XOjs7aXd3lwpdgKGjoyMTEYlIEPiJiYlCxy3pPz4+HkiCRADY0lVg1f4Glwg4OjrSFT8dHh6GE4ABT3cBRt4KBAtoaGjQHT8BY0YCGhsbDQG6M2AswHQBMwaYQdDMAly8Q/ADzDRo/ADjCOnuB6l3hc/Pz2l7e5sODg7o4uLivxOIdT8fveru7hZ0erEnCKCDg4PU1tZGlZWVwpyK6QVhqN7eXtrc3KSHhweh8pOTE9ra2hIu/zPCC1ncADA/zdXU1AilZE3A6empC8xxHKECvjJ/PpVKCZUHRWVubm6EZ156kxMCNjY2qLi4+MnAGRFaEHB9fU3V1dWB4OE3jIyM0NraGi0sLLhdo7m52XtWCwL6+vo8QKxlS0pKaH5+PqO1orsMDAy4gyMeQmQWfR9jAyuDpevr68KYsLe355UbNmZgwMW709PTNDY2Rnd3d+57SrsAWp8pyqdo7ecIYvT8+2H59vZ2r2hEp/3PAnhQo1xdXaknACO5X4H6+npPwadmVBLQ09Mj6QQdc0LA5OSkVNnU1NRTcXvPqSTA3yDsPicEdHV1SQSsrq56wJ6bee40GNQFALipqYl2dnbo9vaWMGaMjo4Sm06VjgF1dXUSAag4W1FBAHS6v7/PqIJSAoJ2UhKJRMbKH/tDBQHLy8uh1SglAC4v62MsnZmZCVUg7E8VBOzv74dVQUoJWFxclAhA/8tWVBBweXkZWr1SAtLptEQALAHTYzaiggD4JmGilACs1LC0ZObP0traWgozRTgrvCfIFJ6dnZXKgteYSYJmgX9KABQ7OzujiooKSXEsjoaGhtw1ABZLcHWxJhgeHqbS0lL3ef9aAFMoI5Gl8Or4JTIfU8gLAkACgKlYDaL/xmIxiQRGBtJ4PO4ZRN4QAI3w3UBQd+CV9+f9FoBy+vv7C5MA1ixLS0uuJxYUDQIBiAjBXw+KCKEMrNrm5uYIS+mqqiqJjJWVFVYV5ZUFeFpxGXhk+OoimUy6/RjhMtUhLq46JdmsQ2JKas+DQgwBZnvcbI8LA6/ZHOXnbrM7bHaHze5wHszUuVXB+AHGDzB+QGY/AP1DdwkdAxD50V1CP5eHU4QQmK5yfHwsmD/wCq4wfkAwU1cJ2p6XCAAJ2BTVTYKiS8wC0sj4Lxye4j9WKFRCHjk2l4IFfPGD5+91PjgZjUY/uKdHX9O5Yda4juN8984Pv/rD04yJWCz22bbtJGNJt/TvMeFPDC/S34/9d5EIpUYNAAAAAElFTkSuQmCC
// @version      0.1
// @author       N190392
// @match        https://*.waze.com/*editor*
// @require      https://greasyfork.org/scripts/24851-wazewrap/code/WazeWrap.js
// @grant        GM_xmlhttpRequest
// @license      MIT
// @namespace http://tampermonkey.net/
// ==/UserScript==

/* global W */
/* global WazeWrap */

(function() {
    'use strict';

    const SCRIPT_NAME = 'WME Shortcuts+';
    const SCRIPT_VERSION = '0.1';
    const UPDATE_MESSAGE = '';
    const FORUM_URL = '';
    const DOWNLOAD_URL = '';
    const EXTERNAL_SETTINGS_NAME = 'WME_SHORTCUTS_PLUS_SETTINGS';

    const EXTERNAL_SETTINGS = {
        pressPieEditGeomShortcut: '',
        clickCitsButtonShortcut: '',
        toggleChipsShortcut: '',
        clickCitsPolygonShortcut: ''
    };

    // Original functions from your script
    function clickCitsButton() {
        const menuItems = document.querySelectorAll('wz-menu-item');
        let targetButtonFound = false;

        menuItems.forEach(item => {
            const label = item.querySelector('.itemLabel--kXZjU');
            if (label && label.textContent.trim() === "Cits") {
                const targetButton = item.querySelector('wz-button.point');
                if (targetButton) {
                    targetButton.click();
                    console.log("Button clicked successfully.");
                    targetButtonFound = true;
                }
            }
        });

        if (!targetButtonFound) {
            console.log("Button not found under the 'Cits' label.");
        }
    }

    function clickCitsPolygon() {
        const menuItems = document.querySelectorAll('wz-menu-item');
        let PolygonButtonFound = false;

        menuItems.forEach(item => {
            const label = item.querySelector('.itemLabel--kXZjU');
            if (label && label.textContent.trim() === "Cits") {
                const PolygonButton = item.querySelector('wz-button.polygon');
                if (PolygonButton) {
                    PolygonButton.click();
                    console.log("Polygon Button clicked successfully.");
                    PolygonButtonFound = true;
                }
            }
        });

        if (!PolygonButtonFound) {
            console.log("Button not found under the 'Cits' label.");
        }
    }

    function toggleChips() {
        const checkableChip = document.querySelector('#lockRank-1');
        if (checkableChip) {
            checkableChip.click();
            console.log("Chip with ID 'lockRank-1' clicked successfully.");
        }

        const poligonsChip = Array.from(document.querySelectorAll('wz-checkable-chip'))
            .find(chip => chip.textContent.includes('Poligons'));
        if (poligonsChip) {
            poligonsChip.click();
            console.log("Chip with 'Poligons' clicked successfully.");
        }
    }

    function pressPieEditGeomButton() {
        const button = document.querySelector('#pieEditGeom');
        if (button) {
            button.click();
            console.log("Button with ID 'pieEditGeom' clicked successfully.");
        }
    }

    // WazeWrap Shortcut setup functions
    function addShortcuts() {
        new WazeWrap.Interface.Shortcut(
            'ClickCitsButton',
            'Izveidot Vieta → Cits punktu',
            'shortcuts_plus',
            'WME Shortcuts+',
            EXTERNAL_SETTINGS.clickCitsButtonShortcut,
            clickCitsButton,
            null
        ).add();

        new WazeWrap.Interface.Shortcut(
            'ClickCitsPolygon',
            'Izveidot Vieta → Cits poligonu',
            'shortcuts_plus',
            'WME Shortcuts+',
            EXTERNAL_SETTINGS.clickCitsPolygonShortcut,
            clickCitsPolygon,
            null
        ).add();

        new WazeWrap.Interface.Shortcut(
            'ToggleChips',
            'Slēgt ar līmeni (2) & pārveidot punktu par poligonu',
            'shortcuts_plus',
            'WME Shortcuts+',
            EXTERNAL_SETTINGS.toggleChipsShortcut,
            toggleChips,
            null
        ).add();

        new WazeWrap.Interface.Shortcut(
            'PressEditGeom',
            'Atvērt ģeometrijas izvēlni',
            'shortcuts_plus',
            'WME Shortcuts+',
            EXTERNAL_SETTINGS.pressPieEditGeomShortcut,
            pressPieEditGeomButton,
            null
        ).add();


    }

    function sandboxLoadSettings() {
        const loadedSettings = JSON.parse(localStorage.getItem(EXTERNAL_SETTINGS_NAME)) || {};

        EXTERNAL_SETTINGS.clickCitsButtonShortcut = loadedSettings.clickCitsButtonShortcut || 'C+1';
        EXTERNAL_SETTINGS.clickCitsPolygonShortcut = loadedSettings.clickCitsPolygonShortcut || 'C+`';
        EXTERNAL_SETTINGS.toggleChipsShortcut = loadedSettings.toggleChipsShortcut || 'C+2';
        EXTERNAL_SETTINGS.pressPieEditGeomShortcut = loadedSettings.pressPieEditGeomShortcut || 'C+3';
        addShortcuts();
        $(window).on('beforeunload', () => sandboxSaveSettings());
    }

    function getShortcutKeys(shortcutAction) {
        let keys = '';
        const { shortcut } = shortcutAction;
        if (shortcut) {
            if (shortcut.altKey) keys += 'A';
            if (shortcut.shiftKey) keys += 'S';
            if (shortcut.ctrlKey) keys += 'C';
            if (keys.length) keys += '+';
            if (shortcut.keyCode) keys += shortcut.keyCode;
        }
        return keys;
    }

    function sandboxSaveSettings() {
        EXTERNAL_SETTINGS.clickCitsButtonShortcut = getShortcutKeys(W.accelerators.Actions.ClickCitsButton);
        EXTERNAL_SETTINGS.toggleChipsShortcut = getShortcutKeys(W.accelerators.Actions.ToggleChips);
        EXTERNAL_SETTINGS.pressPieEditGeomShortcut = getShortcutKeys(W.accelerators.Actions.PressEditGeom);
        EXTERNAL_SETTINGS.clickCitsPolygonShortcut = getShortcutKeys(W.accelerators.Actions.ClickCitsPolygon);
        localStorage.setItem(EXTERNAL_SETTINGS_NAME, JSON.stringify(EXTERNAL_SETTINGS));
    }

    function loadScriptUpdateMonitor() {
        let updateMonitor;
        try {
            updateMonitor = new WazeWrap.Alerts.ScriptUpdateMonitor(
                SCRIPT_NAME,
                SCRIPT_VERSION,
                DOWNLOAD_URL,
                GM_xmlhttpRequest
            );
            updateMonitor.start();
        } catch (ex) {
            console.error(`${SCRIPT_NAME}:`, ex);
        }
    }

    function bootstrap() {
        if (WazeWrap?.Ready) {
            WazeWrap.Interface.ShowScriptUpdate(
                SCRIPT_NAME,
                SCRIPT_VERSION,
                UPDATE_MESSAGE,
                FORUM_URL
            );
            loadScriptUpdateMonitor();
            sandboxLoadSettings();
        } else {
            setTimeout(bootstrap, 250);
        }
    }

    bootstrap();
})();