turbo-rails 2.0.0.pre.rc.2 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/assets/javascripts/turbo.js +23 -12
- data/app/assets/javascripts/turbo.min.js +6 -6
- data/app/assets/javascripts/turbo.min.js.map +1 -1
- data/lib/turbo/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1b66ce6805bd7f4ed7bf032d98080748a3d123959ef81940ca62d1c394b69d79
|
4
|
+
data.tar.gz: 2245107df78ba671eb787f683cc77ac508778fd3832c3396c0d52d4be6f9d64c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e6d95bdd5abce68fda1895b52b53474a8c0306545a238af6b0caba6f20354a7e48add0a6c662cd4861152fb0b293468f2f3c2a0c67002c9926922a19c4e734aa
|
7
|
+
data.tar.gz: e9daf44cbd3abf3c120aaf0b7bd58e13feb58f60c8738a57624c9721b6965636214a7e44a47eff5f752890b6df5915dbd852eb58d6449326aaa3969b1e3a91f7
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/*!
|
2
|
-
Turbo 8.0.0
|
2
|
+
Turbo 8.0.0
|
3
3
|
Copyright © 2024 37signals LLC
|
4
4
|
*/
|
5
5
|
(function(prototype) {
|
@@ -2569,8 +2569,7 @@ class History {
|
|
2569
2569
|
|
2570
2570
|
class LinkPrefetchObserver {
|
2571
2571
|
started=false;
|
2572
|
-
|
2573
|
-
touchTriggerEvent="touchstart";
|
2572
|
+
#prefetchedLink=null;
|
2574
2573
|
constructor(delegate, eventTarget) {
|
2575
2574
|
this.delegate = delegate;
|
2576
2575
|
this.eventTarget = eventTarget;
|
@@ -2587,11 +2586,11 @@ class LinkPrefetchObserver {
|
|
2587
2586
|
}
|
2588
2587
|
stop() {
|
2589
2588
|
if (!this.started) return;
|
2590
|
-
this.eventTarget.removeEventListener(
|
2589
|
+
this.eventTarget.removeEventListener("mouseenter", this.#tryToPrefetchRequest, {
|
2591
2590
|
capture: true,
|
2592
2591
|
passive: true
|
2593
2592
|
});
|
2594
|
-
this.eventTarget.removeEventListener(
|
2593
|
+
this.eventTarget.removeEventListener("mouseleave", this.#cancelRequestIfObsolete, {
|
2595
2594
|
capture: true,
|
2596
2595
|
passive: true
|
2597
2596
|
});
|
@@ -2599,11 +2598,11 @@ class LinkPrefetchObserver {
|
|
2599
2598
|
this.started = false;
|
2600
2599
|
}
|
2601
2600
|
#enable=() => {
|
2602
|
-
this.eventTarget.addEventListener(
|
2601
|
+
this.eventTarget.addEventListener("mouseenter", this.#tryToPrefetchRequest, {
|
2603
2602
|
capture: true,
|
2604
2603
|
passive: true
|
2605
2604
|
});
|
2606
|
-
this.eventTarget.addEventListener(
|
2605
|
+
this.eventTarget.addEventListener("mouseleave", this.#cancelRequestIfObsolete, {
|
2607
2606
|
capture: true,
|
2608
2607
|
passive: true
|
2609
2608
|
});
|
@@ -2611,21 +2610,26 @@ class LinkPrefetchObserver {
|
|
2611
2610
|
this.started = true;
|
2612
2611
|
};
|
2613
2612
|
#tryToPrefetchRequest=event => {
|
2614
|
-
if (getMetaContent("turbo-prefetch")
|
2613
|
+
if (getMetaContent("turbo-prefetch") === "false") return;
|
2615
2614
|
const target = event.target;
|
2616
2615
|
const isLink = target.matches && target.matches("a[href]:not([target^=_]):not([download])");
|
2617
2616
|
if (isLink && this.#isPrefetchable(target)) {
|
2618
2617
|
const link = target;
|
2619
2618
|
const location = getLocationForLink(link);
|
2620
2619
|
if (this.delegate.canPrefetchRequestToLocation(link, location)) {
|
2620
|
+
this.#prefetchedLink = link;
|
2621
2621
|
const fetchRequest = new FetchRequest(this, FetchMethod.get, location, new URLSearchParams, target);
|
2622
2622
|
prefetchCache.setLater(location.toString(), fetchRequest, this.#cacheTtl);
|
2623
|
-
link.addEventListener("mouseleave", (() => prefetchCache.clear()), {
|
2624
|
-
once: true
|
2625
|
-
});
|
2626
2623
|
}
|
2627
2624
|
}
|
2628
2625
|
};
|
2626
|
+
#cancelRequestIfObsolete=event => {
|
2627
|
+
if (event.target === this.#prefetchedLink) this.#cancelPrefetchRequest();
|
2628
|
+
};
|
2629
|
+
#cancelPrefetchRequest=() => {
|
2630
|
+
prefetchCache.clear();
|
2631
|
+
this.#prefetchedLink = null;
|
2632
|
+
};
|
2629
2633
|
#tryToUsePrefetchedRequest=event => {
|
2630
2634
|
if (event.target.tagName !== "FORM" && event.detail.fetchOptions.method === "get") {
|
2631
2635
|
const cached = prefetchCache.get(event.detail.url.toString());
|
@@ -2658,7 +2662,14 @@ class LinkPrefetchObserver {
|
|
2658
2662
|
}
|
2659
2663
|
#isPrefetchable(link) {
|
2660
2664
|
const href = link.getAttribute("href");
|
2661
|
-
if (!href || href
|
2665
|
+
if (!href || href.startsWith("#") || link.getAttribute("data-turbo") === "false" || link.getAttribute("data-turbo-prefetch") === "false") {
|
2666
|
+
return false;
|
2667
|
+
}
|
2668
|
+
const event = dispatch("turbo:before-prefetch", {
|
2669
|
+
target: link,
|
2670
|
+
cancelable: true
|
2671
|
+
});
|
2672
|
+
if (event.defaultPrevented) {
|
2662
2673
|
return false;
|
2663
2674
|
}
|
2664
2675
|
if (link.origin !== document.location.origin) {
|