fix(compiler-sfc): template with alt lang should be parsed as raw text
fix #1120
This commit is contained in:
		
							parent
							
								
									e58beecc97
								
							
						
					
					
						commit
						d10835aee7
					
				@ -106,6 +106,16 @@ h1 { color: red }
 | 
				
			|||||||
    expect(descriptor.template!.content).toBe(content)
 | 
					    expect(descriptor.template!.content).toBe(content)
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // #1120
 | 
				
			||||||
 | 
					  test('alternative template lang should be treated as plain text', () => {
 | 
				
			||||||
 | 
					    const content = `p(v-if="1 < 2") test`
 | 
				
			||||||
 | 
					    const { descriptor, errors } = parse(
 | 
				
			||||||
 | 
					      `<template lang="pug">` + content + `</template>`
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    expect(errors.length).toBe(0)
 | 
				
			||||||
 | 
					    expect(descriptor.template!.content).toBe(content)
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  test('error tolerance', () => {
 | 
					  test('error tolerance', () => {
 | 
				
			||||||
    const { errors } = parse(`<template>`)
 | 
					    const { errors } = parse(`<template>`)
 | 
				
			||||||
    expect(errors.length).toBe(1)
 | 
					    expect(errors.length).toBe(1)
 | 
				
			||||||
 | 
				
			|||||||
@ -96,10 +96,20 @@ export function parse(
 | 
				
			|||||||
    isNativeTag: () => true,
 | 
					    isNativeTag: () => true,
 | 
				
			||||||
    // preserve all whitespaces
 | 
					    // preserve all whitespaces
 | 
				
			||||||
    isPreTag: () => true,
 | 
					    isPreTag: () => true,
 | 
				
			||||||
    getTextMode: ({ tag }, parent) => {
 | 
					    getTextMode: ({ tag, props }, parent) => {
 | 
				
			||||||
      // all top level elements except <template> are parsed as raw text
 | 
					      // all top level elements except <template> are parsed as raw text
 | 
				
			||||||
      // containers
 | 
					      // containers
 | 
				
			||||||
      if (!parent && tag !== 'template') {
 | 
					      if (
 | 
				
			||||||
 | 
					        (!parent && tag !== 'template') ||
 | 
				
			||||||
 | 
					        // <template lang="xxx"> should also be treated as raw text
 | 
				
			||||||
 | 
					        props.some(
 | 
				
			||||||
 | 
					          p =>
 | 
				
			||||||
 | 
					            p.type === NodeTypes.ATTRIBUTE &&
 | 
				
			||||||
 | 
					            p.name === 'lang' &&
 | 
				
			||||||
 | 
					            p.value &&
 | 
				
			||||||
 | 
					            p.value.content !== 'html'
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					      ) {
 | 
				
			||||||
        return TextModes.RAWTEXT
 | 
					        return TextModes.RAWTEXT
 | 
				
			||||||
      } else {
 | 
					      } else {
 | 
				
			||||||
        return TextModes.DATA
 | 
					        return TextModes.DATA
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user