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