1
0
Fork 0
mirror of https://github.com/miniflux/v2.git synced 2025-09-15 18:57:04 +00:00

refactor(js): golf a bit touch-related js

There is no need to instantiate the whole TouchHandler object to call a single
static method that immediately returns in case touch events aren't supported:
it's better to extract the condition around the calls, so that the object is
never instantiated.

Another change is to replace `() => this.reset()` with `this.reset`, which is
equivalent, but shorted and less weird.
This commit is contained in:
jvoisin 2025-08-25 22:02:22 +02:00 committed by Frédéric Guillot
parent e8f5c2446c
commit d8d6033741
2 changed files with 8 additions and 14 deletions

View file

@ -1230,9 +1230,11 @@ function initializeKeyboardShortcuts() {
* Initialize touch handler for mobile devices. * Initialize touch handler for mobile devices.
*/ */
function initializeTouchHandler() { function initializeTouchHandler() {
if ( "ontouchstart" in window || navigator.maxTouchPoints > 0) {
const touchHandler = new TouchHandler(); const touchHandler = new TouchHandler();
touchHandler.listen(); touchHandler.listen();
} }
}
/** /**
* Initialize click handlers for various UI elements. * Initialize click handlers for various UI elements.

View file

@ -151,35 +151,27 @@ class TouchHandler {
} }
} }
static isTouchSupported() {
return "ontouchstart" in window || navigator.maxTouchPoints > 0;
}
listen() { listen() {
if (!TouchHandler.isTouchSupported()) {
return;
}
const eventListenerOptions = { passive: true }; const eventListenerOptions = { passive: true };
document.querySelectorAll(".entry-swipe").forEach((element) => { document.querySelectorAll(".entry-swipe").forEach((element) => {
element.addEventListener("touchstart", (e) => this.onItemTouchStart(e), eventListenerOptions); element.addEventListener("touchstart", (e) => this.onItemTouchStart(e), eventListenerOptions);
element.addEventListener("touchmove", (e) => this.onItemTouchMove(e)); element.addEventListener("touchmove", (e) => this.onItemTouchMove(e));
element.addEventListener("touchend", (e) => this.onItemTouchEnd(e), eventListenerOptions); element.addEventListener("touchend", (e) => this.onItemTouchEnd(e), eventListenerOptions);
element.addEventListener("touchcancel", () => this.reset(), eventListenerOptions); element.addEventListener("touchcancel", this.reset, eventListenerOptions);
}); });
const element = document.querySelector(".entry-content"); const element = document.querySelector(".entry-content");
if (element) { if (element) {
if (element.classList.contains("gesture-nav-tap")) { if (element.classList.contains("gesture-nav-tap")) {
element.addEventListener("touchend", (e) => this.onTapEnd(e), eventListenerOptions); element.addEventListener("touchend", (e) => this.onTapEnd(e), eventListenerOptions);
element.addEventListener("touchmove", () => this.reset(), eventListenerOptions); element.addEventListener("touchmove", this.reset, eventListenerOptions);
element.addEventListener("touchcancel", () => this.reset(), eventListenerOptions); element.addEventListener("touchcancel", this.reset, eventListenerOptions);
} else if (element.classList.contains("gesture-nav-swipe")) { } else if (element.classList.contains("gesture-nav-swipe")) {
element.addEventListener("touchstart", (e) => this.onContentTouchStart(e), eventListenerOptions); element.addEventListener("touchstart", (e) => this.onContentTouchStart(e), eventListenerOptions);
element.addEventListener("touchmove", (e) => this.onContentTouchMove(e), eventListenerOptions); element.addEventListener("touchmove", (e) => this.onContentTouchMove(e), eventListenerOptions);
element.addEventListener("touchend", (e) => this.onContentTouchEnd(e), eventListenerOptions); element.addEventListener("touchend", (e) => this.onContentTouchEnd(e), eventListenerOptions);
element.addEventListener("touchcancel", () => this.reset(), eventListenerOptions); element.addEventListener("touchcancel", this.reset, eventListenerOptions);
} }
} }
} }