diff --git a/docs/mithril.request.md b/docs/mithril.request.md index e2e7b3af..96defe1d 100644 --- a/docs/mithril.request.md +++ b/docs/mithril.request.md @@ -272,6 +272,7 @@ data.append("file", file) m.request({ method: "POST", url: "/upload", + data: data, serialize: function(data) {return data} }) ``` diff --git a/mithril.js b/mithril.js index 12fa23fd..b93e2654 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) { diff --git a/test/mithril.trust.js b/test/mithril.trust.js index 17727a0d..0acd94fa 100644 --- a/test/mithril.trust.js +++ b/test/mithril.trust.js @@ -65,5 +65,21 @@ describe("m.trust()", function () { expect(root.innerHTML) .to.equal("
©
©
©