Просмотр исходного кода

fix(compiler): should only strip leading newline directly in pre tag

Evan You 6 лет назад
Родитель
Сommit
be666ebd59
2 измененных файлов с 18 добавлено и 6 удалено
  1. 1 1
      packages/compiler-core/src/parse.ts
  2. 17 5
      packages/compiler-dom/__tests__/parse.spec.ts

+ 1 - 1
packages/compiler-core/src/parse.ts

@@ -223,7 +223,7 @@ function parseChildren(
           }
         }
       }
-    } else {
+    } else if (parent && context.options.isPreTag(parent.tag)) {
       // remove leading newline per html spec
       // https://html.spec.whatwg.org/multipage/grouping-content.html#the-pre-element
       const first = nodes[0]

+ 17 - 5
packages/compiler-dom/__tests__/parse.spec.ts

@@ -141,12 +141,24 @@ describe('DOM parser', () => {
 
     // #908
     test('<pre> tag should remove leading newline', () => {
-      const rawText = `\nhello`
+      const rawText = `\nhello<div>\nbye</div>`
       const ast = parse(`<pre>${rawText}</pre>`, parserOptions)
-      expect((ast.children[0] as ElementNode).children[0]).toMatchObject({
-        type: NodeTypes.TEXT,
-        content: rawText.slice(1)
-      })
+      expect((ast.children[0] as ElementNode).children).toMatchObject([
+        {
+          type: NodeTypes.TEXT,
+          content: `hello`
+        },
+        {
+          type: NodeTypes.ELEMENT,
+          children: [
+            {
+              type: NodeTypes.TEXT,
+              // should not remove the leading newline for nested elements
+              content: `\nbye`
+            }
+          ]
+        }
+      ])
     })
   })