|
17 | 17 | (function() {
|
18 | 18 | 'use strict';
|
19 | 19 |
|
20 |
| - /** |
21 |
| - * Class constructor for Layout MDL component. |
22 |
| - * Implements MDL component design pattern defined at: |
23 |
| - * https://github.com/jasonmayes/mdl-component-design-pattern |
24 |
| - * |
25 |
| - * @constructor |
26 |
| - * @param {HTMLElement} element The element that will be upgraded. |
27 |
| - */ |
| 20 | + /** @const @private */ |
| 21 | + const MEDIA_QUERY = window.matchMedia('(max-width: 1024px)'); |
| 22 | + MEDIA_QUERY.onchange = screenSizeHandler; |
| 23 | + |
28 | 24 | var MaterialLayout = function MaterialLayout(element) {
|
29 | 25 | this.element_ = element;
|
30 |
| - |
31 | 26 | // Initialize instance.
|
32 | 27 | this.init();
|
33 | 28 | };
|
34 |
| - window['MaterialLayout'] = MaterialLayout; |
35 |
| - |
36 |
| - /** |
| 29 | + window['MaterialLayout'] = MaterialLayout; /** |
37 | 30 | * Store constants in one place so they can be updated easily.
|
38 | 31 | *
|
39 | 32 | * @enum {string | number}
|
40 | 33 | * @private
|
41 | 34 | */
|
42 | 35 | MaterialLayout.prototype.Constant_ = {
|
43 |
| - MAX_WIDTH: '(max-width: 1024px)', |
44 | 36 | TAB_SCROLL_PIXELS: 100,
|
45 | 37 | RESIZE_TIMEOUT: 100,
|
46 | 38 |
|
|
129 | 121 |
|
130 | 122 | };
|
131 | 123 |
|
132 |
| - /** @const @private */ |
133 |
| - MaterialLayout.screenWidthMediaQuery_ = window.matchMedia(/** @type{string} */(MaterialLayout.prototype.Constant_.MAX_WIDTH)); |
134 | 124 | /**
|
135 | 125 | * Handles scrolling on the content.
|
136 | 126 | *
|
|
182 | 172 | * @private
|
183 | 173 | */
|
184 | 174 |
|
185 |
| - |
186 | 175 | function screenSizeHandler(e) {
|
187 | 176 | // modified to query dependent elements rather than binding materialLayout to windows media query result
|
188 |
| - var materialLayouts = window.document.querySelectorAll('.mdl-layout') |
189 |
| - Array.from(materialLayouts).forEach((layout) => { |
| 177 | + var materialLayouts = document.querySelectorAll('.mdl-layout'); |
| 178 | + |
| 179 | + for (let i = 0; i < materialLayouts.length; i++) { |
| 180 | + let layout = materialLayouts[i]; |
| 181 | + |
190 | 182 | if (layout) {
|
191 | 183 | var drawerElement = layout.querySelector('.mdl-layout__drawer');
|
| 184 | + |
192 | 185 | if (e.matches) {
|
193 | 186 | layout.classList.add('is-small-screen');
|
194 | 187 | if (drawerElement) {
|
|
199 | 192 | // Collapse drawer (if any) when moving to a large screen size.
|
200 | 193 | if (drawerElement) {
|
201 | 194 | drawerElement.classList.remove('is-visible');
|
202 |
| - var obfuscator = layout.querySelector('mdl-layout__obfuscator') |
| 195 | + var obfuscator = layout.querySelector('.mdl-layout__obfuscator'); // corrected selector |
203 | 196 | if (obfuscator) {
|
204 | 197 | obfuscator.classList.remove('is-visible');
|
205 | 198 | }
|
|
209 | 202 | }
|
210 | 203 | }
|
211 | 204 | }
|
212 |
| - }); |
| 205 | + } |
213 | 206 | };
|
214 |
| - |
215 | 207 | /**
|
216 | 208 | * Handles events of drawer button.
|
217 | 209 | *
|
|
432 | 424 | this.drawer_.setAttribute('aria-hidden', 'true');
|
433 | 425 | }
|
434 | 426 |
|
435 |
| - // Keep an eye on screen size, and add/remove auxiliary class for styling |
436 |
| - // of small screens. |
437 |
| - this.screenSizeMediaQuery_ = window.materialLayoutScreenWidthMediaQuery |
438 |
| - this.screenSizeMediaQuery_.addEventListener('change', screenSizeHandler); |
439 |
| - screenSizeHandler(this.screenSizeMediaQuery_); |
| 427 | + screenSizeHandler(MEDIA_QUERY); |
440 | 428 |
|
441 | 429 | // Initialize tabs, if any.
|
442 | 430 | if (this.header_ && this.tabBar_) {
|
|
0 commit comments