Skip to content

Commit 02d20ae

Browse files
authored
Merge pull request #232 from Auge19/fixDomElement
Fix for anonymousTemplate and nativeTemplateEngine
2 parents 595561d + 007658a commit 02d20ae

File tree

2 files changed

+14
-19
lines changed

2 files changed

+14
-19
lines changed

packages/binding.template/src/nativeTemplateEngine.ts

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,7 @@ nativeTemplateEngine.prototype.renderTemplateSource = function (
1414
options: TemplateOptions<any>,
1515
templateDocument?: Document
1616
): Node[] {
17-
let version: number
18-
if (ieVersion instanceof Array) {
19-
version = parseInt(ieVersion[1], 10)
20-
} else {
21-
version = ieVersion ?? 0
22-
}
23-
const useNodesIfAvailable = !(version < 9), // IE<9 cloneNode doesn't work properly
24-
templateNodesFunc = useNodesIfAvailable ? templateSource.nodes : null,
25-
templateNodes = templateNodesFunc ? templateSource.nodes?.() : null
17+
const templateNodes = templateSource.nodes ? templateSource.nodes() : null
2618

2719
if (templateNodes) {
2820
return makeArray(templateNodes.cloneNode(true).childNodes)

packages/binding.template/src/templateSources.ts

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -30,19 +30,21 @@ import { tagNameLower as tagNameLowerFn, setHtml, domData, parseHtmlForTemplateN
3030
const templateScript = 1,
3131
templateTextArea = 2,
3232
templateTemplate = 3,
33-
templateElement = 4
33+
templateElement = 4,
34+
templateAnonymous = 5
3435

3536
export interface TemplateSource {
36-
//constructor(element: Node);
37-
3837
text(): string
3938
text(valueToWrite: string): void
39+
text(valueToWrite?: string): string | void
4040

4141
data(key: string): any
4242
data<T>(key: string): T
4343
data<T>(key: string, valueToWrite: T): void
4444

45-
nodes?: { (): Node; (valueToWrite: Node): void }
45+
nodes(): Node
46+
nodes(valueToWrite: Node): undefined
47+
nodes(valueToWrite?: any): Node | undefined
4648
}
4749

4850
const dataDomDataPrefix = domData.nextKey() + '_'
@@ -55,8 +57,8 @@ function setTemplateDomData(element, data) {
5557
}
5658

5759
export class domElement implements TemplateSource {
58-
domElement: Element | Comment
59-
templateType: number
60+
protected domElement: Element | Comment
61+
protected templateType: number
6062

6163
constructor(element: Element | Comment) {
6264
this.domElement = element
@@ -143,21 +145,22 @@ export class domElement implements TemplateSource {
143145
export class anonymousTemplate extends domElement {
144146
constructor(element: Element | Comment) {
145147
super(element)
148+
//The old prototype construct uses an empty-constructor from domElement, so templateType and element was 'undefined'.
149+
//With the new templateType = templateAnonymous (5) we achieve the same behavior in the "nodes" Method
150+
this.templateType = templateAnonymous
146151
}
147152

148153
override text(): string
149-
override text(valueToWrite: string): undefined
150-
override text(/* valueToWrite */): string | undefined {
154+
override text(valueToWrite: string): void
155+
override text(valueToWrite?: string): string | void {
151156
if (arguments.length == 0) {
152157
const templateData = getTemplateDomData(this.domElement)
153158
if (templateData.textData === undefined && templateData.containerData) {
154159
templateData.textData = templateData.containerData.innerHTML
155160
}
156161
return templateData.textData
157162
} else {
158-
const valueToWrite = arguments[0]
159163
setTemplateDomData(this.domElement, { textData: valueToWrite })
160164
}
161-
return undefined
162165
}
163166
}

0 commit comments

Comments
 (0)