UNPKG

@akala/core

Version:
78 lines 3.38 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const binder_1 = require("./binder"); class Interpolate { get startSymbol() { return Interpolate._startSymbol; } ; set startSymbol(value) { Interpolate._startSymbol = value; } ; get endSymbol() { return Interpolate._endSymbol; } ; set endSymbol(value) { Interpolate._endSymbol = value; } ; static unescapeText(text) { return text.replace(this.escapedStartRegexp, Interpolate._startSymbol). replace(this.escapedEndRegexp, Interpolate._endSymbol); } static escape(ch) { return '\\\\\\' + ch; } static build(text, mustHaveExpression, trustedContext, allOrNothing) { var startSymbolLength = Interpolate._startSymbol.length, endSymbolLength = Interpolate._endSymbol.length; if (!text.length || text.indexOf(Interpolate._startSymbol) === -1) { var constantInterp; if (!mustHaveExpression) { return function (target) { return text; }; } return constantInterp; } allOrNothing = !!allOrNothing; var startIndex, endIndex, index = 0, expressions = [], parseFns = [], textLength = text.length, exp, concat = [], expressionPositions = []; while (index < textLength) { if (((startIndex = text.indexOf(Interpolate._startSymbol, index)) !== -1) && ((endIndex = text.indexOf(Interpolate._endSymbol, startIndex + startSymbolLength)) !== -1)) { if (index !== startIndex) { concat.push(this.unescapeText(text.substring(index, startIndex))); } exp = text.substring(startIndex + startSymbolLength, endIndex); expressions.push(exp); parseFns.push(function (target) { return new binder_1.Binding(exp, target); }); index = endIndex + endSymbolLength; expressionPositions.push(concat.length); concat.push(''); } else { // we did not find an interpolation, so we have to add the remainder to the separators array if (index !== textLength) { concat.push(this.unescapeText(text.substring(index))); } break; } } var compute = function (values) { for (var i = 0, ii = expressions.length; i < ii; i++) { if (allOrNothing && typeof (values[i].getValue())) return; concat[expressionPositions[i]] = values[i].getValue(); } return concat.join(''); }; return function interpolationFn(target) { var bindings = []; for (var i = 0; i < expressions.length; i++) { bindings[i] = parseFns[i](target); } return compute(bindings); }; } } exports.Interpolate = Interpolate; Interpolate._startSymbol = '{{'; Interpolate._endSymbol = '}}'; Interpolate.escapedStartRegexp = new RegExp(Interpolate._startSymbol.replace(/./g, Interpolate.escape), 'g'); Interpolate.escapedEndRegexp = new RegExp(Interpolate._endSymbol.replace(/./g, Interpolate.escape), 'g'); //# sourceMappingURL=interpolate.js.map