120 lines
2.7 KiB
JavaScript
120 lines
2.7 KiB
JavaScript
// BEGIN(BROWSER)
|
|
|
|
/*jshint eqnull:true*/
|
|
this.Handlebars = {};
|
|
|
|
(function(Handlebars) {
|
|
|
|
Handlebars.VERSION = "1.0.rc.1";
|
|
|
|
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('helperMissing', function(arg) {
|
|
if(arguments.length === 2) {
|
|
return undefined;
|
|
} else {
|
|
throw new Error("Could not find property '" + arg + "'");
|
|
}
|
|
});
|
|
|
|
var toString = Object.prototype.toString, functionType = "[object Function]";
|
|
|
|
Handlebars.registerHelper('blockHelperMissing', function(context, options) {
|
|
var inverse = options.inverse || function() {}, fn = options.fn;
|
|
|
|
|
|
var ret = "";
|
|
var type = toString.call(context);
|
|
|
|
if(type === functionType) { context = context.call(this); }
|
|
|
|
if(context === true) {
|
|
return fn(this);
|
|
} else if(context === false || context == null) {
|
|
return inverse(this);
|
|
} else if(type === "[object Array]") {
|
|
if(context.length > 0) {
|
|
for(var i=0, j=context.length; i<j; i++) {
|
|
ret = ret + fn(context[i]);
|
|
}
|
|
} else {
|
|
ret = inverse(this);
|
|
}
|
|
return ret;
|
|
} else {
|
|
return fn(context);
|
|
}
|
|
});
|
|
|
|
Handlebars.K = function() {};
|
|
|
|
Handlebars.createFrame = Object.create || function(object) {
|
|
Handlebars.K.prototype = object;
|
|
var obj = new Handlebars.K();
|
|
Handlebars.K.prototype = null;
|
|
return obj;
|
|
};
|
|
|
|
Handlebars.registerHelper('each', function(context, options) {
|
|
var fn = options.fn, inverse = options.inverse;
|
|
var ret = "", data;
|
|
|
|
if (options.data) {
|
|
data = Handlebars.createFrame(options.data);
|
|
}
|
|
|
|
if(context && context.length > 0) {
|
|
for(var i=0, j=context.length; i<j; i++) {
|
|
if (data) { data.index = i; }
|
|
ret = ret + fn(context[i], { data: data });
|
|
}
|
|
} else {
|
|
ret = inverse(this);
|
|
}
|
|
return ret;
|
|
});
|
|
|
|
Handlebars.registerHelper('if', function(context, options) {
|
|
var type = toString.call(context);
|
|
if(type === functionType) { context = context.call(this); }
|
|
|
|
if(!context || Handlebars.Utils.isEmpty(context)) {
|
|
return options.inverse(this);
|
|
} else {
|
|
return options.fn(this);
|
|
}
|
|
});
|
|
|
|
Handlebars.registerHelper('unless', function(context, options) {
|
|
var fn = options.fn, inverse = options.inverse;
|
|
options.fn = inverse;
|
|
options.inverse = fn;
|
|
|
|
return Handlebars.helpers['if'].call(this, context, options);
|
|
});
|
|
|
|
Handlebars.registerHelper('with', function(context, options) {
|
|
return options.fn(context);
|
|
});
|
|
|
|
Handlebars.registerHelper('log', function(context) {
|
|
Handlebars.log(context);
|
|
});
|
|
|
|
}(this.Handlebars));
|
|
|
|
// END(BROWSER)
|
|
|
|
module.exports = this.Handlebars;
|
|
|