From ed2eed5f97abdbb5f00290c101b5a11476f970d7 Mon Sep 17 00:00:00 2001 From: Yuichiro Yamashita Date: Sun, 31 Oct 2021 00:20:34 +0900 Subject: [PATCH] refactor render_dom --- .../render_dom/wrappers/DynamicElement.ts | 33 ++++--------------- .../render_dom/wrappers/Element/index.ts | 2 +- .../compile/render_dom/wrappers/Fragment.ts | 8 ++++- 3 files changed, 15 insertions(+), 28 deletions(-) diff --git a/src/compiler/compile/render_dom/wrappers/DynamicElement.ts b/src/compiler/compile/render_dom/wrappers/DynamicElement.ts index 1e9a704f48..e462f6fc0f 100644 --- a/src/compiler/compile/render_dom/wrappers/DynamicElement.ts +++ b/src/compiler/compile/render_dom/wrappers/DynamicElement.ts @@ -25,16 +25,13 @@ export default class DynamicElementWrapper extends Wrapper { this.not_static_content(); - if (this.node.dynamic_tag_expr.dynamic_dependencies().length) { - block = block.child({ - comment: create_debugging_comment(node, renderer.component), - name: renderer.component.get_unique_name('dynamic_element_block'), - type: 'dynamic_element' - }); - renderer.blocks.push(block); - } + this.dynamic_element_block = block.child({ + comment: create_debugging_comment(node, renderer.component), + name: renderer.component.get_unique_name('dynamic_element_block'), + type: 'dynamic_element' + }); + renderer.blocks.push(this.dynamic_element_block); - this.dynamic_element_block = block; this.elementWrapper = new ElementWrapper( renderer, this.dynamic_element_block, @@ -45,23 +42,7 @@ export default class DynamicElementWrapper extends Wrapper { ); } - render(block: Block, parent_node: Identifier, parent_nodes: Identifier) { - if (this.node.dynamic_tag_expr.dynamic_dependencies().length === 0) { - this.render_static_tag(block, parent_node, parent_nodes); - } else { - this.render_dynamic_tag(block, parent_node, parent_nodes); - } - } - - render_static_tag( - _block: Block, - parent_node: Identifier, - parent_nodes: Identifier - ) { - this.elementWrapper.render(this.dynamic_element_block, parent_node, parent_nodes); - } - - render_dynamic_tag( + render( block: Block, parent_node: Identifier, parent_nodes: Identifier diff --git a/src/compiler/compile/render_dom/wrappers/Element/index.ts b/src/compiler/compile/render_dom/wrappers/Element/index.ts index 62fab592d0..c2f32633c8 100644 --- a/src/compiler/compile/render_dom/wrappers/Element/index.ts +++ b/src/compiler/compile/render_dom/wrappers/Element/index.ts @@ -211,7 +211,7 @@ export default class ElementWrapper extends Wrapper { } }); - if (node.type === 'DynamicElement') { + if (node.dynamic_tag_expr) { block.add_dependencies(node.dynamic_tag_expr.dependencies); } diff --git a/src/compiler/compile/render_dom/wrappers/Fragment.ts b/src/compiler/compile/render_dom/wrappers/Fragment.ts index 519ed2adc8..134f51b18c 100644 --- a/src/compiler/compile/render_dom/wrappers/Fragment.ts +++ b/src/compiler/compile/render_dom/wrappers/Fragment.ts @@ -116,7 +116,13 @@ export default class FragmentWrapper { link(last_child, last_child = wrapper); } else { - const Wrapper = wrappers[child.type]; + const Wrapper = (function () { + if (child.type === 'DynamicElement' && child.dynamic_tag_expr.dynamic_dependencies().length === 0) { + return wrappers['Element']; + } else { + return wrappers[child.type]; + } + }()); if (!Wrapper) continue; const wrapper = new Wrapper(renderer, block, parent, child, strip_whitespace, last_child || next_sibling);