UNPKG

9.01 kBJavaScriptView Raw
1/**
2 * @license
3 * Copyright 2016 Google Inc.
4 *
5 * Permission is hereby granted, free of charge, to any person obtaining a copy
6 * of this software and associated documentation files (the "Software"), to deal
7 * in the Software without restriction, including without limitation the rights
8 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 * copies of the Software, and to permit persons to whom the Software is
10 * furnished to do so, subject to the following conditions:
11 *
12 * The above copyright notice and this permission notice shall be included in
13 * all copies or substantial portions of the Software.
14 *
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 * THE SOFTWARE.
22 */
23import { __assign, __extends } from "tslib";
24import { MDCFoundation } from '@material/base/foundation';
25import { cssClasses, numbers, strings } from './constants';
26var MDCCheckboxFoundation = /** @class */ (function (_super) {
27 __extends(MDCCheckboxFoundation, _super);
28 function MDCCheckboxFoundation(adapter) {
29 var _this = _super.call(this, __assign(__assign({}, MDCCheckboxFoundation.defaultAdapter), adapter)) || this;
30 _this.currentCheckState = strings.TRANSITION_STATE_INIT;
31 _this.currentAnimationClass = '';
32 _this.animEndLatchTimer = 0;
33 _this.enableAnimationEndHandler = false;
34 return _this;
35 }
36 Object.defineProperty(MDCCheckboxFoundation, "cssClasses", {
37 get: function () {
38 return cssClasses;
39 },
40 enumerable: false,
41 configurable: true
42 });
43 Object.defineProperty(MDCCheckboxFoundation, "strings", {
44 get: function () {
45 return strings;
46 },
47 enumerable: false,
48 configurable: true
49 });
50 Object.defineProperty(MDCCheckboxFoundation, "numbers", {
51 get: function () {
52 return numbers;
53 },
54 enumerable: false,
55 configurable: true
56 });
57 Object.defineProperty(MDCCheckboxFoundation, "defaultAdapter", {
58 get: function () {
59 return {
60 addClass: function () { return undefined; },
61 forceLayout: function () { return undefined; },
62 hasNativeControl: function () { return false; },
63 isAttachedToDOM: function () { return false; },
64 isChecked: function () { return false; },
65 isIndeterminate: function () { return false; },
66 removeClass: function () { return undefined; },
67 removeNativeControlAttr: function () { return undefined; },
68 setNativeControlAttr: function () { return undefined; },
69 setNativeControlDisabled: function () { return undefined; },
70 };
71 },
72 enumerable: false,
73 configurable: true
74 });
75 MDCCheckboxFoundation.prototype.init = function () {
76 this.currentCheckState = this.determineCheckState();
77 this.updateAriaChecked();
78 this.adapter.addClass(cssClasses.UPGRADED);
79 };
80 MDCCheckboxFoundation.prototype.destroy = function () {
81 clearTimeout(this.animEndLatchTimer);
82 };
83 MDCCheckboxFoundation.prototype.setDisabled = function (disabled) {
84 this.adapter.setNativeControlDisabled(disabled);
85 if (disabled) {
86 this.adapter.addClass(cssClasses.DISABLED);
87 }
88 else {
89 this.adapter.removeClass(cssClasses.DISABLED);
90 }
91 };
92 /**
93 * Handles the animationend event for the checkbox
94 */
95 MDCCheckboxFoundation.prototype.handleAnimationEnd = function () {
96 var _this = this;
97 if (!this.enableAnimationEndHandler) {
98 return;
99 }
100 clearTimeout(this.animEndLatchTimer);
101 this.animEndLatchTimer = setTimeout(function () {
102 _this.adapter.removeClass(_this.currentAnimationClass);
103 _this.enableAnimationEndHandler = false;
104 }, numbers.ANIM_END_LATCH_MS);
105 };
106 /**
107 * Handles the change event for the checkbox
108 */
109 MDCCheckboxFoundation.prototype.handleChange = function () {
110 this.transitionCheckState();
111 };
112 MDCCheckboxFoundation.prototype.transitionCheckState = function () {
113 if (!this.adapter.hasNativeControl()) {
114 return;
115 }
116 var oldState = this.currentCheckState;
117 var newState = this.determineCheckState();
118 if (oldState === newState) {
119 return;
120 }
121 this.updateAriaChecked();
122 var TRANSITION_STATE_UNCHECKED = strings.TRANSITION_STATE_UNCHECKED;
123 var SELECTED = cssClasses.SELECTED;
124 if (newState === TRANSITION_STATE_UNCHECKED) {
125 this.adapter.removeClass(SELECTED);
126 }
127 else {
128 this.adapter.addClass(SELECTED);
129 }
130 // Check to ensure that there isn't a previously existing animation class, in case for example
131 // the user interacted with the checkbox before the animation was finished.
132 if (this.currentAnimationClass.length > 0) {
133 clearTimeout(this.animEndLatchTimer);
134 this.adapter.forceLayout();
135 this.adapter.removeClass(this.currentAnimationClass);
136 }
137 this.currentAnimationClass =
138 this.getTransitionAnimationClass(oldState, newState);
139 this.currentCheckState = newState;
140 // Check for parentNode so that animations are only run when the element is attached
141 // to the DOM.
142 if (this.adapter.isAttachedToDOM() &&
143 this.currentAnimationClass.length > 0) {
144 this.adapter.addClass(this.currentAnimationClass);
145 this.enableAnimationEndHandler = true;
146 }
147 };
148 MDCCheckboxFoundation.prototype.determineCheckState = function () {
149 var TRANSITION_STATE_INDETERMINATE = strings.TRANSITION_STATE_INDETERMINATE, TRANSITION_STATE_CHECKED = strings.TRANSITION_STATE_CHECKED, TRANSITION_STATE_UNCHECKED = strings.TRANSITION_STATE_UNCHECKED;
150 if (this.adapter.isIndeterminate()) {
151 return TRANSITION_STATE_INDETERMINATE;
152 }
153 return this.adapter.isChecked() ? TRANSITION_STATE_CHECKED :
154 TRANSITION_STATE_UNCHECKED;
155 };
156 MDCCheckboxFoundation.prototype.getTransitionAnimationClass = function (oldState, newState) {
157 var TRANSITION_STATE_INIT = strings.TRANSITION_STATE_INIT, TRANSITION_STATE_CHECKED = strings.TRANSITION_STATE_CHECKED, TRANSITION_STATE_UNCHECKED = strings.TRANSITION_STATE_UNCHECKED;
158 var _a = MDCCheckboxFoundation.cssClasses, ANIM_UNCHECKED_CHECKED = _a.ANIM_UNCHECKED_CHECKED, ANIM_UNCHECKED_INDETERMINATE = _a.ANIM_UNCHECKED_INDETERMINATE, ANIM_CHECKED_UNCHECKED = _a.ANIM_CHECKED_UNCHECKED, ANIM_CHECKED_INDETERMINATE = _a.ANIM_CHECKED_INDETERMINATE, ANIM_INDETERMINATE_CHECKED = _a.ANIM_INDETERMINATE_CHECKED, ANIM_INDETERMINATE_UNCHECKED = _a.ANIM_INDETERMINATE_UNCHECKED;
159 switch (oldState) {
160 case TRANSITION_STATE_INIT:
161 if (newState === TRANSITION_STATE_UNCHECKED) {
162 return '';
163 }
164 return newState === TRANSITION_STATE_CHECKED ? ANIM_INDETERMINATE_CHECKED : ANIM_INDETERMINATE_UNCHECKED;
165 case TRANSITION_STATE_UNCHECKED:
166 return newState === TRANSITION_STATE_CHECKED ? ANIM_UNCHECKED_CHECKED : ANIM_UNCHECKED_INDETERMINATE;
167 case TRANSITION_STATE_CHECKED:
168 return newState === TRANSITION_STATE_UNCHECKED ? ANIM_CHECKED_UNCHECKED : ANIM_CHECKED_INDETERMINATE;
169 default: // TRANSITION_STATE_INDETERMINATE
170 return newState === TRANSITION_STATE_CHECKED ? ANIM_INDETERMINATE_CHECKED : ANIM_INDETERMINATE_UNCHECKED;
171 }
172 };
173 MDCCheckboxFoundation.prototype.updateAriaChecked = function () {
174 // Ensure aria-checked is set to mixed if checkbox is in indeterminate state.
175 if (this.adapter.isIndeterminate()) {
176 this.adapter.setNativeControlAttr(strings.ARIA_CHECKED_ATTR, strings.ARIA_CHECKED_INDETERMINATE_VALUE);
177 }
178 else {
179 // The on/off state does not need to keep track of aria-checked, since
180 // the screenreader uses the checked property on the checkbox element.
181 this.adapter.removeNativeControlAttr(strings.ARIA_CHECKED_ATTR);
182 }
183 };
184 return MDCCheckboxFoundation;
185}(MDCFoundation));
186export { MDCCheckboxFoundation };
187// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.
188export default MDCCheckboxFoundation;
189//# sourceMappingURL=foundation.js.map
\No newline at end of file