"use strict"; // Compatibilidad con Chrome y Firefox const browserAPI = typeof browser !== "undefined" ? browser : chrome; (async function () { const dbname = "ca-archive-19030501.sqlite"; // Cargar el módulo de base de datos // NOTA: Los scripts deben cargarse en el HTML antes de este script // o usar import dinámico // Inicializar la base de datos (ahora es asíncrono) const dbOpened = await DB.openDB(dbname, document); if (!dbOpened) { console.error("Failed to open database"); return; } /* Rutas soportadas (usando hash): #addon/{slug|id}/versions[?page=[#ver]] #addon/{slug|id}/{eula|privacy|license/lid} #addon/{slug|id} #list[/category][?{tag|q}=][?sort=][?page=] #about #{search-query} */ // Función para manejar la navegación async function handleNavigation() { try { // Obtener la URL del hash let hash = window.location.hash.substring(1); // Remover el '#' if (!hash) { hash = "list"; // Por defecto mostrar listado } let params; const url = decodeURI(hash); if ((params = /^addon\/(.+?)\/versions\/?(\?page=(\d+)(#.+)?)?$/.exec(url)) !== null) { // Cargar dinámicamente el módulo de versiones si no está cargado if (typeof Versions === "undefined") { await loadScript("versions.js"); } Versions.showPage(document, DB, params[1], params[3]); } else if ((params = /^addon\/(.+?)\/(eula|privacy|license\/(.+))$/.exec(url)) !== null) { if (typeof EPL === "undefined") { await loadScript("epl.js"); } EPL.showPage(document, DB, params[1], params[2], params[3]); } else if ((params = /^addon\/(.+?)\/?$/.exec(url)) !== null) { if (typeof Addon === "undefined") { await loadScript("addon.js"); } Addon.showPage(document, DB, params[1]); } else if ((params = /^list(\/([a-z-]+))?(\?tag=(.+?)|\?q=(.+?))?([\?|\&]sort=(\w+))?\&?(page=(\d+))?$/.exec(url)) !== null) { if (typeof List === "undefined") { await loadScript("list.js"); } List.showPage(document, DB, params[2], params[4], params[5], params[7], params[9]); } else if (url === "" || url === "list") { if (typeof TCloud === "undefined") { await loadScript("tcloud.js"); } TCloud.showPage(document, DB); } else if (url === "about") { if (typeof About === "undefined") { await loadScript("about.js"); } About.showPage(document, DB); } else { // Búsqueda genérica if (typeof List === "undefined") { await loadScript("list.js"); } List.showPage(document, DB, undefined, undefined, url, undefined, undefined); } } catch (e) { console.error("Navigation error:", e); } } // Función auxiliar para cargar scripts dinámicamente function loadScript(filename) { return new Promise((resolve, reject) => { const script = document.createElement("script"); script.src = filename; script.onload = () => resolve(); script.onerror = () => reject(new Error(`Failed to load script: ${filename}`)); document.head.appendChild(script); }); } // Manejar el cambio de hash window.addEventListener("hashchange", handleNavigation); // Inicializar la navegación inicial await handleNavigation(); // Cerrar la base de datos cuando se cierre la página window.addEventListener("beforeunload", () => { DB.closeDB(); }); })();