| 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);
|
| }
|
| }
|
|
|
|
|