From 713b458aea608502c9f1eb262a1d844517855fcf Mon Sep 17 00:00:00 2001 From: Marco Lamberto Date: Tue, 4 Aug 2015 13:01:07 +0200 Subject: [PATCH] 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]);