-
Notifications
You must be signed in to change notification settings - Fork 22
/
paper-spinner-behavior.js
73 lines (64 loc) · 2.01 KB
/
paper-spinner-behavior.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/**
@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
*/
import '@polymer/polymer/polymer-legacy.js';
/** @polymerBehavior */
export const PaperSpinnerBehavior = {
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 === 'loading') {
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;
}
};