diff --git a/.gitignore b/.gitignore index e75e37f66..b5b38bd79 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ *.orig .DS_Store coverage +.nvmrc diff --git a/compiler/taglib-loader/scanTagsDir.js b/compiler/taglib-loader/scanTagsDir.js index 7755fdd3e..4444faf1b 100644 --- a/compiler/taglib-loader/scanTagsDir.js +++ b/compiler/taglib-loader/scanTagsDir.js @@ -35,6 +35,15 @@ function createDefaultTagDef() { }; } +function scanRequireExtensions(dir, childFilename, filename) { + var path; + for (var extension in require.extensions) { + path = nodePath.join(dir, childFilename, filename + extension); + if (fs.existsSync(path)) { + return path; // short circuit loop + } + } +} /** * @param {String} tagsConfigPath path to tag definition file @@ -70,8 +79,8 @@ module.exports = function scanTagsDir(tagsConfigPath, tagsConfigDirname, dir, ta var tagDirname = nodePath.join(dir, childFilename); var tagFile = nodePath.join(dir, childFilename, 'marko-tag.json'); var tag = null; - var rendererFile = nodePath.join(dir, childFilename, 'renderer.js'); - var indexFile = nodePath.join(dir, childFilename, 'index.js'); + var rendererFile = scanRequireExtensions(dir, childFilename, 'renderer'); + var indexFile = scanRequireExtensions(dir, childFilename, 'index'); var templateFile = nodePath.join(dir, childFilename, 'template.marko'); var templateFileAlt = nodePath.join(dir, childFilename, 'template.html'); var templateFileAlt2 = nodePath.join(dir, childFilename, 'template.marko.html'); @@ -98,9 +107,9 @@ module.exports = function scanTagsDir(tagsConfigPath, tagsConfigDirname, dir, ta } if (!tagDef.renderer && !tagDef.template && !tagDef['code-generator'] && !tagDef['node-factory'] && !tagDef.transformer) { - if (fs.existsSync(rendererFile)) { + if (rendererFile) { tagDef.renderer = rendererFile; - } else if (fs.existsSync(indexFile)) { + } else if (indexFile) { tagDef.renderer = indexFile; } else if (fs.existsSync(templateFile)) { tagDef.template = templateFile; @@ -134,4 +143,4 @@ module.exports = function scanTagsDir(tagsConfigPath, tagsConfigDirname, dir, ta tag.name = tag.name || tagName; taglib.addTag(tag); } -}; \ No newline at end of file +}; diff --git a/test/taglib-loader-test.js b/test/taglib-loader-test.js index 141b9fed8..d293e7289 100644 --- a/test/taglib-loader-test.js +++ b/test/taglib-loader-test.js @@ -4,6 +4,7 @@ chai.config.includeStack = true; require('chai').should(); var expect = require('chai').expect; var nodePath = require('path'); +var taglibLoader = require('../compiler').taglibLoader; describe('taglib-loader' , function() { @@ -18,7 +19,6 @@ describe('taglib-loader' , function() { }); it('should load a taglib with shorthand attributes and tags', function() { - var taglibLoader = require('../compiler').taglibLoader; var taglib = taglibLoader.load(nodePath.join(__dirname, 'fixtures/taglib-shorthand/marko.json')); expect(taglib != null).to.equal(true); @@ -39,5 +39,13 @@ describe('taglib-loader' , function() { expect(nestedTabTag.targetProperty).to.equal('tabs'); }); + it('should load a taglib with index*.js or render*.js', function() { + var taglib = taglibLoader.load(nodePath.join(__dirname, 'fixtures/marko.json')); + + console.log(taglib.tags['test-declared-attributes'].renderer); + expect(taglib).to.not.be.null; + expect(taglib).to.have.deep.property("tags.test-declared-attributes.renderer").to.have.string('renderer.js'); + }); + });