From 8c3a9184ac78ec42c4e4ae43270e284f9498bfb4 Mon Sep 17 00:00:00 2001 From: Julien Voisin Date: Wed, 15 Jan 2025 04:18:11 +0000 Subject: [PATCH] refactor(js): remove an outdated check for `{passive: true}` According to https://caniuse.com/?search=passive, all browsers released after 2016 do support passive event listeners, so no need to check for its presence. --- internal/ui/static/js/dom_helper.js | 19 ------------------- internal/ui/static/js/touch_handler.js | 24 ++++++++++++------------ 2 files changed, 12 insertions(+), 31 deletions(-) diff --git a/internal/ui/static/js/dom_helper.js b/internal/ui/static/js/dom_helper.js index 0bad0d52..9ff4767a 100644 --- a/internal/ui/static/js/dom_helper.js +++ b/internal/ui/static/js/dom_helper.js @@ -25,23 +25,4 @@ class DomHelper { const elements = document.querySelectorAll(selector); return [...elements].filter((element) => this.isVisible(element)); } - - static hasPassiveEventListenerOption() { - var passiveSupported = false; - - try { - var options = Object.defineProperty({}, "passive", { - get: function() { - passiveSupported = true; - } - }); - - window.addEventListener("test", options, options); - window.removeEventListener("test", options, options); - } catch(err) { - passiveSupported = false; - } - - return passiveSupported; - } } diff --git a/internal/ui/static/js/touch_handler.js b/internal/ui/static/js/touch_handler.js index ef28d858..4f3cfcc9 100644 --- a/internal/ui/static/js/touch_handler.js +++ b/internal/ui/static/js/touch_handler.js @@ -158,26 +158,26 @@ class TouchHandler { } listen() { - const hasPassiveOption = DomHelper.hasPassiveEventListenerOption(); + const eventListenerOptions = { passive: true }; document.querySelectorAll(".entry-swipe").forEach((element) => { - element.addEventListener("touchstart", (e) => this.onItemTouchStart(e), hasPassiveOption ? { passive: true } : false); - element.addEventListener("touchmove", (e) => this.onItemTouchMove(e), hasPassiveOption ? { passive: false } : false); - element.addEventListener("touchend", (e) => this.onItemTouchEnd(e), hasPassiveOption ? { passive: true } : false); - element.addEventListener("touchcancel", () => this.reset(), hasPassiveOption ? { passive: true } : false); + element.addEventListener("touchstart", (e) => this.onItemTouchStart(e), eventListenerOptions); + element.addEventListener("touchmove", (e) => this.onItemTouchMove(e)); + element.addEventListener("touchend", (e) => this.onItemTouchEnd(e), eventListenerOptions); + element.addEventListener("touchcancel", () => this.reset(), eventListenerOptions); }); const element = document.querySelector(".entry-content"); if (element) { if (element.classList.contains("gesture-nav-tap")) { - element.addEventListener("touchend", (e) => this.onTapEnd(e), hasPassiveOption ? { passive: true } : false); - element.addEventListener("touchmove", () => this.reset(), hasPassiveOption ? { passive: true } : false); - element.addEventListener("touchcancel", () => this.reset(), hasPassiveOption ? { passive: true } : false); + element.addEventListener("touchend", (e) => this.onTapEnd(e), eventListenerOptions); + element.addEventListener("touchmove", () => this.reset(), eventListenerOptions); + element.addEventListener("touchcancel", () => this.reset(), eventListenerOptions); } else if (element.classList.contains("gesture-nav-swipe")) { - element.addEventListener("touchstart", (e) => this.onContentTouchStart(e), hasPassiveOption ? { passive: true } : false); - element.addEventListener("touchmove", (e) => this.onContentTouchMove(e), hasPassiveOption ? { passive: true } : false); - element.addEventListener("touchend", (e) => this.onContentTouchEnd(e), hasPassiveOption ? { passive: true } : false); - element.addEventListener("touchcancel", () => this.reset(), hasPassiveOption ? { passive: true } : false); + element.addEventListener("touchstart", (e) => this.onContentTouchStart(e), eventListenerOptions); + element.addEventListener("touchmove", (e) => this.onContentTouchMove(e), eventListenerOptions); + element.addEventListener("touchend", (e) => this.onContentTouchEnd(e), eventListenerOptions); + element.addEventListener("touchcancel", () => this.reset(), eventListenerOptions); } } }