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:
node.content = ' '
}
} else {
- node.content = node.content.replace(/\s+/g, ' ')
+ node.content = node.content.replace(/[\t\r\n\f ]+/g, ' ')
}
}
}
InterpolationNode
} from '@vue/compiler-core'
import {
- parserOptionsMinimal as parserOptions,
+ parserOptionsStandard as parserOptions,
DOMNamespaces
-} from '../src/parserOptionsMinimal'
+} from '../src/parserOptionsStandard'
describe('DOM parser', () => {
describe('Text', () => {
}
])
})
+
+ // #945
+ test(' should not be condensed', () => {
+ const nbsp = String.fromCharCode(160)
+ const ast = parse(`foo bar`, parserOptions)
+ expect(ast.children[0]).toMatchObject({
+ type: NodeTypes.TEXT,
+ content: `foo${nbsp}${nbsp}bar`
+ })
+ })
})
describe('Interpolation', () => {
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,