WME Places Name Normalizer

Normaliza nombres de lugares en Waze Map Editor (WME) por ahora solo con reglas de Colombia

当前为 2025-03-28 提交的版本,查看 最新版本

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

You will need to install an extension such as Tampermonkey to install this script.

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         WME Places Name Normalizer
// @namespace    https://greasyfork.org/en/users/mincho77
// @version      2.2.1
// @description  Normaliza nombres de lugares en Waze Map Editor (WME) por ahora solo con reglas de Colombia
// @author       mincho77
// @match       https://www.waze.com/*editor*
// @match       https://beta.waze.com/*editor*
// @exclude     https://beta.waze.com/*user/*editor/*
// @exclude     https://www.waze.com/*user/*editor/*
// @exclude     https://www.waze.com/discuss/*
// @grant        GM_xmlhttpRequest
// @grant        unsafeWindow
// @license      MIT
// @run-at       document-end
// ==/UserScript==
/*global W*/

(() => {
    "use strict";
    if (!Array.prototype.flat)
    {
        Array.prototype.flat = function(depth = 1)
        {
            return this.reduce(function (flat, toFlatten)
            {
                return flat.concat(Array.isArray(toFlatten) ? toFlatten.flat(depth - 1) : toFlatten);
            }, []);
        };
    }
    const SCRIPT_NAME = "PlacesNameNormalizer";
    const VERSION = "2.2.1";
    let placesToNormalize = [];
    let excludeWords = [];
    let maxPlaces = 20;
    let normalizeArticles = true;

    // Expresión regular para detectar siglas (por ejemplo, "S.a.s", "L.T.D.A")
    const siglaRegex = /^[A-Za-z](\.[A-Za-z])+\.?$/;

    function waitForSidebar(retries = 20, delay = 1000) {
        return new Promise((resolve, reject) => {
            const check = (attempt = 1) => {
                const sidebar = document.querySelector("#sidebar");
                if (sidebar) {
                    console.log("✅ Sidebar disponible.");
                    resolve(sidebar);
                } else if (attempt <= retries) {
                    console.warn(`⚠️ Sidebar no disponible aún. Reintentando... (${attempt})`);
                    setTimeout(() => check(attempt + 1), delay);
                } else {
                    reject("❌ Sidebar no disponible después de múltiples intentos.");
                }
            };
            check();
        });
    }

    function initializeExcludeWords()
    {
         const saved = JSON.parse(localStorage.getItem("excludeWords")) || [];
        excludeWords = [...new Set([...excludeWords, ...saved])].sort((a, b) => a.localeCompare(b));
        localStorage.setItem("excludeWords", JSON.stringify(excludeWords));
    }

     unsafeWindow.normalizePlaceName = function(name)
     {
        if (!name) return "";

        const normalizeArticles = !document.getElementById("normalizeArticles")?.checked;
        const articles = ["el", "la", "los", "las", "de", "del", "al", "y"];

        const words = name.trim().split(/\s+/);
        const normalizedWords = words.map((word, index) => {
            const lowerWord = word.toLowerCase();

            // Saltar palabras excluidas
            if (excludeWords.includes(word)) return word;

            // Saltar artículos si el checkbox está activo y no es la primera palabra
            if (!normalizeArticles && articles.includes(lowerWord) && index !== 0) {
                return lowerWord;
            }

            return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();
        });

        name = normalizedWords.join(" ");
        name = name.replace(/\s*\|\s*/g, " - ");
        name = name.replace(/\s{2,}/g, " ").trim();

        return name;
    };

   
    

    function renderExcludedWordsSidebar() {
        const container = document.getElementById("normalizer-sidebar");
        if (!container) return;

        const excludeListSection = document.createElement("div");
        excludeListSection.style.marginTop = "20px";

        excludeListSection.innerHTML = `
    <h4 style="margin-bottom: 5px;">Palabras Excluidas</h4>
    <div style="max-height: 150px; overflow-y: auto; border: 1px solid #ccc; padding: 8px; font-size: 13px; border-radius: 4px;">
      <ul style="margin: 0; padding-left: 18px;" id="excludeWordsList">
        ${excludeWords.sort((a, b) => a.localeCompare(b)).map(w => `<li>${w}</li>`).join("")}
      </ul>
    </div>
  `;
        container.appendChild(excludeListSection);

    }

    

    function createSidebarTab() {
        const { tabLabel, tabPane } = W.userscripts.registerSidebarTab("PlacesNormalizer");

        if (!tabPane) {
            console.error(`[${SCRIPT_NAME}] Error: No se pudo registrar el sidebar tab.`);
            return;
        }

        tabLabel.innerHTML = `
  <img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QC8RXhpZgAATU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAIdpAAQAAAABAAAAWgAAAAAAAABIAAAAAQAAAEgAAAABAAeQAAAHAAAABDAyMjGRAQAHAAAABAECAwCgAAAHAAAABDAxMDCgAQADAAAAAQABAACgAgAEAAAAAQAAAoCgAwAEAAAAAQAAAqmkBgADAAAAAQAAAAAAAAAA/8AAEQgCqQKAAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAgICAgICAwICAwQDAwMEBgQEBAQGBwYGBgYGBwgHBwcHBwcICAgICAgICAoKCgoKCgwMDAwMDQ0NDQ0NDQ0NDf/bAEMBAgICAwMDBgMDBg4JCAkODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODv/dAAQAKP/aAAwDAQACEQMRAD8A/fyiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/9D9/KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/0f38ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoopu70oAdRTTkjpRk+lADqKQHNLQAUUUUAFFNwaOenSgB1FIM96XrQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf//S/fyiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAopCcUhKnvQA7PaisHxB4j8P+FNIufEHifUrTSdMsozLcXl9KkEESL1Z5JCFUDuScCvgT4n/8FHvhN4aWWz+Gen33jm/AxHcRD7FpwJDYJubhVeRFYAN5MbnByARXVhsHWru1KNzajh51fgVz9Gc5rnte8UeGfC1qt54n1Wx0m3c7RLfTxwISBnAaRlBOOwr8D/iH+3H+0T8QHlgttci8G6a+R9i8ORASlGUBo5L+5WSZ8HJV4I7ZxnrkZr5K1SaXXb1tQ1+e61m7dgzXWrTy305IGATNdNLITjjJPSvfw3DFWVvay5T1aOTTkrzdj9+fEv7e37LfhtFNv4v/AOEgbzDGyeHrW51NoyM8yC2iYICQQCeK+fNe/wCCoHhRRcReEfh5rt26sRb3GrXFlZW0gGcMRHLcXUYPHBt9w7gEYr8hmlkcAFjgcAdgPamk59Sa9ilwzhYtc2p3Qyait9T9KNQ/4KbfFC6jMeneBvDmlSchZZNRvNQAPGMxiysuB7P+VcCf+CjH7TZJwfAwB+6P7G1A4+v/ABORn9K+EtwHUjim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IIz8M7qAcfNNqejhR9fLvXbH0B+len6L/wAEqv2rdQiEt9p3hzT2wPlutZYHp3EFlKPyNf05YFFAH4D+C/8Agjv45uPsU/j7x9pOmo5DXlvo9lNcyoOu2G4uZFiY543NbjI7AkY+4PhX/wAEwf2Xfh68GoeJtJufH2pw5Il8RustsG3E5WxiWO1AxhdrIwIAyM5NfoxRQBm6ZpWmaLp9vpOjWcFhZWkaxW9tbRrFFEigKqpGgVVVQAAAAAOBWlRRQAUUUUAFFFFABRRRQAYxXAfET4X/AA8+LPhybwj8SvDun+I9In5a11CJZArYIDxsRuikAJ2uhVl6gg139FAH41/F7/gkT4H1h5L/AOCXiefw0WYt/ZWsxtf2Y4fAilDx3MQB2KoLuiqD8pJzX5tfEr/gnd+1b8PVuLqTwRL4gsrWETtdeGrmLUVwSQUELfZ715FxkrHavkEYJOQP6uaKAP4kPEfw4+IXg+TyfFnhPxDokmB8uo6VfWx9vllgU9q4aaQWpK3KTQkdfMikT+aiv7qMZrMuNH0q6O66sreY+skaMf1U0Afw2wb7of6NBPOPWOCVh+aqa7Xw18OviB4yuDa+EfCniDW5EG4xabpV9cuB6kQwMQK/thttN0+zG20tIYB6Roqj9AKvcdPSgD+Ur4df8E6f2rvH/wBku/8AhCZPD1ldW5nS68SXMOnIBxtV4EN1fRyNnOyS2TAByVOAf0g+EH/BInwTpFwmo/GzxNL4l2EH+ydGjfT7RhhSVmlZ5LiQE7lYK6IykfKCM1+y1FAHBfDz4Z/D/wCE/huDwh8N/D+n+HNHt+UtdPiWJS2AC8hA3SSNgbncszYySTXe0UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf//V/fyiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/9b9/KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/1/38ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//Q/fyiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/9H9/KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/2Q=="
  style="height: 16px; vertical-align: middle; margin-right: 5px;">
  NrmliZer
`;
        tabLabel.title = "Places Name Normalizer";
        tabPane.innerHTML = getSidebarHTML();


        setTimeout(() => {
            // Llamar a la función para esperar el DOM antes de ejecutar eventos
            waitForDOM("#normalizer-tab", attachEvents);
            //attachEvents();
        }, 500);


    }


    function waitForDOM(selector, callback, interval = 500, maxAttempts = 10)
    {
        let attempts = 0;
        const checkExist = setInterval(() => {
            const element = document.querySelector(selector);
            if (element) {
                clearInterval(checkExist);
                callback(element);
            } else if (attempts >= maxAttempts) {
                clearInterval(checkExist);
                console.error(`[${SCRIPT_NAME}] Error: No se encontraron elementos en el DOM después de ${maxAttempts} intentos.`);
            }
            attempts++;
        }, interval);
    }

    function getSidebarHTML() {
        return `
    <div id="normalizer-tab">
      <h4>Places Name Normalizer <span style="font-size:11px;">v${VERSION}</span></h4>

      <div>
        <input type="checkbox" id="normalizeArticles" ${normalizeArticles ? "checked" : ""}>
        <label for="normalizeArticles">No Normalizar artículos (el, la, los, ...)</label>
      </div>

      <div>
        <label>Máximo de Places a buscar: </label>
        <input type='number' id='maxPlacesInput' value='${maxPlaces}' min='1' max='500' style='width: 60px;'>
      </div>

      <div>
        <label>Palabras Excluidas:</label>
        <input type='text' id='excludeWord' style='width: 120px;'>
        <button id='addExcludeWord'>Add Word</button>

        <div style="max-height: 100px; overflow-y: auto; border: 1px solid #ccc; padding: 5px; margin-top: 5px;">
          <ul id="excludedWordsList" style="padding-left: 20px; margin: 0;">
            ${excludeWords.sort((a, b) => a.localeCompare(b)).map(w => `<li>${w}</li>`).join("")}
          </ul>
        </div>

        <button id="exportExcludeWords" style="margin-top: 5px;">Export Words</button>
        <br>
        <button id="importExcludeWordsUnifiedBtn" style="margin-top: 5px;">Import List...</button>
        <input type="file" id="hiddenImportInput" accept=".xml" style="display: none;">
      </div>

      <hr>
      <button id="scanPlaces">Scan...</button>
    </div>
  `;
    }


    function attachEvents()
    {
        console.log(`[${SCRIPT_NAME}] Adjuntando eventos...`);

        const normalizeArticlesCheckbox = document.getElementById("normalizeArticles");
        const maxPlacesInput = document.getElementById("maxPlacesInput");
        const addExcludeWordButton = document.getElementById("addExcludeWord");
        const scanPlacesButton = document.getElementById("scanPlaces");
        const hiddenInput = document.getElementById("hiddenImportInput");
        const importButtonUnified = document.getElementById("importExcludeWordsUnifiedBtn");

        // Validación de elementos necesarios
        if (!normalizeArticlesCheckbox || !maxPlacesInput || !addExcludeWordButton || !scanPlacesButton) {
            console.error(`[${SCRIPT_NAME}] Error: No se encontraron elementos en el DOM.`);
            return;
        }

        // ✅ Evento: cambiar estado de "no normalizar artículos"
        normalizeArticlesCheckbox.addEventListener("change", (e) => {
            normalizeArticles = e.target.checked;
        });

        // ✅ Evento: cambiar número máximo de places
        maxPlacesInput.addEventListener("input", (e) => {
            maxPlaces = parseInt(e.target.value, 10);
        });

        // ✅ Evento: exportar palabras excluidas a XML
        document.getElementById("exportExcludeWords").addEventListener("click", () => {
            const savedWords = JSON.parse(localStorage.getItem("excludeWords")) || [];
            if (savedWords.length === 0) {
                alert("No hay palabras excluidas para exportar.");
                return;
            }
            const sortedWords = [...savedWords].sort((a, b) => a.localeCompare(b));

            const xmlContent = `<?xml version="1.0" encoding="UTF-8"?>
<ExcludedWords>
  ${sortedWords.map(word => `  <word>${word}</word>`).join("\n  ")}
</ExcludedWords>`;

            const blob = new Blob([xmlContent], { type: "application/xml" });
            const url = URL.createObjectURL(blob);
            const link = document.createElement("a");

            link.href = url;
            link.download = "excluded_words.xml";
            document.body.appendChild(link);
            link.click();
            document.body.removeChild(link);
        });

        // ✅ Evento: añadir palabra excluida sin duplicados
        addExcludeWordButton.addEventListener("click", () => {
            const wordInput = document.getElementById("excludeWord") || document.getElementById("excludedWord");
            const word = wordInput?.value.trim();

            if (!word) return;

            const alreadyExists = excludeWords.some(w => w.toLowerCase() === word.toLowerCase());
            if (!alreadyExists) {
                excludeWords.push(word);
                localStorage.setItem("excludeWords", JSON.stringify(excludeWords));
                updateExcludeList();
            }

            wordInput.value = "";
        });

        // ✅ Evento: nuevo botón unificado de importación
        importButtonUnified.addEventListener("click", () => {
            hiddenInput.click(); // abre el file input oculto
        });

        hiddenInput.addEventListener("change", () => {
            const file = hiddenInput.files[0];
            if (!file) return;

            const reader = new FileReader();
            reader.onload = function (event) {
                const parser = new DOMParser();
                const xml = parser.parseFromString(event.target.result, "application/xml");
                const words = Array.from(xml.getElementsByTagName("word")).map(node => node.textContent.trim());

                if (words.length > 0) {
                    excludeWords = words;
                    localStorage.setItem("excludeWords", JSON.stringify(excludeWords));
                    updateExcludeList();
                    alert(`Palabras excluidas importadas correctamente: ${words.length}`);
                } else {
                    alert("No se encontraron palabras en el archivo XML.");
                }
            };
            reader.readAsText(file);
        });

        // ✅ Evento: escanear lugares
        scanPlacesButton.addEventListener("click", scanPlaces);
    }

  
    function updateExcludeList() {
        const list = document.getElementById("excludedWordsList");
        if (!list) return;

        // Ordena una copia del array para no alterar el original
        const sortedWords = [...excludeWords].sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase()));

        list.innerHTML = sortedWords.map(word => `<li>${word}</li>`).join("");
    }
    

    function scanPlaces() {
        const allPlaces = W.model.venues.getObjectArray();
        console.log(`[${SCRIPT_NAME}] Iniciando escaneo de lugares...`);

        // const inputValue = document.getElementById("maxPlacesInput")?.value;
        maxPlaces = parseInt(document.getElementById("maxPlacesInput").value, 10) || 20;

        console.log("➡️ Usando maxPlaces =", maxPlaces);

        const venues = Object.values(W.model.venues.objects);
        const sliced = venues.slice(0, maxPlaces);

        if (!W || !W.model || !W.model.venues || !W.model.venues.objects) {
            console.error(`[${SCRIPT_NAME}] WME no está listo.`);
            return;
        }

        // Obtener el nivel del editor; si no existe, usamos Infinity para incluir todos.
        let editorLevel = (W.model.user && typeof W.model.user.level === "number")
        ? W.model.user.level
        : Infinity;

        let places = Object.values(W.model.venues.objects);
        console.log(`[${SCRIPT_NAME}] Total de lugares encontrados: ${places.length}`);

        if (places.length === 0) {
            alert("No se encontraron Places en WME.");
            return;
        }

        placesToNormalize = allPlaces
            .filter(place =>
                    place &&
                    typeof place.getID === "function" &&
                    place.attributes &&
                    typeof place.attributes.name === "string"
                   )
            .map(place => ({
            id: place.getID(),
            name: place.attributes.name,
            attributes: place.attributes,
            place: place
        }));


        // Luego se mapea y se sigue con el flujo habitual...
        let placesMapped = placesToNormalize.map(place => {
            let originalName = place.attributes.name;
            let newName = normalizePlaceName(originalName);
            return {
                id: place.attributes.id,
                originalName,
                newName
            };
        });

        let filteredPlaces = placesMapped.filter(p =>
                                                 p.newName.trim() !== p.originalName.trim()
                                                );

        console.log(`[${SCRIPT_NAME}] Lugares que cambiarán: ${filteredPlaces.length}`);

        if (filteredPlaces.length === 0) {
            alert("No se encontraron Places que requieran cambio.");
            return;
        }

        openFloatingPanel(filteredPlaces);
    }


    function NameChangeAction(venue, oldName, newName)
    {
        // Referencia al Place y los nombres
        this.venue = venue;
        this.oldName = oldName;
        this.newName = newName;

        // ID único del Place
        this.venueId = venue.attributes.id;

        // Metadatos que WME/Plugins pueden usar
        this.type = "NameChangeAction";
        this.isGeometryEdit = false; // no es una edición de geometría
    }

    /**
 * 1) getActionName: nombre de la acción en el historial.
 */
    NameChangeAction.prototype.getActionName = function() {
        return "Update place name";
    };

    /** 2) getActionText: texto corto que WME a veces muestra. */
    NameChangeAction.prototype.getActionText = function() {
        return "Update place name";
    };

    /** 3) getName: algunas versiones llaman a getName(). */
    NameChangeAction.prototype.getName = function() {
        return "Update place name";
    };

    /** 4) getDescription: descripción detallada de la acción. */
    NameChangeAction.prototype.getDescription = function() {
        return `Place name changed from "${this.oldName}" to "${this.newName}".`;
    };

    /** 5) getT: título (a veces requerido por plugins). */
    NameChangeAction.prototype.getT = function() {
        return "Update place name";
    };

    /** 6) getID: si un plugin llama a e.getID(). */
    NameChangeAction.prototype.getID = function() {
        return `NameChangeAction-${this.venueId}`;
    };

    /** 7) doAction: asigna el nuevo nombre (WME llama a esto al crear la acción). */
    NameChangeAction.prototype.doAction = function() {
        this.venue.attributes.name = this.newName;
        this.venue.isDirty = true;
        if (typeof W.model.venues.markObjectEdited === "function") {
            W.model.venues.markObjectEdited(this.venue);
        }
    };

    /** 8) undoAction: revertir al nombre anterior (Ctrl+Z). */
    NameChangeAction.prototype.undoAction = function() {
        this.venue.attributes.name = this.oldName;
        this.venue.isDirty = true;
        if (typeof W.model.venues.markObjectEdited === "function") {
            W.model.venues.markObjectEdited(this.venue);
        }
    };

    /** 9) redoAction: rehacer (Ctrl+Shift+Z), vuelve a doAction. */
    NameChangeAction.prototype.redoAction = function() {
        this.doAction();
    };

    /** 10) undoSupported / redoSupported: indica si se puede des/rehacer. */
    NameChangeAction.prototype.undoSupported = function() {
        return true;
    };
    NameChangeAction.prototype.redoSupported = function() {
        return true;
    };

    /** 11) accept / supersede: evita fusionar con otras acciones. */
    NameChangeAction.prototype.accept = function() {
        return false;
    };
    NameChangeAction.prototype.supersede = function() {
        return false;
    };

    /** 12) isEditAction: true => habilita "Guardar". */
    NameChangeAction.prototype.isEditAction = function() {
        return true;
    };

    /** 13) getAffectedUniqueIds: objetos que se alteran. */
    NameChangeAction.prototype.getAffectedUniqueIds = function() {
        return [this.venueId];
    };

    /** 14) isSerializable: si no implementas serialize(), pon false. */
    NameChangeAction.prototype.isSerializable = function() {
        return false;
    };

    /** 15) isActionStackable: false => no combina con otras ediciones. */
    NameChangeAction.prototype.isActionStackable = function() {
        return false;
    };

    /** 16) getFocusFeatures: WME/Plugins pueden usarlo para "enfocar" el objeto. */
    NameChangeAction.prototype.getFocusFeatures = function() {
        // Devolvemos el venue para indicar que ese es el foco (o un array vacío si prefieres).
        return [this.venue];
    };

    /** 17) Métodos vacíos para evitar futuros "no es una función" si WME pide estos. */
    NameChangeAction.prototype.getFocusSegments = function() {
        return [];
    };
    NameChangeAction.prototype.getFocusNodes = function() {
        return [];
    };
    NameChangeAction.prototype.getFocusClosures = function() {
        return [];
    };

    /** 18) getTimestamp: método nuevo que WME/Plugins están llamando. */
    NameChangeAction.prototype.getTimestamp = function() {
        // Devolvemos un timestamp numérico (ms desde época UNIX).
        return Date.now();
    };


    function applyNormalization() {
        const normalizeCheckboxes = document.querySelectorAll(".normalize-checkbox:checked");
        const deleteCheckboxes = document.querySelectorAll(".delete-checkbox:checked");
        let changesMade = false;

        if (normalizeCheckboxes.length === 0 && deleteCheckboxes.length === 0) {
            console.log("ℹ️ No hay lugares seleccionados para normalizar o eliminar.");
            return;
        }

        // Confirmación antes de procesar todo si TODOS están seleccionados para eliminar
        const allDeleteBoxes = document.querySelectorAll(".delete-checkbox");
        if (deleteCheckboxes.length === allDeleteBoxes.length) {
            const confirmDeleteAll = confirm("⚠️ Has seleccionado TODOS los lugares para eliminar. ¿Estás seguro?");
            if (!confirmDeleteAll) {
                console.log("🚫 Eliminación masiva cancelada por el usuario.");
                return;
            }
        }

        // Normalizar nombres
        normalizeCheckboxes.forEach(cb => {
            const index = cb.dataset.index;
            const input = document.querySelector(`.new-name-input[data-index="${index}"]`);
            const newName = input?.value?.trim();
            const placeId = input?.getAttribute("data-place-id");
            const place = W.model.venues.getObjectById(placeId);

            if (!place || !place.attributes?.name) {
                console.warn(`⛔ No se encontró el lugar con ID: ${placeId}`);
                return;
            }

            const currentName = place.attributes.name.trim();

            if (currentName !== newName) {
                try {
                    const UpdateObject = require("Waze/Action/UpdateObject");
                    const action = new UpdateObject(place, { name: newName });
                    W.model.actionManager.add(action);
                    console.log(`✅ Acción aplicada: "${currentName}" → "${newName}"`);
                    changesMade = true;
                } catch (error) {
                    console.error("⛔ Error aplicando la acción de actualización:", error);
                }
            } else {
                console.log(`⏭ Sin cambios reales para ID ${placeId}`);
            }
        });

        // Eliminar lugares marcados
        deleteCheckboxes.forEach(cb => {
            const index = cb.dataset.index;
            const input = document.querySelector(`.new-name-input[data-index="${index}"]`);
            const placeId = input?.getAttribute("data-place-id");
            const place = W.model.venues.getObjectById(placeId);

            if (!place) {
                console.warn(`⛔ No se encontró el lugar con ID para eliminar: ${placeId}`);
                return;
            }

            try {
                const DeleteObject = require("Waze/Action/DeleteObject");
                const deleteAction = new DeleteObject(place);
                W.model.actionManager.add(deleteAction);
                console.log(`🗑️ Lugar eliminado: ${placeId}`);
                changesMade = true;
            } catch (error) {
                console.error("⛔ Error eliminando el lugar con ID:", placeId, error);
            }
        });

        if (changesMade) {
            console.log("💾 Cambios marcados. Recuerda presionar el botón de guardar en el editor.");
        } else {
            console.log("ℹ️ No hubo cambios para aplicar.");
        }

        // ✅ Cerrar panel flotante
        const panel = document.getElementById("normalizer-floating-panel");
        if (panel) panel.remove();
    }

    


    // Función de similitud leve entre palabras
    function isSimilar(a, b)
    {
        if (a === b) return true;
        if (Math.abs(a.length - b.length) > 2) return false;

        let mismatches = 0;
        for (let i = 0; i < Math.min(a.length, b.length); i++) {
            if (a[i] !== b[i]) mismatches++;
            if (mismatches > 2) return false;
        }

        return true;
    }

    function normalizePlaceName(name)
    {
        if (!name) return "";

        const normalizeArticles = !document.getElementById("normalizeArticles")?.checked;
        const articles = ["el", "la", "los", "las", "de", "del", "al", "y"];
        const words = name.trim().split(/\s+/);

        const isRoman = (word) => /^(i|ii|iii|iv|v|vi|vii|viii|ix|x|xi|xii|xiii|xiv|xv|xvi|xvii|xviii|xix|xx|xxi|xxii|xxiii|xxiv|xxv)$/i.test(word);

        const normalizedWords = words.map((word, index) =>
        {
            const lowerWord = word.toLowerCase();

            // Si la palabra está en la lista de excluidas (ignorando mayúsculas)
            const matchExcluded = excludeWords.find(w => w.toLowerCase() === lowerWord);
            if (matchExcluded) return matchExcluded;

            // Si es número romano
            if (isRoman(word)) return word.toUpperCase();

            // Artículos (si opción marcada y no es la primera palabra)
            if (!normalizeArticles && articles.includes(lowerWord) && index !== 0) {
                return lowerWord;
            }

            // Si empieza con número seguido de letras, conservar como está (para casos como 2Go, 2Sur)
            if (/^\d+[A-Z][a-zA-Z]*$/.test(word))
            {
                return word;
            }

            // Conservar texto dentro de paréntesis si ya está todo en mayúsculas o minúsculas
            if (/^\(.*\)$/.test(word))
            {
                const inner = word.slice(1, -1); // quitar paréntesis
                if (inner === inner.toUpperCase() || inner === inner.toLowerCase()) {
                    return word;
                }
            }
            // Capitalización normal
            return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();
        });

        // Reemplazar pipes con guiones
        name = normalizedWords.join(" ").replace(/\s*\|\s*/g, " - ");

        // Mayúscula después de (, ", [
        name = name.replace(/([(\["])(\s*)(\p{L})/gu, (match, p1, p2, p3) => p1 + p2 + p3.toUpperCase());

        // Asegurar espacios alrededor del guion
        name = name.replace(/\s*-\s*/g, " - ");

        // Preservar mayúsculas en letras pegadas a números (ej: 45A)
        name = name.replace(/\b(\d+)([A-Z])\b/g, (match, num, letter) => num + letter.toUpperCase());

        //Quita el punto final en el nombre
        name = name.replace(/\.$/, "");

        // Limpiar espacios dobles
        return name.replace(/\s{2,}/g, " ").trim();
    }

    // Para exponer al contexto global real desde Tampermonkey
    unsafeWindow.normalizePlaceName = normalizePlaceName;



    function openFloatingPanel(placesToNormalize) {
        console.log(`[${SCRIPT_NAME}] Creando panel flotante...`);

        if (!placesToNormalize || placesToNormalize.length === 0) {
            console.warn(`[${SCRIPT_NAME}] No hay lugares para normalizar.`);
            return;
        }

        // Elimina cualquier panel flotante previo
        let existingPanel = document.getElementById("normalizer-floating-panel");
        if (existingPanel) existingPanel.remove();

        // Crear el panel flotante
        let panel = document.createElement("div");
        panel.id = "normalizer-floating-panel";
        panel.style.position = "fixed";
        panel.style.top = "100px";
        panel.style.left = "300px"; // deja espacio para la barra lateral
        panel.style.width = "calc(100vw - 400px)"; // margen adicional para que no se desborde
        panel.style.maxWidth = "calc(100vw - 30px)";
        panel.style.zIndex = 10000;
        panel.style.backgroundColor = "white";
        panel.style.border = "1px solid #ccc";
        panel.style.padding = "15px";
        panel.style.boxShadow = "0 2px 10px rgba(0,0,0,0.3)";
        panel.style.borderRadius = "8px";

        // Contenido del panel
        let panelContent = `

  <h3 style="text-align: center;">Lugares para Normalizar</h3>
        <div style="max-height: 60vh; overflow-y: auto; margin-bottom: 10px;">
           <table style="width: 100%; border-collapse: collapse;">
    <thead>
  <tr style="border-bottom: 2px solid black;">
    <th style="width: 40px; text-align: center;">
      <input type="checkbox" id="selectAllCheckbox" title="Seleccionar todos para aplicar normalización">
    </th>
    <th style="width: 40px; text-align: center;">
      <input type="checkbox" id="selectAllDeleteCheckbox" title="Seleccionar todos para eliminar">
    </th>

  </tr>
  <tr style="border-bottom: 2px solid #ccc;">
    <th style="text-align: center;" title="Aplicar normalización">🛠️</th>
    <th style="text-align: center;" title="Marcar para eliminar">🗑️</th>
    <th style="text-align: left;">Nombre Actual</th>
    <th style="text-align: left;">Nuevo Nombre</th>
  </tr>
</thead>
            <tbody>
    `;

        maxPlaces = parseInt(document.getElementById("maxPlacesInput").value, 10) || 20;
        placesToNormalize.sort((a, b) => a.originalName.localeCompare(b.originalName));
        placesToNormalize.slice(0, maxPlaces).forEach((place, index) => {
            // placesToNormalize.forEach((place, index) => {
            if (place && place.originalName) {
                const originalName = place.originalName;
                let newName = normalizePlaceName(originalName);
                // Escapa comillas dobles para evitar romper el HTML
                newName = newName.replace(/"/g, '&quot;');
                const placeId = place.id;
                panelContent += `
  <tr>
    <td style="text-align: center;"><input type="checkbox" class="normalize-checkbox" data-index="${index}"></td>
    <td style="text-align: center;"><input type="checkbox" class="delete-checkbox" data-index="${index}"></td>
    <td id="name-cell-${index}">${originalName}</td>
    <td><input type="text" class="new-name-input" data-index="${index}" data-place-id="${place.id}" value="${newName}" style="width: 100%;"></td>
  </tr>
`;
            }
        });
        panelContent += `</tbody></table>`;

        // Agregar botones al panel sin eventos inline
        // Ejemplo de la sección de botones en panelContent:
        panelContent += `
    <button id="applyNormalizationBtn" style="margin-top: 10px; width: 100%; padding: 8px; background: #4CAF50; color: white; border: none; cursor: pointer;">
        Aplicar Normalización
    </button>
    <button id="closeFloatingPanelBtn" style="margin-top: 5px; width: 100%; padding: 8px; background: #d9534f; color: white; border: none; cursor: pointer;">
        Cerrar
    </button>
`;

        panel.innerHTML = panelContent;
        document.body.appendChild(panel);

        // Sincroniza comportamiento entre eliminar y normalizar
        document.querySelectorAll(".delete-checkbox").forEach(deleteCheckbox => {
            deleteCheckbox.addEventListener("change", function () {
                const index = this.dataset.index;
                const normalizeCheckbox = document.querySelector(`.normalize-checkbox[data-index="${index}"]`);
                const originalNameCell = this.closest("tr").querySelector("td:nth-child(3)");

                if (this.checked) {
                    normalizeCheckbox.checked = true;
                    originalNameCell.style.color = "red";
                    originalNameCell.style.fontWeight = "bold";
                } else {
                    normalizeCheckbox.checked = false; // ❗ Desmarcar también el de normalizar
                    originalNameCell.style.color = "";
                    originalNameCell.style.fontWeight = "";
                }
            });
     /*   document.querySelectorAll(".delete-checkbox").forEach(deleteCheckbox => {
            deleteCheckbox.addEventListener("change", function () {
                const index = this.dataset.index;
                const normalizeCheckbox = document.querySelector(`.normalize-checkbox[data-index="${index}"]`);
                const originalNameCell = this.closest("tr").querySelector("td:nth-child(3)");

                if (this.checked) {
                    normalizeCheckbox.checked = true;
                    originalNameCell.style.color = "red";
                    originalNameCell.style.fontWeight = "bold";
                } else {
                    originalNameCell.style.color = "";
                    originalNameCell.style.fontWeight = "";
                }
            });*/
        });

        // ✅ Seleccionar todos para normalizar
        document.getElementById("selectAllCheckbox").addEventListener("change", function () {
            const isChecked = this.checked;
            document.querySelectorAll(".normalize-checkbox").forEach(cb => {
                cb.checked = isChecked;
            });
        });

      /*  // ✅ Seleccionar todos para eliminar
        document.getElementById("selectAllDeleteCheckbox").addEventListener("change", function () {
            const isChecked = this.checked;
            document.querySelectorAll(".delete-checkbox").forEach(cb => {
                cb.checked = isChecked;
            });
        });*/
        // Evento para seleccionar todos los eliminar
document.getElementById("selectAllDeleteCheckbox").addEventListener("change", function () {
  const isChecked = this.checked;
  const deleteCheckboxes = document.querySelectorAll(".delete-checkbox");

  if (isChecked) {
    const confirmDeleteAll = confirm("⚠️ ¿Estás seguro de seleccionar TODOS los lugares para eliminar?");
    if (!confirmDeleteAll) {
      this.checked = false;
      return;
    }
  }

  deleteCheckboxes.forEach(cb => {
    const index = cb.dataset.index;
    const normalizeCheckbox = document.querySelector(`.normalize-checkbox[data-index="${index}"]`);
    const nameCell = document.getElementById(`name-cell-${index}`);

    cb.checked = isChecked;

    if (isChecked) {
      if (normalizeCheckbox) normalizeCheckbox.checked = true;
      if (nameCell) nameCell.style.color = "red";
    } else {
      if (normalizeCheckbox) normalizeCheckbox.checked = false;
      if (nameCell) nameCell.style.color = "";
    }
  });
});

        // ✅ Seleccionar para cerrar
        document.getElementById("closeFloatingPanelBtn").addEventListener("click", function() {
            let panel = document.getElementById("normalizer-floating-panel");
            if (panel) panel.remove();
        });
       

        // Evento para aplicar normalización
    document.getElementById("applyNormalizationBtn").addEventListener("click", function () {
  const confirmed = confirm("¿Estás seguro de que deseas aplicar los cambios?");
  if (!confirmed) return;

  let changesMade = false;

  document.querySelectorAll(".normalize-checkbox").forEach(cb => {
    const index = cb.dataset.index;

    const placeId = document.querySelector(`.new-name-input[data-index="${index}"]`)?.getAttribute("data-place-id");
    const newName = document.querySelector(`.new-name-input[data-index="${index}"]`)?.value?.trim();
    const deleteCb = document.querySelector(`.delete-checkbox[data-index="${index}"]`);
    const place = W.model.venues.getObjectById(placeId);

    if (!place || !place.attributes?.name) return;

    // ✅ Eliminar si está seleccionado para eliminar
    if (deleteCb?.checked) {
      try {
        const DeleteObject = require("Waze/Action/DeleteObject");
        W.model.actionManager.add(new DeleteObject(place));
        console.log(`🗑 Eliminado: ${place.attributes.name}`);
        changesMade = true;
        return; // Saltar normalización si se elimina
      } catch (error) {
        console.error("⛔ Error al eliminar:", error);
      }
    }

    // ✅ Normalizar si está seleccionado para ello y no fue eliminado
    if (cb.checked && place.attributes.name.trim() !== newName) {
      try {
        const UpdateObject = require("Waze/Action/UpdateObject");
        const action = new UpdateObject(place, { name: newName });
        W.model.actionManager.add(action);
        console.log(`✅ Normalizado: ${place.attributes.name} → ${newName}`);
        changesMade = true;
      } catch (error) {
        console.error("⛔ Error al actualizar:", error);
      }
    }
  });

  // ✅ Marcar cambios si hubo acciones
  if (changesMade) {
    if (W.controller && typeof W.controller.setModified === "function") {
      W.controller.setModified(true);
    }
    console.log("💾 Cambios marcados para guardar.");
  } else {
    console.log("ℹ️ No hubo cambios para aplicar.");
  }

  // ✅ Cerrar panel flotante
  const panel = document.getElementById("normalizer-floating-panel");
  if (panel) panel.remove();
});
    }

    function loadExcludeWordsFromXML(callback) {
  fetch("excludeWords.xml")
    .then(response => {
      if (!response.ok) throw new Error("No se encontró el archivo XML");
      return response.text();
    })
    .then(xmlText => {
      const parser = new DOMParser();
      const xmlDoc = parser.parseFromString(xmlText, "text/xml");
      const wordNodes = xmlDoc.getElementsByTagName("word");
      const wordsFromXML = Array.from(wordNodes).map(node => node.textContent.trim());

      const existing = JSON.parse(localStorage.getItem("excludeWords")) || [];
      excludeWords = [...new Set([...existing, ...wordsFromXML])].sort((a, b) => a.localeCompare(b));
      localStorage.setItem("excludeWords", JSON.stringify(excludeWords));

      if (callback) callback();
    })
    .catch(() => {
      console.warn("⚠️ No se pudo cargar excludeWords.xml. Solo se usará localStorage.");
      excludeWords = JSON.parse(localStorage.getItem("excludeWords")) || ["EDS", "IPS", "McDonald's", "EPS"];
      localStorage.setItem("excludeWords", JSON.stringify(excludeWords));
      if (callback) callback();
    });
}


    function loadExcludeWordsFromXML2(callback) {
        fetch("excludeWords.xml")
            .then(response => {
            if (!response.ok) throw new Error("No se encontró el archivo XML");
            return response.text();
        })
           .then(xmlText => {
            const parser = new DOMParser();
            const xmlDoc = parser.parseFromString(xmlText, "text/xml");
            const wordNodes = xmlDoc.getElementsByTagName("word");
            const wordsFromXML = Array.from(wordNodes).map(node => node.textContent.trim());

            // Fusionar palabras actuales con las del archivo, eliminar duplicados y ordenar
            const current = JSON.parse(localStorage.getItem("excludeWords")) || [];
            const merged = [...new Set([...current, ...wordsFromXML])].sort((a, b) => a.localeCompare(b));

            excludeWords = merged;
            localStorage.setItem("excludeWords", JSON.stringify(merged));
            updateExcludeList();

            exportExcludeWordsToXML(); // vuelve a exportar el XML actualizado

            if (callback) callback();
        })
            .catch(() => {
            console.warn("⚠️ No se pudo cargar excludeWords.xml. Usando lista por defecto.");
            excludeWords = ["EDS", "IPS", "McDonald's", "EPS"];
            localStorage.setItem("excludeWords", JSON.stringify(excludeWords));
            updateExcludeList();
            if (callback) callback();
        });
    }
    function exportExcludeWordsToXML() {
        const xmlContent = `<?xml version="1.0" encoding="UTF-8"?>
<ExcludedWords>
${excludeWords.map(word => `  <word>${word}</word>`).join("\n")}
</ExcludedWords>`;

        const blob = new Blob([xmlContent], { type: "application/xml" });
        const url = URL.createObjectURL(blob); // ✅ ESTA LÍNEA ESTABA FALTANDO
        const link = document.createElement("a");
        link.href = url;
        link.download = "excludeWords.xml";
        document.body.appendChild(link);
        link.click();
        document.body.removeChild(link);
}


    function showFloatingMessage(message) {
        const msg = document.createElement("div");
        msg.textContent = message;
        msg.style.position = "fixed";
        msg.style.bottom = "30px";
        msg.style.left = "50%";
        msg.style.transform = "translateX(-50%)";
        msg.style.backgroundColor = "#333";
        msg.style.color = "#fff";
        msg.style.padding = "10px 20px";
        msg.style.borderRadius = "5px";
        msg.style.zIndex = 9999;
        msg.style.opacity = "0.95";
        msg.style.transition = "opacity 1s ease-in-out";

        document.body.appendChild(msg);

        setTimeout(() => {
            msg.style.opacity = "0";
            setTimeout(() => document.body.removeChild(msg), 1000);
        }, 3000);
    }

    function waitForWME() {
        if (W && W.userscripts && W.model && W.model.venues) {
            console.log(`[${SCRIPT_NAME}] Inicializando v${VERSION}`);
            loadExcludeWordsFromXML(() =>
            {
               // initializeExcludeWords();     // 1. Carga de localStorage o palabras por defecto
                createSidebarTab();           // 3. Ya tienes excludeWords listas para usar
                renderExcludedWordsSidebar(); // 4. Renderiza la lista actual (ordenada)
            });
        }
        else {
            console.log(`[${SCRIPT_NAME}] Esperando que WME esté listo...`);
            setTimeout(waitForWME, 1000);
        }
    }
    console.log(window.applyNormalization);
window.applyNormalization = applyNormalization;
    waitForWME();
})();