Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(492)

Side by Side Diff: third_party/pkg/angular/lib/core/interpolate.dart

Issue 1058283006: Update pubspecs and dependencies to get pkgbuild tests working. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 part of angular.core;
2
3 class Interpolation {
4 final String template;
5 final List<String> seperators;
6 final List<String> expressions;
7 Function setter = (_) => _;
8
9 Interpolation(this.template, this.seperators, this.expressions);
10
11 String call(List parts, [_]) {
12 if (parts == null) return seperators.join('');
13 var str = [];
14 for (var i = 0; i < parts.length; i++) {
15 str.add(seperators[i]);
16 var value = parts[i];
17 str.add(value == null ? '' : '$value');
18 }
19 str.add(seperators.last);
20 return setter(str.join(''));
21 }
22 }
23
24 /**
25 * Compiles a string with markup into an interpolation function. This service
26 * is used by the HTML [Compiler] service for data binding.
27 *
28 *
29 * var $interpolate = ...; // injected
30 * var exp = $interpolate('Hello {{name}}!');
31 * expect(exp({name:'Angular'}).toEqual('Hello Angular!');
32 */
33 @NgInjectableService()
34 class Interpolate {
35 final Parser _parse;
36
37 Interpolate(this._parse);
38
39 /**
40 * Compiles markup text into interpolation function.
41 *
42 * - `text`: The markup text to interpolate in form `foo {{expr}} bar`.
43 * - `mustHaveExpression`: if set to true then the interpolation string must
44 * have embedded expression in order to return an interpolation function.
45 * Strings with no embedded expression will return null for the
46 * interpolation function.
47 * - `startSymbol`: The symbol to start interpolation. '{{' by default.
48 * - `endSymbol`: The symbol to end interpolation. '}}' by default.
49 */
50 Interpolation call(String template, [bool mustHaveExpression = false,
51 String startSymbol = '{{', String endSymbol = '}}']) {
52 int startSymbolLength = startSymbol.length;
53 int endSymbolLength = endSymbol.length;
54 int startIndex;
55 int endIndex;
56 int index = 0;
57 int length = template.length;
58 bool hasInterpolation = false;
59 bool shouldAddSeparator = true;
60 String exp;
61 List<String> separators = [];
62 List<String> expressions = [];
63
64 while(index < length) {
65 if ( ((startIndex = template.indexOf(startSymbol, index)) != -1) &&
66 ((endIndex = template.indexOf(endSymbol, startIndex + startSymbolLeng th)) != -1) ) {
67 separators.add(template.substring(index, startIndex));
68 exp = template.substring(startIndex + startSymbolLength, endIndex);
69 expressions.add(exp);
70 index = endIndex + endSymbolLength;
71 hasInterpolation = true;
72 } else {
73 // we did not find anything, so we have to add the remainder to the chun ks array
74 separators.add(template.substring(index));
75 shouldAddSeparator = false;
76 break;
77 }
78 }
79 if (shouldAddSeparator) {
80 separators.add('');
81 }
82 return (!mustHaveExpression || hasInterpolation)
83 ? new Interpolation(template, separators, expressions)
84 : null;
85 }
86 }
OLDNEW
« no previous file with comments | « third_party/pkg/angular/lib/core/filter.dart ('k') | third_party/pkg/angular/lib/core/module.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698