Skip to content

Commit

Permalink
(fix) style directive with multiple values (#1632)
Browse files Browse the repository at this point in the history
  • Loading branch information
dummdidumm committed Sep 13, 2022
1 parent 4ea7edb commit 7ee04e5
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 19 deletions.
4 changes: 2 additions & 2 deletions packages/svelte2tsx/src/htmlxtojsx_v2/nodes/MustacheTag.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ import { BaseNode } from '../../interfaces';
* {a} --> a;
*/
export function handleMustacheTag(str: MagicString, node: BaseNode, parent: BaseNode) {
if (parent.type === 'Attribute') {
// handles inside Attribute.ts
if (parent.type === 'Attribute' || parent.type === 'StyleDirective') {
// handled inside Attribute.ts / StyleDirective.ts
return;
}
str.overwrite(node.start, node.start + 1, '', { contentOnly: true });
Expand Down
24 changes: 11 additions & 13 deletions packages/svelte2tsx/src/htmlxtojsx_v2/nodes/StyleDirective.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,24 +24,18 @@ export function handleStyleDirective(
return;
}

let start = style.value[0].start;
if (style.value[0].type === 'MustacheTag') {
start++;
}
const last = style.value[style.value.length - 1];
let end = last.end;
if (last.type === 'MustacheTag') {
end--;
}

if (style.value.length > 1) {
// We have multiple attribute values, so we build a template string out of them.
for (const n of style.value) {
if (n.type === 'MustacheTag') {
str.appendRight(n.start, '$');
}
}
element.appendToStartEnd([ensureType + '`', [start, end], '`);']);
element.appendToStartEnd([
ensureType + '`',
[style.value[0].start, style.value[style.value.length - 1].end],
'`);'
]);
return;
}

Expand All @@ -50,9 +44,13 @@ export function handleStyleDirective(
const quote = ['"', "'"].includes(str.original[styleVal.start - 1])
? str.original[styleVal.start - 1]
: '"';
element.appendToStartEnd([`${ensureType}${quote}`, [start, end], `${quote});`]);
element.appendToStartEnd([
`${ensureType}${quote}`,
[styleVal.start, styleVal.end],
`${quote});`
]);
} else {
// MustacheTag
element.appendToStartEnd([ensureType, [start, end], ');']);
element.appendToStartEnd([ensureType, [styleVal.start + 1, styleVal.end - 1], ');']);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@
{ svelteHTML.createElement("div", { });__sveltets_2_ensureType(String, Number, value); }
{ svelteHTML.createElement("div", { });__sveltets_2_ensureType(String, Number, " "); }
{ svelteHTML.createElement("div", { });__sveltets_2_ensureType(String, Number, " "); }
{ svelteHTML.createElement("div", { });__sveltets_2_ensureType(String, Number, ` $mixed`); }
{ svelteHTML.createElement("div", { });__sveltets_2_ensureType(String, Number, ` $mixed`); }
{ svelteHTML.createElement("div", { });__sveltets_2_ensureType(String, Number, `mixed; `); }
{ svelteHTML.createElement("div", { });__sveltets_2_ensureType(String, Number, ` $mixed; `); }
{ svelteHTML.createElement("div", { });__sveltets_2_ensureType(String, Number, ` ${mixed}`); }
{ svelteHTML.createElement("div", { });__sveltets_2_ensureType(String, Number, ` ${mixed}`); }
{ svelteHTML.createElement("div", { });__sveltets_2_ensureType(String, Number, `${mixed} `); }
{ svelteHTML.createElement("div", { });__sveltets_2_ensureType(String, Number, ` ${mixed} `); }
{ svelteHTML.createElement("div", { });__sveltets_2_ensureType(String, Number, `template${literal}`); }

{ svelteHTML.createElement("div", { });__sveltets_2_ensureType(String, Number, shorthand);}

0 comments on commit 7ee04e5

Please sign in to comment.