scan tags for all extensions

This commit is contained in:
Scott Davis 2016-02-26 17:11:44 -05:00
parent b355f1f217
commit 69eaee1a7b
3 changed files with 24 additions and 6 deletions

1
.gitignore vendored
View File

@ -7,3 +7,4 @@
*.orig
.DS_Store
coverage
.nvmrc

View File

@ -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);
}
};
};

View File

@ -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');
});
});