From 1673579d32493ad922b9743708a4a49acf9b8c86 Mon Sep 17 00:00:00 2001 From: Ian Henderson Date: Tue, 17 May 2016 11:05:59 -0700 Subject: [PATCH] Add replaceScriptNodes function --- mithril.js | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/mithril.js b/mithril.js index d7054596..9478add4 100644 --- a/mithril.js +++ b/mithril.js @@ -1176,9 +1176,41 @@ $document.createRange().createContextualFragment(data)) } catch (e) { parentElement.insertAdjacentHTML("beforeend", data) + replaceScriptNodes(parentElement) } } + // Replace script tags inside given DOM element with executable ones. + // Will also check children recursively and replace any found script + // tags in same manner. + function replaceScriptNodes(node) { + if (node.tagName === "SCRIPT") { + node.parentNode.replaceChild(buildExecutableNode(node), node) + } else { + var children = node.childNodes + if (children && children.length) { + for (var i = 0; i < children.length; i++) { + replaceScriptNodes(children[i]) + } + } + } + + return node + } + + // Replace script element with one whose contents are executable. + function buildExecutableNode(node){ + var scriptEl = document.createElement("script") + var attrs = node.attributes + + for (var i = 0; i < attrs.length; i++) { + scriptEl.setAttribute(attrs[i].name, attrs[i].value) + } + + scriptEl.text = node.innerHTML + return scriptEl + } + function injectHTML(parentElement, index, data) { var nextSibling = parentElement.childNodes[index] if (nextSibling) {