diff --git a/taglibs/core/TagHandlerNode.js b/taglibs/core/TagHandlerNode.js index c290f29a9..76bd6250a 100644 --- a/taglibs/core/TagHandlerNode.js +++ b/taglibs/core/TagHandlerNode.js @@ -18,12 +18,13 @@ var extend = require('raptor-util').extend; var forEachEntry = require('raptor-util').forEachEntry; var stringify = require('raptor-json/stringify'); var isObjectEmpty = require('raptor-util/isObjectEmpty'); +var requireVarName = require('./requireVarName'); function addHandlerVar(template, renderer) { var handlerVars = template._handlerVars || (template._handlerVars = {}); var handlerVar = handlerVars[renderer]; if (!handlerVar) { - handlerVar = renderer.replace(/[.\-\/\\]/g, '_').replace(/^[_]+/g, ''); + handlerVar = requireVarName(renderer, template.dirname); handlerVar = template.addStaticVar(handlerVar, '__renderer(require(' + stringify(renderer) + '))'); handlerVars[renderer] = handlerVar; } diff --git a/taglibs/core/package.json b/taglibs/core/package.json new file mode 100644 index 000000000..f72768791 --- /dev/null +++ b/taglibs/core/package.json @@ -0,0 +1,5 @@ +{ + "browser": { + "./requireVarName.js": "./requireVarName-browser.js" + } +} \ No newline at end of file diff --git a/taglibs/core/requireVarName-browser.js b/taglibs/core/requireVarName-browser.js new file mode 100644 index 000000000..e9a46b6da --- /dev/null +++ b/taglibs/core/requireVarName-browser.js @@ -0,0 +1,3 @@ +module.exports = function(target, from) { + return target; +}; \ No newline at end of file diff --git a/taglibs/core/requireVarName.js b/taglibs/core/requireVarName.js new file mode 100644 index 000000000..d55f723b2 --- /dev/null +++ b/taglibs/core/requireVarName.js @@ -0,0 +1,8 @@ +var resolveFrom = require('resolve-from'); +var nodePath = require('path'); + +module.exports = function(target, from) { + var resolved = resolveFrom(from, target); + resolved = nodePath.relative(from, resolved); + return resolved; +}; \ No newline at end of file diff --git a/test/fixtures/index.js b/test/fixtures/index.js new file mode 100644 index 000000000..7fe36d050 --- /dev/null +++ b/test/fixtures/index.js @@ -0,0 +1,3 @@ +module.exports = function(input, out) { + out.write('root-renderer: Hello ' + input.name + '!'); +}; \ No newline at end of file diff --git a/test/fixtures/marko-taglib.json b/test/fixtures/marko-taglib.json index ce59b03be..e980348f2 100644 --- a/test/fixtures/marko-taglib.json +++ b/test/fixtures/marko-taglib.json @@ -96,6 +96,12 @@ }, "test-template-tag-dynamic-attributes": { "template": "./taglib/hello.marko" + }, + "test-root-renderer": { + "renderer": "./", + "attributes": { + "name": "string" + } } }, "tags-dir": "./taglib/scanned-tags", diff --git a/test/fixtures/templates/compiler/custom-tag/expected.js b/test/fixtures/templates/compiler/custom-tag/expected.js index 56009604c..976094499 100644 --- a/test/fixtures/templates/compiler/custom-tag/expected.js +++ b/test/fixtures/templates/compiler/custom-tag/expected.js @@ -3,12 +3,12 @@ exports.create = function(__helpers) { empty = __helpers.e, notEmpty = __helpers.ne, __renderer = __helpers.r, - taglib_hello_renderer = __renderer(require("../../../taglib/hello-renderer")), + _________taglib_hello_renderer_js = __renderer(require("../../../taglib/hello-renderer")), __tag = __helpers.t; return function render(data, out) { __tag(out, - taglib_hello_renderer, + _________taglib_hello_renderer_js, { "name": "World" }); diff --git a/test/fixtures/templates/root-renderer/expected.html b/test/fixtures/templates/root-renderer/expected.html new file mode 100644 index 000000000..70c7cda46 --- /dev/null +++ b/test/fixtures/templates/root-renderer/expected.html @@ -0,0 +1 @@ +root-renderer: Hello Frank! \ No newline at end of file diff --git a/test/fixtures/templates/root-renderer/template.marko b/test/fixtures/templates/root-renderer/template.marko new file mode 100644 index 000000000..067660ba4 --- /dev/null +++ b/test/fixtures/templates/root-renderer/template.marko @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/test/fixtures/templates/root-renderer/test.js b/test/fixtures/templates/root-renderer/test.js new file mode 100644 index 000000000..c4013b344 --- /dev/null +++ b/test/fixtures/templates/root-renderer/test.js @@ -0,0 +1 @@ +exports.templateData = {};