diff options
author | 0neGal <mail@0negal.com> | 2024-06-15 23:34:53 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-15 23:34:53 +0200 |
commit | 938362cc27682f976cfbe16d7c4f898485e893c4 (patch) | |
tree | 1774a947415b34ffe06a033f6df15583361dd004 | |
parent | 5f3259f5b62609e57468592dfaf7b1bd9b6f0bad (diff) | |
parent | 6538b818302829f917fa636aa4d5678466841705 (diff) | |
download | Viper-938362cc27682f976cfbe16d7c4f898485e893c4.tar.gz Viper-938362cc27682f976cfbe16d7c4f898485e893c4.zip |
Merge branch 'main' into gamepad-support
-rw-r--r-- | src/app/js/browser.js | 4 | ||||
-rw-r--r-- | src/app/js/dom_events.js | 4 | ||||
-rw-r--r-- | src/app/js/launcher.js | 56 | ||||
-rw-r--r-- | src/app/js/popups.js | 49 |
4 files changed, 107 insertions, 6 deletions
diff --git a/src/app/js/browser.js b/src/app/js/browser.js index 21bdf3f..7dc84d9 100644 --- a/src/app/js/browser.js +++ b/src/app/js/browser.js @@ -358,10 +358,10 @@ if (navigator.onLine) { var view = document.querySelector(".popup#preview webview"); browser.preview = { show: () => { - preview.classList.add("shown"); + popups.show(preview, false); }, hide: () => { - preview.classList.remove("shown"); + popups.hide(preview, false); }, set: (url, autoshow) => { if (autoshow != false) {browser.preview.show()} diff --git a/src/app/js/dom_events.js b/src/app/js/dom_events.js index c16a838..ab79c57 100644 --- a/src/app/js/dom_events.js +++ b/src/app/js/dom_events.js @@ -1,3 +1,4 @@ +const popups = require("./popups"); const settings = require("./settings"); let drag_timer; @@ -27,8 +28,7 @@ document.addEventListener("drop", (e) => { document.body.addEventListener("keyup", (e) => { if (e.key == "Escape") { - browser.toggle(false); - settings.popup.toggle(false); + popups.hide_last(); } }) diff --git a/src/app/js/launcher.js b/src/app/js/launcher.js index 913762b..dc99792 100644 --- a/src/app/js/launcher.js +++ b/src/app/js/launcher.js @@ -163,6 +163,62 @@ launcher.show_ns = (section) => { } } +// changes the active section on the currently active +// `.contentContainer` in the direction specified +// +// `direction` can be: left or right +launcher.relative_section = (direction) => { + // the `.contentMenu` in the currently active tab + let active_menu = document.querySelector( + ".contentContainer:not(.hidden) .contentMenu" + ) + + // get the currently active section + let active_section = active_menu.querySelector("[active]"); + + // no need to do anything, if there's somehow no active section + if (! active_section) {return} + + // these will be filled out + let prev_section, next_section; + + // get list of all the sections + let sections = active_menu.querySelectorAll("li"); + + for (let i = 0; i < sections.length; i++) { + if (sections[i] != active_section) { + continue; + } + + // make `next_section` be the next element in `sections` + next_section = sections[i + 1]; + + // if we're at the first iteration, use the last element in + // `sections` as the previous section, otherwise make it the + // element before this iteration + if (i == 0) { + prev_section = sections[sections.length - 1]; + } else { + prev_section = sections[i - 1]; + } + } + + // if we're going left, and a previous section was found, click it + if (direction == "left" && prev_section) { + prev_section.click(); + } else if (direction == "right") { + // click the next section, if one was found, otherwise just + // assume that the first section is the next section, as the + // active section is likely just the last section, so we wrap + // around instead + if (next_section) { + next_section.click(); + } else if (sections[0]) { + sections[0].click(); + } + } +} + launcher.check_servers = async () => { serverstatus.classList.add("checking"); 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; |