UNPKG

@cimo/jsmvcfw

Version:

Javascript mvc framework. Light, fast and secure.

108 lines 4.09 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.navigateTo = exports.route = void 0; const JsMvcFw_1 = require("./JsMvcFw"); let routeList = []; let controller; const cleanUrl = (urlNext) => { let url = urlNext; if (urlNext !== "/" && urlNext.charAt(0) === "/") { url = urlNext.slice(1); } const [path, queryString] = url.split("?"); const queryStringCleanedList = []; if (queryString) { const queryStringList = queryString.split("&"); for (let a = 0; a < queryStringList.length; a++) { const param = queryStringList[a]; const [key, value] = param.split("="); const keyCleaned = encodeURIComponent(decodeURIComponent(key.replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#39;"))); if (value) { const valueCleaned = encodeURIComponent(decodeURIComponent(value.replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#39;"))); queryStringCleanedList.push(`${keyCleaned}=${valueCleaned}`); } else { queryStringCleanedList.push(keyCleaned); } } } const pathCleaned = path.replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#39;"); const urlCleaned = pathCleaned + (queryStringCleanedList.length > 0 ? "?" + queryStringCleanedList.join("&") : ""); return urlCleaned; }; const historyPush = (urlNext, parameterObject, parameterSearch, title = "") => { window.history.pushState({ urlPrevious: window.location.pathname, parameterObject, parameterSearch }, title, cleanUrl(urlNext)); }; const removeController = () => { if (controller) { const controllerList = (0, JsMvcFw_1.getControllerList)(); for (let a = controllerList.length - 1; a >= 0; a--) { for (const children of controllerList[a].childrenList) { children.destroy(); } } controller.destroy(); } }; const populatePage = (urlNext, isSoft, parameterObject, parameterSearch) => { if (!isSoft) { if (parameterSearch) { window.location.search = parameterSearch; } window.location.href = cleanUrl(urlNext); } else { let isNotFound = true; for (const route of routeList) { if (route.path === urlNext) { isNotFound = false; (0, JsMvcFw_1.resetFramework)(); historyPush(urlNext, parameterObject, parameterSearch, route.title); document.title = route.title; removeController(); controller = route.controller(); (0, JsMvcFw_1.renderTemplate)(controller, undefined, () => { controller.event(); (0, JsMvcFw_1.renderAfter)(controller).then(() => { controller.rendered(); }); }); break; } } if (isNotFound) { historyPush("/404", parameterObject, parameterSearch, "404"); document.title = "404"; const elementRoot = document.getElementById("jsmvcfw_app"); if (elementRoot) { elementRoot.innerHTML = "Route not found!"; } } } }; const route = (routeListValue) => { routeList = routeListValue; window.onload = (event) => { if (event) { populatePage(window.location.pathname, true); } }; window.onpopstate = (event) => { if (event) { populatePage(window.location.pathname, true); } }; window.onbeforeunload = () => { removeController(); }; }; exports.route = route; const navigateTo = (urlNext, isSoft = true, parameterObject, parameterSearch) => { populatePage(urlNext, isSoft, parameterObject, parameterSearch); }; exports.navigateTo = navigateTo; //# sourceMappingURL=JsMvcFwRoute.js.map