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 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) {