Handlebars unless and else if

Fixed #800
Fixes #1123
This commit is contained in:
Liam Newman 2018-08-11 18:31:04 -07:00
parent 59b416666f
commit 9a53aba300
3 changed files with 352 additions and 3 deletions

View File

@ -229,11 +229,11 @@ function Beautifier(html_source, options, js_beautify, css_beautify) {
return parser_token;
};
this.indent_to_tag = function(tag) {
this.indent_to_tag = function(tag_list) {
var temp_parent = this.tags;
while (temp_parent) { //till we reach '' (the initial value);
if (temp_parent.tag === tag) { //if this is it use it
if (tag_list.indexOf(temp_parent.tag) !== -1) { //if this is it use it
break;
}
temp_parent = temp_parent.parent;
@ -297,7 +297,7 @@ function Beautifier(html_source, options, js_beautify, css_beautify) {
parser_token.type = 'TK_TAG_SINGLE';
parser_token.is_closing_tag = true;
} else if (indent_handlebars && tag_start_char === '{' && tag_check === 'else') {
this.indent_to_tag('if');
this.indent_to_tag(['if', 'unless']);
parser_token.type = 'TK_TAG_HANDLEBARS_ELSE';
this.indent_content = true;
} else if (indent_handlebars && tag_start_char === '{' && (/[^#\^\/]/.test(raw_token.text.charAt(2)))) {

View File

@ -1074,6 +1074,26 @@ function run_html_tests(test_obj, Urlencoded, js_beautify, html_beautify, css_be
'{{em-input label="Some Labe" property="amt" type="text" placeholder=""}}\n' +
'{{em-input label="Type*" property="type" type="text" placeholder="(LTD)"}}\n' +
'{{em-input label="Place*" property="place" type="text" placeholder=""}}');
bth(
'{{#if callOn}}\n' +
'{{#unless callOn}}\n' +
' {{translate "onText"}}\n' +
' {{else}}\n' +
'{{translate "offText"}}\n' +
'{{/unless callOn}}\n' +
' {{else if (eq callOn false)}}\n' +
'{{translate "offText"}}\n' +
' {{/if}}',
// -- output --
'{{#if callOn}}\n' +
'{{#unless callOn}}\n' +
'{{translate "onText"}}\n' +
'{{else}}\n' +
'{{translate "offText"}}\n' +
'{{/unless callOn}}\n' +
'{{else if (eq callOn false)}}\n' +
'{{translate "offText"}}\n' +
'{{/if}}');
//============================================================
@ -1240,6 +1260,28 @@ function run_html_tests(test_obj, Urlencoded, js_beautify, html_beautify, css_be
'{{else}}\n' +
' {{field}}\n' +
'{{/if}}');
// ISSUE #800 and #1123: else if and #unless
bth(
'{{#if callOn}}\n' +
'{{#unless callOn}}\n' +
' {{field}}\n' +
' {{else}}\n' +
'{{translate "offText"}}\n' +
'{{/unless callOn}}\n' +
' {{else if (eq callOn false)}}\n' +
'{{field}}\n' +
' {{/if}}',
// -- output --
'{{#if callOn}}\n' +
' {{#unless callOn}}\n' +
' {{field}}\n' +
' {{else}}\n' +
' {{translate "offText"}}\n' +
' {{/unless callOn}}\n' +
'{{else if (eq callOn false)}}\n' +
' {{field}}\n' +
'{{/if}}');
test_fragment(
'<div{{someStyle}}></div>',
// -- output --
@ -1428,6 +1470,28 @@ function run_html_tests(test_obj, Urlencoded, js_beautify, html_beautify, css_be
'{{else}}\n' +
' {{em-input label="Some Labe" property="amt" type="text" placeholder=""}}\n' +
'{{/if}}');
// ISSUE #800 and #1123: else if and #unless
bth(
'{{#if callOn}}\n' +
'{{#unless callOn}}\n' +
' {{em-input label="Some Labe" property="amt" type="text" placeholder=""}}\n' +
' {{else}}\n' +
'{{translate "offText"}}\n' +
'{{/unless callOn}}\n' +
' {{else if (eq callOn false)}}\n' +
'{{em-input label="Some Labe" property="amt" type="text" placeholder=""}}\n' +
' {{/if}}',
// -- output --
'{{#if callOn}}\n' +
' {{#unless callOn}}\n' +
' {{em-input label="Some Labe" property="amt" type="text" placeholder=""}}\n' +
' {{else}}\n' +
' {{translate "offText"}}\n' +
' {{/unless callOn}}\n' +
'{{else if (eq callOn false)}}\n' +
' {{em-input label="Some Labe" property="amt" type="text" placeholder=""}}\n' +
'{{/if}}');
test_fragment(
'<div{{someStyle}}></div>',
// -- output --
@ -1616,6 +1680,28 @@ function run_html_tests(test_obj, Urlencoded, js_beautify, html_beautify, css_be
'{{else}}\n' +
' {{! comment}}\n' +
'{{/if}}');
// ISSUE #800 and #1123: else if and #unless
bth(
'{{#if callOn}}\n' +
'{{#unless callOn}}\n' +
' {{! comment}}\n' +
' {{else}}\n' +
'{{translate "offText"}}\n' +
'{{/unless callOn}}\n' +
' {{else if (eq callOn false)}}\n' +
'{{! comment}}\n' +
' {{/if}}',
// -- output --
'{{#if callOn}}\n' +
' {{#unless callOn}}\n' +
' {{! comment}}\n' +
' {{else}}\n' +
' {{translate "offText"}}\n' +
' {{/unless callOn}}\n' +
'{{else if (eq callOn false)}}\n' +
' {{! comment}}\n' +
'{{/if}}');
test_fragment(
'<div{{someStyle}}></div>',
// -- output --
@ -1804,6 +1890,28 @@ function run_html_tests(test_obj, Urlencoded, js_beautify, html_beautify, css_be
'{{else}}\n' +
' {{!-- comment--}}\n' +
'{{/if}}');
// ISSUE #800 and #1123: else if and #unless
bth(
'{{#if callOn}}\n' +
'{{#unless callOn}}\n' +
' {{!-- comment--}}\n' +
' {{else}}\n' +
'{{translate "offText"}}\n' +
'{{/unless callOn}}\n' +
' {{else if (eq callOn false)}}\n' +
'{{!-- comment--}}\n' +
' {{/if}}',
// -- output --
'{{#if callOn}}\n' +
' {{#unless callOn}}\n' +
' {{!-- comment--}}\n' +
' {{else}}\n' +
' {{translate "offText"}}\n' +
' {{/unless callOn}}\n' +
'{{else if (eq callOn false)}}\n' +
' {{!-- comment--}}\n' +
'{{/if}}');
test_fragment(
'<div{{someStyle}}></div>',
// -- output --
@ -1992,6 +2100,28 @@ function run_html_tests(test_obj, Urlencoded, js_beautify, html_beautify, css_be
'{{else}}\n' +
' {{Hello "woRld"}} {{!-- comment--}} {{heLloWorlD}}\n' +
'{{/if}}');
// ISSUE #800 and #1123: else if and #unless
bth(
'{{#if callOn}}\n' +
'{{#unless callOn}}\n' +
' {{Hello "woRld"}} {{!-- comment--}} {{heLloWorlD}}\n' +
' {{else}}\n' +
'{{translate "offText"}}\n' +
'{{/unless callOn}}\n' +
' {{else if (eq callOn false)}}\n' +
'{{Hello "woRld"}} {{!-- comment--}} {{heLloWorlD}}\n' +
' {{/if}}',
// -- output --
'{{#if callOn}}\n' +
' {{#unless callOn}}\n' +
' {{Hello "woRld"}} {{!-- comment--}} {{heLloWorlD}}\n' +
' {{else}}\n' +
' {{translate "offText"}}\n' +
' {{/unless callOn}}\n' +
'{{else if (eq callOn false)}}\n' +
' {{Hello "woRld"}} {{!-- comment--}} {{heLloWorlD}}\n' +
'{{/if}}');
test_fragment(
'<div{{someStyle}}></div>',
// -- output --
@ -2180,6 +2310,28 @@ function run_html_tests(test_obj, Urlencoded, js_beautify, html_beautify, css_be
'{{else}}\n' +
' {pre{{field1}} {{field2}} {{field3}}post\n' +
'{{/if}}');
// ISSUE #800 and #1123: else if and #unless
bth(
'{{#if callOn}}\n' +
'{{#unless callOn}}\n' +
' {pre{{field1}} {{field2}} {{field3}}post\n' +
' {{else}}\n' +
'{{translate "offText"}}\n' +
'{{/unless callOn}}\n' +
' {{else if (eq callOn false)}}\n' +
'{pre{{field1}} {{field2}} {{field3}}post\n' +
' {{/if}}',
// -- output --
'{{#if callOn}}\n' +
' {{#unless callOn}}\n' +
' {pre{{field1}} {{field2}} {{field3}}post\n' +
' {{else}}\n' +
' {{translate "offText"}}\n' +
' {{/unless callOn}}\n' +
'{{else if (eq callOn false)}}\n' +
' {pre{{field1}} {{field2}} {{field3}}post\n' +
'{{/if}}');
test_fragment(
'<div{{someStyle}}></div>',
// -- output --
@ -2445,6 +2597,44 @@ function run_html_tests(test_obj, Urlencoded, js_beautify, html_beautify, css_be
' with spacing\n' +
'}}\n' +
'{{/if}}');
// ISSUE #800 and #1123: else if and #unless
bth(
'{{#if callOn}}\n' +
'{{#unless callOn}}\n' +
' {{! \n' +
' mult-line\n' +
'comment \n' +
' with spacing\n' +
'}}\n' +
' {{else}}\n' +
'{{translate "offText"}}\n' +
'{{/unless callOn}}\n' +
' {{else if (eq callOn false)}}\n' +
'{{! \n' +
' mult-line\n' +
'comment \n' +
' with spacing\n' +
'}}\n' +
' {{/if}}',
// -- output --
'{{#if callOn}}\n' +
' {{#unless callOn}}\n' +
' {{! \n' +
' mult-line\n' +
'comment \n' +
' with spacing\n' +
'}}\n' +
' {{else}}\n' +
' {{translate "offText"}}\n' +
' {{/unless callOn}}\n' +
'{{else if (eq callOn false)}}\n' +
' {{! \n' +
' mult-line\n' +
'comment \n' +
' with spacing\n' +
'}}\n' +
'{{/if}}');
test_fragment(
'<div{{someStyle}}></div>',
// -- output --
@ -2772,6 +2962,44 @@ function run_html_tests(test_obj, Urlencoded, js_beautify, html_beautify, css_be
' with spacing\n' +
'--}}\n' +
'{{/if}}');
// ISSUE #800 and #1123: else if and #unless
bth(
'{{#if callOn}}\n' +
'{{#unless callOn}}\n' +
' {{!-- \n' +
' mult-line\n' +
'comment \n' +
' with spacing\n' +
'--}}\n' +
' {{else}}\n' +
'{{translate "offText"}}\n' +
'{{/unless callOn}}\n' +
' {{else if (eq callOn false)}}\n' +
'{{!-- \n' +
' mult-line\n' +
'comment \n' +
' with spacing\n' +
'--}}\n' +
' {{/if}}',
// -- output --
'{{#if callOn}}\n' +
' {{#unless callOn}}\n' +
' {{!-- \n' +
' mult-line\n' +
'comment \n' +
' with spacing\n' +
'--}}\n' +
' {{else}}\n' +
' {{translate "offText"}}\n' +
' {{/unless callOn}}\n' +
'{{else if (eq callOn false)}}\n' +
' {{!-- \n' +
' mult-line\n' +
'comment \n' +
' with spacing\n' +
'--}}\n' +
'{{/if}}');
test_fragment(
'<div{{someStyle}}></div>',
// -- output --
@ -3156,6 +3384,56 @@ function run_html_tests(test_obj, Urlencoded, js_beautify, html_beautify, css_be
' with spacing\n' +
' {{/ component}}--}}\n' +
'{{/if}}');
// ISSUE #800 and #1123: else if and #unless
bth(
'{{#if callOn}}\n' +
'{{#unless callOn}}\n' +
' {{!-- \n' +
' mult-line\n' +
'comment \n' +
'{{#> component}}\n' +
' mult-line\n' +
'comment \n' +
' with spacing\n' +
' {{/ component}}--}}\n' +
' {{else}}\n' +
'{{translate "offText"}}\n' +
'{{/unless callOn}}\n' +
' {{else if (eq callOn false)}}\n' +
'{{!-- \n' +
' mult-line\n' +
'comment \n' +
'{{#> component}}\n' +
' mult-line\n' +
'comment \n' +
' with spacing\n' +
' {{/ component}}--}}\n' +
' {{/if}}',
// -- output --
'{{#if callOn}}\n' +
' {{#unless callOn}}\n' +
' {{!-- \n' +
' mult-line\n' +
'comment \n' +
'{{#> component}}\n' +
' mult-line\n' +
'comment \n' +
' with spacing\n' +
' {{/ component}}--}}\n' +
' {{else}}\n' +
' {{translate "offText"}}\n' +
' {{/unless callOn}}\n' +
'{{else if (eq callOn false)}}\n' +
' {{!-- \n' +
' mult-line\n' +
'comment \n' +
'{{#> component}}\n' +
' mult-line\n' +
'comment \n' +
' with spacing\n' +
' {{/ component}}--}}\n' +
'{{/if}}');
test_fragment(
'<div{{someStyle}}></div>',
// -- output --
@ -3449,6 +3727,28 @@ function run_html_tests(test_obj, Urlencoded, js_beautify, html_beautify, css_be
'{{else}}\n' +
' content\n' +
'{{/if}}');
// ISSUE #800 and #1123: else if and #unless
bth(
'{{#if callOn}}\n' +
'{{#unless callOn}}\n' +
' content\n' +
' {{else}}\n' +
'{{translate "offText"}}\n' +
'{{/unless callOn}}\n' +
' {{else if (eq callOn false)}}\n' +
'content\n' +
' {{/if}}',
// -- output --
'{{#if callOn}}\n' +
' {{#unless callOn}}\n' +
' content\n' +
' {{else}}\n' +
' {{translate "offText"}}\n' +
' {{/unless callOn}}\n' +
'{{else if (eq callOn false)}}\n' +
' content\n' +
'{{/if}}');
test_fragment(
'<div{{someStyle}}></div>',
// -- output --

View File

@ -569,6 +569,30 @@ exports.test_data = {
'{{em-input label="Type*" property="type" type="text" placeholder="(LTD)"}}',
'{{em-input label="Place*" property="place" type="text" placeholder=""}}'
]
},
{
input_: [
'{{#if callOn}}',
'{{#unless callOn}}',
' {{translate "onText"}}',
' {{else}}',
'{{translate "offText"}}',
'{{/unless callOn}}',
' {{else if (eq callOn false)}}',
'{{translate "offText"}}',
' {{/if}}'
],
output: [
'{{#if callOn}}',
'{{#unless callOn}}',
'{{translate "onText"}}',
'{{else}}',
'{{translate "offText"}}',
'{{/unless callOn}}',
'{{else if (eq callOn false)}}',
'{{translate "offText"}}',
'{{/if}}'
]
}
]
}, {
@ -816,6 +840,31 @@ exports.test_data = {
' ^^^&content$$$\n' +
'{{/if}}'
},
{
comment: 'ISSUE #800 and #1123: else if and #unless',
input_: [
'{{#if callOn}}',
'{{#unless callOn}}',
' ^^^&content$$$',
' {{else}}',
'{{translate "offText"}}',
'{{/unless callOn}}',
' {{else if (eq callOn false)}}',
'^^^&content$$$',
' {{/if}}'
],
output: [
'{{#if callOn}}',
' {{#unless callOn}}',
' ^^^&content$$$',
' {{else}}',
' {{translate "offText"}}',
' {{/unless callOn}}',
'{{else if (eq callOn false)}}',
' ^^^&content$$$',
'{{/if}}'
]
},
// Test {{}} inside of <> tags, which should be separated by spaces
// for readability, unless they are inside a string.
{