YUI.add('handlebars-base', function (Y, NAME) { /*! Handlebars.js - Copyright (C) 2011 Yehuda Katz https://raw.github.com/wycats/handlebars.js/master/LICENSE */ // This file contains YUI-specific wrapper code and overrides for the // handlebars-base module. /** Handlebars is a simple template language inspired by Mustache. This is a YUI port of the original Handlebars project, which can be found at . @module handlebars @main handlebars @since 3.5.0 */ /** Provides basic Handlebars template rendering functionality. Use this module when you only need to render pre-compiled templates. @module handlebars @submodule handlebars-base */ /** Handlebars is a simple template language inspired by Mustache. This is a YUI port of the original Handlebars project, which can be found at . @class Handlebars @since 3.5.0 */ var Handlebars = Y.namespace('Handlebars'); /* THIS FILE IS GENERATED BY A BUILD SCRIPT - DO NOT EDIT! */ Handlebars.SafeString = {}; (function (exports) { "use strict"; // Build out our basic SafeString type function SafeString(string) { this.string = string; } SafeString.prototype.toString = function() { return "" + this.string; }; exports["default"] = SafeString; }(Handlebars.SafeString)); Handlebars.SafeString = Handlebars.SafeString['default']; /* THIS FILE IS GENERATED BY A BUILD SCRIPT - DO NOT EDIT! */ Handlebars.Utils = {}; (function (exports, SafeString) { "use strict"; /*jshint -W004 */ var escape = { "&": "&", "<": "<", ">": ">", '"': """, "'": "'", "`": "`" }; var badChars = /[&<>"'`]/g; var possible = /[&<>"'`]/; function escapeChar(chr) { return escape[chr]; } function extend(obj /* , ...source */) { for (var i = 1; i < arguments.length; i++) { for (var key in arguments[i]) { if (Object.prototype.hasOwnProperty.call(arguments[i], key)) { obj[key] = arguments[i][key]; } } } return obj; } exports.extend = extend;var toString = Object.prototype.toString; exports.toString = toString; // Sourced from lodash // https://github.com/bestiejs/lodash/blob/master/LICENSE.txt var isFunction = function(value) { return typeof value === 'function'; }; // fallback for older versions of Chrome and Safari /* istanbul ignore next */ if (isFunction(/x/)) { isFunction = function(value) { return typeof value === 'function' && toString.call(value) === '[object Function]'; }; } var isFunction; exports.isFunction = isFunction; /* istanbul ignore next */ var isArray = Array.isArray || function(value) { return (value && typeof value === 'object') ? toString.call(value) === '[object Array]' : false; }; exports.isArray = isArray; function escapeExpression(string) { // don't escape SafeStrings, since they're already safe if (string instanceof SafeString) { return string.toString(); } else if (string == null) { return ""; } else if (!string) { return string + ''; } // Force a string conversion as this will be done by the append regardless and // the regex test will do this transparently behind the scenes, causing issues if // an object's to string has escaped characters in it. string = "" + string; if(!possible.test(string)) { return string; } return string.replace(badChars, escapeChar); } exports.escapeExpression = escapeExpression;function isEmpty(value) { if (!value && value !== 0) { return true; } else if (isArray(value) && value.length === 0) { return true; } else { return false; } } exports.isEmpty = isEmpty;function appendContextPath(contextPath, id) { return (contextPath ? contextPath + '.' : '') + id; } exports.appendContextPath = appendContextPath; }(Handlebars.Utils, Handlebars.SafeString)); /* THIS FILE IS GENERATED BY A BUILD SCRIPT - DO NOT EDIT! */ Handlebars.Exception = {}; (function (exports) { "use strict"; var errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack']; function Exception(message, node) { var line; if (node && node.firstLine) { line = node.firstLine; message += ' - ' + line + ':' + node.firstColumn; } var tmp = Error.prototype.constructor.call(this, message); // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work. for (var idx = 0; idx < errorProps.length; idx++) { this[errorProps[idx]] = tmp[errorProps[idx]]; } if (line) { this.lineNumber = line; this.column = node.firstColumn; } } Exception.prototype = new Error(); exports["default"] = Exception; }(Handlebars.Exception)); Handlebars.Exception = Handlebars.Exception['default']; /* THIS FILE IS GENERATED BY A BUILD SCRIPT - DO NOT EDIT! */ (function (exports, Utils, Exception) { "use strict"; var VERSION = "2.0.0"; exports.VERSION = VERSION;var COMPILER_REVISION = 6; exports.COMPILER_REVISION = COMPILER_REVISION; var 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.x.x', 5: '== 2.0.0-alpha.x', 6: '>= 2.0.0-beta.1' }; exports.REVISION_CHANGES = REVISION_CHANGES; var isArray = Utils.isArray, isFunction = Utils.isFunction, toString = Utils.toString, objectType = '[object Object]'; function HandlebarsEnvironment(helpers, partials) { this.helpers = helpers || {}; this.partials = partials || {}; registerDefaultHelpers(this); } exports.HandlebarsEnvironment = HandlebarsEnvironment;HandlebarsEnvironment.prototype = { constructor: HandlebarsEnvironment, logger: logger, log: log, registerHelper: function(name, fn) { if (toString.call(name) === objectType) { if (fn) { throw new Exception('Arg not supported with multiple helpers'); } Utils.extend(this.helpers, name); } else { this.helpers[name] = fn; } }, unregisterHelper: function(name) { delete this.helpers[name]; }, registerPartial: function(name, partial) { if (toString.call(name) === objectType) { Utils.extend(this.partials, name); } else { this.partials[name] = partial; } }, unregisterPartial: function(name) { delete this.partials[name]; } }; function registerDefaultHelpers(instance) { instance.registerHelper('helperMissing', function(/* [args, ]options */) { if(arguments.length === 1) { // A missing field in a {{foo}} constuct. return undefined; } else { // Someone is actually trying to call something, blow up. throw new Exception("Missing helper: '" + arguments[arguments.length-1].name + "'"); } }); instance.registerHelper('blockHelperMissing', function(context, options) { var inverse = options.inverse, fn = options.fn; if(context === true) { return fn(this); } else if(context === false || context == null) { return inverse(this); } else if (isArray(context)) { if(context.length > 0) { if (options.ids) { options.ids = [options.name]; } return instance.helpers.each(context, options); } else { return inverse(this); } } else { if (options.data && options.ids) { var data = createFrame(options.data); data.contextPath = Utils.appendContextPath(options.data.contextPath, options.name); options = {data: data}; } return fn(context, options); } }); instance.registerHelper('each', function(context, options) { if (!options) { throw new Exception('Must pass iterator to #each'); } var fn = options.fn, inverse = options.inverse; var i = 0, ret = "", data; var contextPath; if (options.data && options.ids) { contextPath = Utils.appendContextPath(options.data.contextPath, options.ids[0]) + '.'; } if (isFunction(context)) { context = context.call(this); } if (options.data) { data = createFrame(options.data); } if(context && typeof context === 'object') { if (isArray(context)) { for(var j = context.length; i' + Y.Escape.html(this.text) + ''; }); var source = '
    {{#links}}
  • {{{linkify}}}
  • {{/links}}
'; Y.Handlebars.render(source, { links: [ {url: '/foo', text: 'Foo'}, {url: '/bar', text: 'Bar'}, {url: '/baz', text: 'Baz'} ] }); @method registerHelper @param {String} name Name of this helper. @param {Function} fn Helper function. @param {Boolean} [inverse=false] If `true`, this helper will be considered an "inverse" helper, like "unless". This means it will only be called if the expression given in the template evaluates to a false or empty value. */ /** Registers a partial that will be made available to all templates. A partial is another template that can be used to render part of a larger template. For example, a website with a common header and footer across all its pages might use a template for each page, which would call shared partials to render the headers and footers. Partials may be specified as uncompiled template strings or as compiled template functions. @example Y.Handlebars.registerPartial('header', '

{{title}}

'); Y.Handlebars.registerPartial('footer', 'Copyright (c) 2011 by Me.'); var source = '{{> header}}

Mustaches are awesome!

{{> footer}}'; Y.Handlebars.render(source, {title: 'My Page About Mustaches'}); @method registerPartial @param {String} name Name of this partial. @param {Function|String} partial Template string or compiled template function. */ /** Converts a precompiled template into a renderable template function. @example @method template @param {Function} template Precompiled Handlebars template function. @return {Function} Compiled template function. */ // Alias for Y.Handlebars.template(), used by Y.Template. Handlebars.revive = Handlebars.template; // Make Y.Template.Handlebars an alias for Y.Handlebars. Y.namespace('Template').Handlebars = Handlebars; }, '3.18.1', {"requires": []});