fix(compiler): should not condense  

fix #945
This commit is contained in:
Evan You 2020-04-08 17:33:07 -04:00
parent be666ebd59
commit 8c17535a47
3 changed files with 16 additions and 4 deletions

View File

@ -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, ' ')
}
}
}

View File

@ -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', () => {

View File

@ -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,