/* Header behavior is shared by home, all workspaces and CRM. */ (function(){'use strict'; function init(){ var header=document.getElementById('fi-shell-header');if(!header||header.dataset.topbarReady)return;header.dataset.topbarReady='1'; var toggle=header.querySelector('[data-shell-menu-toggle]'),nav=header.querySelector('#fi-shell-navigation'); function close(focus){header.classList.remove('is-menu-open');toggle.setAttribute('aria-expanded','false');if(focus)toggle.focus();} toggle.addEventListener('click',function(){var opened=header.classList.toggle('is-menu-open');toggle.setAttribute('aria-expanded',String(opened));}); nav.addEventListener('click',function(e){if(e.target.closest('a'))close(false);}); document.addEventListener('click',function(e){if(!header.contains(e.target))close(false);}); document.addEventListener('keydown',function(e){if(e.key==='Escape'&&header.classList.contains('is-menu-open'))close(true);}); window.addEventListener('resize',function(){if(window.innerWidth>1100)close(false);}); var loginButton=header.querySelector('[data-shell-login]'),login=header.querySelector('#fi-shell-login-panel'); if(loginButton&&login)loginButton.addEventListener('click',function(){login.hidden=!login.hidden;loginButton.setAttribute('aria-expanded',String(!login.hidden));if(!login.hidden){var input=login.querySelector('input');if(input)input.focus();}}); if(login){ document.addEventListener('click',function(e){if(!header.contains(e.target)){login.hidden=true;loginButton.setAttribute('aria-expanded','false');}}); document.addEventListener('keydown',function(e){if(e.key==='Escape'&&!login.hidden){login.hidden=true;loginButton.setAttribute('aria-expanded','false');loginButton.focus();}}); var form=login.querySelector('[data-topbar-login-form]'); form.addEventListener('submit',function(e){ e.preventDefault();if(form.dataset.busy||!form.reportValidity())return; form.dataset.busy='1';var submit=form.querySelector('[type=submit]'),status=form.querySelector('[data-topbar-login-status]');submit.disabled=true;status.hidden=true; fetch(form.action,{method:'POST',credentials:'same-origin',headers:{'Content-Type':'application/x-www-form-urlencoded'},body:new URLSearchParams(new FormData(form)).toString()}) .then(function(response){if(!response.ok)throw new Error();return response.text();}) .then(function(value){if(value.trim()!=='1')throw new Error();window.location.reload();}) .catch(function(){status.textContent=header.dataset.loginError;status.hidden=false;}) .finally(function(){delete form.dataset.busy;submit.disabled=false;}); }); } var busy=false; header.querySelectorAll('[data-topbar-logout]').forEach(function(button){button.addEventListener('click',function(){ if(busy)return;busy=true;button.disabled=true; fetch('/general_includings/login_actions.php',{method:'POST',credentials:'same-origin',headers:{'Content-Type':'application/x-www-form-urlencoded'},body:'action=logout'}) .then(function(response){if(!response.ok)throw new Error();return response.text();}) .then(function(value){if(value.trim()!=='1')throw new Error();window.location.assign('/');}) .catch(function(){var error=header.querySelector('.fi-topbar-error');if(!error){error=document.createElement('p');error.className='fi-topbar-error';error.setAttribute('role','alert');header.appendChild(error);}error.textContent=header.dataset.error;}) .finally(function(){busy=false;button.disabled=false;}); });}); } if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',init);else init(); })();