您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Smartphone freundliches UI
// ==UserScript== // @name WME Mobile View // @namespace https://greasyfork.org/de/users/863740-horst-wittlich // @version 2015.06.02 // @description Smartphone freundliches UI // @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'; let slider = null; let valueDisplay = null; let sliderStatus = null; let tabPaneElement = null; let currentWidth = 100; let isCtrlPressed = false; function applyStreetWidth(value) { if (!W || !W.model || !W.model.segments || !W.userscripts) { console.warn('WME Script: WME-Objekte nicht verfügbar.'); if (sliderStatus) { sliderStatus.textContent = 'Fehler: WME nicht bereit.'; sliderStatus.style.color = '#ff6347'; } return; } try { currentWidth = 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++; } }); if (valueDisplay) { valueDisplay.textContent = value; } if (sliderStatus) { sliderStatus.style.color = 'green'; sliderStatus.textContent = `${updatedCount} Segmente aktualisiert.`; } } catch (error) { console.error('WME Script: Fehler beim Anpassen der Straßenbreite:', error); if (sliderStatus) { sliderStatus.textContent = 'Fehler beim Anpassen.'; sliderStatus.style.color = 'red'; } } } function updateAllSegments() { if (currentWidth !== 100) { applyStreetWidth(currentWidth); } } function handleCtrlKeyEvent(event) { if (isCtrlPressed) { Object.defineProperty(event, 'ctrlKey', { get: function() { return true; } }); } } function toggleCtrlKey(activate) { const ctrlButton = document.getElementById('ctrlHoldBtn'); if (activate && !isCtrlPressed) { // STRG aktivieren document.addEventListener('mousedown', handleCtrlKeyEvent, true); document.addEventListener('click', handleCtrlKeyEvent, true); document.addEventListener('mousemove', handleCtrlKeyEvent, true); isCtrlPressed = true; if (ctrlButton) { ctrlButton.classList.add('waze-btn-active'); ctrlButton.style.backgroundColor = '#C4C4CC'; ctrlButton.textContent = 'STRG loslassen'; } } else if (!activate && isCtrlPressed) { // STRG deaktivieren document.removeEventListener('mousedown', handleCtrlKeyEvent, true); document.removeEventListener('click', handleCtrlKeyEvent, true); document.removeEventListener('mousemove', handleCtrlKeyEvent, true); isCtrlPressed = false; if (ctrlButton) { ctrlButton.classList.remove('waze-btn-active'); ctrlButton.style.backgroundColor = ''; ctrlButton.textContent = 'STRG halten'; } } } async function initializeScriptFeatures() { console.log("WME Script: Initialisierung gestartet."); if (!W?.userscripts?.state.isReady) { console.error("WME Script: WME nicht bereit. Abbruch."); return; } try { const scriptId = "wme-street-width-tab"; let tabLabel; try { const registrationResult = W.userscripts.registerSidebarTab(scriptId); tabLabel = registrationResult.tabLabel; tabPaneElement = registrationResult.tabPane; } catch (e) { console.warn(`WME Script: Tab-Registrierung fehlgeschlagen: ${e.message}`); return; } tabLabel.innerText = 'Mobile View'; tabLabel.title = 'Smartphone freundliches UI'; await W.userscripts.waitForElementConnected(tabPaneElement); const container = document.createElement('div'); container.style.padding = '10px'; container.innerHTML = ` <b>Straßenbreiten Auwahl Steuerung</b> <div class="control-group" style="margin-top: 15px;"> <label for="widthSliderTab">Breite (%): <span id="widthValueTab">100</span></label> <input type="range" id="widthSliderTab" min="100" max="300" value="100" style="width: 100%" /> <div id="sliderStatusTab" style="margin-top: 5px; font-size: 12px;">Bereit</div> </div> <div style="margin-top: 15px;"> <button id="selectAllBtn" class="waze-btn waze-btn-small" style="width: 100%; margin-bottom: 10px;"> Alles auswählen (STRG+A) </button> <button id="ctrlHoldBtn" class="waze-btn waze-btn-small" style="width: 100%;"> STRG halten </button> </div> `; tabPaneElement.appendChild(container); slider = document.getElementById('widthSliderTab'); valueDisplay = document.getElementById('widthValueTab'); sliderStatus = document.getElementById('sliderStatusTab'); slider.addEventListener('input', (e) => { applyStreetWidth(e.target.value); }); document.getElementById('selectAllBtn').addEventListener('click', () => { document.dispatchEvent(new KeyboardEvent('keydown', { key: 'a', code: 'KeyA', keyCode: 65, which: 65, ctrlKey: true, bubbles: true, cancelable: true })); }); document.getElementById('ctrlHoldBtn').addEventListener('click', function() { toggleCtrlKey(!isCtrlPressed); }); document.addEventListener('wme-map-data-loaded', updateAllSegments); W.map.events.register("moveend", null, updateAllSegments); W.map.events.register("zoomend", null, updateAllSegments); window.addEventListener('beforeunload', () => { if (isCtrlPressed) { toggleCtrlKey(false); } }); } catch (error) { console.error('WME Script: Initialisierungsfehler:', error); } } if (W?.userscripts?.state.isReady) { initializeScriptFeatures(); } else { document.addEventListener('wme-ready', initializeScriptFeatures, { once: true }); } })();