mirror of
https://github.com/Hopiu/angular.js.git
synced 2026-03-17 15:40:22 +00:00
previously the startSymbol() and endSymbol() getters were exposed only via provider in the config phase
183 lines
5.4 KiB
JavaScript
183 lines
5.4 KiB
JavaScript
'use strict';
|
|
|
|
/**
|
|
* @ngdoc object
|
|
* @name ng.$interpolateProvider
|
|
* @function
|
|
*
|
|
* @description
|
|
*
|
|
* Used for configuring the interpolation markup. Defaults to `{{` and `}}`.
|
|
*/
|
|
function $InterpolateProvider() {
|
|
var startSymbol = '{{';
|
|
var endSymbol = '}}';
|
|
|
|
/**
|
|
* @ngdoc method
|
|
* @name ng.$interpolateProvider#startSymbol
|
|
* @methodOf ng.$interpolateProvider
|
|
* @description
|
|
* Symbol to denote start of expression in the interpolated string. Defaults to `{{`.
|
|
*
|
|
* @param {string=} value new value to set the starting symbol to.
|
|
* @returns {string|self} Returns the symbol when used as getter and self if used as setter.
|
|
*/
|
|
this.startSymbol = function(value){
|
|
if (value) {
|
|
startSymbol = value;
|
|
return this;
|
|
} else {
|
|
return startSymbol;
|
|
}
|
|
};
|
|
|
|
/**
|
|
* @ngdoc method
|
|
* @name ng.$interpolateProvider#endSymbol
|
|
* @methodOf ng.$interpolateProvider
|
|
* @description
|
|
* Symbol to denote the end of expression in the interpolated string. Defaults to `}}`.
|
|
*
|
|
* @param {string=} value new value to set the ending symbol to.
|
|
* @returns {string|self} Returns the symbol when used as getter and self if used as setter.
|
|
*/
|
|
this.endSymbol = function(value){
|
|
if (value) {
|
|
endSymbol = value;
|
|
return this;
|
|
} else {
|
|
return endSymbol;
|
|
}
|
|
};
|
|
|
|
|
|
this.$get = ['$parse', function($parse) {
|
|
var startSymbolLength = startSymbol.length,
|
|
endSymbolLength = endSymbol.length;
|
|
|
|
/**
|
|
* @ngdoc function
|
|
* @name ng.$interpolate
|
|
* @function
|
|
*
|
|
* @requires $parse
|
|
*
|
|
* @description
|
|
*
|
|
* Compiles a string with markup into an interpolation function. This service is used by the
|
|
* HTML {@link ng.$compile $compile} service for data binding. See
|
|
* {@link ng.$interpolateProvider $interpolateProvider} for configuring the
|
|
* interpolation markup.
|
|
*
|
|
*
|
|
<pre>
|
|
var $interpolate = ...; // injected
|
|
var exp = $interpolate('Hello {{name}}!');
|
|
expect(exp({name:'Angular'}).toEqual('Hello Angular!');
|
|
</pre>
|
|
*
|
|
*
|
|
* @param {string} text The text with markup to interpolate.
|
|
* @param {boolean=} mustHaveExpression if set to true then the interpolation string must have
|
|
* embedded expression in order to return an interpolation function. Strings with no
|
|
* embedded expression will return null for the interpolation function.
|
|
* @returns {function(context)} an interpolation function which is used to compute the interpolated
|
|
* string. The function has these parameters:
|
|
*
|
|
* * `context`: an object against which any expressions embedded in the strings are evaluated
|
|
* against.
|
|
*
|
|
*/
|
|
function $interpolate(text, mustHaveExpression) {
|
|
var startIndex,
|
|
endIndex,
|
|
index = 0,
|
|
parts = [],
|
|
length = text.length,
|
|
hasInterpolation = false,
|
|
fn,
|
|
exp,
|
|
concat = [];
|
|
|
|
while(index < length) {
|
|
if ( ((startIndex = text.indexOf(startSymbol, index)) != -1) &&
|
|
((endIndex = text.indexOf(endSymbol, startIndex + startSymbolLength)) != -1) ) {
|
|
(index != startIndex) && parts.push(text.substring(index, startIndex));
|
|
parts.push(fn = $parse(exp = text.substring(startIndex + startSymbolLength, endIndex)));
|
|
fn.exp = exp;
|
|
index = endIndex + endSymbolLength;
|
|
hasInterpolation = true;
|
|
} else {
|
|
// we did not find anything, so we have to add the remainder to the parts array
|
|
(index != length) && parts.push(text.substring(index));
|
|
index = length;
|
|
}
|
|
}
|
|
|
|
if (!(length = parts.length)) {
|
|
// we added, nothing, must have been an empty string.
|
|
parts.push('');
|
|
length = 1;
|
|
}
|
|
|
|
if (!mustHaveExpression || hasInterpolation) {
|
|
concat.length = length;
|
|
fn = function(context) {
|
|
for(var i = 0, ii = length, part; i<ii; i++) {
|
|
if (typeof (part = parts[i]) == 'function') {
|
|
part = part(context);
|
|
if (part == null || part == undefined) {
|
|
part = '';
|
|
} else if (typeof part != 'string') {
|
|
part = toJson(part);
|
|
}
|
|
}
|
|
concat[i] = part;
|
|
}
|
|
return concat.join('');
|
|
};
|
|
fn.exp = text;
|
|
fn.parts = parts;
|
|
return fn;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* @ngdoc method
|
|
* @name ng.$interpolate#startSymbol
|
|
* @methodOf ng.$interpolate
|
|
* @description
|
|
* Symbol to denote the start of expression in the interpolated string. Defaults to `{{`.
|
|
*
|
|
* Use {@link ng.$interpolateProvider#startSymbol $interpolateProvider#startSymbol} to change
|
|
* the symbol.
|
|
*
|
|
* @returns {string} start symbol.
|
|
*/
|
|
$interpolate.startSymbol = function() {
|
|
return startSymbol;
|
|
}
|
|
|
|
|
|
/**
|
|
* @ngdoc method
|
|
* @name ng.$interpolate#endSymbol
|
|
* @methodOf ng.$interpolate
|
|
* @description
|
|
* Symbol to denote the end of expression in the interpolated string. Defaults to `}}`.
|
|
*
|
|
* Use {@link ng.$interpolateProvider#endSymbol $interpolateProvider#endSymbol} to change
|
|
* the symbol.
|
|
*
|
|
* @returns {string} start symbol.
|
|
*/
|
|
$interpolate.endSymbol = function() {
|
|
return endSymbol;
|
|
}
|
|
|
|
return $interpolate;
|
|
}];
|
|
}
|
|
|