const dialogContainerId = "#dialog-container" window.addEventListener('load', () => { document.querySelectorAll(".dropdown").forEach(el => { const action = el.querySelector(".dropdown-action"); const content = el.querySelector(".dropdown-content"); action.addEventListener('click', () => { content.classList.toggle('selected'); content.style.marginLeft = `-${(content.offsetWidth - action.offsetWidth)}px`; }) }) // configure radio button groups document.querySelectorAll("section.radio-group").forEach(el => { const submittedInput = el.querySelector("input[type=hidden]"); el.querySelector(`input[value="${submittedInput.value}"]`).checked = true; el.querySelectorAll("input[type=radio]").forEach(rb => { if(rb?.checked) { submittedInput.value = rb.value; } rb.addEventListener('click', () => { submittedInput.value = rb.value; }) }) }) // configure dialog buttons document.querySelectorAll("button[data-type=dialog]").forEach(btn => { const selector = btn.dataset.trigger; btn.addEventListener('click', async () => { let response = await fetch(btn.dataset.url); if(response.ok) { response = await response.text(); let container = document.querySelector(dialogContainerId); if(container == null) { const node = document.createElement('div'); node.id = "dialog-container"; document.querySelector("body").appendChild(node); container = document.querySelector(dialogContainerId); } container.innerHTML = response; const dialogReference = document.querySelector(selector); dialogReference?.showModal(); } else { // todo display alert console.log("no dialog found"); } }); }); // configure section selector document.querySelectorAll("select[data-type=section-selector]").forEach(select => { const sectionPrefix = select.dataset.selectorPrefix; const options = [...select.options].map(o => o.value); for(let option of options) { const querySelector = "div[data-section-id=" + sectionPrefix + "-" + option + "]"; const section = document.querySelector(querySelector); if(option === select.value) { section?.classList?.remove('hide'); } else { section?.classList?.add('hide'); } } select.addEventListener("change", () => { for(let option of options) { const querySelector = "div[data-section-id=" + sectionPrefix + "-" + option + "]"; const section = document.querySelector(querySelector); if(option === select.value) { section?.classList?.remove('hide'); } else { section?.classList?.add('hide'); } } }) }) }) function closeDialog(selector) { document.querySelector(selector).close(); document.querySelector(dialogContainerId).innerHTML=""; }