From 3b0970d8aa969c79b19fa737dc990ce7c62699d2 Mon Sep 17 00:00:00 2001 From: wycats Date: Thu, 25 Nov 2010 23:32:32 -0800 Subject: [PATCH] Start working on the runtime --- lib/handlebars.js | 1 + lib/handlebars/runtime.js | 120 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 121 insertions(+) create mode 100644 lib/handlebars/runtime.js diff --git a/lib/handlebars.js b/lib/handlebars.js index f7094752..ca080cad 100644 --- a/lib/handlebars.js +++ b/lib/handlebars.js @@ -5,6 +5,7 @@ if(exports) { Handlebars.HandlebarsLexer = require("handlebars/handlebars_lexer").Lexer; Handlebars.PrintVisitor = require("handlebars/printer").PrintVisitor; Handlebars.Parser = require("handlebars/parser").parser; + Handlebars.Runtime = require("handlebars/runtime").Runtime; } else { Handlebars.Parser = handlebars; } diff --git a/lib/handlebars/runtime.js b/lib/handlebars/runtime.js new file mode 100644 index 00000000..80defd8e --- /dev/null +++ b/lib/handlebars/runtime.js @@ -0,0 +1,120 @@ +if(exports) { + var inspect = function(obj) { + require("sys").print(require("sys").inspect(obj) + "\n"); + } + var Handlebars = {}; + Handlebars.AST = require("handlebars/ast"); + Handlebars.Visitor = require("handlebars/jison_ext").Visitor; +} + +Handlebars.Context = function(data, fallback) { + this.data = data; + this.fallback = fallback; +}; + +Handlebars.Context.prototype = { + isContext: true, + + clone: function() { + var context = new Handlebars.Context; + context.data = this.data; + context.fallback = this.fallback; + return context; + }, + + evaluate: function(path, stack) { + var context = this.clone(); + var depth = path.depth, dig = path.dig, parts = path.parts; + + if(depth > stack.length) { context.data = null; } + else if(depth > 0) { context = stack[stack.length - depth].clone(); } + + for(var i=0,l=parts.length; i