UNPKG

can

Version:

MIT-licensed, client-side, JavaScript framework that makes building rich web applications easy.

82 lines (81 loc) 3.07 kB
/*! * CanJS - 2.3.34 * http://canjs.com/ * Copyright (c) 2018 Bitovi * Mon, 30 Apr 2018 20:56:51 GMT * Licensed MIT */ /*can@2.3.34#view/stache/utils*/ var can = require('../../util/util.js'); require('../scope/scope.js'); var Options = can.view.Options; module.exports = { isArrayLike: function (obj) { return obj && obj.splice && typeof obj.length === 'number'; }, isObserveLike: function (obj) { return obj instanceof can.Map || obj && !!obj._get; }, emptyHandler: function () { }, jsonParse: function (str) { if (str[0] === '\'') { return str.substr(1, str.length - 2); } else if (str === 'undefined') { return undefined; } else if (can.global.JSON) { return JSON.parse(str); } else { return eval('(' + str + ')'); } }, mixins: { last: function () { return this.stack[this.stack.length - 1]; }, add: function (chars) { this.last().add(chars); }, subSectionDepth: function () { return this.stack.length - 1; } }, convertToScopes: function (helperOptions, scope, options, nodeList, truthyRenderer, falseyRenderer, isStringOnly) { if (truthyRenderer) { helperOptions.fn = this.makeRendererConvertScopes(truthyRenderer, scope, options, nodeList, isStringOnly); } if (falseyRenderer) { helperOptions.inverse = this.makeRendererConvertScopes(falseyRenderer, scope, options, nodeList, isStringOnly); } }, makeRendererConvertScopes: function (renderer, parentScope, parentOptions, nodeList, observeObservables) { var rendererWithScope = function (ctx, opts, parentNodeList) { return renderer(ctx || parentScope, opts, parentNodeList); }; var convertedRenderer = function (newScope, newOptions, parentNodeList) { if (newScope !== undefined && !(newScope instanceof can.view.Scope)) { newScope = parentScope.add(newScope); } if (newOptions !== undefined && !(newOptions instanceof Options)) { newOptions = parentOptions.add(newOptions); } var result = rendererWithScope(newScope, newOptions || parentOptions, parentNodeList || nodeList); return result; }; return observeObservables ? convertedRenderer : can.__notObserve(convertedRenderer); }, getItemsFragContent: function (items, helperOptions, scope) { var isObserveList = this.isObserveLike(items); var result = [], len = isObserveList ? items.attr('length') : items.length; for (var i = 0; i < len; i++) { var aliases = { '%index': i, '@index': i }; var item = isObserveList ? items.attr('' + i) : items[i]; result.push(helperOptions.fn(scope.add(aliases, { notContext: true }).add(item))); } return result; }, Options: Options };