Skip to content

Commit

Permalink
fix(compile-dom): should be able to stringify mathML (#11891)
Browse files Browse the repository at this point in the history
  • Loading branch information
edison1105 authored Sep 16, 2024
1 parent 49fa673 commit 85c138c
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 1 deletion.
18 changes: 18 additions & 0 deletions packages/compiler-dom/__tests__/transforms/stringifyStatic.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -389,6 +389,24 @@ describe('stringify static html', () => {
])
})

test('should stringify mathML', () => {
const math = `<math xmlns="http://www.w3.org/1998/Math/MathML">`
const repeated = `<ms>1</ms>`
const { ast } = compileWithStringify(
`<div>${math}${repeat(
repeated,
StringifyThresholds.NODE_COUNT,
)}</math></div>`,
)

expect(ast.cached).toMatchObject([
cachedArrayStaticNodeMatcher(
`${math}${repeat(repeated, StringifyThresholds.NODE_COUNT)}</math>`,
1,
),
])
})

// #5439
test('stringify v-html', () => {
const { code } = compileWithStringify(`
Expand Down
5 changes: 4 additions & 1 deletion packages/compiler-dom/src/transforms/stringifyStatic.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import {
isArray,
isBooleanAttr,
isKnownHtmlAttr,
isKnownMathMLAttr,
isKnownSvgAttr,
isString,
isSymbol,
Expand Down Expand Up @@ -190,7 +191,9 @@ const isStringifiableAttr = (name: string, ns: Namespaces) => {
? isKnownHtmlAttr(name)
: ns === Namespaces.SVG
? isKnownSvgAttr(name)
: false) || dataAriaRE.test(name)
: ns === Namespaces.MATH_ML
? isKnownMathMLAttr(name)
: false) || dataAriaRE.test(name)
)
}

Expand Down
19 changes: 19 additions & 0 deletions packages/shared/src/domAttrConfig.ts
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,25 @@ export const isKnownSvgAttr: (key: string) => boolean = /*@__PURE__*/ makeMap(
`xml:space,y,y1,y2,yChannelSelector,z,zoomAndPan`,
)

/**
* Generated from https://developer.mozilla.org/en-US/docs/Web/MathML/Attribute
*/
export const isKnownMathMLAttr: (key: string) => boolean =
/*@__PURE__*/ makeMap(
`accent,accentunder,actiontype,align,alignmentscope,altimg,altimg-height,` +
`altimg-valign,altimg-width,alttext,bevelled,close,columnsalign,columnlines,` +
`columnspan,denomalign,depth,dir,display,displaystyle,encoding,` +
`equalcolumns,equalrows,fence,fontstyle,fontweight,form,frame,framespacing,` +
`groupalign,height,href,id,indentalign,indentalignfirst,indentalignlast,` +
`indentshift,indentshiftfirst,indentshiftlast,indextype,justify,` +
`largetop,largeop,lquote,lspace,mathbackground,mathcolor,mathsize,` +
`mathvariant,maxsize,minlabelspacing,mode,other,overflow,position,` +
`rowalign,rowlines,rowspan,rquote,rspace,scriptlevel,scriptminsize,` +
`scriptsizemultiplier,selection,separator,separators,shift,side,` +
`src,stackalign,stretchy,subscriptshift,superscriptshift,symmetric,` +
`voffset,width,widths,xlink:href,xlink:show,xlink:type,xmlns`,
)

/**
* Shared between server-renderer and runtime-core hydration logic
*/
Expand Down

0 comments on commit 85c138c

Please sign in to comment.