108 líneas
3.3 KiB
JavaScript
108 líneas
3.3 KiB
JavaScript
"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.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.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.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.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.db);
|
|
} else if (url === "about") {
|
|
if (typeof About === "undefined") {
|
|
await loadScript("about.js");
|
|
}
|
|
About.showPage(document, DB.db);
|
|
} else {
|
|
// Búsqueda genérica
|
|
if (typeof List === "undefined") {
|
|
await loadScript("list.js");
|
|
}
|
|
List.showPage(document, DB.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();
|
|
});
|
|
|
|
})();
|