From 9a43cc7663ad5258b758a3c506f39e9bfe8d6870 Mon Sep 17 00:00:00 2001 From: Patrick Steele-Idem Date: Mon, 8 Feb 2016 23:43:04 -0700 Subject: [PATCH] Marko v3: Introduced --- taglibs/core/include-text-tag.js | 30 +++++++++++++++++++ taglibs/core/marko-taglib.json | 3 ++ .../include-resource-static/template.marko | 3 -- .../include-text}/expected.html | 0 .../include-text}/include-resource-target.txt | 0 .../autotest/include-text/template.marko | 5 ++++ .../include-text}/test.js | 0 7 files changed, 38 insertions(+), 3 deletions(-) create mode 100644 taglibs/core/include-text-tag.js delete mode 100644 test/fixtures/render/autotest-pending/include-resource-static/template.marko rename test/fixtures/render/{autotest-pending/include-resource-static => autotest/include-text}/expected.html (100%) rename test/fixtures/render/{autotest-pending/include-resource-static => autotest/include-text}/include-resource-target.txt (100%) create mode 100644 test/fixtures/render/autotest/include-text/template.marko rename test/fixtures/render/{autotest-pending/include-resource-static => autotest/include-text}/test.js (100%) diff --git a/taglibs/core/include-text-tag.js b/taglibs/core/include-text-tag.js new file mode 100644 index 000000000..f6636103b --- /dev/null +++ b/taglibs/core/include-text-tag.js @@ -0,0 +1,30 @@ +'use strict'; + +var resolveFrom = require('resolve-from'); +var fs = require('fs'); + +module.exports = function codeGenerator(el, codegen) { + let argument = el.argument; + if (!argument) { + return; + } + + let builder = codegen.builder; + let pathExpression = builder.parseExpression(argument); + if (pathExpression.type !== 'Literal' || typeof pathExpression.value !== 'string') { + codegen.addError('Argument to the tag should be a string value: '); + return; + } + + var path = pathExpression.value; + var dirname = codegen.context.dirname; + try { + path = resolveFrom(dirname, path); + } catch(e) { + codegen.addError('File not found: ' + path); + return; + } + + var txt = fs.readFileSync(path, { encoding: 'utf8' }); + return builder.text(builder.literal(txt)); +}; \ No newline at end of file diff --git a/taglibs/core/marko-taglib.json b/taglibs/core/marko-taglib.json index 0c3bf1307..c2cc69f36 100644 --- a/taglibs/core/marko-taglib.json +++ b/taglibs/core/marko-taglib.json @@ -17,6 +17,9 @@ "": { "code-generator": "./include-tag" }, + "": { + "code-generator": "./include-text-tag" + }, "": { "code-generator": "./invoke-tag" }, diff --git a/test/fixtures/render/autotest-pending/include-resource-static/template.marko b/test/fixtures/render/autotest-pending/include-resource-static/template.marko deleted file mode 100644 index 25877ee6d..000000000 --- a/test/fixtures/render/autotest-pending/include-resource-static/template.marko +++ /dev/null @@ -1,3 +0,0 @@ -BEGIN - -END \ No newline at end of file diff --git a/test/fixtures/render/autotest-pending/include-resource-static/expected.html b/test/fixtures/render/autotest/include-text/expected.html similarity index 100% rename from test/fixtures/render/autotest-pending/include-resource-static/expected.html rename to test/fixtures/render/autotest/include-text/expected.html diff --git a/test/fixtures/render/autotest-pending/include-resource-static/include-resource-target.txt b/test/fixtures/render/autotest/include-text/include-resource-target.txt similarity index 100% rename from test/fixtures/render/autotest-pending/include-resource-static/include-resource-target.txt rename to test/fixtures/render/autotest/include-text/include-resource-target.txt diff --git a/test/fixtures/render/autotest/include-text/template.marko b/test/fixtures/render/autotest/include-text/template.marko new file mode 100644 index 000000000..1d584dc7e --- /dev/null +++ b/test/fixtures/render/autotest/include-text/template.marko @@ -0,0 +1,5 @@ +--- +BEGIN + +END +--- \ No newline at end of file diff --git a/test/fixtures/render/autotest-pending/include-resource-static/test.js b/test/fixtures/render/autotest/include-text/test.js similarity index 100% rename from test/fixtures/render/autotest-pending/include-resource-static/test.js rename to test/fixtures/render/autotest/include-text/test.js