WME Mobile View

Ermöglicht das Anpassen der Straßenbreite in Waze über einen Slider

当前为 2025-05-15 提交的版本,查看 最新版本

// ==UserScript==
// @name         WME Mobile View
// @namespace    https://greasyfork.org/de/users/863740-horst-wittlich
// @version      2015.05.16
// @description  Ermöglicht das Anpassen der Straßenbreite in Waze über einen Slider
// @author       Hiwi234
// @match        https://www.waze.com/editor*
// @match        https://beta.waze.com/editor*
// @match        https://www.waze.com/*/editor*
// @match        https://beta.waze.com/*/editor*
// @grant        none
// @license MIT
// ==/UserScript==

(function() {
    'use strict';

    // Warte auf die vollständige Initialisierung von Waze
    function waitForWaze() {
        if (typeof W === 'undefined' || !W.map) {
            setTimeout(waitForWaze, 500);
            return;
        }

        if (!W.userscripts) {
            console.error('Waze Userscript API nicht verfügbar');
            return;
        }

        initializeWidthAdjuster();
    }

    async function initializeWidthAdjuster() {
        try {
            const { tabLabel, tabPane } = W.userscripts.registerSidebarTab("street-width-adjuster");

            tabLabel.innerText = 'SW';
            tabLabel.title = 'Straßenbreite';

            const content = `
                <div style="padding: 10px;">
                    <h4>Straßenbreite Anpasser</h4>
                    <div style="margin: 15px 0;">
                        <label for="widthSlider">Breite (%) : <span id="widthValue">100</span></label>
                        <input type="range" id="widthSlider" min="50" max="300" value="100" style="width: 100%;">
                    </div>
                    <div id="status" style="color: green;"></div>
                </div>
            `;

            tabPane.innerHTML = content;

            // Warte auf DOM-Verbindung
            await W.userscripts.waitForElementConnected(tabPane);

            const slider = tabPane.querySelector('#widthSlider');
            const valueDisplay = tabPane.querySelector('#widthValue');
            const status = tabPane.querySelector('#status');

            if (!slider || !valueDisplay) {
                throw new Error('Slider-Elemente konnten nicht gefunden werden');
            }

            slider.addEventListener('input', (e) => {
                try {
                    const value = e.target.value;
                    valueDisplay.textContent = value;

                    const segments = W.model.segments.getObjectArray();
                    let updatedCount = 0;

                    segments.forEach(segment => {
                        const element = W.userscripts.getFeatureElementByDataModel(segment);
                        if (element) {
                            element.style.strokeWidth = `${value/100}em`;
                            updatedCount++;
                        }
                    });

                    status.textContent = `${updatedCount} Segmente aktualisiert`;
                    status.style.display = 'block';
                } catch (error) {
                    console.error('Fehler beim Anpassen der Straßenbreite:', error);
                    status.textContent = 'Fehler beim Anpassen der Straßenbreite';
                    status.style.color = 'red';
                }
            });

        } catch (error) {
            console.error('Fehler bei der Initialisierung:', error);
        }
    }

    // Starte das Script
    if (document.readyState === 'complete') {
        waitForWaze();
    } else {
        document.addEventListener('readystatechange', () => {
            if (document.readyState === 'complete') {
                waitForWaze();
            }
        });
    }
})();