/*jshint eqnull: true */ import { Exception, extend } from "handlebars/utils"; var K = function() { return this; }; export VERSION = "1.0.0"; export COMPILER_REVISION = 4; export REVISION_CHANGES = { 1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it 2: '== 1.0.0-rc.3', 3: '== 1.0.0-rc.4', 4: '>= 1.0.0' }; // TODO: Make this a class export default function(helpers, partials) { var exports = {}; helpers = helpers || {}; partials = partials || {}; var toString = Object.prototype.toString, functionType = '[object Function]', objectType = '[object Object]'; exports.registerHelper(name, fn, inverse) { if (toString.call(name) === objectType) { if (inverse || fn) { throw new Exception('Arg not supported with multiple helpers'); } extend(helpers, name); } else { if (inverse) { fn.not = inverse; } helpers[name] = fn; } }; exports.registerPartial(name, str) { if (toString.call(name) === objectType) { extend(partials, name); } else { partials[name] = str; } }; exports.registerHelper('helperMissing', function(arg) { if(arguments.length === 2) { return undefined; } else { throw new Error("Missing helper: '" + arg + "'"); } }); exports.registerHelper('blockHelperMissing', function(context, options) { var inverse = options.inverse || function() {}, fn = options.fn; 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) { return Handlebars.helpers.each(context, options); } else { return inverse(this); } } else { return fn(context); } }); exports.registerHelper('each', function(context, options) { var fn = options.fn, inverse = options.inverse; var i = 0, ret = "", data; var type = toString.call(context); if(type === functionType) { context = context.call(this); } if (options.data) { data = Handlebars.createFrame(options.data); } if(context && typeof context === 'object') { if(context instanceof Array){ for(var j = context.length; i