diff --git a/src/compiler/compile/render_dom/wrappers/Element/index.ts b/src/compiler/compile/render_dom/wrappers/Element/index.ts index 2b834404a180..2a1ab6f8874a 100644 --- a/src/compiler/compile/render_dom/wrappers/Element/index.ts +++ b/src/compiler/compile/render_dom/wrappers/Element/index.ts @@ -26,6 +26,8 @@ import { Identifier } from 'estree'; import EventHandler from './EventHandler'; import { extract_names } from 'periscopic'; import Action from '../../../nodes/Action'; +import MustacheTagWrapper from '../MustacheTag'; +import RawMustacheTagWrapper from '../RawMustacheTag'; interface BindingGroup { events: string[]; @@ -337,8 +339,7 @@ export default class ElementWrapper extends Wrapper { if (!this.node.namespace && (this.can_use_innerhtml || can_use_textcontent) && this.fragment.nodes.length > 0) { if (this.fragment.nodes.length === 1 && this.fragment.nodes[0].node.type === 'Text') { block.chunks.create.push( - // @ts-ignore todo: should it be this.fragment.nodes[0].node.data instead? - b`${node}.textContent = ${string_literal(this.fragment.nodes[0].data)};` + b`${node}.textContent = ${string_literal((this.fragment.nodes[0] as TextWrapper).data)};` ); } else { const state = { @@ -926,9 +927,9 @@ export default class ElementWrapper extends Wrapper { } } -function to_html(wrappers: Array, block: Block, literal: any, state: any, can_use_raw_text?: boolean) { +function to_html(wrappers: Array, block: Block, literal: any, state: any, can_use_raw_text?: boolean) { wrappers.forEach(wrapper => { - if (wrapper.node.type === 'Text') { + if (wrapper instanceof TextWrapper) { if ((wrapper as TextWrapper).use_space()) state.quasi.value.raw += ' '; const parent = wrapper.node.parent as Element; @@ -939,13 +940,13 @@ function to_html(wrappers: Array, blo can_use_raw_text ); - state.quasi.value.raw += (raw ? wrapper.node.data : escape_html(wrapper.node.data)) + state.quasi.value.raw += (raw ? wrapper.data : escape_html(wrapper.data)) .replace(/\\/g, '\\\\') .replace(/`/g, '\\`') .replace(/\$/g, '\\$'); } - else if (wrapper.node.type === 'MustacheTag' || wrapper.node.type === 'RawMustacheTag' ) { + else if (wrapper instanceof MustacheTagWrapper || wrapper instanceof RawMustacheTagWrapper) { literal.quasis.push(state.quasi); literal.expressions.push(wrapper.node.expression.manipulate(block)); state.quasi = { @@ -984,8 +985,8 @@ function to_html(wrappers: Array, blo state.quasi.value.raw += '>'; - if (!(wrapper as ElementWrapper).void) { - to_html((wrapper as ElementWrapper).fragment.nodes as Array, block, literal, state); + if (!wrapper.void) { + to_html(wrapper.fragment.nodes as Array, block, literal, state); state.quasi.value.raw += ``; } diff --git a/test/runtime/samples/innerhtml-with-comments/_config.js b/test/runtime/samples/innerhtml-with-comments/_config.js new file mode 100644 index 000000000000..95d4a6fa968d --- /dev/null +++ b/test/runtime/samples/innerhtml-with-comments/_config.js @@ -0,0 +1,8 @@ +export default { + html: ` + + Style: + Bootstrap. + + ` +}; \ No newline at end of file diff --git a/test/runtime/samples/innerhtml-with-comments/main.svelte b/test/runtime/samples/innerhtml-with-comments/main.svelte new file mode 100644 index 000000000000..e00f7550726d --- /dev/null +++ b/test/runtime/samples/innerhtml-with-comments/main.svelte @@ -0,0 +1,5 @@ + + Style: + + Bootstrap. + \ No newline at end of file