UNPKG

spincycle

Version:

A reactive message router and object manager that lets clients subscribe to object property changes on the server

150 lines (130 loc) 4.71 kB
<!-- @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> /** * Singleton IronMeta instance. */ Polymer.IronValidatableBehaviorMeta = null; /** * `Use Polymer.IronValidatableBehavior` to implement an element that validates user input. * Use the related `Polymer.IronValidatorBehavior` to add custom validation logic to an iron-input. * * By default, an `<iron-form>` element validates its fields when the user presses the submit button. * To validate a form imperatively, call the form's `validate()` method, which in turn will * call `validate()` on all its children. By using `Polymer.IronValidatableBehavior`, your * custom element will get a public `validate()`, which * will return the validity of the element, and a corresponding `invalid` attribute, * which can be used for styling. * * To implement the custom validation logic of your element, you must override * the protected `_getValidity()` method of this behaviour, rather than `validate()`. * See [this](https://github.com/PolymerElements/iron-form/blob/master/demo/simple-element.html) * for an example. * * ### Accessibility * * Changing the `invalid` property, either manually or by calling `validate()` will update the * `aria-invalid` attribute. * * @demo demo/index.html * @polymerBehavior */ Polymer.IronValidatableBehavior = { properties: { /** * 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 }, /** * This property is deprecated and should not be used. Use the global * validator meta singleton, `Polymer.IronValidatableBehaviorMeta` instead. */ _validatorMeta: { type: Object }, /** * Namespace for this validator. This property is deprecated and should * not be used. For all intents and purposes, please consider it a * read-only, config-time property. */ validatorType: { type: String, value: 'validator' }, _validator: { type: Object, computed: '__computeValidator(validator)' } }, observers: [ '_invalidChanged(invalid)' ], registered: function() { Polymer.IronValidatableBehaviorMeta = new Polymer.IronMeta({type: 'validator'}); }, _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; }, /** * Returns true if the `value` is valid, and updates `invalid`. If you want * your element to have custom validation logic, do not override this method; * override `_getValidity(value)` instead. * @param {Object} value The value to be validated. By default, it is passed * to the validator's `validate()` function, if a validator is set. * @return {boolean} True if `value` is valid. */ validate: function(value) { this.invalid = !this._getValidity(value); return !this.invalid; }, /** * Returns true if `value` is valid. By default, it is passed * to the validator's `validate()` function, if a validator is set. You * should override this method if you want to implement custom validity * logic for your element. * * @param {Object} value The value to be validated. * @return {boolean} True if `value` is valid. */ _getValidity: function(value) { if (this.hasValidator()) { return this._validator.validate(value); } return true; }, __computeValidator: function() { return Polymer.IronValidatableBehaviorMeta && Polymer.IronValidatableBehaviorMeta.byKey(this.validator); } }; </script>