From 9b1ccc7981b61f06b1829be32336122118e47ea9 Mon Sep 17 00:00:00 2001 From: Sergey Kirillov Date: Sat, 24 May 2014 22:28:02 +0300 Subject: [PATCH] Added support for overriding xml namespace. It was required to allow embedding HTML foreignObjects inside SVG --- mithril.js | 3 ++- tests/svg.html | 7 +++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/mithril.js b/mithril.js index 523b8053..b345494d 100644 --- a/mithril.js +++ b/mithril.js @@ -66,7 +66,8 @@ Mithril = m = new function app(window) { if (typeof data.tag != "string") return var node, isNew = cached.nodes.length === 0 - if (data.tag === "svg") namespace = "http://www.w3.org/2000/svg" + if (data.attrs.xmlns) namespace = data.attrs.xmlns + else if (data.tag === "svg") namespace = "http://www.w3.org/2000/svg" if (isNew) { node = namespace === undefined ? window.document.createElement(data.tag) : window.document.createElementNS(namespace, data.tag) cached = { diff --git a/tests/svg.html b/tests/svg.html index 13a106b7..8b5254b7 100644 --- a/tests/svg.html +++ b/tests/svg.html @@ -75,11 +75,14 @@ var svg = [ ]) ]) ]), - m("script", 'var a=new Date,b=parseInt(a.getHours());b=b>12?b-12:b;var c=parseInt(a.getMinutes()),d=parseInt(a.getSeconds()),e=6*d,f=6*(c+d/60),g=30*(b+c/60+d/3600),h=document.getElementById("hour"),i=document.getElementById("minute"),j=document.getElementById("second");h.setAttribute("transform","rotate("+g.toString()+")"),i.setAttribute("transform","rotate("+f.toString()+")"),j.setAttribute("transform","rotate("+e.toString()+")")') + m("script", 'var a=new Date,b=parseInt(a.getHours());b=b>12?b-12:b;var c=parseInt(a.getMinutes()),d=parseInt(a.getSeconds()),e=6*d,f=6*(c+d/60),g=30*(b+c/60+d/3600),h=document.getElementById("hour"),i=document.getElementById("minute"),j=document.getElementById("second");h.setAttribute("transform","rotate("+g.toString()+")"),i.setAttribute("transform","rotate("+f.toString()+")"),j.setAttribute("transform","rotate("+e.toString()+")")'), + ]), + m("svg[height='200px'][width='200px']", [ + m("foreignObject[x=0][y=0][width='100px'][height='100px'][transform='translate(0,0)'']", m('div', {xmlns: "http://www.w3.org/1999/xhtml"}, m.trust('this is a piece of html rendered as SVG foreignObject'))) ]) ] m.render(document.getElementById("test"), svg) - \ No newline at end of file +