105 lines
2.1 KiB
TypeScript
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();
|
|
}
|