Skip to content
This repository was archived by the owner on Jan 9, 2025. It is now read-only.

Commit 1f7f3be

Browse files
authored
Merge pull request #7 from github/refactor-move-render-logic-into-class-renderinto
refactor: move `render()` logic into class `renderInto()`
2 parents 469b5d5 + c768956 commit 1f7f3be

File tree

1 file changed

+20
-15
lines changed

1 file changed

+20
-15
lines changed

src/html.ts

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import type {TemplatePart, TemplateTypeInit} from '@github/template-parts'
1111

1212
function processSubTemplate(part: TemplatePart, value: unknown): boolean {
1313
if (value instanceof TemplateResult && part instanceof NodeTemplatePart) {
14-
render(value, part)
14+
value.renderInto(part)
1515
return true
1616
}
1717
return false
@@ -36,7 +36,7 @@ function processIterable(part: TemplatePart, value: unknown): boolean {
3636
for (const item of value) {
3737
if (item instanceof TemplateResult) {
3838
const fragment = document.createDocumentFragment()
39-
render(item, fragment)
39+
item.renderInto(fragment)
4040
nodes.push(...fragment.children)
4141
} else if (item instanceof DocumentFragment) {
4242
nodes.push(...item.children)
@@ -63,6 +63,8 @@ export function processPart(part: TemplatePart, value: unknown): void {
6363
}
6464

6565
const templates = new WeakMap<TemplateStringsArray, HTMLTemplateElement>()
66+
const renderedTemplates = new WeakMap<Node | NodeTemplatePart, HTMLTemplateElement>()
67+
const renderedTemplateInstances = new WeakMap<Node | NodeTemplatePart, TemplateInstance>()
6668
export class TemplateResult {
6769
constructor(
6870
public readonly strings: TemplateStringsArray,
@@ -81,25 +83,28 @@ export class TemplateResult {
8183
return template
8284
}
8385
}
86+
87+
renderInto(element: Node | NodeTemplatePart): void {
88+
const template = this.template
89+
if (renderedTemplates.get(element) !== template) {
90+
renderedTemplates.set(element, template)
91+
const instance = new TemplateInstance(template, this.values, this.processor)
92+
renderedTemplateInstances.set(element, instance)
93+
if (element instanceof NodeTemplatePart) {
94+
element.replace(...instance.children)
95+
} else {
96+
element.appendChild(instance)
97+
}
98+
}
99+
renderedTemplateInstances.get(element)!.update((this.values as unknown) as Record<string, unknown>)
100+
}
84101
}
85102

86103
const defaultProcessor = createProcessor(processPart)
87104
export function html(strings: TemplateStringsArray, ...values: unknown[]): TemplateResult {
88105
return new TemplateResult(strings, values, defaultProcessor)
89106
}
90107

91-
const renderedTemplates = new WeakMap<Node | NodeTemplatePart, HTMLTemplateElement>()
92-
const renderedTemplateInstances = new WeakMap<Node | NodeTemplatePart, TemplateInstance>()
93108
export function render(result: TemplateResult, element: Node | NodeTemplatePart): void {
94-
if (renderedTemplates.get(element) !== result.template) {
95-
renderedTemplates.set(element, result.template)
96-
const instance = new TemplateInstance(result.template, result.values, result.processor)
97-
renderedTemplateInstances.set(element, instance)
98-
if (element instanceof NodeTemplatePart) {
99-
element.replace(...instance.children)
100-
} else {
101-
element.appendChild(instance)
102-
}
103-
}
104-
renderedTemplateInstances.get(element)!.update((result.values as unknown) as Record<string, unknown>)
109+
result.renderInto(element)
105110
}

0 commit comments

Comments
 (0)