@cimo/jsmvcfw
Version:
Javascript mvc framework. Light, fast and secure.
108 lines • 4.09 kB
JavaScript
;
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, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'")));
if (value) {
const valueCleaned = encodeURIComponent(decodeURIComponent(value.replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'")));
queryStringCleanedList.push(`${keyCleaned}=${valueCleaned}`);
}
else {
queryStringCleanedList.push(keyCleaned);
}
}
}
const pathCleaned = path.replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
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