frontend-zackeneule/source/logic/main.ts

105 lines
2.1 KiB
TypeScript

/**
*/
function template_request(
id : string
) : DocumentFragment
{
let dom_template = document.querySelector("template#" + id);
// return template["content"].cloneNode(true);
return (document.importNode(dom_template["content"], true) as DocumentFragment)
}
/**
*/
async function update_nav(
options : {
mode ?: string;
} = {}
) : Promise<void>
{
options = Object.assign(
{
"mode": ((await _espe.backend.logged_in()) ? "logged_in" : "logged_out"),
},
options
);
let dom_body = document.querySelector("body");
if (options.mode === null) {
dom_body.removeAttribute("rel");
}
else {
dom_body.setAttribute("rel", options.mode);
}
}
/**
*/
function setup_nav(
) : void
{
const entries : Array<
{
location : lib_plankton.zoo_page.type_location;
label : string;
classes : Array<string>;
}
> = [
{
"location": {"name": "login", "parameters": {}},
"label": "Anmelden",
"classes": ["logged_out"],
},
{
"location": {"name": "logout", "parameters": {}},
"label": "Abmelden",
"classes": ["logged_in"],
},
{
"location": {"name": "create", "parameters": {}},
"label": "Mitglied anlegen",
"classes": ["logged_in"],
},
{
"location": {"name": "members", "parameters": {}},
"label": "Mitglieder-Übersicht",
"classes": ["logged_in"],
},
];
let dom_ul : HTMLElement = document.querySelector("nav > ul");
entries.forEach(
entry => {
let dom_li : HTMLElement = document.createElement("li");
{
let dom_a : HTMLElement = document.createElement("a");
dom_a.textContent = entry.label;
dom_a.setAttribute("href", lib_plankton.zoo_page.encode(entry.location));
entry.classes.forEach(class_ => {dom_a.classList.add(class_);});
dom_li.appendChild(dom_a);
}
dom_ul.appendChild(dom_li);
}
);
update_nav();
}
/**
*/
async function main(
) : Promise<void>
{
await _espe.conf.load();
await _espe.backend.init();
await lib_plankton.zoo_page.init(
document.querySelector("main"),
{
"fallback": {"name": "index", "parameters": {}},
}
);
setup_nav();
lib_plankton.zoo_page.start();
}