Skip to content

Commit

Permalink
Remove renderElement from Renderer constructor
Browse files Browse the repository at this point in the history
Remove the argument from all `Renderer` subclass constructor call sites.
In its place, define the default value for the `Renderer.renderElement`
property based on the `static renderElement(currentElement, newElement)`
defined by the inheriting class.
  • Loading branch information
seanpdoyle committed Mar 29, 2024
1 parent 9fb05e3 commit 8e6de8f
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 9 deletions.
21 changes: 17 additions & 4 deletions src/core/drive/morph_renderer.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,28 @@ import { dispatch } from "../../util"
import { PageRenderer } from "./page_renderer"

export class MorphRenderer extends PageRenderer {
async render() {
if (this.willRender) await this.#morphBody()
static renderElement(currentElement, newElement) {
const morph = new Morph(currentElement, newElement)

morph.morphBody()
}

async preservingPermanentElements(callback) {
return await callback()
}

get renderMethod() {
return "morph"
}
}

// Private
class Morph {
constructor(currentElement, newElement) {
this.currentElement = currentElement
this.newElement = newElement
}

async #morphBody() {
async morphBody() {
this.#morphElements(this.currentElement, this.newElement)
this.#reloadRemoteFrames()

Expand All @@ -25,6 +36,8 @@ export class MorphRenderer extends PageRenderer {
})
}

// Private

#morphElements(currentElement, newElement, morphStyle = "outerHTML") {
this.isMorphingTurboFrame = this.#isFrameReloadedWithMorph(currentElement)

Expand Down
4 changes: 2 additions & 2 deletions src/core/drive/page_view.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ export class PageView extends View {
const shouldMorphPage = this.isPageRefresh(visit) && this.snapshot.shouldMorphPage
const rendererClass = shouldMorphPage ? MorphRenderer : PageRenderer

const renderer = new rendererClass(this.snapshot, snapshot, PageRenderer.renderElement, isPreview, willRender)
const renderer = new rendererClass(this.snapshot, snapshot, isPreview, willRender)

if (!renderer.shouldRender) {
this.forceReloaded = true
Expand All @@ -32,7 +32,7 @@ export class PageView extends View {

renderError(snapshot, visit) {
visit?.changeHistory()
const renderer = new ErrorRenderer(this.snapshot, snapshot, ErrorRenderer.renderElement, false)
const renderer = new ErrorRenderer(this.snapshot, snapshot, false)
return this.render(renderer)
}

Expand Down
2 changes: 1 addition & 1 deletion src/core/frames/frame_controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -299,7 +299,7 @@ export class FrameController {

if (newFrameElement) {
const snapshot = new Snapshot(newFrameElement)
const renderer = new FrameRenderer(this, this.view.snapshot, snapshot, FrameRenderer.renderElement, false, false)
const renderer = new FrameRenderer(this, this.view.snapshot, snapshot, false, false)
if (this.view.renderPromise) await this.view.renderPromise
this.changeHistory()

Expand Down
8 changes: 6 additions & 2 deletions src/core/renderer.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,16 @@ import { Bardo } from "./bardo"
export class Renderer {
#activeElement = null

constructor(currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {
static renderElement(currentElement, newElement) {
// Abstract method
}

constructor(currentSnapshot, newSnapshot, isPreview, willRender = true) {
this.currentSnapshot = currentSnapshot
this.newSnapshot = newSnapshot
this.isPreview = isPreview
this.willRender = willRender
this.renderElement = renderElement
this.renderElement = this.constructor.renderElement
this.promise = new Promise((resolve, reject) => (this.resolvingFunctions = { resolve, reject }))
}

Expand Down

0 comments on commit 8e6de8f

Please sign in to comment.