<!-- @license Copyright (c) 2015 The Polymer Project Authors. All rights reserved. This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as part of the polymer project is also subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt --> <link rel="import" href="../polymer/polymer.html"> <link rel="import" href="../iron-meta/iron-meta.html"> <script> /** * Use `Polymer.IronValidatableBehavior` to implement an element that validates user input. * * ### Accessiblity * * Changing the `invalid` property, either manually or by calling `validate()` will update the * `aria-invalid` attribute. * * @demo demo/index.html * @polymerBehavior */ Polymer.IronValidatableBehavior = { properties: { /** * Namespace for this validator. */ validatorType: { type: String, value: 'validator' }, /** * Name of the validator to use. */ validator: { type: String }, /** * True if the last call to `validate` is invalid. */ invalid: { notify: true, reflectToAttribute: true, type: Boolean, value: false }, _validatorMeta: { type: Object } }, observers: [ '_invalidChanged(invalid)' ], get _validator() { return this._validatorMeta && this._validatorMeta.byKey(this.validator); }, ready: function() { this._validatorMeta = new Polymer.IronMeta({type: this.validatorType}); }, _invalidChanged: function() { if (this.invalid) { this.setAttribute('aria-invalid', 'true'); } else { this.removeAttribute('aria-invalid'); } }, /** * @return {boolean} True if the validator `validator` exists. */ hasValidator: function() { return this._validator != null; }, /** * @param {Object} values Passed to the validator's `validate()` function. * @return {boolean} True if `values` is valid. */ validate: function(values) { var valid = true; if (this.hasValidator()) { valid = this._validator.validate(values); } this.invalid = !valid; return valid; } }; </script>