@@ -20,8 +20,8 @@ const VOID_ELEMENTS = /^(area|base|br|col|embed|hr|img|input|link|meta|param|sou
20
20
const DASHED_ATTRS = / ^ ( a c c e p t C | h t t p E ) / ;
21
21
const CAMEL_ATTRS = / ^ ( v i e w B | i s P ) / ;
22
22
const COLON_ATTRS = / ^ ( x m l S | x l i n k H ) / ;
23
- const transformAttr = ( attr , separator ) =>
24
- attr . replace ( / ( [ A - Z ] ) / g, ( w ) => separator + w . toLowerCase ( ) ) ;
23
+
24
+ const CAPITAL_REGEXP = / ( [ A - Z ] ) / g;
25
25
26
26
const UNSAFE_NAME = / [ \s \n \\ / = ' " \0 < > ] / ;
27
27
@@ -287,6 +287,8 @@ function _renderToString(vnode, context, opts, inner, isSvgMode, selectValue) {
287
287
// <textarea value="a&b"> --> <textarea>a&b</textarea>
288
288
propChildren = v ;
289
289
} else if ( ( v || v === 0 || v === '' ) && typeof v !== 'function' ) {
290
+ name = getAttributeNameInHtmlCase ( name ) ;
291
+
290
292
if ( v === true || v === '' ) {
291
293
v = name ;
292
294
// in non-xml mode, allow boolean attributes
@@ -305,15 +307,6 @@ function _renderToString(vnode, context, opts, inner, isSvgMode, selectValue) {
305
307
}
306
308
}
307
309
308
- // Convert attribute names to proper html casing
309
- if ( DASHED_ATTRS . test ( name ) ) {
310
- name = transformAttr ( name , '-' ) ;
311
- } else if ( COLON_ATTRS . test ( name ) ) {
312
- name = transformAttr ( name , ':' ) ;
313
- } else if ( ! CAMEL_ATTRS . test ( name ) ) {
314
- name = name . toLowerCase ( ) ;
315
- }
316
-
317
310
s += ` ${ name } ="${ encodeEntities ( v ) } "` ;
318
311
}
319
312
}
@@ -442,6 +435,19 @@ function getFallbackComponentName(component) {
442
435
}
443
436
return name ;
444
437
}
438
+
439
+ function getAttributeNameInHtmlCase ( name ) {
440
+ if ( CAMEL_ATTRS . test ( name ) ) return name ;
441
+
442
+ if ( DASHED_ATTRS . test ( name ) )
443
+ return name . replace ( CAPITAL_REGEXP , ( w ) => '-' + w . toLowerCase ( ) ) ;
444
+
445
+ if ( COLON_ATTRS . test ( name ) )
446
+ return name . replace ( CAPITAL_REGEXP , ( w ) => ':' + w . toLowerCase ( ) ) ;
447
+
448
+ return name . toLowerCase ( ) ;
449
+ }
450
+
445
451
renderToString . shallowRender = shallowRender ;
446
452
447
453
export default renderToString ;
0 commit comments