Skip to content

Commit af918b2

Browse files
committed
simplify some more
1 parent 8057475 commit af918b2

File tree

3 files changed

+21
-51
lines changed

3 files changed

+21
-51
lines changed

packages/svelte/src/compiler/phases/3-transform/client/visitors/RegularElement.js

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,14 @@ export function RegularElement(node, context) {
296296
continue;
297297
}
298298

299-
if (is_custom_element && name !== 'class' && name !== 'style') {
299+
if (name === 'class') {
300+
const is_svg = context.state.metadata.namespace === 'svg' || node.name === 'svg';
301+
const is_mathml = context.state.metadata.namespace === 'mathml';
302+
303+
build_set_class(node, node_id, attribute, class_directives, context, !is_svg && !is_mathml);
304+
} else if (name === 'style') {
305+
build_set_style(node_id, attribute, style_directives, context);
306+
} else if (is_custom_element) {
300307
build_custom_element_attribute_update_assignment(node_id, attribute, context);
301308
} else {
302309
build_element_attribute_update_assignment(
@@ -593,8 +600,6 @@ function build_element_attribute_update_assignment(
593600
) {
594601
const state = context.state;
595602
const name = get_attribute_name(element, attribute);
596-
const is_svg = context.state.metadata.namespace === 'svg' || element.name === 'svg';
597-
const is_mathml = context.state.metadata.namespace === 'mathml';
598603

599604
const is_autofocus = name === 'autofocus';
600605

@@ -619,21 +624,6 @@ function build_element_attribute_update_assignment(
619624
if (name === 'muted') {
620625
// Special case for Firefox who needs it set as a property in order to work
621626
update = b.stmt(b.assignment('=', b.member(node_id, b.id('muted')), value));
622-
} else if (name === 'class') {
623-
build_set_class(
624-
element,
625-
node_id,
626-
attribute,
627-
value,
628-
has_state,
629-
class_directives,
630-
context,
631-
!is_svg && !is_mathml
632-
);
633-
return; // TODO
634-
} else if (name === 'style') {
635-
build_set_style(node_id, value, has_state, style_directives, context);
636-
return; // TODO
637627
} else if (name === 'value') {
638628
update = b.stmt(b.call('$.set_value', node_id, value));
639629
} else if (name === 'checked') {

packages/svelte/src/compiler/phases/3-transform/client/visitors/SvelteElement.js

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -78,23 +78,7 @@ export function SvelteElement(node, context) {
7878
attributes[0].name.toLowerCase() === 'class' &&
7979
is_text_attribute(attributes[0])
8080
) {
81-
// special case when there only a class attribute, without call expression
82-
let { value, has_state } = build_attribute_value(
83-
attributes[0].value,
84-
context,
85-
(value, metadata) => (metadata.has_call ? get_expression_id(context.state, value) : value)
86-
);
87-
88-
build_set_class(
89-
node,
90-
element_id,
91-
attributes[0],
92-
value,
93-
has_state,
94-
class_directives,
95-
inner_context,
96-
false
97-
);
81+
build_set_class(node, element_id, attributes[0], class_directives, inner_context, false);
9882
} else if (attributes.length) {
9983
const attributes_id = b.id(context.state.scope.generate('attributes'));
10084

packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/element.js

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -156,23 +156,16 @@ export function get_attribute_name(element, attribute) {
156156
/**
157157
* @param {AST.RegularElement | AST.SvelteElement} element
158158
* @param {Identifier} node_id
159-
* @param {AST.Attribute | null} attribute
160-
* @param {Expression} value
161-
* @param {boolean} has_state
159+
* @param {AST.Attribute} attribute
162160
* @param {AST.ClassDirective[]} class_directives
163161
* @param {ComponentContext} context
164162
* @param {boolean} is_html
165163
*/
166-
export function build_set_class(
167-
element,
168-
node_id,
169-
attribute,
170-
value,
171-
has_state,
172-
class_directives,
173-
context,
174-
is_html
175-
) {
164+
export function build_set_class(element, node_id, attribute, class_directives, context, is_html) {
165+
let { value, has_state } = build_attribute_value(attribute.value, context, (value, metadata) =>
166+
metadata.has_call ? get_expression_id(context.state, value) : value
167+
);
168+
176169
if (attribute && attribute.metadata.needs_clsx) {
177170
value = b.call('$.clsx', value);
178171
}
@@ -237,12 +230,15 @@ export function build_set_class(
237230

238231
/**
239232
* @param {Identifier} node_id
240-
* @param {Expression} value
241-
* @param {boolean} has_state
233+
* @param {AST.Attribute} attribute
242234
* @param {AST.StyleDirective[]} style_directives
243235
* @param {ComponentContext} context
244236
*/
245-
export function build_set_style(node_id, value, has_state, style_directives, context) {
237+
export function build_set_style(node_id, attribute, style_directives, context) {
238+
let { value, has_state } = build_attribute_value(attribute.value, context, (value, metadata) =>
239+
metadata.has_call ? get_expression_id(context.state, value) : value
240+
);
241+
246242
/** @type {Identifier | undefined} */
247243
let previous_id;
248244
/** @type {ObjectExpression | Identifier | undefined} */

0 commit comments

Comments
 (0)