<!-- @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"> <script> /** @polymerBehavior */ Polymer.PaperSpinnerBehavior = { listeners: { 'animationend': '__reset', 'webkitAnimationEnd': '__reset' }, properties: { /** * Displays the spinner. */ active: { type: Boolean, value: false, reflectToAttribute: true, observer: '__activeChanged' }, /** * Alternative text content for accessibility support. * If alt is present, it will add an aria-label whose content matches alt when active. * If alt is not present, it will default to 'loading' as the alt value. */ alt: { type: String, value: 'loading', observer: '__altChanged' }, __coolingDown: { type: Boolean, value: false } }, __computeContainerClasses: function(active, coolingDown) { return [ active || coolingDown ? 'active' : '', coolingDown ? 'cooldown' : '' ].join(' '); }, __activeChanged: function(active, old) { this.__setAriaHidden(!active); this.__coolingDown = !active && old; }, __altChanged: function(alt) { // user-provided `aria-label` takes precedence over prototype default if (alt === this.getPropertyInfo('alt').value) { this.alt = this.getAttribute('aria-label') || alt; } else { this.__setAriaHidden(alt===''); this.setAttribute('aria-label', alt); } }, __setAriaHidden: function(hidden) { var attr = 'aria-hidden'; if (hidden) { this.setAttribute(attr, 'true'); } else { this.removeAttribute(attr); } }, __reset: function() { this.active = false; this.__coolingDown = false; } }; </script>