From ac8a325c37c59fe8212ca19005f0ff2d19e1793a Mon Sep 17 00:00:00 2001 From: Kalitsune Date: Tue, 21 May 2024 17:20:49 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=8C=90=20Make=20the=20popup=20overlay=20m?= =?UTF-8?q?ore=20generic=20and=20fixed=20the=20esc=20key=20not=20closing?= =?UTF-8?q?=20the=20overlay=20properly?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/assets/js/scripts/overlay.js | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/app/assets/js/scripts/overlay.js b/app/assets/js/scripts/overlay.js index 551d2dac..5caf6c6c 100644 --- a/app/assets/js/scripts/overlay.js +++ b/app/assets/js/scripts/overlay.js @@ -25,7 +25,11 @@ let accountSelectContent = document.getElementById('accountSelectContent') */ function overlayKeyHandler (e){ if(e.key === 'Enter' || e.key === 'Escape'){ - document.getElementById(overlayHandlerContent).getElementsByClassName('overlayKeybindEnter')[0].click() + if (overlayContainer.hasAttribute('popup')) { + toggleOverlay(false) + } else { + document.getElementById(overlayHandlerContent).getElementsByClassName('overlayKeybindEnter')[0].click() + } } } /** @@ -67,8 +71,9 @@ function bindOverlayKeys(state, content, dismissable){ * @param {boolean} toggleState True to display, false to hide. * @param {boolean} dismissable Optional. True to show the dismiss option, otherwise false. * @param {string} content Optional. The content div to be shown. + * @param {boolean} popup Optional. True to show the overlay as a popup that is easily dismissable and interactible. */ -function toggleOverlay(toggleState, dismissable = false, content = 'overlayContent'){ +function toggleOverlay(toggleState, dismissable = false, content = 'overlayContent', popup = false){ if(toggleState == null){ toggleState = !document.getElementById('main').hasAttribute('overlay') } @@ -80,6 +85,7 @@ function toggleOverlay(toggleState, dismissable = false, content = 'overlayConte if(toggleState){ document.getElementById('main').setAttribute('overlay', true) overlayContainer.setAttribute('content', content) + overlayContainer.setAttribute('popup', popup) // Make things untabbable. $('#main *').attr('tabindex', '-1') @@ -126,23 +132,21 @@ function toggleOverlay(toggleState, dismissable = false, content = 'overlayConte async function toggleServerSelection(toggleState){ await prepareServerSelectionList() - toggleOverlay(toggleState, true, 'serverSelectContent') + toggleOverlay(toggleState, false, 'serverSelectContent', true) } async function toggleAccountSelection(toggleState, popup = false){ if (popup) { - // set the popup=true attribute to the accountSelectContent div and set the accountSelectActions div to display: none to avoid colliding with the validateSelectedAccount function - accountSelectContent.setAttribute('popup', 'true') + // set the accountSelectActions div to display: none to avoid colliding with the validateSelectedAccount function document.getElementById('accountSelectActions').style.display = 'none' } else { - // remove the popup attribute and set the accountSelectActions div to display: block, this is not done while closing the overlay because of the fadeOut effect - accountSelectContent.removeAttribute('popup') + // set the overlayContainer div to display: block, this is not done while closing the overlay because of the fadeOut effect document.getElementById('accountSelectActions').style.display = 'block' } // show the overlay await prepareAccountSelectionList() - toggleOverlay(toggleState, true, 'accountSelectContent') + toggleOverlay(toggleState, false, 'accountSelectContent', popup) } /** @@ -242,10 +246,8 @@ document.getElementById('accountSelectManage').addEventListener('click', async ( // Make the Server Selection background clickable to close the overlay. overlayContainer.addEventListener('click', e => { if (e.target === overlayContainer) { - // This function only works for the server selection overlay or if the account selection is a popup - if(overlayContainer.getAttribute('content') === 'serverSelectContent') { - toggleOverlay(false) - } else if(overlayContainer.getAttribute('content') === 'accountSelectContent' && accountSelectContent.hasAttribute('popup')) { + // This function only works if the overlay is a popup + if(overlayContainer.hasAttribute('popup')) { toggleOverlay(false) } } @@ -268,7 +270,7 @@ async function setAccountListingHandlers(){ listings.map(async (val) => { val.onclick = async e => { // popup mode - if(accountSelectContent.hasAttribute('popup')){ + if(overlayContainer.hasAttribute('popup')){ const authAcc = ConfigManager.setSelectedAccount(val.getAttribute('uuid')) ConfigManager.save() updateSelectedAccount(authAcc) @@ -332,7 +334,7 @@ function populateAccountListings(){ const accounts = Array.from(Object.keys(accountsObj), v=>accountsObj[v]) let htmlString = '' for(let i=0; i + htmlString += ``