can
Version:
MIT-licensed, client-side, JavaScript framework that makes building rich web applications easy.
82 lines (81 loc) • 3.07 kB
JavaScript
/*!
* 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
};