@akala/core
Version:
78 lines • 3.38 kB
JavaScript
;
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