wintersmith
Version:
A flexible static site generator.
57 lines (48 loc) • 1.55 kB
JavaScript
/* generator.coffee */
(function() {
var ContentPlugin, ContentTree, ref, runGenerator;
ref = require('./content'), ContentPlugin = ref.ContentPlugin, ContentTree = ref.ContentTree;
runGenerator = function(env, contents, generator, callback) {
var groups, resolve;
groups = env.getContentGroups();
resolve = function(root, items) {
var item, key, results, tree;
results = [];
for (key in items) {
item = items[key];
if (item instanceof ContentPlugin) {
item.parent = root;
item.__env = env;
item.__filename = 'generator';
item.__plugin = generator;
root[key] = item;
results.push(root._[generator.group].push(item));
} else if (item instanceof Object) {
tree = new ContentTree(key, groups);
tree.parent = root;
tree.parent._.directories.push(tree);
root[key] = tree;
results.push(resolve(root[key], item));
} else {
throw new Error("Invalid item for '" + key + "' encountered when resolving generator output");
}
}
return results;
};
return generator.fn(contents, function(error, generated) {
var tree;
tree = new ContentTree('', groups);
try {
resolve(tree, generated);
} catch (error1) {
error = error1;
return callback(error);
}
return callback(null, tree);
});
};
/* Exports */
module.exports = {
runGenerator: runGenerator
};
}).call(this);