Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / third_party / polymer / v1_0 / components-chromium / iron-validatable-behavior / iron-validatable-behavior-extracted.js
blob2a46c879e192a097f58af6c5f9c0b178439b80dd
3   /**
4    * Use `Polymer.IronValidatableBehavior` to implement an element that validates user input.
5    *
6    * ### Accessibility
7    *
8    * Changing the `invalid` property, either manually or by calling `validate()` will update the
9    * `aria-invalid` attribute.
10    *
11    * @demo demo/index.html
12    * @polymerBehavior
13    */
14   Polymer.IronValidatableBehavior = {
16     properties: {
18       /**
19        * Namespace for this validator.
20        */
21       validatorType: {
22         type: String,
23         value: 'validator'
24       },
26       /**
27        * Name of the validator to use.
28        */
29       validator: {
30         type: String
31       },
33       /**
34        * True if the last call to `validate` is invalid.
35        */
36       invalid: {
37         notify: true,
38         reflectToAttribute: true,
39         type: Boolean,
40         value: false
41       },
43       _validatorMeta: {
44         type: Object
45       }
47     },
49     observers: [
50       '_invalidChanged(invalid)'
51     ],
53     get _validator() {
54       return this._validatorMeta && this._validatorMeta.byKey(this.validator);
55     },
57     ready: function() {
58       this._validatorMeta = new Polymer.IronMeta({type: this.validatorType});
59     },
61     _invalidChanged: function() {
62       if (this.invalid) {
63         this.setAttribute('aria-invalid', 'true');
64       } else {
65         this.removeAttribute('aria-invalid');
66       }
67     },
69     /**
70      * @return {boolean} True if the validator `validator` exists.
71      */
72     hasValidator: function() {
73       return this._validator != null;
74     },
76     /**
77      * Returns true if the `value` is valid, and updates `invalid`. If you want
78      * your element to have custom validation logic, do not override this method;
79      * override `_getValidity(value)` instead.
81      * @param {Object} value The value to be validated. By default, it is passed
82      * to the validator's `validate()` function, if a validator is set.
83      * @return {boolean} True if `value` is valid.
84      */
85     validate: function(value) {
86       this.invalid = !this._getValidity(value);
87       return !this.invalid;
88     },
90     /**
91      * Returns true if `value` is valid.  By default, it is passed
92      * to the validator's `validate()` function, if a validator is set. You
93      * should override this method if you want to implement custom validity
94      * logic for your element.
95      *
96      * @param {Object} value The value to be validated.
97      * @return {boolean} True if `value` is valid.
98      */
100     _getValidity: function(value) {
101       if (this.hasValidator()) {
102         return this._validator.validate(value);
103       }
104       return true;
105     }
106   };