mirror of
https://github.com/marko-js/marko.git
synced 2025-12-08 19:26:05 +00:00
Fixes #345 - Whitespace preservation should apply to all nested nodes
This commit is contained in:
parent
d433ac25aa
commit
7ff286d5d5
@ -189,9 +189,15 @@ class Generator {
|
|||||||
beforeAfterEvent = new GeneratorEvent(node, this);
|
beforeAfterEvent = new GeneratorEvent(node, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var isWhitespacePreserved = node.isPreserveWhitespace();
|
||||||
|
|
||||||
if (beforeAfterEvent) {
|
if (beforeAfterEvent) {
|
||||||
beforeAfterEvent.isBefore = true;
|
beforeAfterEvent.isBefore = true;
|
||||||
beforeAfterEvent.node.emit('beforeGenerateCode', beforeAfterEvent);
|
beforeAfterEvent.node.emit('beforeGenerateCode', beforeAfterEvent);
|
||||||
|
|
||||||
|
if (isWhitespacePreserved) {
|
||||||
|
this.context.beginPreserveWhitespace();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (node.getCodeGenerator) {
|
if (node.getCodeGenerator) {
|
||||||
@ -268,6 +274,10 @@ class Generator {
|
|||||||
if (beforeAfterEvent) {
|
if (beforeAfterEvent) {
|
||||||
beforeAfterEvent.isBefore = false;
|
beforeAfterEvent.isBefore = false;
|
||||||
beforeAfterEvent.node.emit('afterGenerateCode', beforeAfterEvent);
|
beforeAfterEvent.node.emit('afterGenerateCode', beforeAfterEvent);
|
||||||
|
|
||||||
|
if (isWhitespacePreserved) {
|
||||||
|
this.context.endPreserveWhitespace();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this._currentNode = oldCurrentNode;
|
this._currentNode = oldCurrentNode;
|
||||||
|
|||||||
@ -14,6 +14,8 @@ var macros = require('./util/macros');
|
|||||||
var extend = require('raptor-util/extend');
|
var extend = require('raptor-util/extend');
|
||||||
var Walker = require('./Walker');
|
var Walker = require('./Walker');
|
||||||
|
|
||||||
|
const FLAG_PRESERVE_WHITESPACE = 'PRESERVE_WHITESPACE';
|
||||||
|
|
||||||
const deresolveOptions = {
|
const deresolveOptions = {
|
||||||
shouldRemoveExt(ext) {
|
shouldRemoveExt(ext) {
|
||||||
return ext === '.js' || ext === '.json' || ext === '.es6';
|
return ext === '.js' || ext === '.json' || ext === '.es6';
|
||||||
@ -392,8 +394,18 @@ class CompileContext {
|
|||||||
this._preserveWhitespace = preserveWhitespace;
|
this._preserveWhitespace = preserveWhitespace;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
beginPreserveWhitespace() {
|
||||||
|
this.pushFlag(FLAG_PRESERVE_WHITESPACE);
|
||||||
|
}
|
||||||
|
|
||||||
|
endPreserveWhitespace() {
|
||||||
|
this.popFlag(FLAG_PRESERVE_WHITESPACE);
|
||||||
|
}
|
||||||
|
|
||||||
isPreserveWhitespace() {
|
isPreserveWhitespace() {
|
||||||
return this._preserveWhitespace === true;
|
if (this.isFlagSet(FLAG_PRESERVE_WHITESPACE) || this._preserveWhitespace === true) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
setPreserveComments(preserveComments) {
|
setPreserveComments(preserveComments) {
|
||||||
|
|||||||
@ -1 +1,3 @@
|
|||||||
<script><DIV>FOO</DIV></script>
|
<script>
|
||||||
|
<DIV>FOO</DIV>
|
||||||
|
</script>
|
||||||
3
test/autotests/render/whitespace-pre-code/expected.html
Normal file
3
test/autotests/render/whitespace-pre-code/expected.html
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
<pre><code>// Hello World
|
||||||
|
|
||||||
|
console.log('Hello World!');</code></pre>
|
||||||
3
test/autotests/render/whitespace-pre-code/template.marko
Normal file
3
test/autotests/render/whitespace-pre-code/template.marko
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
<pre><code>// Hello World
|
||||||
|
|
||||||
|
console.log('Hello World!');</code></pre>
|
||||||
3
test/autotests/render/whitespace-pre-code/test.js
Normal file
3
test/autotests/render/whitespace-pre-code/test.js
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
exports.templateData = {
|
||||||
|
"name": "World"
|
||||||
|
};
|
||||||
Loading…
x
Reference in New Issue
Block a user