aboutsummaryrefslogtreecommitdiff
path: root/static/js/contextmenu.ts
diff options
context:
space:
mode:
Diffstat (limited to 'static/js/contextmenu.ts')
-rw-r--r--static/js/contextmenu.ts28
1 files changed, 28 insertions, 0 deletions
diff --git a/static/js/contextmenu.ts b/static/js/contextmenu.ts
new file mode 100644
index 0000000..dea9bec
--- /dev/null
+++ b/static/js/contextmenu.ts
@@ -0,0 +1,28 @@
+(function () {
+ const hide = (triggers) => {
+ for (let i = 0; i < triggers.length; i++) {
+ triggers[i].checked = false;
+ }
+ };
+
+ const hideIfClickedOutside = (menus, triggers, event) => {
+ for (let i = 0; i < menus.length; i++) {
+ const active = triggers[i].checked === true;
+ const outside = !menus[i].contains(event.target);
+ if (outside && active) hide(triggers);
+ }
+ };
+
+ self.addEventListener("scroll", function () {
+ const triggers = document.querySelectorAll("micro-metadata-menu input");
+ hide(triggers);
+ });
+
+ ["click", "touchstart"].forEach(function (event) {
+ self.addEventListener(event, function (event) {
+ const menus = document.querySelectorAll("micro-metadata-menu");
+ const triggers = document.querySelectorAll("micro-metadata-menu input");
+ hideIfClickedOutside(menus, triggers, event);
+ });
+ });
+})();