1- import { is_void } from '../../../utils/names' ;
21import {
32 get_attribute_value ,
43 get_class_attribute_value
@@ -11,6 +10,7 @@ import ElementHandler from './Element';
1110import { x } from 'code-red' ;
1211import Expression from '../../nodes/shared/Expression' ;
1312import remove_whitespace_children from './utils/remove_whitespace_children' ;
13+ import Element from '../../nodes/Element' ;
1414
1515export default function (
1616 node : DynamicElement ,
@@ -19,19 +19,20 @@ export default function (
1919 slot_scopes : Map < any , any > ;
2020 }
2121) {
22- if ( typeof node . tag . node === 'string' ) {
23- node . name = node . tag . node ;
24- ElementHandler ( node as any , renderer , options ) ;
22+ const dependencies = node . tag . dynamic_dependencies ( ) ;
23+
24+ if ( dependencies . length === 0 ) {
25+ ( ( node as unknown ) as Element ) . dynamic_tag = node . tag ;
26+ ElementHandler ( ( node as unknown ) as Element , renderer , options ) ;
2527 } else {
2628 const children = remove_whitespace_children ( node . children , node . next ) ;
2729
2830 // awkward special case
2931 let node_contents ;
3032
31- const contenteditable =
32- node . name !== 'textarea' &&
33- node . name !== 'input' &&
34- node . attributes . some ( ( attribute ) => attribute . name === 'contenteditable' ) ;
33+ const contenteditable = node . attributes . some (
34+ ( attribute ) => attribute . name === 'contenteditable'
35+ ) ;
3536
3637 const slot = node . get_static_attribute_value ( 'slot' ) ;
3738 const nearest_inline_component = node . find_nearest ( / I n l i n e C o m p o n e n t / ) ;
@@ -63,9 +64,7 @@ export default function (
6364 args . push ( attribute . expression . node ) ;
6465 } else {
6566 const name = attribute . name . toLowerCase ( ) ;
66- if ( name === 'value' && node . name . toLowerCase ( ) === 'textarea' ) {
67- node_contents = get_attribute_value ( attribute ) ;
68- } else if ( attribute . is_true ) {
67+ if ( attribute . is_true ) {
6968 args . push ( x `{ ${ attribute . name } : true }` ) ;
7069 } else if (
7170 boolean_attributes . has ( name ) &&
@@ -91,9 +90,7 @@ export default function (
9190 let add_class_attribute = ! ! class_expression ;
9291 node . attributes . forEach ( ( attribute ) => {
9392 const name = attribute . name . toLowerCase ( ) ;
94- if ( name === 'value' && node . name . toLowerCase ( ) === 'textarea' ) {
95- node_contents = get_attribute_value ( attribute ) ;
96- } else if ( attribute . is_true ) {
93+ if ( attribute . is_true ) {
9794 renderer . add_string ( ` ${ attribute . name } ` ) ;
9895 } else if (
9996 boolean_attributes . has ( name ) &&
@@ -160,9 +157,6 @@ export default function (
160157
161158 // TODO where was this used?
162159 // value = name === 'textContent' ? x`@escape($$value)` : x`$$value`;
163- } else if ( binding . name === 'value' && node . name === 'textarea' ) {
164- const snippet = expression . node ;
165- node_contents = x `${ snippet } || ""` ;
166160 } else {
167161 const snippet = expression . node ;
168162 renderer . add_expression ( x `@add_attribute("${ name } ", ${ snippet } , 1)` ) ;
@@ -188,19 +182,15 @@ export default function (
188182 renderer . add_expression ( node_contents ) ;
189183 }
190184
191- if ( ! is_void ( node . name ) ) {
192- renderer . add_string ( '</' ) ;
193- renderer . add_expression ( node . tag . node ) ;
194- renderer . add_string ( '>' ) ;
195- }
185+ renderer . add_string ( '</' ) ;
186+ renderer . add_expression ( node . tag . node ) ;
187+ renderer . add_string ( '>' ) ;
196188 } else if ( slot && nearest_inline_component ) {
197189 renderer . render ( children , options ) ;
198190
199- if ( ! is_void ( node . name ) ) {
200- renderer . add_string ( '</' ) ;
201- renderer . add_expression ( node . tag . node ) ;
202- renderer . add_string ( '>' ) ;
203- }
191+ renderer . add_string ( '</' ) ;
192+ renderer . add_expression ( node . tag . node ) ;
193+ renderer . add_string ( '>' ) ;
204194
205195 const lets = node . lets ;
206196 const seen = new Set ( lets . map ( ( l ) => l . name . name ) ) ;
@@ -216,11 +206,9 @@ export default function (
216206 } else {
217207 renderer . render ( children , options ) ;
218208
219- if ( ! is_void ( node . name ) ) {
220- renderer . add_string ( '</' ) ;
221- renderer . add_expression ( node . tag . node ) ;
222- renderer . add_string ( '>' ) ;
223- }
209+ renderer . add_string ( '</' ) ;
210+ renderer . add_expression ( node . tag . node ) ;
211+ renderer . add_string ( '>' ) ;
224212 }
225213 }
226214}
0 commit comments