fix(compiler-core): support interpolation in RCDATA mode (e.g. textarea)
This commit is contained in:
		
							parent
							
								
									455a1534c9
								
							
						
					
					
						commit
						0831b98eac
					
				| @ -111,11 +111,11 @@ function parseChildren( | ||||
|     const s = context.source | ||||
|     let node: TemplateChildNode | TemplateChildNode[] | undefined = undefined | ||||
| 
 | ||||
|     if (mode === TextModes.DATA) { | ||||
|     if (mode === TextModes.DATA || mode === TextModes.RCDATA) { | ||||
|       if (!context.inPre && startsWith(s, context.options.delimiters[0])) { | ||||
|         // '{{'
 | ||||
|         node = parseInterpolation(context, mode) | ||||
|       } else if (s[0] === '<') { | ||||
|       } else if (mode === TextModes.DATA && s[0] === '<') { | ||||
|         // https://html.spec.whatwg.org/multipage/parsing.html#tag-open-state
 | ||||
|         if (s.length === 1) { | ||||
|           emitError(context, ErrorCodes.EOF_BEFORE_TAG_NAME, 1) | ||||
|  | ||||
| @ -49,6 +49,22 @@ describe('DOM parser', () => { | ||||
|       }) | ||||
|     }) | ||||
| 
 | ||||
|     test('textarea support interpolation', () => { | ||||
|       const ast = parse('<textarea><div>{{ foo }}</textarea>', parserOptions) | ||||
|       const element = ast.children[0] as ElementNode | ||||
|       expect(element.children).toMatchObject([ | ||||
|         { type: NodeTypes.TEXT, content: `<div>` }, | ||||
|         { | ||||
|           type: NodeTypes.INTERPOLATION, | ||||
|           content: { | ||||
|             type: NodeTypes.SIMPLE_EXPRESSION, | ||||
|             content: `foo`, | ||||
|             isStatic: false | ||||
|           } | ||||
|         } | ||||
|       ]) | ||||
|     }) | ||||
| 
 | ||||
|     test('style handles comments/elements as just a text', () => { | ||||
|       const ast = parse( | ||||
|         '<style>some<div>text</div>and<!--comment--></style>', | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user