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

Unified Diff: third_party/pkg/angular/lib/directive/ng_control.dart

Issue 180873006: Update the Angular/DI tests to latest from github. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Review feedback 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/directive/ng_control.dart
diff --git a/third_party/pkg/angular/lib/directive/ng_control.dart b/third_party/pkg/angular/lib/directive/ng_control.dart
index 47cfc208b7b6ad8bbda15cb412973195e514cb00..3c6f9690c4ab112743a360bd0821dd64dce00dfd 100644
--- a/third_party/pkg/angular/lib/directive/ng_control.dart
+++ b/third_party/pkg/angular/lib/directive/ng_control.dart
@@ -1,29 +1,80 @@
part of angular.directive;
-abstract class NgControl {
- static const NG_VALID_CLASS = "ng-valid";
- static const NG_INVALID_CLASS = "ng-invalid";
- static const NG_PRISTINE_CLASS = "ng-pristine";
- static const NG_DIRTY_CLASS = "ng-dirty";
+abstract class NgControl implements NgDetachAware {
+ static const NG_VALID_CLASS = "ng-valid";
+ static const NG_INVALID_CLASS = "ng-invalid";
+ static const NG_PRISTINE_CLASS = "ng-pristine";
+ static const NG_DIRTY_CLASS = "ng-dirty";
+ static const NG_TOUCHED_CLASS = "ng-touched";
+ static const NG_UNTOUCHED_CLASS = "ng-untouched";
+ static const NG_SUBMIT_VALID_CLASS = "ng-submit-valid";
+ static const NG_SUBMIT_INVALID_CLASS = "ng-submit-invalid";
String _name;
bool _dirty;
bool _pristine;
bool _valid;
bool _invalid;
+ bool _touched;
+ bool _untouched;
+ bool _submit_valid;
- get element => null;
+ final Scope _scope;
+ final NgControl _parentControl;
+ dom.Element _element;
+
+ final Map<String, List<NgControl>> errors = new Map<String, List<NgControl>>();
+ final List<NgControl> _controls = new List<NgControl>();
+ final Map<String, NgControl> _controlByName = new Map<String, NgControl>();
+
+ NgControl(Scope this._scope, dom.Element this._element, Injector injector)
+ : _parentControl = injector.parent.get(NgControl)
+ {
+ pristine = true;
+ untouched = true;
+
+ _scope.on('submitNgControl').listen((e) => _onSubmit(e.data));
+ }
+
+ detach() {
+ for (int i = _controls.length - 1; i >= 0; --i) {
+ removeControl(_controls[i]);
+ }
+ }
+
+ reset() {
+ _scope.broadcast('resetNgModel');
+ untouched = true;
+ }
+
+ _onSubmit(bool valid) {
+ if (valid) {
+ _submit_valid = true;
+ element.classes..add(NG_SUBMIT_VALID_CLASS)..remove(NG_SUBMIT_INVALID_CLASS);
+ } else {
+ _submit_valid = false;
+ element.classes..add(NG_SUBMIT_INVALID_CLASS)..remove(NG_SUBMIT_VALID_CLASS);
+ }
+ }
+
+ get submitted => _submit_valid != null;
+ get valid_submit => _submit_valid == true;
+ get invalid_submit => _submit_valid == false;
get name => _name;
- set name(name) => _name = name;
+ set name(value) {
+ _name = value;
+ _parentControl.addControl(this);
+ }
+
+ get element => _element;
get pristine => _pristine;
set pristine(value) {
_pristine = true;
_dirty = false;
- element.classes.remove(NG_DIRTY_CLASS);
- element.classes.add(NG_PRISTINE_CLASS);
+ element.classes..remove(NG_DIRTY_CLASS)..add(NG_PRISTINE_CLASS);
}
get dirty => _dirty;
@@ -31,8 +82,11 @@ abstract class NgControl {
_dirty = true;
_pristine = false;
- element.classes.remove(NG_PRISTINE_CLASS);
- element.classes.add(NG_DIRTY_CLASS);
+ element.classes..remove(NG_PRISTINE_CLASS)..add(NG_DIRTY_CLASS);
+
+ //as soon as one of the controls/models is modified
+ //then all of the parent controls are dirty as well
+ _parentControl.dirty = true;
}
get valid => _valid;
@@ -40,8 +94,7 @@ abstract class NgControl {
_invalid = false;
_valid = true;
- element.classes.remove(NG_INVALID_CLASS);
- element.classes.add(NG_VALID_CLASS);
+ element.classes..remove(NG_INVALID_CLASS)..add(NG_VALID_CLASS);
}
get invalid => _invalid;
@@ -49,8 +102,134 @@ abstract class NgControl {
_valid = false;
_invalid = true;
- element.classes.remove(NG_VALID_CLASS);
- element.classes.add(NG_INVALID_CLASS);
+ element.classes..remove(NG_VALID_CLASS)..add(NG_INVALID_CLASS);
+ }
+
+ get touched => _touched;
+ set touched(value) {
+ _touched = true;
+ _untouched = false;
+
+ element.classes..remove(NG_UNTOUCHED_CLASS)..add(NG_TOUCHED_CLASS);
+
+ //as soon as one of the controls/models is touched
+ //then all of the parent controls are touched as well
+ _parentControl.touched = true;
}
+ get untouched => _untouched;
+ set untouched(value) {
+ _touched = false;
+ _untouched = true;
+ element.classes..remove(NG_TOUCHED_CLASS)..add(NG_UNTOUCHED_CLASS);
+ }
+
+ /**
+ * Registers a form control into the form for validation.
+ *
+ * * [control] - The form control which will be registered (see [ngControl]).
+ */
+ addControl(NgControl control) {
+ _controls.add(control);
+ if (control.name != null) {
+ _controlByName[control.name] = control;
+ }
+ }
+
+ /**
+ * De-registers a form control from the list of controls associated with the
+ * form.
+ *
+ * * [control] - The form control which will be de-registered (see
+ * [ngControl]).
+ */
+ removeControl(NgControl control) {
+ _controls.remove(control);
+ if (control.name != null) {
+ _controlByName.remove(control.name);
+ }
+ }
+
+ /**
+ * Sets the validity status of the given control/errorType pair within
+ * the list of controls registered on the form. Depending on the validation
+ * state of the existing controls, this will either change valid to true
+ * or invalid to true depending on if all controls are valid or if one
+ * or more of them is invalid.
+ *
+ * * [control] - The registered control object (see [ngControl]).
+ * * [errorType] - The error associated with the control (e.g. required, url,
+ * number, etc...).
+ * * [isValid] - Whether the given error is valid or not (false would mean the
+ * error is real).
+ */
+ updateControlValidity(NgControl control, String errorType, bool isValid) {
+ List queue = errors[errorType];
+
+ if (isValid) {
+ if (queue != null) {
+ queue.remove(control);
+ if (queue.isEmpty) {
+ errors.remove(errorType);
+ _parentControl.updateControlValidity(this, errorType, true);
+ }
+ }
+ if (errors.isEmpty) {
+ valid = true;
+ }
+ } else {
+ if (queue == null) {
+ queue = new List<NgControl>();
+ errors[errorType] = queue;
+ _parentControl.updateControlValidity(this, errorType, false);
+ } else if (queue.contains(control)) return;
+
+ queue.add(control);
+ invalid = true;
+ }
+ }
+}
+
+class NgNullControl implements NgControl {
+ var _name, _dirty, _valid, _invalid, _submit_valid, _pristine, _element;
+ var _touched, _untouched;
+ var _controls, _scope, _parentControl, _controlName;
+ var errors, _controlByName;
+ dom.Element element;
+
+ NgNullControl() {}
+ _onSubmit(bool valid) {}
+
+ addControl(control) {}
+ removeControl(control) {}
+ updateControlValidity(NgControl control, String errorType, bool isValid) {}
+
+ get name => null;
+ set name(name) {}
+
+ get submitted => null;
+ get valid_submit => null;
+ get invalid_submit => null;
+
+ get pristine => null;
+ set pristine(value) {}
+
+ get dirty => null;
+ set dirty(value) {}
+
+ get valid => null;
+ set valid(value) {}
+
+ get invalid => null;
+ set invalid(value) {}
+
+ get touched => null;
+ set touched(value) {}
+
+ get untouched => null;
+ set untouched(value) {}
+
+ reset() => null;
+ detach() => null;
+
}
« no previous file with comments | « third_party/pkg/angular/lib/directive/ng_class.dart ('k') | third_party/pkg/angular/lib/directive/ng_events.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698