]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(ssr): respect case when rendering dynamic attrs on svg
authorEvan You <yyx990803@gmail.com>
Tue, 27 Sep 2022 09:40:22 +0000 (17:40 +0800)
committerEvan You <yyx990803@gmail.com>
Tue, 27 Sep 2022 09:40:22 +0000 (17:40 +0800)
fix #6755

packages/server-renderer/__tests__/ssrRenderAttrs.spec.ts
packages/server-renderer/src/helpers/ssrRenderAttrs.ts

index 62ccdb59974ac58e3339a115a9b71b36444f374b..e9dfb0dbd598e862d83eb280e3146266297e0a91 100644 (file)
@@ -98,6 +98,17 @@ describe('ssr: renderAttrs', () => {
       )
     ).toBe(` fooBar="ok"`)
   })
+
+  test('preserve name on svg elements', () => {
+    expect(
+      ssrRenderAttrs(
+        {
+          viewBox: 'foo'
+        },
+        'svg'
+      )
+    ).toBe(` viewBox="foo"`)
+  })
 })
 
 describe('ssr: renderAttr', () => {
index 746ffa10729db81ac3e18f34d786d35e5ce7fd5c..6bbf83a1eaacda21f9efed7bcd03ed171d810a2f 100644 (file)
@@ -1,4 +1,4 @@
-import { escapeHtml, stringifyStyle } from '@vue/shared'
+import { escapeHtml, isSVGTag, stringifyStyle } from '@vue/shared'
 import {
   normalizeClass,
   normalizeStyle,
@@ -51,8 +51,8 @@ export function ssrRenderDynamicAttr(
     return ``
   }
   const attrKey =
-    tag && tag.indexOf('-') > 0
-      ? key // preserve raw name on custom elements
+    tag && (tag.indexOf('-') > 0 || isSVGTag(tag))
+      ? key // preserve raw name on custom elements and svg
       : propsToAttrMap[key] || key.toLowerCase()
   if (isBooleanAttr(attrKey)) {
     return includeBooleanAttr(value) ? ` ${attrKey}` : ``