Skip to content

Commit

Permalink
Fix handlebars breaking when containing < operator (#1075)
Browse files Browse the repository at this point in the history
* Fix breaking the line after operator ? instead of before operator <

* Remove new line at the end of file

* Add test
  • Loading branch information
mmsqe authored and bitwiseman committed Dec 19, 2016
1 parent 18fd578 commit af53b44
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 3 deletions.
19 changes: 16 additions & 3 deletions js/lib/beautify-html.js
Expand Up @@ -276,9 +276,10 @@

this.get_content = function() { //function to capture regular content between tags
var input_char = '',
content = [];
content = [],
handlebarsStarted = 0;

while (this.input.charAt(this.pos) !== '<') {
while (this.input.charAt(this.pos) !== '<' || handlebarsStarted === 2) {
if (this.pos >= this.input.length) {
return content.length ? content.join('') : ['', 'TK_EOF'];
}
Expand All @@ -288,7 +289,20 @@
continue;
}

input_char = this.input.charAt(this.pos);

if (indent_handlebars) {
if (input_char === '{') {
handlebarsStarted += 1;
} else if (handlebarsStarted < 2) {
handlebarsStarted = 0;
}

if (input_char === '}' && handlebarsStarted > 0) {
if (handlebarsStarted-- === 0) {
break;
}
}
// Handlebars parsing is complicated.
// {{#foo}} and {{/foo}} are formatted tags.
// {{something}} should get treated as content, except:
Expand All @@ -306,7 +320,6 @@
}
}

input_char = this.input.charAt(this.pos);
this.pos++;
this.line_char_count++;
content.push(input_char); //letter at-a-time (or string) inserted to an array
Expand Down
7 changes: 7 additions & 0 deletions js/test/generated/beautify-html-tests.js
Expand Up @@ -496,6 +496,7 @@ function run_html_tests(test_obj, Urlencoded, js_beautify, html_beautify, css_be
test_fragment('<div class="{{#if thingIs \'value\'}}{{field}}{{/if}}"></div>');
test_fragment('<div class=\'{{#if thingIs "value"}}{{field}}{{/if}}\'></div>');
test_fragment('<div class=\'{{#if thingIs \'value\'}}{{field}}{{/if}}\'></div>');
test_fragment('<span>{{condition < 0 ? "result1" : "result2"}}</span>');

// Handlebars Indenting On - (content = "{{! comment}}")
reset_options();
Expand Down Expand Up @@ -552,6 +553,7 @@ function run_html_tests(test_obj, Urlencoded, js_beautify, html_beautify, css_be
test_fragment('<div class="{{#if thingIs \'value\'}}{{! comment}}{{/if}}"></div>');
test_fragment('<div class=\'{{#if thingIs "value"}}{{! comment}}{{/if}}\'></div>');
test_fragment('<div class=\'{{#if thingIs \'value\'}}{{! comment}}{{/if}}\'></div>');
test_fragment('<span>{{condition < 0 ? "result1" : "result2"}}</span>');

// Handlebars Indenting On - (content = "{{!-- comment--}}")
reset_options();
Expand Down Expand Up @@ -608,6 +610,7 @@ function run_html_tests(test_obj, Urlencoded, js_beautify, html_beautify, css_be
test_fragment('<div class="{{#if thingIs \'value\'}}{{!-- comment--}}{{/if}}"></div>');
test_fragment('<div class=\'{{#if thingIs "value"}}{{!-- comment--}}{{/if}}\'></div>');
test_fragment('<div class=\'{{#if thingIs \'value\'}}{{!-- comment--}}{{/if}}\'></div>');
test_fragment('<span>{{condition < 0 ? "result1" : "result2"}}</span>');

// Handlebars Indenting On - (content = "{pre{{field1}} {{field2}} {{field3}}post")
reset_options();
Expand Down Expand Up @@ -664,6 +667,7 @@ function run_html_tests(test_obj, Urlencoded, js_beautify, html_beautify, css_be
test_fragment('<div class="{{#if thingIs \'value\'}}{pre{{field1}} {{field2}} {{field3}}post{{/if}}"></div>');
test_fragment('<div class=\'{{#if thingIs "value"}}{pre{{field1}} {{field2}} {{field3}}post{{/if}}\'></div>');
test_fragment('<div class=\'{{#if thingIs \'value\'}}{pre{{field1}} {{field2}} {{field3}}post{{/if}}\'></div>');
test_fragment('<span>{{condition < 0 ? "result1" : "result2"}}</span>');

// Handlebars Indenting On - (content = "{{! \n mult-line\ncomment \n with spacing\n}}")
reset_options();
Expand Down Expand Up @@ -720,6 +724,7 @@ function run_html_tests(test_obj, Urlencoded, js_beautify, html_beautify, css_be
test_fragment('<div class="{{#if thingIs \'value\'}}{{! \n mult-line\ncomment \n with spacing\n}}{{/if}}"></div>');
test_fragment('<div class=\'{{#if thingIs "value"}}{{! \n mult-line\ncomment \n with spacing\n}}{{/if}}\'></div>');
test_fragment('<div class=\'{{#if thingIs \'value\'}}{{! \n mult-line\ncomment \n with spacing\n}}{{/if}}\'></div>');
test_fragment('<span>{{condition < 0 ? "result1" : "result2"}}</span>');

// Handlebars Indenting On - (content = "{{!-- \n mult-line\ncomment \n with spacing\n--}}")
reset_options();
Expand Down Expand Up @@ -776,6 +781,7 @@ function run_html_tests(test_obj, Urlencoded, js_beautify, html_beautify, css_be
test_fragment('<div class="{{#if thingIs \'value\'}}{{!-- \n mult-line\ncomment \n with spacing\n--}}{{/if}}"></div>');
test_fragment('<div class=\'{{#if thingIs "value"}}{{!-- \n mult-line\ncomment \n with spacing\n--}}{{/if}}\'></div>');
test_fragment('<div class=\'{{#if thingIs \'value\'}}{{!-- \n mult-line\ncomment \n with spacing\n--}}{{/if}}\'></div>');
test_fragment('<span>{{condition < 0 ? "result1" : "result2"}}</span>');

// Handlebars Indenting On - (content = "{{!-- \n mult-line\ncomment \n{{#> component}}\n mult-line\ncomment \n with spacing\n {{/ component}}--}}")
reset_options();
Expand Down Expand Up @@ -832,6 +838,7 @@ function run_html_tests(test_obj, Urlencoded, js_beautify, html_beautify, css_be
test_fragment('<div class="{{#if thingIs \'value\'}}{{!-- \n mult-line\ncomment \n{{#> component}}\n mult-line\ncomment \n with spacing\n {{/ component}}--}}{{/if}}"></div>');
test_fragment('<div class=\'{{#if thingIs "value"}}{{!-- \n mult-line\ncomment \n{{#> component}}\n mult-line\ncomment \n with spacing\n {{/ component}}--}}{{/if}}\'></div>');
test_fragment('<div class=\'{{#if thingIs \'value\'}}{{!-- \n mult-line\ncomment \n{{#> component}}\n mult-line\ncomment \n with spacing\n {{/ component}}--}}{{/if}}\'></div>');
test_fragment('<span>{{condition < 0 ? "result1" : "result2"}}</span>');


//============================================================
Expand Down
3 changes: 3 additions & 0 deletions test/data/html/tests.js
Expand Up @@ -667,6 +667,9 @@ exports.test_data = {
}, {
fragment: true,
unchanged: '<div class=\\\'{{#if thingIs \\\'value\\\'}}^^^&content$$${{/if}}\\\'></div>'
}, {
fragment: true,
unchanged: '<span>{{condition < 0 ? "result1" : "result2"}}</span>'
}
],
}, {
Expand Down

0 comments on commit af53b44

Please sign in to comment.