diff --git a/packages/compiler-vapor/__tests__/__snapshots__/compile.spec.ts.snap b/packages/compiler-vapor/__tests__/__snapshots__/compile.spec.ts.snap
index 05b85c443..2ce2fddd0 100644
--- a/packages/compiler-vapor/__tests__/__snapshots__/compile.spec.ts.snap
+++ b/packages/compiler-vapor/__tests__/__snapshots__/compile.spec.ts.snap
@@ -10,7 +10,7 @@ export function render(_ctx) {
const n1 = _createTextNode(_ctx.count)
_insert(n1, n3, n2)
_renderEffect(() => {
- _setText(n1, undefined, _ctx.count)
+ _setText(n1, _ctx.count)
})
return n0
}"
@@ -130,10 +130,10 @@ export function render(_ctx) {
const n1 = _createTextNode(_ctx.bar)
_append(n2, n1)
_renderEffect(() => {
- _setText(n1, undefined, _ctx.bar)
+ _setText(n1, _ctx.bar)
})
_renderEffect(() => {
- _setDynamicProp(n2, "id", undefined, _ctx.foo)
+ _setDynamicProp(n2, "id", _ctx.foo)
})
return n0
}"
@@ -149,10 +149,10 @@ export function render(_ctx) {
const n1 = _createTextNode(_ctx.bar)
_append(n2, n1)
_renderEffect(() => {
- _setText(n1, undefined, _ctx.bar)
+ _setText(n1, _ctx.bar)
})
_renderEffect(() => {
- _setDynamicProp(n2, "id", undefined, _ctx.foo)
+ _setDynamicProp(n2, "id", _ctx.foo)
})
return n0
}"
@@ -169,10 +169,10 @@ export function render(_ctx) {
const n2 = _createTextNode(2)
_append(n0, n1, n2)
_renderEffect(() => {
- _setText(n1, undefined, 1)
+ _setText(n1, 1)
})
_renderEffect(() => {
- _setText(n2, undefined, 2)
+ _setText(n2, 2)
})
return n0
}"
@@ -193,10 +193,10 @@ export function render(_ctx) {
_append(n4, n3)
_on(n4, "click", (...args) => (_ctx.handleClick && _ctx.handleClick(...args)))
_renderEffect(() => {
- _setText(n1, undefined, _ctx.count)
- _setText(n2, undefined, _ctx.count)
- _setText(n3, undefined, _ctx.count)
- _setDynamicProp(n4, "id", undefined, _ctx.count)
+ _setText(n1, _ctx.count)
+ _setText(n2, _ctx.count)
+ _setText(n3, _ctx.count)
+ _setDynamicProp(n4, "id", _ctx.count)
})
return n0
}"
@@ -210,7 +210,7 @@ exports[`compile > expression parsing > interpolation 1`] = `
const n1 = _createTextNode(a + b.value)
_append(n0, n1)
_renderEffect(() => {
- _setText(n1, undefined, a + b.value)
+ _setText(n1, a + b.value)
})
return n0
})()"
@@ -222,7 +222,7 @@ exports[`compile > expression parsing > v-bind 1`] = `
const n0 = t0()
const { 0: [n1],} = _children(n0)
_renderEffect(() => {
- _setDynamicProp(n1, key.value+1, undefined, _unref(foo)[key.value+1]())
+ _setDynamicProp(n1, key.value+1, _unref(foo)[key.value+1]())
})
return n0
})()"
@@ -258,28 +258,28 @@ export function render(_ctx) {
_insert([n5, n6], n0, n10)
_append(n0, n7, n8)
_renderEffect(() => {
- _setText(n1, undefined, 1)
+ _setText(n1, 1)
})
_renderEffect(() => {
- _setText(n2, undefined, 2)
+ _setText(n2, 2)
})
_renderEffect(() => {
- _setText(n3, undefined, 4)
+ _setText(n3, 4)
})
_renderEffect(() => {
- _setText(n4, undefined, 5)
+ _setText(n4, 5)
})
_renderEffect(() => {
- _setText(n5, undefined, 7)
+ _setText(n5, 7)
})
_renderEffect(() => {
- _setText(n6, undefined, 8)
+ _setText(n6, 8)
})
_renderEffect(() => {
- _setText(n7, undefined, 'A')
+ _setText(n7, 'A')
})
_renderEffect(() => {
- _setText(n8, undefined, 'B')
+ _setText(n8, 'B')
})
return n0
}"
diff --git a/packages/compiler-vapor/__tests__/transforms/__snapshots__/vBind.spec.ts.snap b/packages/compiler-vapor/__tests__/transforms/__snapshots__/vBind.spec.ts.snap
index 1484e4ea7..efbe8477b 100644
--- a/packages/compiler-vapor/__tests__/transforms/__snapshots__/vBind.spec.ts.snap
+++ b/packages/compiler-vapor/__tests__/transforms/__snapshots__/vBind.spec.ts.snap
@@ -8,7 +8,7 @@ export function render(_ctx) {
const n0 = t0()
const { 0: [n1],} = _children(n0)
_renderEffect(() => {
- _setAttr(n1, "foo-bar", undefined, _ctx.id)
+ _setAttr(n1, "foo-bar", _ctx.id)
})
return n0
}"
@@ -22,7 +22,7 @@ export function render(_ctx) {
const n0 = t0()
const { 0: [n1],} = _children(n0)
_renderEffect(() => {
- _setAttr(n1, "foo-bar", undefined, _ctx.fooBar)
+ _setAttr(n1, "foo-bar", _ctx.fooBar)
})
return n0
}"
@@ -36,7 +36,7 @@ export function render(_ctx) {
const n0 = t0()
const { 0: [n1],} = _children(n0)
_renderEffect(() => {
- _setDynamicProp(n1, "fooBar", undefined, _ctx.id)
+ _setDynamicProp(n1, "fooBar", _ctx.id)
})
return n0
}"
@@ -50,7 +50,7 @@ export function render(_ctx) {
const n0 = t0()
const { 0: [n1],} = _children(n0)
_renderEffect(() => {
- _setDynamicProp(n1, _camelize(_ctx.foo), undefined, _ctx.id)
+ _setDynamicProp(n1, _camelize(_ctx.foo), _ctx.id)
})
return n0
}"
@@ -64,7 +64,7 @@ export function render(_ctx) {
const n0 = t0()
const { 0: [n1],} = _children(n0)
_renderEffect(() => {
- _setDynamicProp(n1, "fooBar", undefined, _ctx.fooBar)
+ _setDynamicProp(n1, "fooBar", _ctx.fooBar)
})
return n0
}"
@@ -78,7 +78,7 @@ export function render(_ctx) {
const n0 = t0()
const { 0: [n1],} = _children(n0)
_renderEffect(() => {
- _setDOMProp(n1, "fooBar", undefined, _ctx.fooBar)
+ _setDOMProp(n1, "fooBar", _ctx.fooBar)
})
return n0
}"
@@ -92,7 +92,7 @@ export function render(_ctx) {
const n0 = t0()
const { 0: [n1],} = _children(n0)
_renderEffect(() => {
- _setDOMProp(n1, "fooBar", undefined, _ctx.id)
+ _setDOMProp(n1, "fooBar", _ctx.id)
})
return n0
}"
@@ -106,7 +106,7 @@ export function render(_ctx) {
const n0 = t0()
const { 0: [n1],} = _children(n0)
_renderEffect(() => {
- _setDOMProp(n1, "fooBar", undefined, _ctx.id)
+ _setDOMProp(n1, "fooBar", _ctx.id)
})
return n0
}"
@@ -120,7 +120,7 @@ export function render(_ctx) {
const n0 = t0()
const { 0: [n1],} = _children(n0)
_renderEffect(() => {
- _setDynamicProp(n1, \`.\${_ctx.fooBar}\`, undefined, _ctx.id)
+ _setDynamicProp(n1, \`.\${_ctx.fooBar}\`, _ctx.id)
})
return n0
}"
@@ -134,7 +134,7 @@ export function render(_ctx) {
const n0 = t0()
const { 0: [n1],} = _children(n0)
_renderEffect(() => {
- _setDOMProp(n1, "fooBar", undefined, _ctx.fooBar)
+ _setDOMProp(n1, "fooBar", _ctx.fooBar)
})
return n0
}"
@@ -148,7 +148,7 @@ export function render(_ctx) {
const n0 = t0()
const { 0: [n1],} = _children(n0)
_renderEffect(() => {
- _setDynamicProp(n1, "id", undefined, _ctx.id)
+ _setDynamicProp(n1, "id", _ctx.id)
})
return n0
}"
@@ -162,7 +162,7 @@ export function render(_ctx) {
const n0 = t0()
const { 0: [n1],} = _children(n0)
_renderEffect(() => {
- _setDynamicProp(n1, _ctx.id, undefined, _ctx.id)
+ _setDynamicProp(n1, _ctx.id, _ctx.id)
})
return n0
}"
@@ -176,7 +176,7 @@ export function render(_ctx) {
const n0 = t0()
const { 0: [n1],} = _children(n0)
_renderEffect(() => {
- _setDynamicProp(n1, "camel-case", undefined, _ctx.camelCase)
+ _setDynamicProp(n1, "camel-case", _ctx.camelCase)
})
return n0
}"
@@ -190,7 +190,7 @@ export function render(_ctx) {
const n0 = t0()
const { 0: [n1],} = _children(n0)
_renderEffect(() => {
- _setDynamicProp(n1, "id", undefined, _ctx.id)
+ _setDynamicProp(n1, "id", _ctx.id)
})
return n0
}"
diff --git a/packages/compiler-vapor/__tests__/transforms/__snapshots__/vHtml.spec.ts.snap b/packages/compiler-vapor/__tests__/transforms/__snapshots__/vHtml.spec.ts.snap
index 865e46319..ce999b4d5 100644
--- a/packages/compiler-vapor/__tests__/transforms/__snapshots__/vHtml.spec.ts.snap
+++ b/packages/compiler-vapor/__tests__/transforms/__snapshots__/vHtml.spec.ts.snap
@@ -8,7 +8,7 @@ export function render(_ctx) {
const n0 = t0()
const { 0: [n1],} = _children(n0)
_renderEffect(() => {
- _setHtml(n1, undefined, _ctx.code)
+ _setHtml(n1, _ctx.code)
})
return n0
}"
@@ -22,7 +22,7 @@ export function render(_ctx) {
const n0 = t0()
const { 0: [n1],} = _children(n0)
_renderEffect(() => {
- _setHtml(n1, undefined, _ctx.test)
+ _setHtml(n1, _ctx.test)
})
return n0
}"
@@ -35,7 +35,7 @@ export function render(_ctx) {
const t0 = _template("
")
const n0 = t0()
const { 0: [n1],} = _children(n0)
- _setHtml(n1, undefined, "")
+ _setHtml(n1, "")
return n0
}"
`;
diff --git a/packages/compiler-vapor/__tests__/transforms/__snapshots__/vOnce.spec.ts.snap b/packages/compiler-vapor/__tests__/transforms/__snapshots__/vOnce.spec.ts.snap
index 4fb9d979d..e85387cd7 100644
--- a/packages/compiler-vapor/__tests__/transforms/__snapshots__/vOnce.spec.ts.snap
+++ b/packages/compiler-vapor/__tests__/transforms/__snapshots__/vOnce.spec.ts.snap
@@ -7,7 +7,7 @@ export function render(_ctx) {
const t0 = _template("")
const n0 = t0()
const { 0: [n1],} = _children(n0)
- _setDynamicProp(n1, "id", undefined, _ctx.foo)
+ _setDynamicProp(n1, "id", _ctx.foo)
return n0
}"
`;
@@ -20,8 +20,8 @@ export function render(_ctx) {
const n0 = t0()
const { 0: [n3, { 1: [n2],}],} = _children(n0)
const n1 = _createTextNode(_ctx.msg)
- _setText(n1, undefined, _ctx.msg)
- _setClass(n2, "class", undefined, _ctx.clz)
+ _setText(n1, _ctx.msg)
+ _setClass(n2, _ctx.clz)
_prepend(n3, n1)
return n0
}"
@@ -44,7 +44,7 @@ export function render(_ctx) {
const t0 = _template("")
const n0 = t0()
const { 0: [, { 0: [n1],}],} = _children(n0)
- _setDynamicProp(n1, "id", undefined, _ctx.foo)
+ _setDynamicProp(n1, "id", _ctx.foo)
return n0
}"
`;
diff --git a/packages/compiler-vapor/__tests__/transforms/__snapshots__/vText.spec.ts.snap b/packages/compiler-vapor/__tests__/transforms/__snapshots__/vText.spec.ts.snap
index 0ae00ce44..0de524c45 100644
--- a/packages/compiler-vapor/__tests__/transforms/__snapshots__/vText.spec.ts.snap
+++ b/packages/compiler-vapor/__tests__/transforms/__snapshots__/vText.spec.ts.snap
@@ -8,7 +8,7 @@ export function render(_ctx) {
const n0 = t0()
const { 0: [n1],} = _children(n0)
_renderEffect(() => {
- _setText(n1, undefined, _ctx.str)
+ _setText(n1, _ctx.str)
})
return n0
}"
@@ -22,7 +22,7 @@ export function render(_ctx) {
const n0 = t0()
const { 0: [n1],} = _children(n0)
_renderEffect(() => {
- _setText(n1, undefined, _ctx.test)
+ _setText(n1, _ctx.test)
})
return n0
}"
@@ -35,7 +35,7 @@ export function render(_ctx) {
const t0 = _template("")
const n0 = t0()
const { 0: [n1],} = _children(n0)
- _setText(n1, undefined, "")
+ _setText(n1, "")
return n0
}"
`;
diff --git a/packages/compiler-vapor/__tests__/transforms/vBind.spec.ts b/packages/compiler-vapor/__tests__/transforms/vBind.spec.ts
index b8f5d335d..6381f1830 100644
--- a/packages/compiler-vapor/__tests__/transforms/vBind.spec.ts
+++ b/packages/compiler-vapor/__tests__/transforms/vBind.spec.ts
@@ -83,7 +83,7 @@ describe('compiler v-bind', () => {
})
expect(code).matchSnapshot()
- expect(code).contains('_setDynamicProp(n1, "id", undefined, _ctx.id)')
+ expect(code).contains('_setDynamicProp(n1, "id", _ctx.id)')
})
test('no expression', () => {
@@ -110,7 +110,7 @@ describe('compiler v-bind', () => {
})
expect(code).matchSnapshot()
- expect(code).contains('_setDynamicProp(n1, "id", undefined, _ctx.id)')
+ expect(code).contains('_setDynamicProp(n1, "id", _ctx.id)')
})
test('no expression (shorthand)', () => {
@@ -129,9 +129,7 @@ describe('compiler v-bind', () => {
})
expect(code).matchSnapshot()
- expect(code).contains(
- '_setDynamicProp(n1, "camel-case", undefined, _ctx.camelCase)',
- )
+ expect(code).contains('_setDynamicProp(n1, "camel-case", _ctx.camelCase)')
})
test('dynamic arg', () => {
@@ -152,7 +150,7 @@ describe('compiler v-bind', () => {
})
expect(code).matchSnapshot()
- expect(code).contains('_setDynamicProp(n1, _ctx.id, undefined, _ctx.id)')
+ expect(code).contains('_setDynamicProp(n1, _ctx.id, _ctx.id)')
})
test('should error if empty expression', () => {
@@ -194,7 +192,7 @@ describe('compiler v-bind', () => {
})
expect(code).matchSnapshot()
- expect(code).contains('_setDynamicProp(n1, "fooBar", undefined, _ctx.id)')
+ expect(code).contains('_setDynamicProp(n1, "fooBar", _ctx.id)')
})
test('.camel modifier w/ no expression', () => {
@@ -215,9 +213,7 @@ describe('compiler v-bind', () => {
expect(code).matchSnapshot()
expect(code).contains('renderEffect')
- expect(code).contains(
- '_setDynamicProp(n1, "fooBar", undefined, _ctx.fooBar)',
- )
+ expect(code).contains('_setDynamicProp(n1, "fooBar", _ctx.fooBar)')
})
test('.camel modifier w/ dynamic arg', () => {
@@ -238,9 +234,7 @@ describe('compiler v-bind', () => {
expect(code).matchSnapshot()
expect(code).contains('renderEffect')
- expect(code).contains(
- `_setDynamicProp(n1, _camelize(_ctx.foo), undefined, _ctx.id)`,
- )
+ expect(code).contains(`_setDynamicProp(n1, _camelize(_ctx.foo), _ctx.id)`)
})
test.todo('.camel modifier w/ dynamic arg + prefixIdentifiers')
@@ -263,7 +257,7 @@ describe('compiler v-bind', () => {
expect(code).matchSnapshot()
expect(code).contains('renderEffect')
- expect(code).contains('_setDOMProp(n1, "fooBar", undefined, _ctx.id)')
+ expect(code).contains('_setDOMProp(n1, "fooBar", _ctx.id)')
})
test('.prop modifier w/ no expression', () => {
@@ -284,7 +278,7 @@ describe('compiler v-bind', () => {
expect(code).matchSnapshot()
expect(code).contains('renderEffect')
- expect(code).contains('_setDOMProp(n1, "fooBar", undefined, _ctx.fooBar)')
+ expect(code).contains('_setDOMProp(n1, "fooBar", _ctx.fooBar)')
})
test('.prop modifier w/ dynamic arg', () => {
@@ -305,9 +299,7 @@ describe('compiler v-bind', () => {
expect(code).matchSnapshot()
expect(code).contains('renderEffect')
- expect(code).contains(
- '_setDynamicProp(n1, `.${_ctx.fooBar}`, undefined, _ctx.id)',
- )
+ expect(code).contains('_setDynamicProp(n1, `.${_ctx.fooBar}`, _ctx.id)')
})
test.todo('.prop modifier w/ dynamic arg + prefixIdentifiers')
@@ -330,7 +322,7 @@ describe('compiler v-bind', () => {
expect(code).matchSnapshot()
expect(code).contains('renderEffect')
- expect(code).contains('_setDOMProp(n1, "fooBar", undefined, _ctx.id)')
+ expect(code).contains('_setDOMProp(n1, "fooBar", _ctx.id)')
})
test('.prop modifier (shortband) w/ no expression', () => {
@@ -351,7 +343,7 @@ describe('compiler v-bind', () => {
expect(code).matchSnapshot()
expect(code).contains('renderEffect')
- expect(code).contains('_setDOMProp(n1, "fooBar", undefined, _ctx.fooBar)')
+ expect(code).contains('_setDOMProp(n1, "fooBar", _ctx.fooBar)')
})
test('.attr modifier', () => {
@@ -372,7 +364,7 @@ describe('compiler v-bind', () => {
expect(code).matchSnapshot()
expect(code).contains('renderEffect')
- expect(code).contains('_setAttr(n1, "foo-bar", undefined, _ctx.id)')
+ expect(code).contains('_setAttr(n1, "foo-bar", _ctx.id)')
})
test('.attr modifier w/ no expression', () => {
@@ -393,6 +385,6 @@ describe('compiler v-bind', () => {
expect(code).matchSnapshot()
expect(code).contains('renderEffect')
- expect(code).contains('_setAttr(n1, "foo-bar", undefined, _ctx.fooBar)')
+ expect(code).contains('_setAttr(n1, "foo-bar", _ctx.fooBar)')
})
})
diff --git a/packages/compiler-vapor/src/generators/html.ts b/packages/compiler-vapor/src/generators/html.ts
index 503d56a22..1a26f4bf2 100644
--- a/packages/compiler-vapor/src/generators/html.ts
+++ b/packages/compiler-vapor/src/generators/html.ts
@@ -5,7 +5,7 @@ import { genExpression } from './expression'
export function genSetHtml(oper: SetHtmlIRNode, context: CodegenContext) {
const { newline, pushFnCall, vaporHelper } = context
newline()
- pushFnCall(vaporHelper('setHtml'), `n${oper.element}`, 'undefined', () =>
+ pushFnCall(vaporHelper('setHtml'), `n${oper.element}`, () =>
genExpression(oper.value, context),
)
}
diff --git a/packages/compiler-vapor/src/generators/prop.ts b/packages/compiler-vapor/src/generators/prop.ts
index b48d0773b..7fb40fedf 100644
--- a/packages/compiler-vapor/src/generators/prop.ts
+++ b/packages/compiler-vapor/src/generators/prop.ts
@@ -40,7 +40,6 @@ export function genSetProp(oper: SetPropIRNode, context: CodegenContext) {
expr()
}
},
- 'undefined',
() => genExpression(oper.value, context),
)
return
@@ -62,7 +61,6 @@ export function genSetProp(oper: SetPropIRNode, context: CodegenContext) {
genExpression(oper.key, context)
}
},
- 'undefined',
() => genExpression(oper.value, context),
)
}
diff --git a/packages/compiler-vapor/src/generators/text.ts b/packages/compiler-vapor/src/generators/text.ts
index c1d708aa6..4c6cc02cf 100644
--- a/packages/compiler-vapor/src/generators/text.ts
+++ b/packages/compiler-vapor/src/generators/text.ts
@@ -5,7 +5,7 @@ import { genExpression } from './expression'
export function genSetText(oper: SetTextIRNode, context: CodegenContext) {
const { pushFnCall, newline, vaporHelper } = context
newline()
- pushFnCall(vaporHelper('setText'), `n${oper.element}`, 'undefined', () =>
+ pushFnCall(vaporHelper('setText'), `n${oper.element}`, () =>
genExpression(oper.value, context),
)
}
diff --git a/packages/runtime-vapor/__tests__/component.spec.ts b/packages/runtime-vapor/__tests__/component.spec.ts
index cda2b8359..f7199e2d1 100644
--- a/packages/runtime-vapor/__tests__/component.spec.ts
+++ b/packages/runtime-vapor/__tests__/component.spec.ts
@@ -34,7 +34,7 @@ describe('component', () => {
0: [n1],
} = children(n0)
watchEffect(() => {
- setText(n1, void 0, count.value)
+ setText(n1, count.value)
})
return n0
},
diff --git a/packages/runtime-vapor/__tests__/if.spec.ts b/packages/runtime-vapor/__tests__/if.spec.ts
index 790e36cc4..0910a6a92 100644
--- a/packages/runtime-vapor/__tests__/if.spec.ts
+++ b/packages/runtime-vapor/__tests__/if.spec.ts
@@ -69,7 +69,7 @@ describe('createIf', () => {
0: [n3],
} = children(n2)
renderEffect(() => {
- setText(n3, void 0, counter.value)
+ setText(n3, counter.value)
})
return n2
})),
diff --git a/packages/runtime-vapor/src/dom.ts b/packages/runtime-vapor/src/dom.ts
index 44540940e..7f8a76e2f 100644
--- a/packages/runtime-vapor/src/dom.ts
+++ b/packages/runtime-vapor/src/dom.ts
@@ -49,18 +49,6 @@ export function remove(block: Block, parent: ParentNode) {
}
}
-export function setText(el: Node, oldVal: any, newVal: any) {
- if ((newVal = toDisplayString(newVal)) !== oldVal) {
- el.textContent = newVal
- }
-}
-
-export function setHtml(el: Element, oldVal: any, newVal: any) {
- if (newVal !== oldVal) {
- el.innerHTML = newVal
- }
-}
-
type Children = Record
export function children(n: Node): Children {
const result: Children = {}
diff --git a/packages/runtime-vapor/src/dom/patchProp.ts b/packages/runtime-vapor/src/dom/patchProp.ts
index 97eb8cd3f..d877afbd3 100644
--- a/packages/runtime-vapor/src/dom/patchProp.ts
+++ b/packages/runtime-vapor/src/dom/patchProp.ts
@@ -3,79 +3,95 @@ import {
isString,
normalizeClass,
normalizeStyle,
+ toDisplayString,
} from '@vue/shared'
import { currentInstance } from '../component'
-export function setClass(el: Element, oldVal: any, newVal: any) {
- if ((newVal = normalizeClass(newVal)) !== oldVal && (newVal || oldVal)) {
- recordPropMetadata(el, 'class', newVal)
- el.className = newVal
+export function setClass(el: Element, value: any) {
+ const prev = recordPropMetadata(el, 'class', (value = normalizeClass(value)))
+ if (value !== prev && (value || prev)) {
+ el.className = value
}
}
-export function setStyle(el: HTMLElement, oldVal: any, newVal: any) {
- if ((newVal = normalizeStyle(newVal)) !== oldVal && (newVal || oldVal)) {
- recordPropMetadata(el, 'style', newVal)
- if (typeof newVal === 'string') {
- el.style.cssText = newVal
+export function setStyle(el: HTMLElement, value: any) {
+ const prev = recordPropMetadata(el, 'style', (value = normalizeStyle(value)))
+ if (value !== prev && (value || prev)) {
+ if (typeof value === 'string') {
+ el.style.cssText = value
} else {
// TODO
}
}
}
-export function setAttr(el: Element, key: string, oldVal: any, newVal: any) {
- if (newVal !== oldVal) {
- recordPropMetadata(el, key, newVal)
- if (newVal != null) {
- el.setAttribute(key, newVal)
+export function setAttr(el: Element, key: string, value: any) {
+ const oldVal = recordPropMetadata(el, key, value)
+ if (value !== oldVal) {
+ if (value != null) {
+ el.setAttribute(key, value)
} else {
el.removeAttribute(key)
}
}
}
-export function setDOMProp(el: any, key: string, oldVal: any, newVal: any) {
+export function setDOMProp(el: any, key: string, value: any) {
+ const oldVal = recordPropMetadata(el, key, value)
// TODO special checks
- if (newVal !== oldVal) {
- recordPropMetadata(el, key, newVal)
- el[key] = newVal
+ if (value !== oldVal) {
+ el[key] = value
}
}
-export function setDynamicProp(
- el: Element,
- key: string,
- oldVal: any,
- newVal: any,
-) {
+export function setDynamicProp(el: Element, key: string, value: any) {
// TODO
const isSVG = false
if (key === 'class') {
- setClass(el, oldVal, newVal)
+ setClass(el, value)
} else if (key === 'style') {
- setStyle(el as HTMLElement, oldVal, newVal)
+ setStyle(el as HTMLElement, value)
} else if (
key[0] === '.'
? ((key = key.slice(1)), true)
: key[0] === '^'
? ((key = key.slice(1)), false)
- : shouldSetAsProp(el, key, newVal, isSVG)
+ : shouldSetAsProp(el, key, value, isSVG)
) {
- setDOMProp(el, key, oldVal, newVal)
+ setDOMProp(el, key, value)
} else {
// TODO special case for
- setAttr(el, key, oldVal, newVal)
+ setAttr(el, key, value)
}
}
-export function recordPropMetadata(el: Node, key: string, value: any) {
+export function recordPropMetadata(el: Node, key: string, value: any): any {
if (currentInstance) {
let metadata = currentInstance.metadata.get(el)
if (!metadata) {
currentInstance.metadata.set(el, (metadata = { props: {} }))
}
+ const prev = metadata.props[key]
metadata.props[key] = value
+ return prev
+ }
+}
+
+export function setText(el: Node, value: any) {
+ const oldVal = recordPropMetadata(
+ el,
+ 'textContent',
+ (value = toDisplayString(value)),
+ )
+ if (value !== oldVal) {
+ el.textContent = value
+ }
+}
+
+export function setHtml(el: Element, value: any) {
+ const oldVal = recordPropMetadata(el, 'innerHTML', value)
+ if (value !== oldVal) {
+ el.innerHTML = value
}
}