From 266e15fa9cee4ce918752f1be5bd1f097a91c4da Mon Sep 17 00:00:00 2001 From: Patrick Steele-Idem Date: Mon, 1 Feb 2016 16:37:13 -0700 Subject: [PATCH] Fixes #211 - Marko v3: Support concise (Jade-like) syntax --- compiler/HtmlJsParser.js | 90 ++++++++++--------- compiler/Parser.js | 10 ++- package.json | 2 +- .../nested-handlers/expected.html | 1 - .../nested-handlers/template.marko | 29 ------ .../body-placeholder-literal/template.marko | 2 +- .../body-placeholder-literal2/template.marko | 4 +- .../autotest/comments-remove/template.marko | 2 +- .../template.marko | 2 + .../autotest/div-self-closed/expected.html | 1 + .../autotest/div-self-closed/template.marko | 1 + .../render/autotest/div-self-closed/test.js | 1 + .../render/autotest/dtd/expected.html | 1 + .../render/autotest/dtd/template.marko | 1 + test/fixtures/render/autotest/dtd/test.js | 1 + .../render/autotest/entities/template.marko | 2 +- .../error-invalid-attr/template.marko | 2 +- .../template.marko | 2 +- .../autotest/global-data/template.marko | 2 +- .../autotest/hello-dynamic/template.marko | 2 +- .../autotest/hello-static/template.marko | 2 +- .../fixtures/render/autotest/if/expected.html | 1 + .../render/autotest/if/template.marko | 3 + test/fixtures/render/autotest/if/test.js | 1 + .../layout-use-data-attrs/template.marko | 4 +- .../autotest/layout-use-data/template.marko | 4 +- .../template.marko | 4 +- .../render/autotest/require/template.marko | 4 +- .../autotest/tabs-tab-new/expected.html | 1 + .../autotest/tabs-tab-new/template.marko | 15 ++++ .../tabs-tab-new}/test.js | 0 .../render/autotest/tabs-tab/expected.html | 1 + .../render/autotest/tabs-tab/template.marko | 15 ++++ .../fixtures/render/autotest/tabs-tab/test.js | 3 + .../expected.html | 2 +- .../autotest/text-replacement/template.marko | 4 +- .../autotest/unless-else/template.marko | 2 + .../render/autotest/var-scoped/template.marko | 4 +- .../whitespace-inline-elements/expected.html | 2 +- .../whitespace-inline-elements/template.marko | 14 +-- .../render/autotest/whitespace/template.marko | 11 +-- .../scanned-tags/scanned-b/template.marko | 4 +- .../scanned-tags/scanned-d/template.marko | 4 +- .../scanned-tags/test-tab-new/marko-tag.json | 6 ++ .../scanned-tags/test-tab-new/renderer.js | 4 + .../scanned-tags/test-tab/marko-tag.json | 6 ++ .../taglib/scanned-tags/test-tab/renderer.js | 4 + .../scanned-tags/test-tabs-new/marko-tag.json | 3 + .../scanned-tags/test-tabs-new/renderer.js | 33 +++++++ .../scanned-tags/test-tabs-new/template.marko | 16 ++++ .../scanned-tags/test-tabs/marko-tag.json | 3 + .../taglib/scanned-tags/test-tabs/renderer.js | 31 +++++++ .../scanned-tags/test-tabs/template.marko | 16 ++++ .../template.marko | 4 +- .../test-template-as-tag/template.marko | 4 +- 55 files changed, 280 insertions(+), 113 deletions(-) delete mode 100644 test/fixtures/render/autotest-pending/nested-handlers/expected.html delete mode 100644 test/fixtures/render/autotest-pending/nested-handlers/template.marko create mode 100644 test/fixtures/render/autotest/div-self-closed/expected.html create mode 100644 test/fixtures/render/autotest/div-self-closed/template.marko create mode 100644 test/fixtures/render/autotest/div-self-closed/test.js create mode 100644 test/fixtures/render/autotest/dtd/expected.html create mode 100644 test/fixtures/render/autotest/dtd/template.marko create mode 100644 test/fixtures/render/autotest/dtd/test.js create mode 100644 test/fixtures/render/autotest/if/expected.html create mode 100644 test/fixtures/render/autotest/if/template.marko create mode 100644 test/fixtures/render/autotest/if/test.js create mode 100644 test/fixtures/render/autotest/tabs-tab-new/expected.html create mode 100644 test/fixtures/render/autotest/tabs-tab-new/template.marko rename test/fixtures/render/{autotest-pending/nested-handlers => autotest/tabs-tab-new}/test.js (100%) create mode 100644 test/fixtures/render/autotest/tabs-tab/expected.html create mode 100644 test/fixtures/render/autotest/tabs-tab/template.marko create mode 100644 test/fixtures/render/autotest/tabs-tab/test.js create mode 100644 test/fixtures/taglib/scanned-tags/test-tab-new/marko-tag.json create mode 100644 test/fixtures/taglib/scanned-tags/test-tab-new/renderer.js create mode 100644 test/fixtures/taglib/scanned-tags/test-tab/marko-tag.json create mode 100644 test/fixtures/taglib/scanned-tags/test-tab/renderer.js create mode 100644 test/fixtures/taglib/scanned-tags/test-tabs-new/marko-tag.json create mode 100644 test/fixtures/taglib/scanned-tags/test-tabs-new/renderer.js create mode 100644 test/fixtures/taglib/scanned-tags/test-tabs-new/template.marko create mode 100644 test/fixtures/taglib/scanned-tags/test-tabs/marko-tag.json create mode 100644 test/fixtures/taglib/scanned-tags/test-tabs/renderer.js create mode 100644 test/fixtures/taglib/scanned-tags/test-tabs/template.marko diff --git a/compiler/HtmlJsParser.js b/compiler/HtmlJsParser.js index 4ea035c24..20f9ad9a5 100644 --- a/compiler/HtmlJsParser.js +++ b/compiler/HtmlJsParser.js @@ -4,71 +4,75 @@ var htmljs = require('htmljs-parser'); class HtmlJsParser { parse(src, handlers) { var listeners = { - ontext(event) { - handlers.handleCharacters(event.text); + onText(event) { + handlers.handleCharacters(event.value); }, - oncontentplaceholder(event) { - // placeholder within content - handlers.handleBodyTextPlaceholder(event.expression, event.escape); - }, - - onnestedcontentplaceholder(event) { - // placeholder within string that is within content placeholder - }, - - onattributeplaceholder(event) { - // placeholder within attribute - if (event.escape) { - event.expression = '$escapeXml(' + event.expression + ')'; + onPlaceholder(event) { + if (event.withinBody) { + if (!event.withinString) { + handlers.handleBodyTextPlaceholder(event.value, event.escape); + } + } else if (event.withinOpenTag) { + // Don't escape placeholder for dynamic attributes. For example:
} else { - event.expression = '$noEscapeXml(' + event.expression + ')'; + // placeholder within attribute + if (event.escape) { + event.value = '$escapeXml(' + event.value + ')'; + } else { + event.value = '$noEscapeXml(' + event.value + ')'; + } + } + // placeholder within content + + }, + + onCDATA(event) { + handlers.handleCharacters(event.value); + }, + + onOpenTag(event, parser) { + event.selfClosed = false; // Don't allow self-closed tags + handlers.handleStartElement(event); + + var newParserState = handlers.getParserStateForTag(event); + if (newParserState) { + if (newParserState === 'parsed-text') { + parser.enterParsedTextContentState(); + } else if (newParserState === 'static-text') { + parser.enterStaticTextContentState(); + } } }, - oncdata(event) { - handlers.handleCharacters(event.text); - }, - - onopentag(event) { - handlers.handleStartElement(event); - }, - - onclosetag(event) { + onCloseTag(event) { var tagName = event.tagName; handlers.handleEndElement(tagName); }, - ondtd(event) { - // DTD (e.g. ) - handlers.handleCharacters(event.dtd); + onDocumentType(event) { + + // Document type: "" + handlers.handleCharacters(''); }, - ondeclaration(event) { + onDeclaration(event) { // Declaration (e.g. ) - handlers.handleCharacters(event.declaration); + handlers.handleCharacters(''); }, - oncomment(event) { + onComment(event) { // Text within XML comment - handlers.handleComment(event.comment); + handlers.handleComment(event.value); }, - onerror(event) { + onError(event) { handlers.handleError(event); } }; - var options = { - parserStateProvider(event) { - if (event.type === 'opentag') { - return handlers.getParserStateForTag(event); - } - } - }; - - var parser = this.parser = htmljs.createParser(listeners, options); - + var parser = this.parser = htmljs.createParser(listeners); parser.parse(src); } } diff --git a/compiler/Parser.js b/compiler/Parser.js index 9ba014f01..80c1a0b86 100644 --- a/compiler/Parser.js +++ b/compiler/Parser.js @@ -64,7 +64,6 @@ class Parser { } else { var escape = false; this.prevTextNode = builder.text(builder.literal(text), escape); - this.prevTextNode.pos = text.pos; this.parentNode.appendChild(this.prevTextNode); } } @@ -77,6 +76,10 @@ class Parser { var attributes = el.attributes; var argument = el.argument; // e.g. For , argument will be "color in colors" + if (argument) { + argument = argument.value; + } + if (tagName === 'compiler-options') { attributes.forEach(function (attr) { let attrName = attr.name; @@ -117,11 +120,12 @@ class Parser { name: attr.name, value: isLiteral ? builder.literal(attr.literalValue) : - attr.expression == null ? undefined : builder.parseExpression(attr.expression) + attr.value == null ? undefined : builder.parseExpression(attr.value) }; if (attr.argument) { - attrDef.argument = attr.argument; + // TODO Do something with the argument pos + attrDef.argument = attr.argument.value; } return attrDef; diff --git a/package.json b/package.json index a38488be4..c2b463600 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "char-props": "~0.1.5", "esprima": "^2.7.0", "events": "^1.0.2", - "htmljs-parser": "^1.0.6", + "htmljs-parser": "^1.3.0", "jsonminify": "^0.2.3", "minimatch": "^0.2.14", "property-handlers": "^1.0.0", diff --git a/test/fixtures/render/autotest-pending/nested-handlers/expected.html b/test/fixtures/render/autotest-pending/nested-handlers/expected.html deleted file mode 100644 index 1ac2c90a8..000000000 --- a/test/fixtures/render/autotest-pending/nested-handlers/expected.html +++ /dev/null @@ -1 +0,0 @@ -
Tab 1 content
Tab 2 content
Tab 1 content
Tab 2 content
\ No newline at end of file diff --git a/test/fixtures/render/autotest-pending/nested-handlers/template.marko b/test/fixtures/render/autotest-pending/nested-handlers/template.marko deleted file mode 100644 index 29f1bda78..000000000 --- a/test/fixtures/render/autotest-pending/nested-handlers/template.marko +++ /dev/null @@ -1,29 +0,0 @@ - - - - - Tab 1 content - - - - Tab 2 content - - - - Tab 3 content - - - - - - Tab 1 content - - - - Tab 2 content - - - - Tab 3 content - - \ No newline at end of file diff --git a/test/fixtures/render/autotest/body-placeholder-literal/template.marko b/test/fixtures/render/autotest/body-placeholder-literal/template.marko index b3b2fd5d9..d80e71e5e 100644 --- a/test/fixtures/render/autotest/body-placeholder-literal/template.marko +++ b/test/fixtures/render/autotest/body-placeholder-literal/template.marko @@ -1 +1 @@ -A ${'B'} C \ No newline at end of file +- A ${'B'} C \ No newline at end of file diff --git a/test/fixtures/render/autotest/body-placeholder-literal2/template.marko b/test/fixtures/render/autotest/body-placeholder-literal2/template.marko index 8d914287e..8bf75fc00 100644 --- a/test/fixtures/render/autotest/body-placeholder-literal2/template.marko +++ b/test/fixtures/render/autotest/body-placeholder-literal2/template.marko @@ -1 +1,3 @@ - A ${'B'} C \ No newline at end of file +--- + A ${'B'} C +--- \ No newline at end of file diff --git a/test/fixtures/render/autotest/comments-remove/template.marko b/test/fixtures/render/autotest/comments-remove/template.marko index dea7d3e4d..995319beb 100644 --- a/test/fixtures/render/autotest/comments-remove/template.marko +++ b/test/fixtures/render/autotest/comments-remove/template.marko @@ -1,3 +1,3 @@ -Hello World! +- Hello World! \ No newline at end of file diff --git a/test/fixtures/render/autotest/compiler-option-preserve-whitespace/template.marko b/test/fixtures/render/autotest/compiler-option-preserve-whitespace/template.marko index 22ef22120..54fcf26ca 100644 --- a/test/fixtures/render/autotest/compiler-option-preserve-whitespace/template.marko +++ b/test/fixtures/render/autotest/compiler-option-preserve-whitespace/template.marko @@ -1,4 +1,6 @@ +--- A B C +--- \ No newline at end of file diff --git a/test/fixtures/render/autotest/div-self-closed/expected.html b/test/fixtures/render/autotest/div-self-closed/expected.html new file mode 100644 index 000000000..99ed594ea --- /dev/null +++ b/test/fixtures/render/autotest/div-self-closed/expected.html @@ -0,0 +1 @@ +
\ No newline at end of file diff --git a/test/fixtures/render/autotest/div-self-closed/template.marko b/test/fixtures/render/autotest/div-self-closed/template.marko new file mode 100644 index 000000000..f82d79e45 --- /dev/null +++ b/test/fixtures/render/autotest/div-self-closed/template.marko @@ -0,0 +1 @@ +
\ No newline at end of file diff --git a/test/fixtures/render/autotest/div-self-closed/test.js b/test/fixtures/render/autotest/div-self-closed/test.js new file mode 100644 index 000000000..c4013b344 --- /dev/null +++ b/test/fixtures/render/autotest/div-self-closed/test.js @@ -0,0 +1 @@ +exports.templateData = {}; diff --git a/test/fixtures/render/autotest/dtd/expected.html b/test/fixtures/render/autotest/dtd/expected.html new file mode 100644 index 000000000..5b0af7d1b --- /dev/null +++ b/test/fixtures/render/autotest/dtd/expected.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/test/fixtures/render/autotest/dtd/template.marko b/test/fixtures/render/autotest/dtd/template.marko new file mode 100644 index 000000000..5b0af7d1b --- /dev/null +++ b/test/fixtures/render/autotest/dtd/template.marko @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/test/fixtures/render/autotest/dtd/test.js b/test/fixtures/render/autotest/dtd/test.js new file mode 100644 index 000000000..c4013b344 --- /dev/null +++ b/test/fixtures/render/autotest/dtd/test.js @@ -0,0 +1 @@ +exports.templateData = {}; diff --git a/test/fixtures/render/autotest/entities/template.marko b/test/fixtures/render/autotest/entities/template.marko index 651f2f12b..06b3c1283 100644 --- a/test/fixtures/render/autotest/entities/template.marko +++ b/test/fixtures/render/autotest/entities/template.marko @@ -1,4 +1,4 @@
"> Hello <John>© ]]>
-© \ No newline at end of file +- © \ No newline at end of file diff --git a/test/fixtures/render/autotest/error-invalid-attr/template.marko b/test/fixtures/render/autotest/error-invalid-attr/template.marko index e99a833ff..0a3ea4ae4 100644 --- a/test/fixtures/render/autotest/error-invalid-attr/template.marko +++ b/test/fixtures/render/autotest/error-invalid-attr/template.marko @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/test/fixtures/render/autotest/error-missing-required-attr/template.marko b/test/fixtures/render/autotest/error-missing-required-attr/template.marko index 0146dd95c..05d436300 100644 --- a/test/fixtures/render/autotest/error-missing-required-attr/template.marko +++ b/test/fixtures/render/autotest/error-missing-required-attr/template.marko @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/test/fixtures/render/autotest/global-data/template.marko b/test/fixtures/render/autotest/global-data/template.marko index 362ec32fe..511f099dc 100644 --- a/test/fixtures/render/autotest/global-data/template.marko +++ b/test/fixtures/render/autotest/global-data/template.marko @@ -1 +1 @@ -Global: ${out.global.foo} \ No newline at end of file +- Global: ${out.global.foo} \ No newline at end of file diff --git a/test/fixtures/render/autotest/hello-dynamic/template.marko b/test/fixtures/render/autotest/hello-dynamic/template.marko index 67534a91f..e9fff3b74 100644 --- a/test/fixtures/render/autotest/hello-dynamic/template.marko +++ b/test/fixtures/render/autotest/hello-dynamic/template.marko @@ -1 +1 @@ -Hello ${data.name}! Hello $!{data.name}! Hello $!{data.missing}! \ No newline at end of file +- Hello ${data.name}! Hello $!{data.name}! Hello $!{data.missing}! \ No newline at end of file diff --git a/test/fixtures/render/autotest/hello-static/template.marko b/test/fixtures/render/autotest/hello-static/template.marko index 49fe4fe8a..f1a2fd283 100644 --- a/test/fixtures/render/autotest/hello-static/template.marko +++ b/test/fixtures/render/autotest/hello-static/template.marko @@ -1 +1 @@ -Hello John \ No newline at end of file +- Hello John \ No newline at end of file diff --git a/test/fixtures/render/autotest/if/expected.html b/test/fixtures/render/autotest/if/expected.html new file mode 100644 index 000000000..8c7e5a667 --- /dev/null +++ b/test/fixtures/render/autotest/if/expected.html @@ -0,0 +1 @@ +A \ No newline at end of file diff --git a/test/fixtures/render/autotest/if/template.marko b/test/fixtures/render/autotest/if/template.marko new file mode 100644 index 000000000..ee3d3fd97 --- /dev/null +++ b/test/fixtures/render/autotest/if/template.marko @@ -0,0 +1,3 @@ + + A + \ No newline at end of file diff --git a/test/fixtures/render/autotest/if/test.js b/test/fixtures/render/autotest/if/test.js new file mode 100644 index 000000000..c4013b344 --- /dev/null +++ b/test/fixtures/render/autotest/if/test.js @@ -0,0 +1 @@ +exports.templateData = {}; diff --git a/test/fixtures/render/autotest/layout-use-data-attrs/template.marko b/test/fixtures/render/autotest/layout-use-data-attrs/template.marko index ead25b5f3..c612ad3d8 100644 --- a/test/fixtures/render/autotest/layout-use-data-attrs/template.marko +++ b/test/fixtures/render/autotest/layout-use-data-attrs/template.marko @@ -1,3 +1,4 @@ +------- BODY CONTENT FOOTER CONTENT @@ -6,4 +7,5 @@ BODY CONTENT FOOTER CONTENT - \ No newline at end of file + +------- \ No newline at end of file diff --git a/test/fixtures/render/autotest/layout-use-data/template.marko b/test/fixtures/render/autotest/layout-use-data/template.marko index 07c6e95eb..8f1a35df5 100644 --- a/test/fixtures/render/autotest/layout-use-data/template.marko +++ b/test/fixtures/render/autotest/layout-use-data/template.marko @@ -1,3 +1,4 @@ +--------- BODY CONTENT FOOTER CONTENT @@ -12,4 +13,5 @@ My Title BODY CONTENT2 FOOTER CONTENT2 - \ No newline at end of file + +--------- \ No newline at end of file diff --git a/test/fixtures/render/autotest/placeholders-body-expressions/template.marko b/test/fixtures/render/autotest/placeholders-body-expressions/template.marko index 7c498504f..62c8f39af 100644 --- a/test/fixtures/render/autotest/placeholders-body-expressions/template.marko +++ b/test/fixtures/render/autotest/placeholders-body-expressions/template.marko @@ -1 +1,3 @@ -Hello ${({name: "World"}).name}! \ No newline at end of file +--- +Hello ${({name: "World"}).name}! +--- \ No newline at end of file diff --git a/test/fixtures/render/autotest/require/template.marko b/test/fixtures/render/autotest/require/template.marko index 31193ddac..9d2d290ab 100644 --- a/test/fixtures/render/autotest/require/template.marko +++ b/test/fixtures/render/autotest/require/template.marko @@ -1,6 +1,8 @@ +--- var testHelpers = require('./test-helpers') Hello ${testHelpers.upperCase("world")}! -Hello ${testHelpers.trim(" World ")}! \ No newline at end of file +Hello ${testHelpers.trim(" World ")}! +--- \ No newline at end of file diff --git a/test/fixtures/render/autotest/tabs-tab-new/expected.html b/test/fixtures/render/autotest/tabs-tab-new/expected.html new file mode 100644 index 000000000..312dd3a68 --- /dev/null +++ b/test/fixtures/render/autotest/tabs-tab-new/expected.html @@ -0,0 +1 @@ +
Tab 1 content
Tab 2 content
\ No newline at end of file diff --git a/test/fixtures/render/autotest/tabs-tab-new/template.marko b/test/fixtures/render/autotest/tabs-tab-new/template.marko new file mode 100644 index 000000000..928e96afc --- /dev/null +++ b/test/fixtures/render/autotest/tabs-tab-new/template.marko @@ -0,0 +1,15 @@ + + + + + Tab 1 content + + + + Tab 2 content + + + + Tab 3 content + + \ No newline at end of file diff --git a/test/fixtures/render/autotest-pending/nested-handlers/test.js b/test/fixtures/render/autotest/tabs-tab-new/test.js similarity index 100% rename from test/fixtures/render/autotest-pending/nested-handlers/test.js rename to test/fixtures/render/autotest/tabs-tab-new/test.js diff --git a/test/fixtures/render/autotest/tabs-tab/expected.html b/test/fixtures/render/autotest/tabs-tab/expected.html new file mode 100644 index 000000000..312dd3a68 --- /dev/null +++ b/test/fixtures/render/autotest/tabs-tab/expected.html @@ -0,0 +1 @@ +
Tab 1 content
Tab 2 content
\ No newline at end of file diff --git a/test/fixtures/render/autotest/tabs-tab/template.marko b/test/fixtures/render/autotest/tabs-tab/template.marko new file mode 100644 index 000000000..605e74ff8 --- /dev/null +++ b/test/fixtures/render/autotest/tabs-tab/template.marko @@ -0,0 +1,15 @@ + + + + + Tab 1 content + + + + Tab 2 content + + + + Tab 3 content + + \ No newline at end of file diff --git a/test/fixtures/render/autotest/tabs-tab/test.js b/test/fixtures/render/autotest/tabs-tab/test.js new file mode 100644 index 000000000..72d8a033a --- /dev/null +++ b/test/fixtures/render/autotest/tabs-tab/test.js @@ -0,0 +1,3 @@ +exports.templateData = { + "showConditionalTab": false +}; diff --git a/test/fixtures/render/autotest/tag-code-generator-return-self/expected.html b/test/fixtures/render/autotest/tag-code-generator-return-self/expected.html index 5d2f02193..07ae43b3a 100644 --- a/test/fixtures/render/autotest/tag-code-generator-return-self/expected.html +++ b/test/fixtures/render/autotest/tag-code-generator-return-self/expected.html @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/test/fixtures/render/autotest/text-replacement/template.marko b/test/fixtures/render/autotest/text-replacement/template.marko index 3af155405..453486856 100644 --- a/test/fixtures/render/autotest/text-replacement/template.marko +++ b/test/fixtures/render/autotest/text-replacement/template.marko @@ -1,3 +1,5 @@ +--- -Hello ${person.name}. You are from ${person.address.city}, ${person.address.state} Zero: ${data.zero} \ No newline at end of file +Hello ${person.name}. You are from ${person.address.city}, ${person.address.state} Zero: ${data.zero} +--- \ No newline at end of file diff --git a/test/fixtures/render/autotest/unless-else/template.marko b/test/fixtures/render/autotest/unless-else/template.marko index 93e9178da..d04479dc8 100644 --- a/test/fixtures/render/autotest/unless-else/template.marko +++ b/test/fixtures/render/autotest/unless-else/template.marko @@ -1,3 +1,4 @@ +--- A @@ -31,3 +32,4 @@
C
+--- \ No newline at end of file diff --git a/test/fixtures/render/autotest/var-scoped/template.marko b/test/fixtures/render/autotest/var-scoped/template.marko index 39a97edf1..19c7fbf87 100644 --- a/test/fixtures/render/autotest/var-scoped/template.marko +++ b/test/fixtures/render/autotest/var-scoped/template.marko @@ -3,4 +3,6 @@ ${y} ${z}
-${typeof x} \ No newline at end of file +--- +${typeof x} +--- \ No newline at end of file diff --git a/test/fixtures/render/autotest/whitespace-inline-elements/expected.html b/test/fixtures/render/autotest/whitespace-inline-elements/expected.html index f3226e015..a106fdd77 100644 --- a/test/fixtures/render/autotest/whitespace-inline-elements/expected.html +++ b/test/fixtures/render/autotest/whitespace-inline-elements/expected.html @@ -1 +1 @@ -

A B C

---

D E F

---

G H I

---

J

K
L
M
N

---

O
P
Q R

\ No newline at end of file +

A B C

---

D E F

---

G H I

---

J

K
L
M
N

---

O
P
Q R

\ No newline at end of file diff --git a/test/fixtures/render/autotest/whitespace-inline-elements/template.marko b/test/fixtures/render/autotest/whitespace-inline-elements/template.marko index ba42a9321..52c75e9f2 100644 --- a/test/fixtures/render/autotest/whitespace-inline-elements/template.marko +++ b/test/fixtures/render/autotest/whitespace-inline-elements/template.marko @@ -1,3 +1,4 @@ +------

A B C

---

@@ -6,7 +7,7 @@

---

- G + G H I

@@ -15,14 +16,15 @@ J
K
L -
M
+
M
N

---

O
- +
P
- - Q R -

\ No newline at end of file + + Q R +

+------ \ No newline at end of file diff --git a/test/fixtures/render/autotest/whitespace/template.marko b/test/fixtures/render/autotest/whitespace/template.marko index 7239b5849..00f553a21 100644 --- a/test/fixtures/render/autotest/whitespace/template.marko +++ b/test/fixtures/render/autotest/whitespace/template.marko @@ -1,3 +1,4 @@ +--- ${"BEGIN this whitespace should be retained END"} test @@ -30,12 +31,4 @@ should retain spacing between l begin end
begin end - \ No newline at end of file +--- \ No newline at end of file diff --git a/test/fixtures/taglib/scanned-tags/scanned-b/template.marko b/test/fixtures/taglib/scanned-tags/scanned-b/template.marko index 44a949161..4a90a9116 100644 --- a/test/fixtures/taglib/scanned-tags/scanned-b/template.marko +++ b/test/fixtures/taglib/scanned-tags/scanned-b/template.marko @@ -1 +1,3 @@ -scanned-b: Hello ${data.name} \ No newline at end of file +--- +scanned-b: Hello ${data.name} +--- \ No newline at end of file diff --git a/test/fixtures/taglib/scanned-tags/scanned-d/template.marko b/test/fixtures/taglib/scanned-tags/scanned-d/template.marko index 27f01b37d..222778e72 100644 --- a/test/fixtures/taglib/scanned-tags/scanned-d/template.marko +++ b/test/fixtures/taglib/scanned-tags/scanned-d/template.marko @@ -8,4 +8,6 @@ TAG = { } } --> -scanned-d: Hello ${data.NAME} \ No newline at end of file +--- +scanned-d: Hello ${data.NAME} +--- \ No newline at end of file diff --git a/test/fixtures/taglib/scanned-tags/test-tab-new/marko-tag.json b/test/fixtures/taglib/scanned-tags/test-tab-new/marko-tag.json new file mode 100644 index 000000000..fdfb634a9 --- /dev/null +++ b/test/fixtures/taglib/scanned-tags/test-tab-new/marko-tag.json @@ -0,0 +1,6 @@ +{ + "import-var": { + "tabs": "__tabsHelper" + }, + "@title": "string" +} \ No newline at end of file diff --git a/test/fixtures/taglib/scanned-tags/test-tab-new/renderer.js b/test/fixtures/taglib/scanned-tags/test-tab-new/renderer.js new file mode 100644 index 000000000..a46c595e9 --- /dev/null +++ b/test/fixtures/taglib/scanned-tags/test-tab-new/renderer.js @@ -0,0 +1,4 @@ +exports.render = function(input, out) { + var tabs = input.tabs; + tabs.addTab(input); +}; \ No newline at end of file diff --git a/test/fixtures/taglib/scanned-tags/test-tab/marko-tag.json b/test/fixtures/taglib/scanned-tags/test-tab/marko-tag.json new file mode 100644 index 000000000..8d152661a --- /dev/null +++ b/test/fixtures/taglib/scanned-tags/test-tab/marko-tag.json @@ -0,0 +1,6 @@ +{ + "import-var": { + "tabs": "tabs" + }, + "@title": "string" +} \ No newline at end of file diff --git a/test/fixtures/taglib/scanned-tags/test-tab/renderer.js b/test/fixtures/taglib/scanned-tags/test-tab/renderer.js new file mode 100644 index 000000000..a46c595e9 --- /dev/null +++ b/test/fixtures/taglib/scanned-tags/test-tab/renderer.js @@ -0,0 +1,4 @@ +exports.render = function(input, out) { + var tabs = input.tabs; + tabs.addTab(input); +}; \ No newline at end of file diff --git a/test/fixtures/taglib/scanned-tags/test-tabs-new/marko-tag.json b/test/fixtures/taglib/scanned-tags/test-tabs-new/marko-tag.json new file mode 100644 index 000000000..869179d98 --- /dev/null +++ b/test/fixtures/taglib/scanned-tags/test-tabs-new/marko-tag.json @@ -0,0 +1,3 @@ +{ + "body-function": "buildTabs(__tabsHelper)" +} \ No newline at end of file diff --git a/test/fixtures/taglib/scanned-tags/test-tabs-new/renderer.js b/test/fixtures/taglib/scanned-tags/test-tabs-new/renderer.js new file mode 100644 index 000000000..120515ab6 --- /dev/null +++ b/test/fixtures/taglib/scanned-tags/test-tabs-new/renderer.js @@ -0,0 +1,33 @@ +var template = require('./template.marko'); + +exports.render = function(input, out) { + var tabs = [], + activeFound = false; + + if (input.buildTabs) { + input.buildTabs({ + addTab: function(tab) { + if (tab.active) { + tab.activeFound = true; + } + + tab.id = "tab" + tabs.length; + tabs.push(tab); + } + }); + } + + if (!activeFound && tabs.length) { + tabs[0].active = true; + } + + tabs.forEach(function(tab) { + tab.liClass = tab.active ? "active" : ""; + tab.divClass = tab.active ? "tab-pane active" : "tab-pane"; + }); + + template.render({ + tabs: tabs + }, out); + +}; \ No newline at end of file diff --git a/test/fixtures/taglib/scanned-tags/test-tabs-new/template.marko b/test/fixtures/taglib/scanned-tags/test-tabs-new/template.marko new file mode 100644 index 000000000..e6d044728 --- /dev/null +++ b/test/fixtures/taglib/scanned-tags/test-tabs-new/template.marko @@ -0,0 +1,16 @@ + + +
+ +
+
+ +
+
+
\ No newline at end of file diff --git a/test/fixtures/taglib/scanned-tags/test-tabs/marko-tag.json b/test/fixtures/taglib/scanned-tags/test-tabs/marko-tag.json new file mode 100644 index 000000000..720984466 --- /dev/null +++ b/test/fixtures/taglib/scanned-tags/test-tabs/marko-tag.json @@ -0,0 +1,3 @@ +{ + "var": "tabs" +} \ No newline at end of file diff --git a/test/fixtures/taglib/scanned-tags/test-tabs/renderer.js b/test/fixtures/taglib/scanned-tags/test-tabs/renderer.js new file mode 100644 index 000000000..e91999f2b --- /dev/null +++ b/test/fixtures/taglib/scanned-tags/test-tabs/renderer.js @@ -0,0 +1,31 @@ +var template = require('./template.marko'); + +exports.render = function(input, out) { + var tabs = [], + activeFound = false; + + input.renderBody(out, { + addTab: function(tab) { + if (tab.active) { + tab.activeFound = true; + } + + tab.id = "tab" + tabs.length; + tabs.push(tab); + } + }); + + if (!activeFound && tabs.length) { + tabs[0].active = true; + } + + tabs.forEach(function(tab) { + tab.liClass = tab.active ? "active" : ""; + tab.divClass = tab.active ? "tab-pane active" : "tab-pane"; + }); + + template.render({ + tabs: tabs + }, out); + +}; \ No newline at end of file diff --git a/test/fixtures/taglib/scanned-tags/test-tabs/template.marko b/test/fixtures/taglib/scanned-tags/test-tabs/template.marko new file mode 100644 index 000000000..49e49558a --- /dev/null +++ b/test/fixtures/taglib/scanned-tags/test-tabs/template.marko @@ -0,0 +1,16 @@ + + +
+ +
+
+ +
+
+
\ No newline at end of file diff --git a/test/fixtures/taglib/scanned-tags/test-template-tag-dynamic-attributes/template.marko b/test/fixtures/taglib/scanned-tags/test-template-tag-dynamic-attributes/template.marko index 4f512183a..4a37c01d7 100644 --- a/test/fixtures/taglib/scanned-tags/test-template-tag-dynamic-attributes/template.marko +++ b/test/fixtures/taglib/scanned-tags/test-template-tag-dynamic-attributes/template.marko @@ -1 +1,3 @@ -Hello ${data.name}! \ No newline at end of file +--- +Hello ${data.name}! +--- \ No newline at end of file diff --git a/test/fixtures/taglib/test-template-as-tag/template.marko b/test/fixtures/taglib/test-template-as-tag/template.marko index 4f512183a..4a37c01d7 100644 --- a/test/fixtures/taglib/test-template-as-tag/template.marko +++ b/test/fixtures/taglib/test-template-as-tag/template.marko @@ -1 +1,3 @@ -Hello ${data.name}! \ No newline at end of file +--- +Hello ${data.name}! +--- \ No newline at end of file