11/*!
2- Turbo 8.0.6
2+ Turbo 8.0.12
33Copyright © 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+
356364function setMetaContent ( name , content ) {
357365 let element = getMetaElement ( name ) ;
358366 if ( ! element ) {
@@ -1531,12 +1539,13 @@ function createPlaceholderForPermanentElement(permanentElement) {
15311539
15321540class 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
22942306class 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
23982408class 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 ) ;
0 commit comments