mirror of https://github.com/sveltejs/svelte
fix: spreading style is not consistent with attribute (#15323)
* style must be set via set_attribute * test * changeset * add empty string and null in test * explanatory comment * this is now redundant, set_attribute takes care of it * drive-by * tweak changeset --------- Co-authored-by: Rich Harris <rich.harris@vercel.com>pull/15453/head
parent
1efad3f6e2
commit
2f685c1dba
@ -0,0 +1,5 @@
|
||||
---
|
||||
'svelte': patch
|
||||
---
|
||||
|
||||
fix: always use `setAttribute` when setting `style`
|
@ -0,0 +1,64 @@
|
||||
import { flushSync } from 'svelte';
|
||||
import { test } from '../../test';
|
||||
|
||||
const style_1 = 'invalid-key:0; margin:4px;;color: green ;color:blue ';
|
||||
const style_2 = ' other-key : 0 ; padding:2px; COLOR:green; color: blue';
|
||||
|
||||
// https://github.com/sveltejs/svelte/issues/15309
|
||||
export default test({
|
||||
props: {
|
||||
style: style_1
|
||||
},
|
||||
|
||||
html: `
|
||||
<div style="${style_1}"></div>
|
||||
<div style="${style_1}"></div>
|
||||
|
||||
<custom-element style="${style_1}"></custom-element>
|
||||
<custom-element style="${style_1}"></custom-element>
|
||||
`,
|
||||
|
||||
async test({ assert, target, component }) {
|
||||
component.style = style_2;
|
||||
flushSync();
|
||||
|
||||
assert.htmlEqual(
|
||||
target.innerHTML,
|
||||
`
|
||||
<div style="${style_2}"></div>
|
||||
<div style="${style_2}"></div>
|
||||
|
||||
<custom-element style="${style_2}"></custom-element>
|
||||
<custom-element style="${style_2}"></custom-element>
|
||||
`
|
||||
);
|
||||
|
||||
component.style = '';
|
||||
flushSync();
|
||||
|
||||
assert.htmlEqual(
|
||||
target.innerHTML,
|
||||
`
|
||||
<div style=""></div>
|
||||
<div style=""></div>
|
||||
|
||||
<custom-element style=""></custom-element>
|
||||
<custom-element style=""></custom-element>
|
||||
`
|
||||
);
|
||||
|
||||
component.style = null;
|
||||
flushSync();
|
||||
|
||||
assert.htmlEqual(
|
||||
target.innerHTML,
|
||||
`
|
||||
<div></div>
|
||||
<div></div>
|
||||
|
||||
<custom-element></custom-element>
|
||||
<custom-element></custom-element>
|
||||
`
|
||||
);
|
||||
}
|
||||
});
|
@ -0,0 +1,9 @@
|
||||
<script>
|
||||
let { style } = $props();
|
||||
</script>
|
||||
|
||||
<div {style}></div>
|
||||
<div {...{style}}></div>
|
||||
|
||||
<custom-element {style}></custom-element>
|
||||
<custom-element {...{style}}></custom-element>
|
Loading…
Reference in new issue