@@ -49,7 +49,7 @@ let shallowRender = (vnode, context) => renderToString(vnode, context, SHALLOW);
49
49
50
50
51
51
/** The default export is an alias of `render()`. */
52
- export default function renderToString ( vnode , context , opts , inner ) {
52
+ export default function renderToString ( vnode , context , opts , inner , isSvgMode ) {
53
53
let { nodeName, attributes, children } = vnode || EMPTY ,
54
54
isComponent = false ;
55
55
context = context || { } ;
@@ -117,6 +117,9 @@ export default function renderToString(vnode, context, opts, inner) {
117
117
if ( attributes [ 'class' ] ) continue ;
118
118
name = 'class' ;
119
119
}
120
+ else if ( isSvgMode && name . match ( / ^ x l i n k \: ? ( .+ ) / ) ) {
121
+ name = name . toLowerCase ( ) . replace ( / ^ x l i n k \: ? ( .+ ) / , 'xlink:$1' )
122
+ }
120
123
121
124
if ( name === 'class' && v && typeof v === 'object' ) {
122
125
v = hashToClassName ( v ) ;
@@ -169,7 +172,8 @@ export default function renderToString(vnode, context, opts, inner) {
169
172
for ( let i = 0 ; i < len ; i ++ ) {
170
173
let child = children [ i ] ;
171
174
if ( ! falsey ( child ) ) {
172
- let ret = renderToString ( child , context , opts , true ) ;
175
+ let childSvgMode = nodeName === 'svg' ? true : nodeName === 'foreignObject' ? false : isSvgMode ,
176
+ ret = renderToString ( child , context , opts , true , childSvgMode ) ;
173
177
if ( ! hasLarge && pretty && isLargeString ( ret ) ) hasLarge = true ;
174
178
pieces . push ( ret ) ;
175
179
}
0 commit comments