turbo-rails 2.0.0.pre.rc.2 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: db9fabf188a1b8db9d4a2f15742cbd342293368ba0bb3d23692fa2f1e922e79d
4
- data.tar.gz: 3080cea594ecd3f05d1d80f515c919992f5e1d8afcbc921b656879ddcda76433
3
+ metadata.gz: 1b66ce6805bd7f4ed7bf032d98080748a3d123959ef81940ca62d1c394b69d79
4
+ data.tar.gz: 2245107df78ba671eb787f683cc77ac508778fd3832c3396c0d52d4be6f9d64c
5
5
  SHA512:
6
- metadata.gz: bdb2fcb4ed4f3d9b63ff6d965b8fa17a0e3b9e004546289f7a4f10b14da66f5c94ba3d5d6ca4c0e9bcbad7253d2250c47034bd4540d5bc1a962a333591892137
7
- data.tar.gz: 37c771f8632419220a3a017c007867926adf12185cd6de833da527990bf8198a383eea645b53cee3ce38ffefc6ac4a25267b215272957e23aac07948d050e1d0
6
+ metadata.gz: e6d95bdd5abce68fda1895b52b53474a8c0306545a238af6b0caba6f20354a7e48add0a6c662cd4861152fb0b293468f2f3c2a0c67002c9926922a19c4e734aa
7
+ data.tar.gz: e9daf44cbd3abf3c120aaf0b7bd58e13feb58f60c8738a57624c9721b6965636214a7e44a47eff5f752890b6df5915dbd852eb58d6449326aaa3969b1e3a91f7
@@ -1,5 +1,5 @@
1
1
  /*!
2
- Turbo 8.0.0-rc.2
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
- hoverTriggerEvent="mouseenter";
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(this.hoverTriggerEvent, this.#tryToPrefetchRequest, {
2589
+ this.eventTarget.removeEventListener("mouseenter", this.#tryToPrefetchRequest, {
2591
2590
  capture: true,
2592
2591
  passive: true
2593
2592
  });
2594
- this.eventTarget.removeEventListener(this.touchTriggerEvent, this.#tryToPrefetchRequest, {
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(this.hoverTriggerEvent, this.#tryToPrefetchRequest, {
2601
+ this.eventTarget.addEventListener("mouseenter", this.#tryToPrefetchRequest, {
2603
2602
  capture: true,
2604
2603
  passive: true
2605
2604
  });
2606
- this.eventTarget.addEventListener(this.touchTriggerEvent, this.#tryToPrefetchRequest, {
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") !== "true") return;
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 === "#" || link.getAttribute("data-turbo") === "false" || link.getAttribute("data-turbo-prefetch") === "false") {
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) {