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

Unified Diff: third_party/pkg/angular/lib/core_dom/ng_mustache.dart

Issue 176943008: Update the Angular/DI tests to latest from github. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 10 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 side-by-side diff with in-line comments
Download patch
Index: third_party/pkg/angular/lib/core_dom/ng_mustache.dart
diff --git a/third_party/pkg/angular/lib/core_dom/ng_mustache.dart b/third_party/pkg/angular/lib/core_dom/ng_mustache.dart
index ca5ad1e6c52c38c825d61acbcd8d204a3630f687..cf7229b17a902b4a8299ce25198e471a7a464656 100644
--- a/third_party/pkg/angular/lib/core_dom/ng_mustache.dart
+++ b/third_party/pkg/angular/lib/core_dom/ng_mustache.dart
@@ -7,30 +7,56 @@ class NgTextMustacheDirective {
String markup,
Interpolate interpolate,
Scope scope,
- TextChangeListener listener) {
+ AstParser parser,
+ FilterMap filters) {
Interpolation interpolation = interpolate(markup);
- interpolation.setter = (text) {
- element.text = text;
- if (listener != null) listener.call(text);
- };
- interpolation.setter('');
- scope.$watchSet(interpolation.watchExpressions, interpolation.call, markup.trim());
+ interpolation.setter = (text) => element.text = text;
+
+ List items = interpolation.expressions.map((exp) {
+ return parser(exp, filters:filters);
+ }).toList();
+ AST ast = new PureFunctionAST('[[$markup]]', new ArrayFn(), items);
+ scope.watch(ast, interpolation.call, readOnly: true);
}
}
@NgDirective(selector: r'[*=/{{.*}}/]')
class NgAttrMustacheDirective {
- static RegExp ATTR_NAME_VALUE_REGEXP = new RegExp(r'^([^=]+)=(.*)$');
-
-// This Directive is special and does not go through injection.
- NgAttrMustacheDirective(NodeAttrs attrs, String markup, Interpolate interpolate, Scope scope) {
- var match = ATTR_NAME_VALUE_REGEXP.firstMatch(markup);
- var attrName = match[1];
- Interpolation interpolation = interpolate(match[2]);
- interpolation.setter = (text) => attrs[attrName] = text;
+ // This Directive is special and does not go through injection.
+ NgAttrMustacheDirective(NodeAttrs attrs,
+ String markup,
+ Interpolate interpolate,
+ Scope scope,
+ AstParser parser,
+ FilterMap filters) {
+ var eqPos = markup.indexOf('=');
+ var attrName = markup.substring(0, eqPos);
+ var attrValue = markup.substring(eqPos + 1);
+ Interpolation interpolation = interpolate(attrValue);
+ var lastValue = markup;
+ interpolation.setter = (text) {
+ if (lastValue != text) {
+ lastValue = attrs[attrName] = text;
+ }
+ };
+ // TODO(misko): figure out how to remove call to setter. It slows down
+ // Block instantiation
interpolation.setter('');
- scope.$watchSet(interpolation.watchExpressions, interpolation.call, markup.trim());
+
+ List items = interpolation.expressions.map((exp) {
+ return parser(exp, filters:filters);
+ }).toList();
+ AST ast = new PureFunctionAST('[[$markup]]', new ArrayFn(), items);
+ /*
+ Attribute bindings are tricky. They need to be resolved on digest
+ inline with components so that any bindings to component can
+ be resolved before the component attach method. But once the
+ component is attached we need to run on the flush cycle rather
+ then digest cycle.
+ */
+ // TODO(misko): figure out how to get most of these on observe rather then watch.
+ scope.watch(ast, interpolation.call);
}
}

Powered by Google App Engine
This is Rietveld 408576698