aboutsummaryrefslogtreecommitdiff
path: root/src/main/resources/js/prefetch.js
diff options
context:
space:
mode:
authorMarvin Borner2020-07-09 22:33:43 +0200
committerMarvin Borner2020-07-09 22:33:43 +0200
commit1edfdf5f3a316a36108a0a853b0a2553d116d6fc (patch)
tree4b825dc642cb6eb9a060e54bf8d69288fbee4904 /src/main/resources/js/prefetch.js
parent18edde9bd3603f3f867cebce100e7b22be9012cd (diff)
Rewriiiiiiiiiite!
Okay, okay. I know, rewriting projects all the time is dumb. Buuut, we really don't want to work with our old and ugly code anymore. Furthermore we'll be using Deno now!
Diffstat (limited to 'src/main/resources/js/prefetch.js')
-rw-r--r--src/main/resources/js/prefetch.js127
1 files changed, 0 insertions, 127 deletions
diff --git a/src/main/resources/js/prefetch.js b/src/main/resources/js/prefetch.js
deleted file mode 100644
index ab9deae..0000000
--- a/src/main/resources/js/prefetch.js
+++ /dev/null
@@ -1,127 +0,0 @@
-/*! instant.page v1.2.2 - (C) 2019 Alexandre Dieulot - https://instant.page/license */
-
-let urlToPreload;
-let mouseoverTimer;
-let lastTouchTimestamp;
-
-const prefetcher = document.createElement("link");
-const isSupported = prefetcher.relList && prefetcher.relList.supports && prefetcher.relList.supports("prefetch");
-const isDataSaverEnabled = navigator.connection && navigator.connection.saveData;
-const allowQueryString = "instantAllowQueryString" in document.body.dataset;
-const allowExternalLinks = "instantAllowExternalLinks" in document.body.dataset;
-
-if (isSupported && !isDataSaverEnabled) {
- prefetcher.rel = "prefetch";
- document.head.appendChild(prefetcher);
-
- const eventListenersOptions = {
- capture: true,
- passive: true,
- };
- document.addEventListener("touchstart", touchstartListener, eventListenersOptions);
- document.addEventListener("mouseover", mouseoverListener, eventListenersOptions)
-}
-
-function touchstartListener(event) {
- /* Chrome on Android calls mouseover before touchcancel so `lastTouchTimestamp`
- * must be assigned on touchstart to be measured on mouseover. */
- lastTouchTimestamp = performance.now();
-
- const linkElement = event.target.closest("tr[data-href]");
-
- if (!isPreloadable(linkElement)) {
- return
- }
-
- linkElement.addEventListener("touchcancel", touchendAndTouchcancelListener, {passive: true});
- linkElement.addEventListener("touchend", touchendAndTouchcancelListener, {passive: true});
-
- urlToPreload = window.location.href + linkElement.getAttribute("data-href");
- preload(urlToPreload)
-}
-
-function touchendAndTouchcancelListener() {
- urlToPreload = undefined;
- stopPreloading()
-}
-
-function mouseoverListener(event) {
- if (performance.now() - lastTouchTimestamp < 1100) {
- return
- }
-
- const linkElement = event.target.closest("tr[data-href]");
-
- if (!isPreloadable(linkElement)) {
- return
- }
-
- linkElement.addEventListener("mouseout", mouseoutListener, {passive: true});
-
- urlToPreload = window.location.href + linkElement.getAttribute("data-href");
-
- mouseoverTimer = setTimeout(() => {
- preload(urlToPreload);
- mouseoverTimer = undefined
- }, 65)
-}
-
-function mouseoutListener(event) {
- if (event.relatedTarget && event.target.closest("tr[data-href]") === event.relatedTarget.closest("tr[data-href]")) {
- return
- }
-
- if (mouseoverTimer) {
- clearTimeout(mouseoverTimer);
- mouseoverTimer = undefined
- } else {
- urlToPreload = undefined;
- stopPreloading()
- }
-}
-
-function isPreloadable(linkElement) {
- if (!linkElement || !(window.location.href + linkElement.getAttribute("data-href"))) {
- return
- }
-
- if (urlToPreload === window.location.href + linkElement.getAttribute("data-href")) {
- return
- }
-
- const preloadLocation = new URL(window.location.href + linkElement.getAttribute("data-href"));
-
- if (!allowExternalLinks && preloadLocation.origin !== location.origin && !("instant" in linkElement.dataset)) {
- return
- }
-
- if (!["http:", "https:"].includes(preloadLocation.protocol)) {
- return
- }
-
- if (preloadLocation.protocol === "http:" && location.protocol === "https:") {
- return
- }
-
- if (!allowQueryString && preloadLocation.search && !("instant" in linkElement.dataset)) {
- return
- }
-
- if (preloadLocation.hash && preloadLocation.pathname + preloadLocation.search === location.pathname + location.search) {
- return
- }
-
- if ("noInstant" in linkElement.dataset) {
- return
- }
-
- return true
-}
-
-function preload(url) {
- prefetcher.href = url
-}
-
-function stopPreloading() {
- prefetcher.removeAttribute("href")
-}