From 77ffc7ae5b80565a5b05c0ba316c77320fcddf55 Mon Sep 17 00:00:00 2001 From: 0neGal Date: Sat, 15 Jun 2024 23:18:00 +0200 Subject: added popups.hide_last() and popups.open_list This will be particularly useful for #239 --- src/app/js/popups.js | 49 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 2 deletions(-) (limited to 'src/app/js/popups.js') diff --git a/src/app/js/popups.js b/src/app/js/popups.js index 10c6995..62176a6 100644 --- a/src/app/js/popups.js +++ b/src/app/js/popups.js @@ -14,15 +14,19 @@ popups.set = (popup, state, auto_close_all = true) => { } if (! state && state !== false) { - state = ! popup_el.classList.contains("shown"); + state = ! open_list.includes(popup_el); } if (state) { + popups.open_list.add(popup_el); overlay.classList.add("shown"); popup_el.classList.add("shown"); } else if (! state) { - overlay.classList.remove("shown"); + popups.open_list.remove(popup_el); popup_el.classList.remove("shown"); + if (! open_list.length) { + overlay.classList.remove("shown"); + } } events.emit("popup-changed", { @@ -55,4 +59,45 @@ popups.set_all = (state = false, exclude_popup) => { } } +// attempts to hide just the last shown popup +popups.hide_last = () => { + if (open_list.length) { + popups.hide(open_list[open_list.length - 1], false); + } +} + +let open_list = []; +popups.open_list = () => { + return open_list; +} + +popups.open_list.remove = (el) => { + // no need to do anything if `el` isn't even in `open_list` + if (! open_list.includes(el)) { + return; + } + + // filtered list + let list = []; + + // run through open popups + for (let i = 0; i < open_list.length; i++) { + // add popup to `list` if it isn't `el` + if (open_list[i] != el && el.classList.contains("shown")) { + list.push(open_list[i]); + } + } + + // set `open_list` to the now filtered `list` + open_list = list; +} + +popups.open_list.add = (el) => { + // make sure the `el` isn't already in the list + popups.open_list.remove(el); + + // add `el` to the end of the list + open_list.push(el); +} + module.exports = popups; -- cgit v1.2.3