]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(compiler-core): should not condense whitespace in RCDATA text mode (#3482)
authorHcySunYang <HcySunYang@outlook.com>
Thu, 25 Mar 2021 19:53:03 +0000 (03:53 +0800)
committerGitHub <noreply@github.com>
Thu, 25 Mar 2021 19:53:03 +0000 (15:53 -0400)
fix #3479

packages/compiler-core/__tests__/parse.spec.ts
packages/compiler-core/src/parse.ts

index a93b5e0404c85cd7f14cc47e1a01f97fd241e7b2..790123ac67f09dc48cb7c85e78c8d7a251941962 100644 (file)
@@ -1812,6 +1812,16 @@ foo
         `\n  foo  bar  `
       )
     })
+
+    it('should NOT condense whitespaces in RCDATA text mode', () => {
+      const ast = baseParse(`<textarea>Text:\n   foo</textarea>`, {
+        getTextMode: ({ tag }) =>
+          tag === 'textarea' ? TextModes.RCDATA : TextModes.DATA
+      })
+      const preElement = ast.children[0] as ElementNode
+      expect(preElement.children).toHaveLength(1)
+      expect((preElement.children[0] as TextNode).content).toBe(`Text:\n   foo`)
+    })
   })
 
   describe('Errors', () => {
index d57ca77a03eb0cc5eafb6ab54a85670fb1c3c911..e847d55ed52a8b9eead8cc662730bda0077b1ded 100644 (file)
@@ -205,7 +205,7 @@ function parseChildren(
   // Whitespace management for more efficient output
   // (same as v2 whitespace: 'condense')
   let removedWhitespace = false
-  if (mode !== TextModes.RAWTEXT) {
+  if (mode !== TextModes.RAWTEXT && mode !== TextModes.RCDATA) {
     for (let i = 0; i < nodes.length; i++) {
       const node = nodes[i]
       if (!context.inPre && node.type === NodeTypes.TEXT) {