Instantly share code, notes, and snippets.

Embed
What would you like to do?
handlebars precompiler for rhino
importPackage(java.io);
(function(args) {
var templateFileExtension = 'handlebars',
output = ['// This file is auto-generated and should be ignored from version control.\n'],
console = {
log: print
},
showUsage = function() {
console.log('Usage: java -jar <rhino.jar> rhino-handlebars-compiler.js --handlebars <handlebars library path> --templates <templates directory> --output <output file>');
},
handlebarsLibrary,
templatesDirectory,
outputFile,
templateFiles,
outStream,
index,
templateFile,
templateContents,
argumentsParser,
options;
argumentsParser = function() {
var arg, parse = function(args) {
var options = {};
args = Array.prototype.slice.call(args);
arg = args.shift();
while (arg) {
if (arg.indexOf("--") === 0) {
options[arg.substring(2)] = args.shift();
}
arg = args.shift();
}
return options;
};
return { parse: parse };
};
options = new argumentsParser().parse(args);
handlebarsLibrary = options.handlebars;
templatesDirectory = options.templates;
outputFile = options.output;
templateFiles = new File(templatesDirectory).listFiles();
outStream = new BufferedWriter(new FileWriter(outputFile));
if (undefined === handlebarsLibrary || undefined === templatesDirectory) {
showUsage();
java.lang.System.exit(1);
}
load(handlebarsLibrary);
output.push('(function(){');
output.push('\n var template = Handlebars.template, templates = Handlebars.templates = Handlebars.templates || {};\n');
templateFiles = templateFiles.filter(function(fileName) {
return(fileName.getName().substr(-11) === ("." + templateFileExtension));
});
for (index = 0; index < templateFiles.length; index++) {
templateFile = templateFiles[index];
templateName = templateFile.getName().replaceAll(('\\.' + templateFileExtension + '$'), '');
templateContents = Handlebars.precompile(readFile(templateFile.getAbsolutePath()));
output.push(' templates[\'' + templateName + '\'] = template(' + templateContents + ');\n');
}
output.push('}());');
outStream.write(output.join(''));
outStream.close();
}(arguments));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment