1
- import { is_void } from '../../../utils/names' ;
2
1
import {
3
2
get_attribute_value ,
4
3
get_class_attribute_value
@@ -11,6 +10,7 @@ import ElementHandler from './Element';
11
10
import { x } from 'code-red' ;
12
11
import Expression from '../../nodes/shared/Expression' ;
13
12
import remove_whitespace_children from './utils/remove_whitespace_children' ;
13
+ import Element from '../../nodes/Element' ;
14
14
15
15
export default function (
16
16
node : DynamicElement ,
@@ -19,19 +19,20 @@ export default function (
19
19
slot_scopes : Map < any , any > ;
20
20
}
21
21
) {
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 ) ;
25
27
} else {
26
28
const children = remove_whitespace_children ( node . children , node . next ) ;
27
29
28
30
// awkward special case
29
31
let node_contents ;
30
32
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
+ ) ;
35
36
36
37
const slot = node . get_static_attribute_value ( 'slot' ) ;
37
38
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 (
63
64
args . push ( attribute . expression . node ) ;
64
65
} else {
65
66
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 ) {
69
68
args . push ( x `{ ${ attribute . name } : true }` ) ;
70
69
} else if (
71
70
boolean_attributes . has ( name ) &&
@@ -91,9 +90,7 @@ export default function (
91
90
let add_class_attribute = ! ! class_expression ;
92
91
node . attributes . forEach ( ( attribute ) => {
93
92
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 ) {
97
94
renderer . add_string ( ` ${ attribute . name } ` ) ;
98
95
} else if (
99
96
boolean_attributes . has ( name ) &&
@@ -160,9 +157,6 @@ export default function (
160
157
161
158
// TODO where was this used?
162
159
// 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 } || ""` ;
166
160
} else {
167
161
const snippet = expression . node ;
168
162
renderer . add_expression ( x `@add_attribute("${ name } ", ${ snippet } , 1)` ) ;
@@ -188,19 +182,15 @@ export default function (
188
182
renderer . add_expression ( node_contents ) ;
189
183
}
190
184
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 ( '>' ) ;
196
188
} else if ( slot && nearest_inline_component ) {
197
189
renderer . render ( children , options ) ;
198
190
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 ( '>' ) ;
204
194
205
195
const lets = node . lets ;
206
196
const seen = new Set ( lets . map ( ( l ) => l . name . name ) ) ;
@@ -216,11 +206,9 @@ export default function (
216
206
} else {
217
207
renderer . render ( children , options ) ;
218
208
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 ( '>' ) ;
224
212
}
225
213
}
226
214
}
0 commit comments