When loading lists on web pages, allow items to have additional loaders that runs afterwards.

main
Johan Carlberg 2026-02-22 09:59:58 +01:00
parent 878a28c89f
commit 6712b3b2dd
1 changed files with 13 additions and 2 deletions

View File

@ -5,6 +5,7 @@ async function loadData (block) {
const response = await fetch (source); const response = await fetch (source);
if (response.ok) { if (response.ok) {
const items = await response.json(); const items = await response.json();
var itemLoaders = [];
if (Array.isArray (items)) { if (Array.isArray (items)) {
const template = block.querySelector ("template"); const template = block.querySelector ("template");
@ -12,15 +13,25 @@ async function loadData (block) {
tableBody.innerHTML = ""; tableBody.innerHTML = "";
items.forEach (item => { items.forEach (item => {
const clone = template.content.cloneNode (true); const clone = template.content.cloneNode (true);
window["populate" + block.dataset.item] (clone, item); const loader = window["populate" + block.dataset.item] (clone, item);
if (loader != null) {
itemLoaders.push (loader);
}
tableBody.appendChild (clone); tableBody.appendChild (clone);
tableBody.lastElementChild.dataset.itemid = item.id; tableBody.lastElementChild.dataset.itemid = item.id;
}); });
} else { } else {
window["populate" + block.dataset.item] (block, items); const loader = window["populate" + block.dataset.item] (block, items);
if (loader != null) {
itemLoaders.push (loader);
}
} }
block.classList.add ("loaded"); block.classList.add ("loaded");
for (const loader of itemLoaders) {
await loader();
}
} else { } else {
if ((response.status == 401) || (response.status == 403)) { if ((response.status == 401) || (response.status == 403)) {
document.location.href = document.body.dataset.baseurl; document.location.href = document.body.dataset.baseurl;