aboutsummaryrefslogtreecommitdiff
path: root/src/app/js
diff options
context:
space:
mode:
author0neGal <mail@0negal.com>2024-06-15 23:34:53 +0200
committerGitHub <noreply@github.com>2024-06-15 23:34:53 +0200
commit938362cc27682f976cfbe16d7c4f898485e893c4 (patch)
tree1774a947415b34ffe06a033f6df15583361dd004 /src/app/js
parent5f3259f5b62609e57468592dfaf7b1bd9b6f0bad (diff)
parent6538b818302829f917fa636aa4d5678466841705 (diff)
downloadViper-938362cc27682f976cfbe16d7c4f898485e893c4.tar.gz
Viper-938362cc27682f976cfbe16d7c4f898485e893c4.zip
Merge branch 'main' into gamepad-support
Diffstat (limited to 'src/app/js')
-rw-r--r--src/app/js/browser.js4
-rw-r--r--src/app/js/dom_events.js4
-rw-r--r--src/app/js/launcher.js56
-rw-r--r--src/app/js/popups.js49
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;