mirror of https://github.com/sveltejs/svelte
[fix]: keep space in `<pre>` or when `preserveWhitespace: true` (#6990)
Fixes #6437 Fixes #4731 Closes #4737 Whitespace is now untouched inside <pre> tag and other tags if preserveWhitespace is truepull/7217/head
parent
587f94eb65
commit
7463d51301
@ -0,0 +1,57 @@
|
|||||||
|
export default {
|
||||||
|
test({ assert, target }) {
|
||||||
|
// Test for <pre> tag
|
||||||
|
const elementPre = target.querySelector('#pre');
|
||||||
|
// Test for non <pre> tag
|
||||||
|
const elementDiv = target.querySelector('#div');
|
||||||
|
// Test for <pre> tag in non <pre> tag
|
||||||
|
const elementDivWithPre = target.querySelector('#div-with-pre');
|
||||||
|
|
||||||
|
// There is a slight difference in innerHTML because there is a difference in HTML optimization (in jsdom)
|
||||||
|
// depending on how the innerHTML is set.
|
||||||
|
// (There is no difference in the display.)
|
||||||
|
// Reassign innerHTML to add the same optimizations to innerHTML.
|
||||||
|
|
||||||
|
// eslint-disable-next-line no-self-assign
|
||||||
|
elementPre.innerHTML = elementPre.innerHTML;
|
||||||
|
// eslint-disable-next-line no-self-assign
|
||||||
|
elementDiv.innerHTML = elementDiv.innerHTML;
|
||||||
|
// eslint-disable-next-line no-self-assign
|
||||||
|
elementDivWithPre.innerHTML = elementDivWithPre.innerHTML;
|
||||||
|
|
||||||
|
assert.equal(
|
||||||
|
elementPre.innerHTML,
|
||||||
|
`
|
||||||
|
A
|
||||||
|
B
|
||||||
|
<span>
|
||||||
|
C
|
||||||
|
D
|
||||||
|
</span>
|
||||||
|
E
|
||||||
|
F
|
||||||
|
`
|
||||||
|
);
|
||||||
|
assert.equal(
|
||||||
|
elementDiv.innerHTML,
|
||||||
|
`A
|
||||||
|
B
|
||||||
|
<span>C
|
||||||
|
D</span>
|
||||||
|
E
|
||||||
|
F`
|
||||||
|
);
|
||||||
|
assert.equal(
|
||||||
|
elementDivWithPre.innerHTML,
|
||||||
|
`<pre> A
|
||||||
|
B
|
||||||
|
<span>
|
||||||
|
C
|
||||||
|
D
|
||||||
|
</span>
|
||||||
|
E
|
||||||
|
F
|
||||||
|
</pre>`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
};
|
@ -0,0 +1,34 @@
|
|||||||
|
<pre id="pre">
|
||||||
|
A
|
||||||
|
B
|
||||||
|
<span>
|
||||||
|
C
|
||||||
|
D
|
||||||
|
</span>
|
||||||
|
E
|
||||||
|
F
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<div id="div">
|
||||||
|
A
|
||||||
|
B
|
||||||
|
<span>
|
||||||
|
C
|
||||||
|
D
|
||||||
|
</span>
|
||||||
|
E
|
||||||
|
F
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="div-with-pre">
|
||||||
|
<pre>
|
||||||
|
A
|
||||||
|
B
|
||||||
|
<span>
|
||||||
|
C
|
||||||
|
D
|
||||||
|
</span>
|
||||||
|
E
|
||||||
|
F
|
||||||
|
</pre>
|
||||||
|
</div>
|
@ -0,0 +1,66 @@
|
|||||||
|
export default {
|
||||||
|
compileOptions: {
|
||||||
|
preserveWhitespace: true
|
||||||
|
},
|
||||||
|
test({ assert, target }) {
|
||||||
|
// Test for <pre> tag
|
||||||
|
const elementPre = target.querySelector('#pre');
|
||||||
|
// Test for non <pre> tag
|
||||||
|
const elementDiv = target.querySelector('#div');
|
||||||
|
// Test for <pre> tag in non <pre> tag
|
||||||
|
const elementDivWithPre = target.querySelector('#div-with-pre');
|
||||||
|
|
||||||
|
// There is a slight difference in innerHTML because there is a difference in HTML optimization (in jsdom)
|
||||||
|
// depending on how the innerHTML is set.
|
||||||
|
// (There is no difference in the display.)
|
||||||
|
// Reassign innerHTML to add the same optimizations to innerHTML.
|
||||||
|
|
||||||
|
// eslint-disable-next-line no-self-assign
|
||||||
|
elementPre.innerHTML = elementPre.innerHTML;
|
||||||
|
// eslint-disable-next-line no-self-assign
|
||||||
|
elementDiv.innerHTML = elementDiv.innerHTML;
|
||||||
|
// eslint-disable-next-line no-self-assign
|
||||||
|
elementDivWithPre.innerHTML = elementDivWithPre.innerHTML;
|
||||||
|
|
||||||
|
assert.equal(
|
||||||
|
elementPre.innerHTML,
|
||||||
|
`
|
||||||
|
A
|
||||||
|
B
|
||||||
|
<span>
|
||||||
|
C
|
||||||
|
D
|
||||||
|
</span>
|
||||||
|
E
|
||||||
|
F
|
||||||
|
`
|
||||||
|
);
|
||||||
|
assert.equal(
|
||||||
|
elementDiv.innerHTML,
|
||||||
|
`
|
||||||
|
A
|
||||||
|
B
|
||||||
|
<span>
|
||||||
|
C
|
||||||
|
D
|
||||||
|
</span>
|
||||||
|
E
|
||||||
|
F
|
||||||
|
`
|
||||||
|
);
|
||||||
|
assert.equal(
|
||||||
|
elementDivWithPre.innerHTML,
|
||||||
|
`
|
||||||
|
<pre> A
|
||||||
|
B
|
||||||
|
<span>
|
||||||
|
C
|
||||||
|
D
|
||||||
|
</span>
|
||||||
|
E
|
||||||
|
F
|
||||||
|
</pre>
|
||||||
|
`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
};
|
@ -0,0 +1,34 @@
|
|||||||
|
<pre id="pre">
|
||||||
|
A
|
||||||
|
B
|
||||||
|
<span>
|
||||||
|
C
|
||||||
|
D
|
||||||
|
</span>
|
||||||
|
E
|
||||||
|
F
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<div id="div">
|
||||||
|
A
|
||||||
|
B
|
||||||
|
<span>
|
||||||
|
C
|
||||||
|
D
|
||||||
|
</span>
|
||||||
|
E
|
||||||
|
F
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="div-with-pre">
|
||||||
|
<pre>
|
||||||
|
A
|
||||||
|
B
|
||||||
|
<span>
|
||||||
|
C
|
||||||
|
D
|
||||||
|
</span>
|
||||||
|
E
|
||||||
|
F
|
||||||
|
</pre>
|
||||||
|
</div>
|
@ -0,0 +1,3 @@
|
|||||||
|
export default {
|
||||||
|
withoutNormalizeHtml: true
|
||||||
|
};
|
@ -0,0 +1,30 @@
|
|||||||
|
<pre>
|
||||||
|
A
|
||||||
|
B
|
||||||
|
<span>
|
||||||
|
C
|
||||||
|
D
|
||||||
|
</span>
|
||||||
|
E
|
||||||
|
F
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<div>A
|
||||||
|
B
|
||||||
|
<span>C
|
||||||
|
D
|
||||||
|
</span>
|
||||||
|
E
|
||||||
|
F
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div><pre>
|
||||||
|
A
|
||||||
|
B
|
||||||
|
<span>
|
||||||
|
C
|
||||||
|
D
|
||||||
|
</span>
|
||||||
|
E
|
||||||
|
F
|
||||||
|
</pre></div>
|
@ -0,0 +1,34 @@
|
|||||||
|
<pre>
|
||||||
|
A
|
||||||
|
B
|
||||||
|
<span>
|
||||||
|
C
|
||||||
|
D
|
||||||
|
</span>
|
||||||
|
E
|
||||||
|
F
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
A
|
||||||
|
B
|
||||||
|
<span>
|
||||||
|
C
|
||||||
|
D
|
||||||
|
</span>
|
||||||
|
E
|
||||||
|
F
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<pre>
|
||||||
|
A
|
||||||
|
B
|
||||||
|
<span>
|
||||||
|
C
|
||||||
|
D
|
||||||
|
</span>
|
||||||
|
E
|
||||||
|
F
|
||||||
|
</pre>
|
||||||
|
</div>
|
@ -0,0 +1,6 @@
|
|||||||
|
export default {
|
||||||
|
withoutNormalizeHtml: true,
|
||||||
|
compileOptions: {
|
||||||
|
preserveWhitespace: true
|
||||||
|
}
|
||||||
|
};
|
@ -0,0 +1,34 @@
|
|||||||
|
<pre>
|
||||||
|
A
|
||||||
|
B
|
||||||
|
<span>
|
||||||
|
C
|
||||||
|
D
|
||||||
|
</span>
|
||||||
|
E
|
||||||
|
F
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
A
|
||||||
|
B
|
||||||
|
<span>
|
||||||
|
C
|
||||||
|
D
|
||||||
|
</span>
|
||||||
|
E
|
||||||
|
F
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<pre>
|
||||||
|
A
|
||||||
|
B
|
||||||
|
<span>
|
||||||
|
C
|
||||||
|
D
|
||||||
|
</span>
|
||||||
|
E
|
||||||
|
F
|
||||||
|
</pre>
|
||||||
|
</div>
|
@ -0,0 +1,34 @@
|
|||||||
|
<pre>
|
||||||
|
A
|
||||||
|
B
|
||||||
|
<span>
|
||||||
|
C
|
||||||
|
D
|
||||||
|
</span>
|
||||||
|
E
|
||||||
|
F
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
A
|
||||||
|
B
|
||||||
|
<span>
|
||||||
|
C
|
||||||
|
D
|
||||||
|
</span>
|
||||||
|
E
|
||||||
|
F
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<pre>
|
||||||
|
A
|
||||||
|
B
|
||||||
|
<span>
|
||||||
|
C
|
||||||
|
D
|
||||||
|
</span>
|
||||||
|
E
|
||||||
|
F
|
||||||
|
</pre>
|
||||||
|
</div>
|
Loading…
Reference in new issue