Преглед изворни кода

fix(compiler): should not condense  

fix #945
Evan You пре 6 година
родитељ
комит
8c17535a47

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

@@ -194,7 +194,7 @@ function parseChildren(
       for (let i = 0; i < nodes.length; i++) {
         const node = nodes[i]
         if (node.type === NodeTypes.TEXT) {
-          if (!node.content.trim()) {
+          if (!/[^\t\r\n\f ]/.test(node.content)) {
             const prev = nodes[i - 1]
             const next = nodes[i + 1]
             // If:
@@ -219,7 +219,7 @@ function parseChildren(
               node.content = ' '
             }
           } else {
-            node.content = node.content.replace(/\s+/g, ' ')
+            node.content = node.content.replace(/[\t\r\n\f ]+/g, ' ')
           }
         }
       }

+ 12 - 2
packages/compiler-dom/__tests__/parse.spec.ts

@@ -8,9 +8,9 @@ import {
   InterpolationNode
 } from '@vue/compiler-core'
 import {
-  parserOptionsMinimal as parserOptions,
+  parserOptionsStandard as parserOptions,
   DOMNamespaces
-} from '../src/parserOptionsMinimal'
+} from '../src/parserOptionsStandard'
 
 describe('DOM parser', () => {
   describe('Text', () => {
@@ -160,6 +160,16 @@ describe('DOM parser', () => {
         }
       ])
     })
+
+    // #945
+    test('&nbsp; should not be condensed', () => {
+      const nbsp = String.fromCharCode(160)
+      const ast = parse(`foo&nbsp;&nbsp;bar`, parserOptions)
+      expect(ast.children[0]).toMatchObject({
+        type: NodeTypes.TEXT,
+        content: `foo${nbsp}${nbsp}bar`
+      })
+    })
   })
 
   describe('Interpolation', () => {

+ 2 - 0
packages/compiler-dom/src/parserOptionsStandard.ts

@@ -2,6 +2,8 @@ import { ParserOptions } from '@vue/compiler-core'
 import { parserOptionsMinimal } from './parserOptionsMinimal'
 import namedCharacterReferences from './namedChars.json'
 
+export { DOMNamespaces } from './parserOptionsMinimal'
+
 export const parserOptionsStandard: ParserOptions = {
   // extends the minimal options with more spec-compliant overrides
   ...parserOptionsMinimal,