From 121eb32fb0a21cf9988d788cfad1b4249b15997b Mon Sep 17 00:00:00 2001 From: Evan You Date: Tue, 27 Sep 2022 17:40:22 +0800 Subject: [PATCH] fix(ssr): respect case when rendering dynamic attrs on svg fix #6755 --- .../server-renderer/__tests__/ssrRenderAttrs.spec.ts | 11 +++++++++++ .../server-renderer/src/helpers/ssrRenderAttrs.ts | 6 +++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/packages/server-renderer/__tests__/ssrRenderAttrs.spec.ts b/packages/server-renderer/__tests__/ssrRenderAttrs.spec.ts index 62ccdb59974..e9dfb0dbd59 100644 --- a/packages/server-renderer/__tests__/ssrRenderAttrs.spec.ts +++ b/packages/server-renderer/__tests__/ssrRenderAttrs.spec.ts @@ -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', () => { diff --git a/packages/server-renderer/src/helpers/ssrRenderAttrs.ts b/packages/server-renderer/src/helpers/ssrRenderAttrs.ts index 746ffa10729..6bbf83a1eaa 100644 --- a/packages/server-renderer/src/helpers/ssrRenderAttrs.ts +++ b/packages/server-renderer/src/helpers/ssrRenderAttrs.ts @@ -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}` : ``