Files
objects/wco/simplemobnav/simplemobnav.js
2025-07-01 11:09:51 +02:00

102 lines
3.6 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

var apx = apx || {};
apx.simplemobnav = {};
apx.simplemobnav.loadwco = (id, ctx) => {
const tpldataname = `${apx.data.pagename}_${id}_simplemobnav`;
const simplemobnavid = document.getElementById(id)
console.log("load simplemobnav with tpldataname:", tpldataname, " id:", id, " ctx:", ctx);
let initmenu;
if (simplemobnavid.innerHTML.trim() === "") {
// Get 1st menu matching the first profil in profilmenu
apx.simplemobnav.checktpldataname(tpldataname);
for (const menulist of apx.data.tpldata[tpldataname].profilmenu) {
if (apx.data.headers.xprofils.includes(menulist.mainprofil)) {
initmenu = menulist.link
break;
}
}
ctx.link = initmenu;
apx.data.tpldata[tpldataname].contentscreen = initmenu;
simplemobnavid.innerHTML = Mustache.render(
apx.data.tpl.simplemobnavmain,
apx.data.tpldata[tpldataname]
);
} else {
//just update wco-link this will also run apx.{contentwconame}.loadwco()
simplemobnavid.querySelectorAll('[wco-name]').forEach(elt => { elt.setAttribute('wco-link', ctx.link) });
}
// shom menulist from next
const screendata = apx.data.tpldata[tpldataname].links.find(
(m) => m.link == ctx.link
);
// add in menulink the data needed to customize
const menulinks = apx.data.tpldata[tpldataname].links
.filter(m =>
screendata.next.includes(m.link) && m.allowedprofil.some(el => apx.data.headers.xprofils.includes(el)))
.map(m => {
const newm = { ...m }
if (!m.classnavbutton && apx.data.tpldata[tpldataname].classnavbutton) {
newm.classnavbutton = apx.data.tpldata[tpldataname].classnavbutton
}
if (!m.classnavlist && apx.data.tpldata[tpldataname].classnavlist) {
newm.classnavlist = apx.data.tpldata[tpldataname].classnavlist
}
return newm
})
console.log("menulminks", menulinks);
simplemobnavid.querySelector('.navlink').innerHTML = Mustache.render(
apx.data.tpl[`simplemobnav${apx.data.tpldata[tpldataname].navtpl}`],
{ id, links: menulinks }
);
document.getElementById("loading").classList.add("hidden");
console.log(`Request to show screen ${ctx.link}`);
};
apx.simplemobnav.action = (id, link, action, wconame) => {
/**
* Manage action per menu
* if navigation then it just propagate wco-link in all the wco-name component
*/
if (action == "navigation") {
document.getElementById(id).setAttribute("wco-link", link);
/*document.getElementById(id).querySelectorAll("[wco-name]").forEach(lnk => {
console.log("lnk:",lnk)
console.log(link)
lnk.setAttribute('wco-link', link)
console.log(link,lnk)
});*/
return;
}
if (!apx[wconame]) {
console.log(`%c⚠ warning:%c this requested compoment ${wconame}} does not exist`);
}
if (!apx[wconame][action]) {
console.log(`%c⚠ warning:%c this function apx.${wconame}}.${action} does not exist`);
}
apx[wconame][action]();
}
apx.simplemobnav.reload = () => {
location.reload();
}
apx.simplemobnav.checktpldataname = (tpldataname) => {
/**
* This is to help dev to build a correct json file
*/
if (!apx.data.tpldata[tpldataname]) {
console.log(`%c⚠ warning:%c ${tpldataname} does not exist in localstorage tpldata `, 'color:red;')
return false;
}
const mandatoryprop = ["contentwconame", "contentid", "profilmenu", "links"]
let missingprop = ""
mandatoryprop.forEach(p => {
if (!apx.data.tpldata[tpldataname][p]) {
missingprop += ` ${p}`
}
});
if (missingprop !== "") {
console.log(`%c⚠ warning:%c Missing property(ies) in ${tpldataname}: ${missingprop} `, 'color:red;')
return false
}
};