From 1a0adb1c95e58fc75f1767778af9c82a798c1552 Mon Sep 17 00:00:00 2001 From: Tom Bakker Date: Sat, 25 Feb 2017 15:24:55 +0100 Subject: [PATCH] fix tovnode to ensure text elements can be removed --- src/tovnode.ts | 2 +- test/core.js | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/tovnode.ts b/src/tovnode.ts index 1bcb590..69aba64 100644 --- a/src/tovnode.ts +++ b/src/tovnode.ts @@ -27,7 +27,7 @@ export function toVNode(node: Node, domApi?: DOMAPI): VNode { return vnode(sel, {attrs}, children, undefined, node); } else if (api.isText(node)) { text = api.getTextContent(node) as string; - return vnode(undefined, undefined, undefined, text, undefined); + return vnode(undefined, undefined, undefined, text, node); } else if (api.isComment(node)) { text = api.getTextContent(node) as string; return vnode('!', undefined, undefined, text, undefined); diff --git a/test/core.js b/test/core.js index 2e01df0..02436bd 100644 --- a/test/core.js +++ b/test/core.js @@ -280,6 +280,25 @@ describe('snabbdom', function() { assert.strictEqual(elm.childNodes[0].wholeText, 'Foobar'); assert.strictEqual(typeof elm.childNodes[0].testProperty, 'function'); }); + it('can remove text elements', function () { + var h2 = document.createElement('h2'); + h2.textContent = 'Hello' + var prevElm = document.createElement('div'); + prevElm.id = 'id'; + prevElm.className = 'class'; + var text = new Text('Foobar'); + prevElm.appendChild(text); + prevElm.appendChild(h2); + var nextVNode = h('div#id.class', [h('h2', 'Hello')]); + elm = patch(toVNode(prevElm), nextVNode).elm; + assert.strictEqual(elm, prevElm); + assert.equal(elm.tagName, 'DIV'); + assert.equal(elm.id, 'id'); + assert.equal(elm.className, 'class'); + assert.strictEqual(elm.childNodes.length, 1); + assert.strictEqual(elm.childNodes[0].nodeType, 1); + assert.strictEqual(elm.childNodes[0].textContent, 'Hello'); + }) }); describe('updating children with keys', function() { function spanNum(n) {