WME Change Speed

Verhoog of verlaag de snelheid van de geselecteerde segmenten. Gebruik 1 voor verhogen en 2 voor verlagen.

当前为 2025-07-29 提交的版本,查看 最新版本

// ==UserScript==
// @name         WME Change Speed
// @version      0.8
// @namespace    https://greasyfork.org/users/1499279
// @author       DeKoerier
// @description  Verhoog of verlaag de snelheid van de geselecteerde segmenten. Gebruik 1 voor verhogen en 2 voor verlagen.
// @match        https://www.waze.com/editor*
// @match        https://www.waze.com/*/editor*
// @match        https://beta.waze.com/editor*
// @match        https://beta.waze.com/*/editor*
// @exclude      https://www.waze.com/user/editor*
// @license      GNU GPLv3
// @connect      greasyfork.org
// @grant        none
// ==/UserScript==

(function () {
  'use strict';

  const waitSDK = setInterval(() => {
    if (window.SDK_INITIALIZED && typeof window.getWmeSdk === 'function') {
      clearInterval(waitSDK);
      window.SDK_INITIALIZED.then(initScript);
    }
  }, 200);

  function initScript() {
    const sdk = window.getWmeSdk({
      scriptId: "wme_change_speed_sdk",
      scriptName: "Change Speed (SDK-style)"
    });

    sdk.Events.once({ eventName: "wme-ready" }).then(() => {
      console.log("✅ SDK en WME klaar");

      registerShortcuts(sdk);
      registerTab(sdk);
      registerSelectionLogger(sdk);

      console.log("✅ Script geladen en actief");
    });
  }

  function registerShortcuts(sdk) {
    sdk.Shortcuts.createShortcut({
      shortcutId: "speed_up",
      description: "Snelheid verhogen met 10",
      shortcutKeys: "1",
      callback: () => adjustSpeed(sdk, +10)
    });

    sdk.Shortcuts.createShortcut({
      shortcutId: "speed_down",
      description: "Snelheid verlagen met 10",
      shortcutKeys: "2",
      callback: () => adjustSpeed(sdk, -10)
    });

    console.log("✅ Shortcuts actief: 1 = omhoog, 2 = omlaag");
  }

  function adjustSpeed(sdk, delta) {
    const selection = sdk.Editing.getSelection();
    if (!selection || selection.objectType !== 'segment') {
      console.warn("⚠️ Geen segmenten geselecteerd");
      return;
    }

    selection.ids.forEach(id => {
      const seg = sdk.DataModel.Segments.getById({ segmentId: id });
      if (!seg) return;

      const newFwd = Math.max(0, (seg.fwdSpeedLimit || 0) + delta);
      const newRev = Math.max(0, (seg.revSpeedLimit || 0) + delta);

      sdk.DataModel.Segments.updateSegment({
        segmentId: seg.id,
        fwdSpeedLimit: newFwd,
        revSpeedLimit: newRev
      });

      console.log(`↕️ Segment ${seg.id}: A>B ${seg.fwdSpeedLimit} → ${newFwd}, B>A ${seg.revSpeedLimit} → ${newRev}`);
    });
  }

  function registerSelectionLogger(sdk) {
    sdk.Events.on({
      eventName: "wme-selection-changed",
      eventHandler: () => {
        const sel = sdk.Editing.getSelection();
        if (sel?.objectType === 'segment') {
          console.log("🔍 Segmenten geselecteerd:", sel.ids);
        } else {
          console.log("⚠️ Geen segmentselectie actief");
        }
      }
    });
  }

  function registerTab(sdk) {
    sdk.Sidebar.registerScriptTab().then(({ tabLabel, tabPane }) => {
      tabLabel.innerText = "SpeedHelper";
      tabLabel.title = "Snelheden bekijken";

      tabPane.id = "speedhelper-tab";
      tabPane.innerHTML = `
        <div style="padding: 10px;">
          <h2>Snelheden</h2>
          <p>Druk op 1 of 2 om snelheden aan te passen, of bekijk huidige waardes hier:</p>
          <button id="btnSegmentInfo" style="padding:5px 10px;">Bekijk snelheden</button>
          <pre id="segmentInfo" style="margin-top:10px; background:#f8f8f8; padding:8px;"></pre>
        </div>
      `;

      // Automatisch tonen wanneer tab zichtbaar wordt
      new IntersectionObserver((entries) => {
        entries.forEach(entry => {
          if (entry.isIntersecting) updateSegmentInfo(sdk);
        });
      }).observe(tabPane.parentElement);

      document.getElementById("btnSegmentInfo").onclick = () => updateSegmentInfo(sdk);
    });
  }

function updateSegmentInfo(sdk) {
  const out = document.getElementById("segmentInfo");
  const selection = sdk.Editing.getSelection();

  if (!selection || selection.objectType !== 'segment') {
    out.innerText = "⚠️ Selecteer segmenten om informatie te tonen.";
    return;
  }

  const lines = selection.ids.map(id => {
    const seg = sdk.DataModel.Segments.getById({ segmentId: id });
    if (!seg) return `Segment ${id} → ⚠️ Niet gevonden`;

      const fwd = seg.fwdSpeedLimit != null ? `${seg.fwdSpeedLimit} km/u` : '–';
    const rev = seg.revSpeedLimit != null ? `${seg.revSpeedLimit} km/u` : '–';

    return `Geselecteerd segment ${id}\n  A>B: ${fwd}\n  B>A: ${rev}`;
  });

  out.innerText = lines.join('\n\n');
}

})();