@hotwired/turbo 8.0.6 → 8.0.10

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.
@@ -1,5 +1,5 @@
1
1
  /*!
2
- Turbo 8.0.6
2
+ Turbo 8.0.10
3
3
  Copyright © 2024 37signals LLC
4
4
  */
5
5
  /**
@@ -1843,12 +1843,16 @@ function createPlaceholderForPermanentElement(permanentElement) {
1843
1843
  class Renderer {
1844
1844
  #activeElement = null
1845
1845
 
1846
- constructor(currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {
1846
+ static renderElement(currentElement, newElement) {
1847
+ // Abstract method
1848
+ }
1849
+
1850
+ constructor(currentSnapshot, newSnapshot, isPreview, willRender = true) {
1847
1851
  this.currentSnapshot = currentSnapshot;
1848
1852
  this.newSnapshot = newSnapshot;
1849
1853
  this.isPreview = isPreview;
1850
1854
  this.willRender = willRender;
1851
- this.renderElement = renderElement;
1855
+ this.renderElement = this.constructor.renderElement;
1852
1856
  this.promise = new Promise((resolve, reject) => (this.resolvingFunctions = { resolve, reject }));
1853
1857
  }
1854
1858
 
@@ -2919,6 +2923,10 @@ class MorphingFrameRenderer extends FrameRenderer {
2919
2923
 
2920
2924
  morphChildren(currentElement, newElement);
2921
2925
  }
2926
+
2927
+ async preservingPermanentElements(callback) {
2928
+ return await callback()
2929
+ }
2922
2930
  }
2923
2931
 
2924
2932
  class ProgressBar {
@@ -5032,7 +5040,7 @@ class PageView extends View {
5032
5040
  const shouldMorphPage = this.isPageRefresh(visit) && this.snapshot.shouldMorphPage;
5033
5041
  const rendererClass = shouldMorphPage ? MorphingPageRenderer : PageRenderer;
5034
5042
 
5035
- const renderer = new rendererClass(this.snapshot, snapshot, rendererClass.renderElement, isPreview, willRender);
5043
+ const renderer = new rendererClass(this.snapshot, snapshot, isPreview, willRender);
5036
5044
 
5037
5045
  if (!renderer.shouldRender) {
5038
5046
  this.forceReloaded = true;
@@ -5045,7 +5053,7 @@ class PageView extends View {
5045
5053
 
5046
5054
  renderError(snapshot, visit) {
5047
5055
  visit?.changeHistory();
5048
- const renderer = new ErrorRenderer(this.snapshot, snapshot, ErrorRenderer.renderElement, false);
5056
+ const renderer = new ErrorRenderer(this.snapshot, snapshot, false);
5049
5057
  return this.render(renderer)
5050
5058
  }
5051
5059
 
@@ -5816,6 +5824,7 @@ class FrameController {
5816
5824
  #connected = false
5817
5825
  #hasBeenLoaded = false
5818
5826
  #ignoredAttributes = new Set()
5827
+ #shouldMorphFrame = false
5819
5828
  action = null
5820
5829
 
5821
5830
  constructor(element) {
@@ -5873,13 +5882,10 @@ class FrameController {
5873
5882
  }
5874
5883
 
5875
5884
  sourceURLReloaded() {
5876
- if (this.element.shouldReloadWithMorph) {
5877
- this.element.addEventListener("turbo:before-frame-render", ({ detail }) => {
5878
- detail.render = MorphingFrameRenderer.renderElement;
5879
- }, { once: true });
5880
- }
5885
+ const { refresh, src } = this.element;
5886
+
5887
+ this.#shouldMorphFrame = src && refresh === "morph";
5881
5888
 
5882
- const { src } = this.element;
5883
5889
  this.element.removeAttribute("complete");
5884
5890
  this.element.src = null;
5885
5891
  this.element.src = src;
@@ -5922,6 +5928,7 @@ class FrameController {
5922
5928
  }
5923
5929
  }
5924
5930
  } finally {
5931
+ this.#shouldMorphFrame = false;
5925
5932
  this.fetchResponseLoaded = () => Promise.resolve();
5926
5933
  }
5927
5934
  }
@@ -6087,11 +6094,11 @@ class FrameController {
6087
6094
 
6088
6095
  async #loadFrameResponse(fetchResponse, document) {
6089
6096
  const newFrameElement = await this.extractForeignFrameElement(document.body);
6097
+ const rendererClass = this.#shouldMorphFrame ? MorphingFrameRenderer : FrameRenderer;
6090
6098
 
6091
6099
  if (newFrameElement) {
6092
6100
  const snapshot = new Snapshot(newFrameElement);
6093
- const renderer = new FrameRenderer(this, this.view.snapshot, snapshot, FrameRenderer.renderElement, false, false);
6094
-
6101
+ const renderer = new rendererClass(this, this.view.snapshot, snapshot, false, false);
6095
6102
  if (this.view.renderPromise) await this.view.renderPromise;
6096
6103
  this.changeHistory();
6097
6104
 
@@ -1,5 +1,5 @@
1
1
  /*!
2
- Turbo 8.0.6
2
+ Turbo 8.0.10
3
3
  Copyright © 2024 37signals LLC
4
4
  */
