summaryrefslogtreecommitdiffstats
path: root/lib/handlebars/compiler.js
diff options
context:
space:
mode:
authorwycats <wycats@gmail.com>2010-12-12 13:33:17 -0800
committerwycats <wycats@gmail.com>2010-12-12 13:33:17 -0800
commitec948c7382603b88a6e80ab949120cca2b64fb5f (patch)
tree9da2b52a3edebe7c2552653c488cc996302baf9f /lib/handlebars/compiler.js
parent57e72c9fd270401a36c9ad7aeb305896841404e5 (diff)
downloadhandlebars.js-ec948c7382603b88a6e80ab949120cca2b64fb5f.zip
handlebars.js-ec948c7382603b88a6e80ab949120cca2b64fb5f.tar.gz
handlebars.js-ec948c7382603b88a6e80ab949120cca2b64fb5f.tar.bz2
Small restructuring. Have I mentioned how much I hate having to write modules that work in both CommonJS and the browser?
Diffstat (limited to 'lib/handlebars/compiler.js')
-rw-r--r--lib/handlebars/compiler.js71
1 files changed, 71 insertions, 0 deletions
diff --git a/lib/handlebars/compiler.js b/lib/handlebars/compiler.js
new file mode 100644
index 0000000..33e1fdf
--- /dev/null
+++ b/lib/handlebars/compiler.js
@@ -0,0 +1,71 @@
+var handlebars = require("handlebars/parser").parser;
+
+// BEGIN(BROWSER)
+Handlebars = {};
+
+Handlebars.Parser = handlebars;
+
+Handlebars.parse = function(string) {
+ Handlebars.Parser.yy = Handlebars.AST;
+ Handlebars.Parser.lexer = new Handlebars.HandlebarsLexer();
+ return Handlebars.Parser.parse(string);
+};
+
+Handlebars.print = function(ast) {
+ return new Handlebars.PrintVisitor().accept(ast);
+};
+
+Handlebars.compile = function(string) {
+ var ast = Handlebars.parse(string);
+
+ return function(context, helpers, partials) {
+ var helpers, partials;
+
+ if(!helpers) {
+ helpers = Handlebars.helpers;
+ }
+
+ if(!partials) {
+ partials = Handlebars.partials;
+ }
+
+ var internalContext = new Handlebars.Context(context, helpers, partials);
+ var runtime = new Handlebars.Runtime(internalContext);
+ runtime.accept(ast);
+ return runtime.buffer;
+ };
+};
+
+Handlebars.helpers = {};
+Handlebars.partials = {};
+
+Handlebars.registerHelper = function(name, fn, inverse) {
+ if(inverse) { fn.not = inverse; }
+ this.helpers[name] = fn;
+};
+
+Handlebars.registerPartial = function(name, str) {
+ this.partials[name] = str;
+};
+
+Handlebars.registerHelper('blockHelperMissing', function(context, fn) {
+ var ret = "";
+
+ if(context === true) {
+ return fn(this);
+ } else if(context === false || context == null) {
+ return "";
+ } else if(Object.prototype.toString.call(context) === "[object Array]") {
+ for(var i=0, j=context.length; i<j; i++) {
+ ret = ret + fn(context[i]);
+ }
+ return ret;
+ } else {
+ return fn(context);
+ }
+}, function(context, fn) {
+ return fn(context)
+});
+// END(BROWSER)
+
+exports.Handlebars = Handlebars;