Skip to content

Commit 52727cb

Browse files
committed
Update to turbo 8.0.12
1 parent 8c681dd commit 52727cb

File tree

5 files changed

+40
-33
lines changed

5 files changed

+40
-33
lines changed

app/assets/javascripts/turbo.js

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*!
2-
Turbo 8.0.6
2+
Turbo 8.0.12
33
Copyright © 2024 37signals LLC
44
*/
55
(function(prototype) {
@@ -181,7 +181,7 @@ function activateScriptElement(element) {
181181
return element;
182182
} else {
183183
const createdScriptElement = document.createElement("script");
184-
const cspNonce = getMetaContent("csp-nonce");
184+
const cspNonce = getCspNonce();
185185
if (cspNonce) {
186186
createdScriptElement.nonce = cspNonce;
187187
}
@@ -353,6 +353,14 @@ function getMetaContent(name) {
353353
return element && element.content;
354354
}
355355

356+
function getCspNonce() {
357+
const element = getMetaElement("csp-nonce");
358+
if (element) {
359+
const {nonce: nonce, content: content} = element;
360+
return nonce == "" ? content : nonce;
361+
}
362+
}
363+
356364
function setMetaContent(name, content) {
357365
let element = getMetaElement(name);
358366
if (!element) {
@@ -1531,12 +1539,13 @@ function createPlaceholderForPermanentElement(permanentElement) {
15311539

15321540
class Renderer {
15331541
#activeElement=null;
1534-
constructor(currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {
1542+
static renderElement(currentElement, newElement) {}
1543+
constructor(currentSnapshot, newSnapshot, isPreview, willRender = true) {
15351544
this.currentSnapshot = currentSnapshot;
15361545
this.newSnapshot = newSnapshot;
15371546
this.isPreview = isPreview;
15381547
this.willRender = willRender;
1539-
this.renderElement = renderElement;
1548+
this.renderElement = this.constructor.renderElement;
15401549
this.promise = new Promise(((resolve, reject) => this.resolvingFunctions = {
15411550
resolve: resolve,
15421551
reject: reject
@@ -2289,6 +2298,9 @@ class MorphingFrameRenderer extends FrameRenderer {
22892298
});
22902299
morphChildren(currentElement, newElement);
22912300
}
2301+
async preservingPermanentElements(callback) {
2302+
return await callback();
2303+
}
22922304
}
22932305

22942306
class ProgressBar {
@@ -2380,8 +2392,9 @@ class ProgressBar {
23802392
const element = document.createElement("style");
23812393
element.type = "text/css";
23822394
element.textContent = ProgressBar.defaultCSS;
2383-
if (this.cspNonce) {
2384-
element.nonce = this.cspNonce;
2395+
const cspNonce = getCspNonce();
2396+
if (cspNonce) {
2397+
element.nonce = cspNonce;
23852398
}
23862399
return element;
23872400
}
@@ -2390,9 +2403,6 @@ class ProgressBar {
23902403
element.className = "turbo-progress-bar";
23912404
return element;
23922405
}
2393-
get cspNonce() {
2394-
return getMetaContent("csp-nonce");
2395-
}
23962406
}
23972407

23982408
class HeadSnapshot extends Snapshot {
@@ -4013,7 +4023,7 @@ class PageView extends View {
40134023
renderPage(snapshot, isPreview = false, willRender = true, visit) {
40144024
const shouldMorphPage = this.isPageRefresh(visit) && this.snapshot.shouldMorphPage;
40154025
const rendererClass = shouldMorphPage ? MorphingPageRenderer : PageRenderer;
4016-
const renderer = new rendererClass(this.snapshot, snapshot, rendererClass.renderElement, isPreview, willRender);
4026+
const renderer = new rendererClass(this.snapshot, snapshot, isPreview, willRender);
40174027
if (!renderer.shouldRender) {
40184028
this.forceReloaded = true;
40194029
} else {
@@ -4023,7 +4033,7 @@ class PageView extends View {
40234033
}
40244034
renderError(snapshot, visit) {
40254035
visit?.changeHistory();
4026-
const renderer = new ErrorRenderer(this.snapshot, snapshot, ErrorRenderer.renderElement, false);
4036+
const renderer = new ErrorRenderer(this.snapshot, snapshot, false);
40274037
return this.render(renderer);
40284038
}
40294039
clearSnapshotCache() {
@@ -4589,6 +4599,7 @@ class FrameController {
45894599
#connected=false;
45904600
#hasBeenLoaded=false;
45914601
#ignoredAttributes=new Set;
4602+
#shouldMorphFrame=false;
45924603
action=null;
45934604
constructor(element) {
45944605
this.element = element;
@@ -4636,14 +4647,8 @@ class FrameController {
46364647
}
46374648
}
46384649
sourceURLReloaded() {
4639-
if (this.element.shouldReloadWithMorph) {
4640-
this.element.addEventListener("turbo:before-frame-render", (({detail: detail}) => {
4641-
detail.render = MorphingFrameRenderer.renderElement;
4642-
}), {
4643-
once: true
4644-
});
4645-
}
4646-
const {src: src} = this.element;
4650+
const {refresh: refresh, src: src} = this.element;
4651+
this.#shouldMorphFrame = src && refresh === "morph";
46474652
this.element.removeAttribute("complete");
46484653
this.element.src = null;
46494654
this.element.src = src;
@@ -4681,6 +4686,7 @@ class FrameController {
46814686
}
46824687
}
46834688
} finally {
4689+
this.#shouldMorphFrame = false;
46844690
this.fetchResponseLoaded = () => Promise.resolve();
46854691
}
46864692
}
@@ -4793,9 +4799,10 @@ class FrameController {
47934799
};
47944800
async #loadFrameResponse(fetchResponse, document) {
47954801
const newFrameElement = await this.extractForeignFrameElement(document.body);
4802+
const rendererClass = this.#shouldMorphFrame ? MorphingFrameRenderer : FrameRenderer;
47964803
if (newFrameElement) {
47974804
const snapshot = new Snapshot(newFrameElement);
4798-
const renderer = new FrameRenderer(this, this.view.snapshot, snapshot, FrameRenderer.renderElement, false, false);
4805+
const renderer = new rendererClass(this, this.view.snapshot, snapshot, false, false);
47994806
if (this.view.renderPromise) await this.view.renderPromise;
48004807
this.changeHistory();
48014808
await this.view.render(renderer);

app/assets/javascripts/turbo.min.js

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/assets/javascripts/turbo.min.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@hotwired/turbo-rails",
3-
"version": "8.0.11",
3+
"version": "8.0.12",
44
"description": "The speed of a single-page web application without having to write any JavaScript",
55
"module": "app/javascript/turbo/index.js",
66
"main": "app/assets/javascripts/turbo.js",
@@ -19,7 +19,7 @@
1919
"release": "npm publish && git commit -am \"$npm_package_name v$npm_package_version\" && git push"
2020
},
2121
"dependencies": {
22-
"@hotwired/turbo": "^8.0.6",
22+
"@hotwired/turbo": "^8.0.12",
2323
"@rails/actioncable": "^7.0"
2424
},
2525
"devDependencies": {

yarn.lock

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,10 @@
2424
chalk "^2.4.2"
2525
js-tokens "^4.0.0"
2626

27-
"@hotwired/turbo@^8.0.6":
28-
version "8.0.6"
29-
resolved "https://registry.yarnpkg.com/@hotwired/turbo/-/turbo-8.0.6.tgz#d7c546f7700f18ebfe4d1b106e03c9ed1bb22887"
30-
integrity sha512-mwZRfwcJ4yatUnW5tcCY9NDvo0kjuuLQF/y8pXigHhS+c/JY/ccNluVyuERR9Sraqx0qdpenkO3pNeSWz1mE3w==
27+
"@hotwired/turbo@^8.0.12":
28+
version "8.0.12"
29+
resolved "https://registry.yarnpkg.com/@hotwired/turbo/-/turbo-8.0.12.tgz#50aa8345d7f62402680c6d2d9814660761837001"
30+
integrity sha512-l3BiQRkD7qrnQv6ms6sqPLczvwbQpXt5iAVwjDvX0iumrz6yEonQkNAzNjeDX25/OJMFDTxpHjkJZHGpM9ikWw==
3131

3232
"@jridgewell/gen-mapping@^0.3.0":
3333
version "0.3.3"

0 commit comments

Comments
 (0)