// auxiliary function closes the user profile menu function closeUserControls() { let userControls = Array.from(document.querySelectorAll(".user-controls")); userControls.forEach(e => e.removeAttribute("open")); } function closeLeftMenu() { let leftMenu = document.querySelector("#main__menu"); if (leftMenu) leftMenu.removeAttribute("open"); } function closeRightMenu() { let rightMenu = document.querySelectorAll(".jsRightMenu"); if (Array.from(rightMenu).filter(el => el.hasAttribute("open")).length > 0) { Array.from(document.querySelectorAll(".views-container")).forEach(vC => vC.classList.toggle("sidebar-is-closed") ); Array.from(document.querySelectorAll(".jsOffsiteToggle")).forEach(el => { el.querySelector('.text-right').setAttribute('hidden', ''); el.querySelector('.text-left').removeAttribute('hidden'); }); Array.from(rightMenu).forEach(el => el.removeAttribute("open")); } } function openRightMenu() { let rightMenu = document.querySelectorAll(".jsRightMenu"); Array.from(rightMenu).forEach(el => el.setAttribute("open", "")); Array.from(document.querySelectorAll(".jsOffsiteToggle")).forEach(el => { el.querySelector('.text-left').setAttribute('hidden', ''); el.querySelector('.text-right').removeAttribute('hidden'); }); Array.from(document.querySelectorAll(".views-container")).forEach(vC => vC.classList.toggle("sidebar-is-closed") ); } const control = document.querySelector('.jsMobileSidebarControl'); const buttons = control.querySelectorAll('.jsMobileRightMenuButton'); const rightMenu = control.querySelector('.jsRightMenu'); Array.from(buttons).forEach(button => button.addEventListener("click", () => { if (button.classList.contains('icon-close')) { button.classList.remove('icon-close'); button.classList.add('icon-options-vertical'); rightMenu.setAttribute('hidden', ''); } else { button.classList.remove('icon-options-vertical'); button.classList.add('icon-close'); rightMenu.removeAttribute('hidden'); }; }) ) /*Array.from(controls).forEach(control => { const button = control.querySelector('.jsMobileRightMenuButton'); const rightMenu = control.querySelector('.jsRightMenu'); button.addEventListener("click", () => { if (button.classList.contains('icon-close')) { button.classList.remove('icon-close'); button.classList.add('icon-options-vertical'); console.log(rightMenu); rightMenu.setAttribute('hidden', ''); } else { button.classList.remove('icon-options-vertical'); button.classList.add('icon-close'); rightMenu.removeAttribute('hidden'); } }); });*/ /*const buttons = document.querySelectorAll(".jsMobileToggleRightMenu"); Array.from(buttons).forEach(el => el.addEventListener("click", () => { if (el.classList.contains('icon-close')) { el.classList.remove('icon-close'); el.classList.add('icon-options-vertical'); const rightMenu = document.querySelectorAll(".jsRightMenu"); rightMenu.classList.add("block"); } else { el.classList.remove('icon-options-vertical'); el.classList.add('icon-close'); const rightMenu = document.querySelectorAll(".jsRightMenu"); rightMenu.classList.add("sm-hidden"); }; }));*/ document.addEventListener("DOMContentLoaded", function () { const componentSet = new Set(window.hubl.components.map(c => c.type)); // Workaround - No "navigate" event after the login on `/login` if (window.location.pathname == "/login") { const sibAuth = document.querySelector("sib-auth"); if (sibAuth) { sibAuth.getUser() .then(user => { if (user !== null) { window.dispatchEvent( new CustomEvent('requestNavigation', { detail: { route: window.hubl.getRoute("dashboard", true) } }), ); } }); } } //- View change event window.addEventListener("navigate", e => { if (componentSet.has('admin')) { const onlyAdmin = document.querySelector('.only-on-admin'); if (onlyAdmin) { if (e.detail.route.startsWith('admin-')) { onlyAdmin.removeAttribute('hidden'); } else { onlyAdmin.setAttribute('hidden', ''); } } for (component of window.hubl.components) { let adminTarget = document.querySelector(`solid-route[name="admin-${component.route}"]`); let adminTargetTwo = document.querySelector(`.jsRightMenu solid-link[next="admin-${component.route}"]`); if (e.detail.route.startsWith(`admin-${component.route}`)) { if (adminTarget) adminTarget.setAttribute('active', ''); if (adminTargetTwo) adminTargetTwo.setAttribute('active', ''); } else { if (adminTarget) adminTarget.removeAttribute('active'); if (adminTargetTwo) adminTargetTwo.removeAttribute('active'); } } } closeLeftMenu(); closeUserControls(); if (e.detail.route.startsWith('login')) { const sibAuth = document.querySelector("sib-auth"); if (sibAuth) { sibAuth.getUser() .then(user => { if (user !== null) { window.dispatchEvent( new CustomEvent('requestNavigation', { detail: { route: window.hubl.getRoute("dashboard", true) } }), ); } }); } } }); // Document -> close menu document.addEventListener("click", event => { if (!event.target.closest(".user-controls")) { closeUserControls(); } if ( !event.target.closest("#main__menu") && event.target.id != "toggleMainMenu" ) { closeLeftMenu(); } if ( !event.target.closest(".jsOffsiteToggle") ) { closeRightMenu(); } }); // listen for keypress document.onkeydown = e => { e = e || window.event; if (e.key === "Escape" || e.key === "Esc") { closeUserControls(); closeLeftMenu(); closeRightMenu(); } }; const toggleMainMenu = document.querySelector("#toggleMainMenu") if (toggleMainMenu) { toggleMainMenu.addEventListener("click", () => { let leftMenu = document.querySelector("#main__menu"); if (leftMenu.hasAttribute("open")) { closeLeftMenu(); } else { leftMenu.setAttribute("open", ""); } }); } const rightMenus = Array.from(document.querySelectorAll("nav.jsRightMenu")); rightMenus.forEach(rightMenu => { const btnRightMenu = rightMenu.querySelector("li.jsOffsiteToggle"); btnRightMenu.addEventListener("click", () => { if (rightMenu.hasAttribute("open")) { closeRightMenu(); } else { openRightMenu(); } }); }); Array.from(document.querySelectorAll(".jsMobileSidebarOpenButton")).forEach( el => { el.addEventListener("click", () => { openRightMenu(); }); } ); });