diff --git a/mithril.js b/mithril.js index c6384beb..53509d51 100644 --- a/mithril.js +++ b/mithril.js @@ -626,6 +626,13 @@ var m = (function app(window, undefined) { else if (cached.children.tag) unload(cached.children); } } + function appendTextFragment(parentElement, data) { + try { + parentElement.appendChild($document.createRange().createContextualFragment(data)); + } catch (e) { + parentElement.insertAdjacentHTML("beforeend", data); + } + } function injectHTML(parentElement, index, data) { var nextSibling = parentElement.childNodes[index]; if (nextSibling) { @@ -639,10 +646,7 @@ var m = (function app(window, undefined) { else nextSibling.insertAdjacentHTML("beforebegin", data); } else { - if (window.Range && window.Range.prototype.createContextualFragment) { - parentElement.appendChild($document.createRange().createContextualFragment(data)); - } - else parentElement.insertAdjacentHTML("beforeend", data); + appendTextFragment(parentElement, data); } var nodes = []; while (parentElement.childNodes[index] !== nextSibling) { diff --git a/test/mithril.trust.js b/test/mithril.trust.js index e8679f29..c64adb4c 100644 --- a/test/mithril.trust.js +++ b/test/mithril.trust.js @@ -20,19 +20,20 @@ describe("m.trust()", function () { // FIXME: implement document.createRange().createContextualFragment() in the // mock window for these tests dom(function () { - xit("isn't escaped in m.render()", function () { + + it("isn't escaped in m.render()", function () { var root = document.createElement("div") m.render(root, m("div", "a", m.trust("&"), "b")) expect(root.childNodes[0].innerHTML).to.equal("a&b") }) - xit("works with mixed trusted content in div", function () { + it("works with mixed trusted content in div", function () { var root = document.createElement("div") m.render(root, [m.trust("

1

2

"), m("i", "foo")]) expect(root.childNodes[2].tagName).to.equal("I") }) - xit("works with mixed trusted content in text nodes", function () { + it("works with mixed trusted content in text nodes", function () { var root = document.createElement("div") m.render(root, [ m.trust("

1

123

2

"), @@ -41,9 +42,7 @@ describe("m.trust()", function () { expect(root.childNodes[3].tagName).to.equal("I") }) - // FIXME: this is a bug (trusted string's contents rendered as just - // textual contents) - xit("works with mixed trusted content in td", function () { + it("works with mixed trusted content in td", function () { var root = document.createElement("table") root.appendChild(root = document.createElement("tr")) @@ -54,5 +53,16 @@ describe("m.trust()", function () { expect(root.childNodes[2].tagName).to.equal("TD") }) + + it("works with trusted content in div", function () { + var root = document.createElement("div") + m.render(root, m('div', [ + m('p', '©'), + m('p', m.trust('©')), + m.trust('©'), + ])) + expect(root.innerHTML).to.equal("

©

©

©
") + }) + }) }) diff --git a/tests/trust-test.html b/tests/trust-test.html new file mode 100644 index 00000000..e69de29b