From 9a42242454ca045b643669bea03bf247963416c6 Mon Sep 17 00:00:00 2001 From: Marco Lamberto Date: Tue, 4 Aug 2015 12:16:29 +0200 Subject: [PATCH 1/2] Fixes #721. Firefox insertAdjacentHTML updating text nodes with "beforeend" instead of creating new ones. --- mithril.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/mithril.js b/mithril.js index efb3a92b..caae614c 100644 --- a/mithril.js +++ b/mithril.js @@ -636,7 +636,12 @@ var m = (function app(window, undefined) { } else nextSibling.insertAdjacentHTML("beforebegin", data); } - else parentElement.insertAdjacentHTML("beforeend", data); + else { + if (window.Range && window.Range.prototype.createContextualFragment) { + parentElement.appendChild($document.createRange().createContextualFragment(data)); + } + else parentElement.insertAdjacentHTML("beforeend", data); + } var nodes = []; while (parentElement.childNodes[index] !== nextSibling) { nodes.push(parentElement.childNodes[index]); From 713b458aea608502c9f1eb262a1d844517855fcf Mon Sep 17 00:00:00 2001 From: Marco Lamberto Date: Tue, 4 Aug 2015 13:01:07 +0200 Subject: [PATCH 2/2] Better detection for Range support. --- mithril.js | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/mithril.js b/mithril.js index caae614c..55a9cd29 100644 --- a/mithril.js +++ b/mithril.js @@ -624,6 +624,23 @@ var m = (function app(window, undefined) { else if (cached.children.tag) unload(cached.children); } } + + var insertAdjacentBeforeEnd = (function () { + var rangeStrategy = function (parentElement, data) { + parentElement.appendChild($document.createRange().createContextualFragment(data)); + }; + var insertAdjacentStrategy = function (parentElement, data) { + parentElement.insertAdjacentHTML("beforeend", data); + }; + + try { + $document.createRange().createContextualFragment('x'); + return rangeStrategy; + } catch (e) { + return insertAdjacentStrategy; + } + })(); + function injectHTML(parentElement, index, data) { var nextSibling = parentElement.childNodes[index]; if (nextSibling) { @@ -636,12 +653,8 @@ 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); - } + else insertAdjacentBeforeEnd(parentElement, data); + var nodes = []; while (parentElement.childNodes[index] !== nextSibling) { nodes.push(parentElement.childNodes[index]);