5
5
  (function (global, factory) {
@@ -1849,12 +1849,16 @@ Copyright © 2024 37signals LLC
1849
1849
  class Renderer {
1850
1850
  #activeElement = null
1851
1851
 
1852
- constructor(currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {
1852
+ static renderElement(currentElement, newElement) {
1853
+ // Abstract method
1854
+ }
1855
+
1856
+ constructor(currentSnapshot, newSnapshot, isPreview, willRender = true) {
1853
1857
  this.currentSnapshot = currentSnapshot;
1854
1858
  this.newSnapshot = newSnapshot;
1855
1859
  this.isPreview = isPreview;
1856
1860
  this.willRender = willRender;
1857
- this.renderElement = renderElement;
1861
+ this.renderElement = this.constructor.renderElement;
1858
1862
  this.promise = new Promise((resolve, reject) => (this.resolvingFunctions = { resolve, reject }));
1859
1863
  }
1860
1864
 
@@ -2925,6 +2929,10 @@ Copyright © 2024 37signals LLC
2925
2929
 
2926
2930
  morphChildren(currentElement, newElement);
2927
2931
  }
2932
+
2933
+ async preservingPermanentElements(callback) {
2934
+ return await callback()
2935
+ }
2928
2936
  }
2929
2937
 
2930
2938
  class ProgressBar {
@@ -5038,7 +5046,7 @@ Copyright © 2024 37signals LLC
5038
5046
  const shouldMorphPage = this.isPageRefresh(visit) && this.snapshot.shouldMorphPage;
5039
5047
  const rendererClass = shouldMorphPage ? MorphingPageRenderer : PageRenderer;
5040
5048
 
5041
- const renderer = new rendererClass(this.snapshot, snapshot, rendererClass.renderElement, isPreview, willRender);
5049
+ const renderer = new rendererClass(this.snapshot, snapshot, isPreview, willRender);
5042
5050
 
5043
5051
  if (!renderer.shouldRender) {
5044
5052
  this.forceReloaded = true;
@@ -5051,7 +5059,7 @@ Copyright © 2024 37signals LLC
5051
5059
 
5052
5060
  renderError(snapshot, visit) {
5053
5061
  visit?.changeHistory();
5054
- const renderer = new ErrorRenderer(this.snapshot, snapshot, ErrorRenderer.renderElement, false);
5062
+ const renderer = new ErrorRenderer(this.snapshot, snapshot, false);
5055
5063
  return this.render(renderer)
5056
5064
  }
5057
5065
 
@@ -5822,6 +5830,7 @@ Copyright © 2024 37signals LLC
5822
5830
  #connected = false
5823
5831
  #hasBeenLoaded = false
5824
5832
  #ignoredAttributes = new Set()
5833
+ #shouldMorphFrame = false
5825
5834
  action = null
5826
5835
 
5827
5836
  constructor(element) {
@@ -5879,13 +5888,10 @@ Copyright © 2024 37signals LLC
5879
5888
  }
5880
5889
 
5881
5890
  sourceURLReloaded() {
5882
- if (this.element.shouldReloadWithMorph) {
5883
- this.element.addEventListener("turbo:before-frame-render", ({ detail }) => {
5884
- detail.render = MorphingFrameRenderer.renderElement;
5885
- }, { once: true });
5886
- }
5891
+ const { refresh, src } = this.element;
5892
+
5893
+ this.#shouldMorphFrame = src && refresh === "morph";
5887
5894
 
5888
- const { src } = this.element;
5889
5895
  this.element.removeAttribute("complete");
5890
5896
  this.element.src = null;
5891
5897
  this.element.src = src;
@@ -5928,6 +5934,7 @@ Copyright © 2024 37signals LLC
5928
5934
  }
5929
5935
  }
5930
5936
  } finally {
5937
+ this.#shouldMorphFrame = false;
5931
5938
  this.fetchResponseLoaded = () => Promise.resolve();
5932
5939
  }
5933
5940
  }
@@ -6093,11 +6100,11 @@ Copyright © 2024 37signals LLC
6093
6100
 
6094
6101
  async #loadFrameResponse(fetchResponse, document) {
6095
6102
  const newFrameElement = await this.extractForeignFrameElement(document.body);
6103
+ const rendererClass = this.#shouldMorphFrame ? MorphingFrameRenderer : FrameRenderer;
6096
6104
 
6097
6105
  if (newFrameElement) {
6098
6106
  const snapshot = new Snapshot(newFrameElement);
6099
- const renderer = new FrameRenderer(this, this.view.snapshot, snapshot, FrameRenderer.renderElement, false, false);
6100
-
6107
+ const renderer = new rendererClass(this, this.view.snapshot, snapshot, false, false);
6101
6108
  if (this.view.renderPromise) await this.view.renderPromise;
6102
6109
  this.changeHistory();
6103
6110
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hotwired/turbo",
3
- "version": "8.0.6",
3
+ "version": "8.0.10",
4
4
  "description": "The speed of a single-page web application without having to write any JavaScript",
5
5
  "module": "dist/turbo.es2017-esm.js",
6
6
  "main": "dist/turbo.es2017-umd.js",