window.addEventListener('DOMContentLoaded', () => { const globalViewButton = document.querySelector('button.global-view'); const globalAdminButton = document.querySelector('button.global-admin'); if (!globalViewButton && !globalAdminButton) { return; } const permissionInfo = { view: { type: 'view', button: globalViewButton, icon: document.querySelector('button.global-view i'), text: document.querySelector('button.global-view .global-view-text'), onIcon: 'fa-eye', offIcon: 'fa-eye-slash', toggleUrl: globalViewButton?.dataset.toggleUrl, }, admin: { type: 'admin', button: globalAdminButton, icon: document.querySelector('button.global-admin i'), text: document.querySelector('button.global-admin .global-admin-text'), onIcon: 'fa-user-hard-hat', offIcon: 'fa-user-slash', toggleUrl: globalAdminButton?.dataset.toggleUrl, } } // Need this to bust the cache so the button actually shows up as changed. function hardReload() { const url = new URL(window.location.href); url.searchParams.delete('globalPermissionUpdate'); url.searchParams.append('globalPermissionUpdate', new Date().valueOf().toString(10)); window.location.href = url; } function globalViewIsOn() { return globalViewButton?.classList.contains('global-view-on') ?? false; } function globalAdminIsOn() { return globalAdminButton?.classList.contains('global-admin-on') ?? false; } function enableGlobalPermission(permission) { fetch(`${permission.toggleUrl}/on?page=${document.location.pathname}`, {method: 'POST', mode: 'cors', credentials: 'include'}).then((response) => { if (response.ok) { if (permission.button.dataset.refreshPage === 'true') { hardReload() } else { permission.button.classList.remove(`global-${permission.type}-off`); permission.button.classList.add(`global-${permission.type}-on`); permission.icon.classList.remove(permission.onIcon); permission.icon.classList.add(permission.offIcon) permission.text.innerText = `Disable global ${permission.type}`; } } }); } function disableGlobalPermission(permission) { fetch(`${permission.toggleUrl}/off?page=${document.location.pathname}`, {method: 'POST', mode: 'cors', credentials: 'include'}).then((response) => { if (response.ok) { if (permission.button.dataset.refreshPage === 'true') { hardReload() } else { permission.button.classList.add(`global-${permission.type}-off`); permission.button.classList.remove(`global-${permission.type}-on`); permission.icon.classList.add(permission.onIcon); permission.icon.classList.remove(permission.offIcon) permission.text.innerText = `Enable global ${permission.type}`; } } }); } globalViewButton?.addEventListener('click', () => { if (globalViewIsOn()) { disableGlobalPermission(permissionInfo.view); } else { enableGlobalPermission(permissionInfo.view); } }); globalAdminButton?.addEventListener('click', () => { if (globalAdminIsOn()) { disableGlobalPermission(permissionInfo.admin); } else { enableGlobalPermission(permissionInfo.admin); } }) });