mirror of
https://github.com/meteor/meteor.git
synced 2026-05-02 03:01:46 -04:00
Add support for block comments in Spacebars
This commit is contained in:
@@ -32,6 +32,12 @@ Tinytest.add("spacebars - stache tags", function (test) {
|
|||||||
run('{{! asdf }}', {type: 'COMMENT', value: ' asdf '});
|
run('{{! asdf }}', {type: 'COMMENT', value: ' asdf '});
|
||||||
run('{{ ! asdf }}', {type: 'COMMENT', value: ' asdf '});
|
run('{{ ! asdf }}', {type: 'COMMENT', value: ' asdf '});
|
||||||
run('{{ ! asdf }asdf', "Unclosed");
|
run('{{ ! asdf }asdf', "Unclosed");
|
||||||
|
run('{{!-- asdf --}}', {type: 'BLOCKCOMMENT', value: ' asdf '});
|
||||||
|
run('{{ !-- asdf -- }}', {type: 'BLOCKCOMMENT', value: ' asdf '});
|
||||||
|
run('{{ !-- {{asdf}} -- }}', {type: 'BLOCKCOMMENT', value: ' {{asdf}} '});
|
||||||
|
run('{{ !-- {{as--df}} --}}', {type: 'BLOCKCOMMENT', value: ' {{as--df}} '});
|
||||||
|
run('{{ !-- asdf }asdf', "Unclosed");
|
||||||
|
run('{{ !-- asdf --}asdf', "Unclosed");
|
||||||
run('{{else}}', {type: 'ELSE'});
|
run('{{else}}', {type: 'ELSE'});
|
||||||
run('{{ else }}', {type: 'ELSE'});
|
run('{{ else }}', {type: 'ELSE'});
|
||||||
run('{{else x}}', "Expected");
|
run('{{else x}}', "Expected");
|
||||||
@@ -225,6 +231,9 @@ Tinytest.add("spacebars - parse", function (test) {
|
|||||||
test.equal(HTML.toJS(Spacebars.parse('{{!foo}}')), 'null');
|
test.equal(HTML.toJS(Spacebars.parse('{{!foo}}')), 'null');
|
||||||
test.equal(HTML.toJS(Spacebars.parse('x{{!foo}}y')), '"xy"');
|
test.equal(HTML.toJS(Spacebars.parse('x{{!foo}}y')), '"xy"');
|
||||||
|
|
||||||
|
test.equal(HTML.toJS(Spacebars.parse('{{!--foo--}}')), 'null');
|
||||||
|
test.equal(HTML.toJS(Spacebars.parse('x{{!--foo--}}y')), '"xy"');
|
||||||
|
|
||||||
test.equal(HTML.toJS(Spacebars.parse('{{#foo}}x{{/foo}}')),
|
test.equal(HTML.toJS(Spacebars.parse('{{#foo}}x{{/foo}}')),
|
||||||
'HTMLTools.Special({type: "BLOCKOPEN", path: ["foo"], content: "x"})');
|
'HTMLTools.Special({type: "BLOCKOPEN", path: ["foo"], content: "x"})');
|
||||||
|
|
||||||
@@ -254,7 +263,10 @@ Tinytest.add("spacebars - parse", function (test) {
|
|||||||
Spacebars.parse('<a {{> x}}></a>');
|
Spacebars.parse('<a {{> x}}></a>');
|
||||||
});
|
});
|
||||||
|
|
||||||
test.equal(HTML.toJS(Spacebars.parse('<a {{! x}} b=c{{! x}} {{! x}}></a>')),
|
test.equal(HTML.toJS(Spacebars.parse('<a {{! x--}} b=c{{! x}} {{! x}}></a>')),
|
||||||
|
'HTML.A({b: "c"})');
|
||||||
|
|
||||||
|
test.equal(HTML.toJS(Spacebars.parse('<a {{!-- x--}} b=c{{ !-- x --}} {{!-- x -- }}></a>')),
|
||||||
'HTML.A({b: "c"})');
|
'HTML.A({b: "c"})');
|
||||||
|
|
||||||
// currently, if there are only comments, the attribute is truthy. This is
|
// currently, if there are only comments, the attribute is truthy. This is
|
||||||
@@ -264,5 +276,9 @@ Tinytest.add("spacebars - parse", function (test) {
|
|||||||
'HTML.INPUT({selected: ""})');
|
'HTML.INPUT({selected: ""})');
|
||||||
test.equal(HTML.toJS(Spacebars.parse('<input selected={{!foo}}{{!bar}}>')),
|
test.equal(HTML.toJS(Spacebars.parse('<input selected={{!foo}}{{!bar}}>')),
|
||||||
'HTML.INPUT({selected: ""})');
|
'HTML.INPUT({selected: ""})');
|
||||||
|
test.equal(HTML.toJS(Spacebars.parse('<input selected={{!--foo--}}>')),
|
||||||
|
'HTML.INPUT({selected: ""})');
|
||||||
|
test.equal(HTML.toJS(Spacebars.parse('<input selected={{!--foo--}}{{!--bar--}}>')),
|
||||||
|
'HTML.INPUT({selected: ""})');
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ var starts = {
|
|||||||
ELSE: makeStacheTagStartRegex(/^\{\{\s*else(?=[\s}])/i),
|
ELSE: makeStacheTagStartRegex(/^\{\{\s*else(?=[\s}])/i),
|
||||||
DOUBLE: makeStacheTagStartRegex(/^\{\{\s*(?!\s)/),
|
DOUBLE: makeStacheTagStartRegex(/^\{\{\s*(?!\s)/),
|
||||||
TRIPLE: makeStacheTagStartRegex(/^\{\{\{\s*(?!\s)/),
|
TRIPLE: makeStacheTagStartRegex(/^\{\{\{\s*(?!\s)/),
|
||||||
|
BLOCKCOMMENT: makeStacheTagStartRegex(/^\{\{\s*!--/),
|
||||||
COMMENT: makeStacheTagStartRegex(/^\{\{\s*!/),
|
COMMENT: makeStacheTagStartRegex(/^\{\{\s*!/),
|
||||||
INCLUSION: makeStacheTagStartRegex(/^\{\{\s*>\s*(?!\s)/),
|
INCLUSION: makeStacheTagStartRegex(/^\{\{\s*>\s*(?!\s)/),
|
||||||
BLOCKOPEN: makeStacheTagStartRegex(/^\{\{\s*#\s*(?!\s)/),
|
BLOCKOPEN: makeStacheTagStartRegex(/^\{\{\s*#\s*(?!\s)/),
|
||||||
@@ -226,6 +227,7 @@ TemplateTag.parse = function (scannerOrString) {
|
|||||||
if (run(starts.ELSE)) type = 'ELSE';
|
if (run(starts.ELSE)) type = 'ELSE';
|
||||||
else if (run(starts.DOUBLE)) type = 'DOUBLE';
|
else if (run(starts.DOUBLE)) type = 'DOUBLE';
|
||||||
else if (run(starts.TRIPLE)) type = 'TRIPLE';
|
else if (run(starts.TRIPLE)) type = 'TRIPLE';
|
||||||
|
else if (run(starts.BLOCKCOMMENT)) type = 'BLOCKCOMMENT';
|
||||||
else if (run(starts.COMMENT)) type = 'COMMENT';
|
else if (run(starts.COMMENT)) type = 'COMMENT';
|
||||||
else if (run(starts.INCLUSION)) type = 'INCLUSION';
|
else if (run(starts.INCLUSION)) type = 'INCLUSION';
|
||||||
else if (run(starts.BLOCKOPEN)) type = 'BLOCKOPEN';
|
else if (run(starts.BLOCKOPEN)) type = 'BLOCKOPEN';
|
||||||
@@ -236,7 +238,12 @@ TemplateTag.parse = function (scannerOrString) {
|
|||||||
var tag = new TemplateTag;
|
var tag = new TemplateTag;
|
||||||
tag.type = type;
|
tag.type = type;
|
||||||
|
|
||||||
if (type === 'COMMENT') {
|
if (type === 'BLOCKCOMMENT') {
|
||||||
|
var result = run(/^[\s\S]*?--\s*?\}\}/);
|
||||||
|
if (! result)
|
||||||
|
error("Unclosed block comment");
|
||||||
|
tag.value = result.slice(0, result.lastIndexOf('--'));
|
||||||
|
} else if (type === 'COMMENT') {
|
||||||
var result = run(/^[\s\S]*?\}\}/);
|
var result = run(/^[\s\S]*?\}\}/);
|
||||||
if (! result)
|
if (! result)
|
||||||
error("Unclosed comment");
|
error("Unclosed comment");
|
||||||
@@ -320,6 +327,9 @@ TemplateTag.parseCompleteTag = function (scannerOrString, position) {
|
|||||||
if (! result)
|
if (! result)
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
|
if (result.type === 'BLOCKCOMMENT')
|
||||||
|
return null;
|
||||||
|
|
||||||
if (result.type === 'COMMENT')
|
if (result.type === 'COMMENT')
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
|
|||||||
@@ -676,3 +676,9 @@ Hi there!
|
|||||||
<button type="button">button</button>
|
<button type="button">button</button>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
<template name="spacebars_test_block_comment">
|
||||||
|
{{!-- foo --}}
|
||||||
|
{{!--
|
||||||
|
{{bar}}
|
||||||
|
--}}
|
||||||
|
</template>
|
||||||
|
|||||||
@@ -1877,3 +1877,11 @@ Tinytest.add(
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
Tinytest.add(
|
||||||
|
"spacebars - template - block comments should not be displayed",
|
||||||
|
function (test) {
|
||||||
|
var tmpl = Template.spacebars_test_block_comment;
|
||||||
|
var div = renderToDiv(tmpl);
|
||||||
|
test.equal(canonicalizeHtml(div.innerHTML), '');
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user