Lint and format src/compiler/compile/render_ssr/handlers/shared/get_attribute_value.js

pull/8569/head
Simon Holthausen 3 years ago
parent 1f8215f474
commit 64e1509d27

@ -8,9 +8,16 @@ import { regex_double_quotes } from '../../../../utils/patterns.js';
*/
export function get_class_attribute_value(attribute) {
// handle special case — `class={possiblyUndefined}` with scoped CSS
if (attribute.chunks.length === 2 && ( /** @type {import('../../../nodes/Text.js').default} */(attribute.chunks[1])).synthetic) {
const value = ( /** @type {import('../../../nodes/shared/Expression.js').default} */(attribute.chunks[0])).node;
return x `@escape(@null_to_empty(${value}), true) + "${( /** @type {import('../../../nodes/Text.js').default} */(attribute.chunks[1])).data}"`;
if (
attribute.chunks.length === 2 &&
/** @type {import('../../../nodes/Text.js').default} */ (attribute.chunks[1]).synthetic
) {
const value = /** @type {import('../../../nodes/shared/Expression.js').default} */ (
attribute.chunks[0]
).node;
return x`@escape(@null_to_empty(${value}), true) + "${
/** @type {import('../../../nodes/Text.js').default} */ (attribute.chunks[1]).data
}"`;
}
return get_attribute_value(attribute);
}
@ -20,20 +27,22 @@ export function get_class_attribute_value(attribute) {
* @returns {import("C:/repos/svelte/svelte/node_modules/.pnpm/@types+estree@1.0.0/node_modules/@types/estree/index").Expression}
*/
export function get_attribute_value(attribute) {
if (attribute.chunks.length === 0)
return x `""`;
if (attribute.chunks.length === 0) return x`""`;
/**
* For value attribute of textarea, it will render as child node of `<textarea>` element.
* Therefore, we need to escape as content (not attribute).
*/
const is_textarea_value = attribute.parent.name.toLowerCase() === 'textarea' && attribute.name.toLowerCase() === 'value';
const is_textarea_value =
attribute.parent.name.toLowerCase() === 'textarea' && attribute.name.toLowerCase() === 'value';
return attribute.chunks
.map((chunk) => {
return chunk.type === 'Text'
? ( /** @type {ESTreeExpression} */(string_literal(chunk.data.replace(regex_double_quotes, '&quot;'))))
: x `@escape(${chunk.node}, ${is_textarea_value ? 'false' : 'true'})`;
? /** @type {ESTreeExpression} */ (
string_literal(chunk.data.replace(regex_double_quotes, '&quot;'))
)
: x`@escape(${chunk.node}, ${is_textarea_value ? 'false' : 'true'})`;
})
.reduce((lhs, rhs) => x `${lhs} + ${rhs}`);
.reduce((lhs, rhs) => x`${lhs} + ${rhs}`);
}
/**
@ -42,11 +51,10 @@ export function get_attribute_value(attribute) {
*/
export function get_attribute_expression(attribute) {
if (attribute.chunks.length === 1 && attribute.chunks[0].type === 'Expression') {
return /** @type {ESTreeExpression} */ (( /** @type {import('../../../nodes/shared/Expression.js').default} */(attribute.chunks[0])).node);
return /** @type {ESTreeExpression} */ (
/** @type {import('../../../nodes/shared/Expression.js').default} */ (attribute.chunks[0])
.node
);
}
return get_attribute_value(attribute);
}

Loading…
Cancel
Save