fix(glimmer): preserve leading/trailing spaces in text nodes undernea… (#4288)
* fix(glimmer): preserve leading/trailing spaces in text nodes underneath attribute nodes when next to mustache statements. * fix(glimmer): format printer-glimmer.js * fix(glimmer): lint fix * fix(glimmer): removed decomposition assignments to be compatible with Node 4 * fix(glimmer): Array.includes() -> indexOf() for Node 4master
parent
2ad7576d3a
commit
91c701886d
|
@ -193,7 +193,37 @@ function print(path, options, print) {
|
|||
return concat([n.key, "=", path.call(print, "value")]);
|
||||
}
|
||||
case "TextNode": {
|
||||
return n.chars.replace(/^\s+/, "").replace(/\s+$/, "");
|
||||
let leadingSpace = "";
|
||||
let trailingSpace = "";
|
||||
|
||||
// preserve a space inside of an attribute node where whitespace present, when next to mustache statement.
|
||||
const inAttrNode = path.stack.indexOf("attributes") >= 0;
|
||||
|
||||
if (inAttrNode) {
|
||||
const parentNode = path.getParentNode(0);
|
||||
const isConcat = parentNode.type === "ConcatStatement";
|
||||
if (isConcat) {
|
||||
const parts = parentNode.parts;
|
||||
const partIndex = parts.indexOf(n);
|
||||
if (partIndex > 0) {
|
||||
const partType = parts[partIndex - 1].type;
|
||||
const isMustache = partType === "MustacheStatement";
|
||||
if (isMustache) {
|
||||
leadingSpace = " ";
|
||||
}
|
||||
}
|
||||
if (partIndex < parts.length - 1) {
|
||||
const partType = parts[partIndex + 1].type;
|
||||
const isMustache = partType === "MustacheStatement";
|
||||
if (isMustache) {
|
||||
trailingSpace = " ";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return n.chars
|
||||
.replace(/^\s+/, leadingSpace)
|
||||
.replace(/\s+$/, trailingSpace);
|
||||
}
|
||||
case "MustacheCommentStatement": {
|
||||
const dashes = n.value.indexOf("}}") > -1 ? "--" : "";
|
||||
|
|
|
@ -118,21 +118,45 @@ exports[`concat-statement.hbs 1`] = `
|
|||
</div>
|
||||
|
||||
<a href="/{{url}}/{{url}}"></a>
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
<div class="hello{{if goodbye true}}">
|
||||
|
||||
<div class=" class-a{{myClass}}"></div>
|
||||
<div class=" class-b {{myClass}}"></div>
|
||||
<div class=" {{myClass}}class-c"></div>
|
||||
<div class=" {{myClass}} class-d"></div>
|
||||
<div class=" class-e{{myClass}} class-f"></div>
|
||||
<div class=" class-g{{myClass}}class-h "></div>
|
||||
<div class=" class-i {{myClass}}class-j"></div>
|
||||
<div class="class-k {{myClass}} class-l"></div>
|
||||
<div class=" class-m {{myClass}} class-n {{myClass}}class-o "></div>
|
||||
<div class=" class-p class-q"></div>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
<div class="hello {{if goodbye true}}">
|
||||
Hello
|
||||
</div>
|
||||
<div
|
||||
class="hello
|
||||
{{if goodbye true}}
|
||||
|
||||
{{if goodbye false}}
|
||||
|
||||
{{if goodbye true}}
|
||||
|
||||
{{if goodbye false}}
|
||||
|
||||
{{if goodbye true}}"
|
||||
>
|
||||
Hello
|
||||
</div>
|
||||
<a href="/{{url}}/{{url}}"></a>
|
||||
<div class="class-a{{myClass}}"></div>
|
||||
<div class="class-b {{myClass}}"></div>
|
||||
<div class="{{myClass}}class-c"></div>
|
||||
<div class="{{myClass}} class-d"></div>
|
||||
<div class="class-e{{myClass}} class-f"></div>
|
||||
<div class="class-g{{myClass}}class-h"></div>
|
||||
<div class="class-i {{myClass}}class-j"></div>
|
||||
<div class="class-k {{myClass}} class-l"></div>
|
||||
<div class="class-m {{myClass}} class-n {{myClass}}class-o"></div>
|
||||
<div class="class-p class-q"></div>
|
||||
`;
|
||||
|
||||
exports[`element-modifier-statement.hbs 1`] = `
|
||||
|
|
|
@ -7,3 +7,14 @@
|
|||
</div>
|
||||
|
||||
<a href="/{{url}}/{{url}}"></a>
|
||||
|
||||
<div class=" class-a{{myClass}}"></div>
|
||||
<div class=" class-b {{myClass}}"></div>
|
||||
<div class=" {{myClass}}class-c"></div>
|
||||
<div class=" {{myClass}} class-d"></div>
|
||||
<div class=" class-e{{myClass}} class-f"></div>
|
||||
<div class=" class-g{{myClass}}class-h "></div>
|
||||
<div class=" class-i {{myClass}}class-j"></div>
|
||||
<div class="class-k {{myClass}} class-l"></div>
|
||||
<div class=" class-m {{myClass}} class-n {{myClass}}class-o "></div>
|
||||
<div class=" class-p class-q"></div>
|
Loading…
Reference in New Issue