material_design_lite-sass 1.0.6.3 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +5 -2
- data/CHANGELOG.md +9 -0
- data/README.md +41 -32
- data/lib/material_design_lite/sass/version.rb +1 -1
- data/vendor/assets/javascripts/material.js +377 -301
- data/vendor/assets/javascripts/material/button.js +0 -24
- data/vendor/assets/javascripts/material/checkbox.js +0 -26
- data/vendor/assets/javascripts/material/data-table.js +18 -10
- data/vendor/assets/javascripts/material/icon-toggle.js +0 -26
- data/vendor/assets/javascripts/material/layout.js +104 -6
- data/vendor/assets/javascripts/material/mdlComponentHandler.js +15 -36
- data/vendor/assets/javascripts/material/menu.js +16 -36
- data/vendor/assets/javascripts/material/progress.js +0 -22
- data/vendor/assets/javascripts/material/radio.js +0 -28
- data/vendor/assets/javascripts/material/ripple.js +6 -35
- data/vendor/assets/javascripts/material/slider.js +0 -23
- data/vendor/assets/javascripts/material/snackbar.js +189 -0
- data/vendor/assets/javascripts/material/switch.js +0 -26
- data/vendor/assets/javascripts/material/tabs.js +2 -2
- data/vendor/assets/javascripts/material/textfield.js +32 -25
- data/vendor/assets/javascripts/material/tooltip.js +39 -49
- data/vendor/assets/stylesheets/_material.scss +3 -0
- data/vendor/assets/stylesheets/material/_badge.scss +6 -0
- data/vendor/assets/stylesheets/material/_button.scss +3 -3
- data/vendor/assets/stylesheets/material/_checkbox.scss +5 -0
- data/vendor/assets/stylesheets/material/_data-table.scss +17 -9
- data/vendor/assets/stylesheets/material/_dialog.scss +57 -0
- data/vendor/assets/stylesheets/material/_grid.scss +60 -0
- data/vendor/assets/stylesheets/material/_layout.scss +77 -3
- data/vendor/assets/stylesheets/material/_list.scss +103 -0
- data/vendor/assets/stylesheets/material/_mega_footer.scss +1 -1
- data/vendor/assets/stylesheets/material/_menu.scss +5 -1
- data/vendor/assets/stylesheets/material/_mixins.scss +33 -0
- data/vendor/assets/stylesheets/material/_progress.scss +5 -0
- data/vendor/assets/stylesheets/material/_radio.scss +5 -0
- data/vendor/assets/stylesheets/material/_shadow.scss +4 -0
- data/vendor/assets/stylesheets/material/_snackbar.scss +81 -0
- data/vendor/assets/stylesheets/material/_switch.scss +5 -1
- data/vendor/assets/stylesheets/material/_tabs.scss +0 -1
- data/vendor/assets/stylesheets/material/_textfield.scss +13 -3
- data/vendor/assets/stylesheets/material/_typography.scss +4 -0
- data/vendor/assets/stylesheets/material/_variables.scss +102 -81
- metadata +7 -3
@@ -112,28 +112,6 @@
|
|
112
112
|
}
|
113
113
|
};
|
114
114
|
|
115
|
-
/**
|
116
|
-
* Downgrade the component
|
117
|
-
*
|
118
|
-
* @private
|
119
|
-
*/
|
120
|
-
MaterialProgress.prototype.mdlDowngrade_ = function() {
|
121
|
-
while (this.element_.firstChild) {
|
122
|
-
this.element_.removeChild(this.element_.firstChild);
|
123
|
-
}
|
124
|
-
};
|
125
|
-
|
126
|
-
/**
|
127
|
-
* Public alias for the downgrade method.
|
128
|
-
*
|
129
|
-
* @public
|
130
|
-
*/
|
131
|
-
MaterialProgress.prototype.mdlDowngrade =
|
132
|
-
MaterialProgress.prototype.mdlDowngrade_;
|
133
|
-
|
134
|
-
MaterialProgress.prototype['mdlDowngrade'] =
|
135
|
-
MaterialProgress.prototype.mdlDowngrade;
|
136
|
-
|
137
115
|
// The component registers itself. It can assume componentHandler is available
|
138
116
|
// in the global scope.
|
139
117
|
componentHandler.register({
|
@@ -268,34 +268,6 @@
|
|
268
268
|
}
|
269
269
|
};
|
270
270
|
|
271
|
-
/**
|
272
|
-
* Downgrade the element.
|
273
|
-
*
|
274
|
-
* @private
|
275
|
-
*/
|
276
|
-
MaterialRadio.prototype.mdlDowngrade_ = function() {
|
277
|
-
var rippleContainer = this.element_.querySelector('.' +
|
278
|
-
this.CssClasses_.RIPPLE_CONTAINER);
|
279
|
-
this.btnElement_.removeEventListener('change', this.boundChangeHandler_);
|
280
|
-
this.btnElement_.removeEventListener('focus', this.boundFocusHandler_);
|
281
|
-
this.btnElement_.removeEventListener('blur', this.boundBlurHandler_);
|
282
|
-
this.element_.removeEventListener('mouseup', this.boundMouseUpHandler_);
|
283
|
-
if (rippleContainer) {
|
284
|
-
rippleContainer.removeEventListener('mouseup', this.boundMouseUpHandler_);
|
285
|
-
this.element_.removeChild(rippleContainer);
|
286
|
-
}
|
287
|
-
};
|
288
|
-
|
289
|
-
/**
|
290
|
-
* Public alias for the downgrade method.
|
291
|
-
*
|
292
|
-
* @public
|
293
|
-
*/
|
294
|
-
MaterialRadio.prototype.mdlDowngrade = MaterialRadio.prototype.mdlDowngrade_;
|
295
|
-
|
296
|
-
MaterialRadio.prototype['mdlDowngrade'] =
|
297
|
-
MaterialRadio.prototype.mdlDowngrade;
|
298
|
-
|
299
271
|
// The component registers itself. It can assume componentHandler is available
|
300
272
|
// in the global scope.
|
301
273
|
componentHandler.register({
|
@@ -122,14 +122,13 @@
|
|
122
122
|
MaterialRipple.prototype.upHandler_ = function(event) {
|
123
123
|
// Don't fire for the artificial "mouseup" generated by a double-click.
|
124
124
|
if (event && event.detail !== 2) {
|
125
|
-
this
|
125
|
+
// Allow a repaint to occur before removing this class, so the animation
|
126
|
+
// shows for tap events, which seem to trigger a mouseup too soon after
|
127
|
+
// mousedown.
|
128
|
+
window.setTimeout(function() {
|
129
|
+
this.rippleElement_.classList.remove(this.CssClasses_.IS_VISIBLE);
|
130
|
+
}.bind(this), 0);
|
126
131
|
}
|
127
|
-
// Allow a repaint to occur before removing this class, so the animation
|
128
|
-
// shows for tap events, which seem to trigger a mouseup too soon after
|
129
|
-
// mousedown.
|
130
|
-
window.setTimeout(function() {
|
131
|
-
this.rippleElement_.classList.remove(this.CssClasses_.IS_VISIBLE);
|
132
|
-
}.bind(this), 0);
|
133
132
|
};
|
134
133
|
|
135
134
|
/**
|
@@ -250,34 +249,6 @@
|
|
250
249
|
}
|
251
250
|
};
|
252
251
|
|
253
|
-
/**
|
254
|
-
* Downgrade the component
|
255
|
-
*
|
256
|
-
* @private
|
257
|
-
*/
|
258
|
-
MaterialRipple.prototype.mdlDowngrade_ = function() {
|
259
|
-
this.element_.removeEventListener('mousedown',
|
260
|
-
this.boundDownHandler);
|
261
|
-
this.element_.removeEventListener('touchstart',
|
262
|
-
this.boundDownHandler);
|
263
|
-
|
264
|
-
this.element_.removeEventListener('mouseup', this.boundUpHandler);
|
265
|
-
this.element_.removeEventListener('mouseleave', this.boundUpHandler);
|
266
|
-
this.element_.removeEventListener('touchend', this.boundUpHandler);
|
267
|
-
this.element_.removeEventListener('blur', this.boundUpHandler);
|
268
|
-
};
|
269
|
-
|
270
|
-
/**
|
271
|
-
* Public alias for the downgrade method.
|
272
|
-
*
|
273
|
-
* @public
|
274
|
-
*/
|
275
|
-
MaterialRipple.prototype.mdlDowngrade =
|
276
|
-
MaterialRipple.prototype.mdlDowngrade_;
|
277
|
-
|
278
|
-
MaterialRipple.prototype['mdlDowngrade'] =
|
279
|
-
MaterialRipple.prototype.mdlDowngrade;
|
280
|
-
|
281
252
|
// The component registers itself. It can assume componentHandler is available
|
282
253
|
// in the global scope.
|
283
254
|
componentHandler.register({
|
@@ -233,29 +233,6 @@
|
|
233
233
|
}
|
234
234
|
};
|
235
235
|
|
236
|
-
/**
|
237
|
-
* Downgrade the component
|
238
|
-
*
|
239
|
-
* @private
|
240
|
-
*/
|
241
|
-
MaterialSlider.prototype.mdlDowngrade_ = function() {
|
242
|
-
this.element_.removeEventListener('input', this.boundInputHandler);
|
243
|
-
this.element_.removeEventListener('change', this.boundChangeHandler);
|
244
|
-
this.element_.removeEventListener('mouseup', this.boundMouseUpHandler);
|
245
|
-
this.element_.parentElement.removeEventListener('mousedown', this.boundContainerMouseDownHandler);
|
246
|
-
};
|
247
|
-
|
248
|
-
/**
|
249
|
-
* Public alias for the downgrade method.
|
250
|
-
*
|
251
|
-
* @public
|
252
|
-
*/
|
253
|
-
MaterialSlider.prototype.mdlDowngrade =
|
254
|
-
MaterialSlider.prototype.mdlDowngrade_;
|
255
|
-
|
256
|
-
MaterialSlider.prototype['mdlDowngrade'] =
|
257
|
-
MaterialSlider.prototype.mdlDowngrade;
|
258
|
-
|
259
236
|
// The component registers itself. It can assume componentHandler is available
|
260
237
|
// in the global scope.
|
261
238
|
componentHandler.register({
|
@@ -0,0 +1,189 @@
|
|
1
|
+
/**
|
2
|
+
* Copyright 2015 Google Inc. All Rights Reserved.
|
3
|
+
*
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
* you may not use this file except in compliance with the License.
|
6
|
+
* You may obtain a copy of the License at
|
7
|
+
*
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
*
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
* See the License for the specific language governing permissions and
|
14
|
+
* limitations under the License.
|
15
|
+
*/
|
16
|
+
(function() {
|
17
|
+
'use strict';
|
18
|
+
|
19
|
+
/**
|
20
|
+
* Class constructor for Snackbar MDL component.
|
21
|
+
* Implements MDL component design pattern defined at:
|
22
|
+
* https://github.com/jasonmayes/mdl-component-design-pattern
|
23
|
+
*
|
24
|
+
* @constructor
|
25
|
+
* @param {HTMLElement} element The element that will be upgraded.
|
26
|
+
*/
|
27
|
+
var MaterialSnackbar = function MaterialSnackbar(element) {
|
28
|
+
this.element_ = element;
|
29
|
+
this.textElement_ = this.element_.querySelector('.' + this.cssClasses_.MESSAGE);
|
30
|
+
this.actionElement_ = this.element_.querySelector('.' + this.cssClasses_.ACTION);
|
31
|
+
if (!this.textElement_) {
|
32
|
+
throw new Error('There must be a message element for a snackbar.');
|
33
|
+
}
|
34
|
+
if (!this.actionElement_) {
|
35
|
+
throw new Error('There must be an action element for a snackbar.');
|
36
|
+
}
|
37
|
+
this.active = false;
|
38
|
+
this.actionHandler_ = undefined;
|
39
|
+
this.message_ = undefined;
|
40
|
+
this.actionText_ = undefined;
|
41
|
+
this.queuedNotifications_ = [];
|
42
|
+
this.setActionHidden_(true);
|
43
|
+
};
|
44
|
+
window['MaterialSnackbar'] = MaterialSnackbar;
|
45
|
+
|
46
|
+
/**
|
47
|
+
* Store constants in one place so they can be updated easily.
|
48
|
+
*
|
49
|
+
* @enum {string | number}
|
50
|
+
* @private
|
51
|
+
*/
|
52
|
+
MaterialSnackbar.prototype.Constant_ = {
|
53
|
+
// The duration of the snackbar show/hide animation, in ms.
|
54
|
+
ANIMATION_LENGTH: 250
|
55
|
+
};
|
56
|
+
|
57
|
+
/**
|
58
|
+
* Store strings for class names defined by this component that are used in
|
59
|
+
* JavaScript. This allows us to simply change it in one place should we
|
60
|
+
* decide to modify at a later date.
|
61
|
+
*
|
62
|
+
* @enum {string}
|
63
|
+
* @private
|
64
|
+
*/
|
65
|
+
MaterialSnackbar.prototype.cssClasses_ = {
|
66
|
+
SNACKBAR: 'mdl-snackbar',
|
67
|
+
MESSAGE: 'mdl-snackbar__text',
|
68
|
+
ACTION: 'mdl-snackbar__action',
|
69
|
+
ACTIVE: 'mdl-snackbar--active'
|
70
|
+
};
|
71
|
+
|
72
|
+
/**
|
73
|
+
* Display the snackbar.
|
74
|
+
*
|
75
|
+
* @private
|
76
|
+
*/
|
77
|
+
MaterialSnackbar.prototype.displaySnackbar_ = function() {
|
78
|
+
this.element_.setAttribute('aria-hidden', 'true');
|
79
|
+
|
80
|
+
if (this.actionHandler_) {
|
81
|
+
this.actionElement_.textContent = this.actionText_;
|
82
|
+
this.actionElement_.addEventListener('click', this.actionHandler_);
|
83
|
+
this.setActionHidden_(false);
|
84
|
+
}
|
85
|
+
|
86
|
+
this.textElement_.textContent = this.message_;
|
87
|
+
this.element_.classList.add(this.cssClasses_.ACTIVE);
|
88
|
+
this.element_.setAttribute('aria-hidden', 'false');
|
89
|
+
setTimeout(this.cleanup_.bind(this), this.timeout_);
|
90
|
+
|
91
|
+
};
|
92
|
+
|
93
|
+
/**
|
94
|
+
* Show the snackbar.
|
95
|
+
*
|
96
|
+
* @param {Object} data The data for the notification.
|
97
|
+
* @public
|
98
|
+
*/
|
99
|
+
MaterialSnackbar.prototype.showSnackbar = function(data) {
|
100
|
+
if (data === undefined) {
|
101
|
+
throw new Error(
|
102
|
+
'Please provide a data object with at least a message to display.');
|
103
|
+
}
|
104
|
+
if (data['message'] === undefined) {
|
105
|
+
throw new Error('Please provide a message to be displayed.');
|
106
|
+
}
|
107
|
+
if (data['actionHandler'] && !data['actionText']) {
|
108
|
+
throw new Error('Please provide action text with the handler.');
|
109
|
+
}
|
110
|
+
if (this.active) {
|
111
|
+
this.queuedNotifications_.push(data);
|
112
|
+
} else {
|
113
|
+
this.active = true;
|
114
|
+
this.message_ = data['message'];
|
115
|
+
if (data['timeout']) {
|
116
|
+
this.timeout_ = data['timeout'];
|
117
|
+
} else {
|
118
|
+
this.timeout_ = 2750;
|
119
|
+
}
|
120
|
+
if (data['actionHandler']) {
|
121
|
+
this.actionHandler_ = data['actionHandler'];
|
122
|
+
}
|
123
|
+
if (data['actionText']) {
|
124
|
+
this.actionText_ = data['actionText'];
|
125
|
+
}
|
126
|
+
this.displaySnackbar_();
|
127
|
+
}
|
128
|
+
};
|
129
|
+
MaterialSnackbar.prototype['showSnackbar'] = MaterialSnackbar.prototype.showSnackbar;
|
130
|
+
|
131
|
+
/**
|
132
|
+
* Check if the queue has items within it.
|
133
|
+
* If it does, display the next entry.
|
134
|
+
*
|
135
|
+
* @private
|
136
|
+
*/
|
137
|
+
MaterialSnackbar.prototype.checkQueue_ = function() {
|
138
|
+
if (this.queuedNotifications_.length > 0) {
|
139
|
+
this.showSnackbar(this.queuedNotifications_.shift());
|
140
|
+
}
|
141
|
+
};
|
142
|
+
|
143
|
+
/**
|
144
|
+
* Cleanup the snackbar event listeners and accessiblity attributes.
|
145
|
+
*
|
146
|
+
* @private
|
147
|
+
*/
|
148
|
+
MaterialSnackbar.prototype.cleanup_ = function() {
|
149
|
+
this.element_.classList.remove(this.cssClasses_.ACTIVE);
|
150
|
+
setTimeout(function() {
|
151
|
+
this.element_.setAttribute('aria-hidden', 'true');
|
152
|
+
this.textElement_.textContent = '';
|
153
|
+
if (!Boolean(this.actionElement_.getAttribute('aria-hidden'))) {
|
154
|
+
this.setActionHidden_(true);
|
155
|
+
this.actionElement_.textContent = '';
|
156
|
+
this.actionElement_.removeEventListener('click', this.actionHandler_);
|
157
|
+
}
|
158
|
+
this.actionHandler_ = undefined;
|
159
|
+
this.message_ = undefined;
|
160
|
+
this.actionText_ = undefined;
|
161
|
+
this.active = false;
|
162
|
+
this.checkQueue_();
|
163
|
+
}.bind(this), /** @type {number} */ (this.Constant_.ANIMATION_LENGTH));
|
164
|
+
};
|
165
|
+
|
166
|
+
/**
|
167
|
+
* Set the action handler hidden state.
|
168
|
+
*
|
169
|
+
* @param {boolean} value
|
170
|
+
* @private
|
171
|
+
*/
|
172
|
+
MaterialSnackbar.prototype.setActionHidden_ = function(value) {
|
173
|
+
if (value) {
|
174
|
+
this.actionElement_.setAttribute('aria-hidden', 'true');
|
175
|
+
} else {
|
176
|
+
this.actionElement_.removeAttribute('aria-hidden');
|
177
|
+
}
|
178
|
+
};
|
179
|
+
|
180
|
+
// The component registers itself. It can assume componentHandler is available
|
181
|
+
// in the global scope.
|
182
|
+
componentHandler.register({
|
183
|
+
constructor: MaterialSnackbar,
|
184
|
+
classAsString: 'MaterialSnackbar',
|
185
|
+
cssClass: 'mdl-js-snackbar',
|
186
|
+
widget: true
|
187
|
+
});
|
188
|
+
|
189
|
+
})();
|
@@ -262,32 +262,6 @@
|
|
262
262
|
}
|
263
263
|
};
|
264
264
|
|
265
|
-
/**
|
266
|
-
* Downgrade the component.
|
267
|
-
*
|
268
|
-
* @private
|
269
|
-
*/
|
270
|
-
MaterialSwitch.prototype.mdlDowngrade_ = function() {
|
271
|
-
if (this.rippleContainerElement_) {
|
272
|
-
this.rippleContainerElement_.removeEventListener('mouseup', this.boundMouseUpHandler);
|
273
|
-
}
|
274
|
-
this.inputElement_.removeEventListener('change', this.boundChangeHandler);
|
275
|
-
this.inputElement_.removeEventListener('focus', this.boundFocusHandler);
|
276
|
-
this.inputElement_.removeEventListener('blur', this.boundBlurHandler);
|
277
|
-
this.element_.removeEventListener('mouseup', this.boundMouseUpHandler);
|
278
|
-
};
|
279
|
-
|
280
|
-
/**
|
281
|
-
* Public alias for the downgrade method.
|
282
|
-
*
|
283
|
-
* @public
|
284
|
-
*/
|
285
|
-
MaterialSwitch.prototype.mdlDowngrade =
|
286
|
-
MaterialSwitch.prototype.mdlDowngrade_;
|
287
|
-
|
288
|
-
MaterialSwitch.prototype['mdlDowngrade'] =
|
289
|
-
MaterialSwitch.prototype.mdlDowngrade;
|
290
|
-
|
291
265
|
// The component registers itself. It can assume componentHandler is available
|
292
266
|
// in the global scope.
|
293
267
|
componentHandler.register({
|
@@ -24,7 +24,7 @@
|
|
24
24
|
* https://github.com/jasonmayes/mdl-component-design-pattern
|
25
25
|
*
|
26
26
|
* @constructor
|
27
|
-
* @param {
|
27
|
+
* @param {Element} element The element that will be upgraded.
|
28
28
|
*/
|
29
29
|
var MaterialTabs = function MaterialTabs(element) {
|
30
30
|
// Stores the HTML element.
|
@@ -124,7 +124,7 @@
|
|
124
124
|
* Constructor for an individual tab.
|
125
125
|
*
|
126
126
|
* @constructor
|
127
|
-
* @param {
|
127
|
+
* @param {Element} tab The HTML element for the tab.
|
128
128
|
* @param {MaterialTabs} ctx The MaterialTabs object that owns the tab.
|
129
129
|
*/
|
130
130
|
function MaterialTab(tab, ctx) {
|
@@ -98,6 +98,16 @@
|
|
98
98
|
this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);
|
99
99
|
};
|
100
100
|
|
101
|
+
/**
|
102
|
+
* Handle reset event from out side.
|
103
|
+
*
|
104
|
+
* @param {Event} event The event that fired.
|
105
|
+
* @private
|
106
|
+
*/
|
107
|
+
MaterialTextfield.prototype.onReset_ = function(event) {
|
108
|
+
this.updateClasses_();
|
109
|
+
};
|
110
|
+
|
101
111
|
/**
|
102
112
|
* Handle class updates.
|
103
113
|
*
|
@@ -107,6 +117,7 @@
|
|
107
117
|
this.checkDisabled();
|
108
118
|
this.checkValidity();
|
109
119
|
this.checkDirty();
|
120
|
+
this.checkFocus();
|
110
121
|
};
|
111
122
|
|
112
123
|
// Public methods.
|
@@ -126,6 +137,21 @@
|
|
126
137
|
MaterialTextfield.prototype['checkDisabled'] =
|
127
138
|
MaterialTextfield.prototype.checkDisabled;
|
128
139
|
|
140
|
+
/**
|
141
|
+
* Check the focus state and update field accordingly.
|
142
|
+
*
|
143
|
+
* @public
|
144
|
+
*/
|
145
|
+
MaterialTextfield.prototype.checkFocus = function() {
|
146
|
+
if (Boolean(this.element_.querySelector(':focus'))) {
|
147
|
+
this.element_.classList.add(this.CssClasses_.IS_FOCUSED);
|
148
|
+
} else {
|
149
|
+
this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);
|
150
|
+
}
|
151
|
+
};
|
152
|
+
MaterialTextfield.prototype['checkFocus'] =
|
153
|
+
MaterialTextfield.prototype.checkFocus;
|
154
|
+
|
129
155
|
/**
|
130
156
|
* Check the validity state and update field accordingly.
|
131
157
|
*
|
@@ -215,9 +241,11 @@
|
|
215
241
|
this.boundUpdateClassesHandler = this.updateClasses_.bind(this);
|
216
242
|
this.boundFocusHandler = this.onFocus_.bind(this);
|
217
243
|
this.boundBlurHandler = this.onBlur_.bind(this);
|
244
|
+
this.boundResetHandler = this.onReset_.bind(this);
|
218
245
|
this.input_.addEventListener('input', this.boundUpdateClassesHandler);
|
219
246
|
this.input_.addEventListener('focus', this.boundFocusHandler);
|
220
247
|
this.input_.addEventListener('blur', this.boundBlurHandler);
|
248
|
+
this.input_.addEventListener('reset', this.boundResetHandler);
|
221
249
|
|
222
250
|
if (this.maxRows !== this.Constant_.NO_MAX_ROWS) {
|
223
251
|
// TODO: This should handle pasting multi line text.
|
@@ -232,35 +260,14 @@
|
|
232
260
|
if (invalid) {
|
233
261
|
this.element_.classList.add(this.CssClasses_.IS_INVALID);
|
234
262
|
}
|
263
|
+
if (this.input_.hasAttribute('autofocus')) {
|
264
|
+
this.element_.focus();
|
265
|
+
this.checkFocus();
|
266
|
+
}
|
235
267
|
}
|
236
268
|
}
|
237
269
|
};
|
238
270
|
|
239
|
-
/**
|
240
|
-
* Downgrade the component
|
241
|
-
*
|
242
|
-
* @private
|
243
|
-
*/
|
244
|
-
MaterialTextfield.prototype.mdlDowngrade_ = function() {
|
245
|
-
this.input_.removeEventListener('input', this.boundUpdateClassesHandler);
|
246
|
-
this.input_.removeEventListener('focus', this.boundFocusHandler);
|
247
|
-
this.input_.removeEventListener('blur', this.boundBlurHandler);
|
248
|
-
if (this.boundKeyDownHandler) {
|
249
|
-
this.input_.removeEventListener('keydown', this.boundKeyDownHandler);
|
250
|
-
}
|
251
|
-
};
|
252
|
-
|
253
|
-
/**
|
254
|
-
* Public alias for the downgrade method.
|
255
|
-
*
|
256
|
-
* @public
|
257
|
-
*/
|
258
|
-
MaterialTextfield.prototype.mdlDowngrade =
|
259
|
-
MaterialTextfield.prototype.mdlDowngrade_;
|
260
|
-
|
261
|
-
MaterialTextfield.prototype['mdlDowngrade'] =
|
262
|
-
MaterialTextfield.prototype.mdlDowngrade;
|
263
|
-
|
264
271
|
// The component registers itself. It can assume componentHandler is available
|
265
272
|
// in the global scope.
|
266
273
|
componentHandler.register({
|