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