From 27938534267d81d3b2b5c8d876caacb7f8729076 Mon Sep 17 00:00:00 2001 From: Igor Kurganov Date: Mon, 29 Feb 2016 15:29:08 -0800 Subject: [PATCH 1/4] rebased & fixed the issue in the reverted code base. --- mithril.js | 1 + test/mithril.trust.js | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/mithril.js b/mithril.js index 7bf4a399..298b8bb8 100644 --- a/mithril.js +++ b/mithril.js @@ -507,6 +507,7 @@ } else if (editable) { // contenteditable nodes use `innerHTML` instead of `nodeValue`. editable.innerHTML = data + nodes = [].slice.call(editable.childNodes) } else { // was a trusted string if (nodes[0].nodeType === 1 || nodes.length > 1 || diff --git a/test/mithril.trust.js b/test/mithril.trust.js index 015cd318..48e22fa4 100644 --- a/test/mithril.trust.js +++ b/test/mithril.trust.js @@ -64,5 +64,18 @@ describe("m.trust()", function () { expect(root.innerHTML).to.equal("

©

©

©
") }) + // not sure that this goes here; not really an m.trust issue + it("caches children of editable on update", function () { + var root = document.createElement("table") + var t1 = m.trust("

fo

o") + var t2 = "foo" + + m.render(root, m("span", {contenteditable: false}, t1)) + m.render(root, m("span", {contenteditable: true}, t2)) + m.render(root, m("span", {contenteditable: false}, t1)) + + expect(root.childNodes[0].innerHTML).to.equal(t1.valueOf()) + }) + }) }) From 1d3af9d6902b0b7be4ae9b009e0106a450ac9c6e Mon Sep 17 00:00:00 2001 From: Igor Kurganov Date: Mon, 29 Feb 2016 16:15:04 -0800 Subject: [PATCH 2/4] moved test to proper file --- test/mithril.render.js | 12 ++++++++++++ test/mithril.trust.js | 13 ------------- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/test/mithril.render.js b/test/mithril.render.js index ec6ba1ce..043ac253 100644 --- a/test/mithril.render.js +++ b/test/mithril.render.js @@ -1549,5 +1549,17 @@ describe("m.render()", function () { expect(root.childNodes[0].innerHTML) .to.equal('') }) + + it("caches children of editable on update", function () { + var root = document.createElement("span") + var t1 = m.trust("

fo

o") + var t2 = "foo" + + m.render(root, m("span", {contenteditable: false}, t1)) + m.render(root, m("span", {contenteditable: true}, t2)) + m.render(root, m("span", {contenteditable: false}, t1)) + + expect(root.childNodes[0].innerHTML).to.equal(t1.valueOf()) + }) }) }) diff --git a/test/mithril.trust.js b/test/mithril.trust.js index 48e22fa4..015cd318 100644 --- a/test/mithril.trust.js +++ b/test/mithril.trust.js @@ -64,18 +64,5 @@ describe("m.trust()", function () { expect(root.innerHTML).to.equal("

©

©

©
") }) - // not sure that this goes here; not really an m.trust issue - it("caches children of editable on update", function () { - var root = document.createElement("table") - var t1 = m.trust("

fo

o") - var t2 = "foo" - - m.render(root, m("span", {contenteditable: false}, t1)) - m.render(root, m("span", {contenteditable: true}, t2)) - m.render(root, m("span", {contenteditable: false}, t1)) - - expect(root.childNodes[0].innerHTML).to.equal(t1.valueOf()) - }) - }) }) From caaa8c9cbe86e028f72084999e9a45deefe71526 Mon Sep 17 00:00:00 2001 From: Igor Kurganov Date: Fri, 9 Dec 2016 17:37:14 -0800 Subject: [PATCH 3/4] editable node w/ focus is updated when data is changed. --- mithril.js | 2 +- test/mithril.render.js | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/mithril.js b/mithril.js index 7881b338..42c5963b 100644 --- a/mithril.js +++ b/mithril.js @@ -524,7 +524,7 @@ parentTag ) { var nodes = cached.nodes - if (!editable || editable !== $document.activeElement) { + if (!editable || editable !== $document.activeElement || data !== cached) { if (data.$trusted) { clear(nodes, cached) nodes = injectHTML(parentElement, index, data) diff --git a/test/mithril.render.js b/test/mithril.render.js index b7db5343..8aad560b 100644 --- a/test/mithril.render.js +++ b/test/mithril.render.js @@ -1589,5 +1589,25 @@ describe("m.render()", function () { expect(root.childNodes[0].innerHTML).to.equal(t1.valueOf()) }) + + it("caches children of editable on update", function () { + var root = document.createElement('div') + + // need this in order for focus & activeElement to work properly + document.body.appendChild(root) + + m.render(root, m('span', { + config: function(el) { el.focus() }, + contenteditable: true + }, 'a')) + + m.render(root, m('span', { + config: function(el) { el.focus() }, + contenteditable: true + }, 'b')) + + expect(root.childNodes[0].innerHTML).to.equal('b') + }) + }) }) From d55e8b9bee1fe71a314eb7f1ebc4e2bd44c1a85c Mon Sep 17 00:00:00 2001 From: Igor Kurganov Date: Fri, 9 Dec 2016 17:47:54 -0800 Subject: [PATCH 4/4] forgot to rename test. --- test/mithril.render.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/mithril.render.js b/test/mithril.render.js index 8aad560b..baae9a70 100644 --- a/test/mithril.render.js +++ b/test/mithril.render.js @@ -1590,7 +1590,7 @@ describe("m.render()", function () { expect(root.childNodes[0].innerHTML).to.equal(t1.valueOf()) }) - it("caches children of editable on update", function () { + it("editable node w/ focus is updated on data change", function () { var root = document.createElement('div') // need this in order for focus & activeElement to work properly