Skip to content

Commit ce7f090

Browse files
committed
Only add one listener for all layouts
1 parent c16f818 commit ce7f090

File tree

1 file changed

+14
-26
lines changed

1 file changed

+14
-26
lines changed

src/layout/layout.js

Lines changed: 14 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -17,30 +17,22 @@
1717
(function() {
1818
'use strict';
1919

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+
2824
var MaterialLayout = function MaterialLayout(element) {
2925
this.element_ = element;
30-
3126
// Initialize instance.
3227
this.init();
3328
};
34-
window['MaterialLayout'] = MaterialLayout;
35-
36-
/**
29+
window['MaterialLayout'] = MaterialLayout; /**
3730
* Store constants in one place so they can be updated easily.
3831
*
3932
* @enum {string | number}
4033
* @private
4134
*/
4235
MaterialLayout.prototype.Constant_ = {
43-
MAX_WIDTH: '(max-width: 1024px)',
4436
TAB_SCROLL_PIXELS: 100,
4537
RESIZE_TIMEOUT: 100,
4638

@@ -129,8 +121,6 @@
129121

130122
};
131123

132-
/** @const @private */
133-
MaterialLayout.screenWidthMediaQuery_ = window.matchMedia(/** @type{string} */(MaterialLayout.prototype.Constant_.MAX_WIDTH));
134124
/**
135125
* Handles scrolling on the content.
136126
*
@@ -182,13 +172,16 @@
182172
* @private
183173
*/
184174

185-
186175
function screenSizeHandler(e) {
187176
// 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+
190182
if (layout) {
191183
var drawerElement = layout.querySelector('.mdl-layout__drawer');
184+
192185
if (e.matches) {
193186
layout.classList.add('is-small-screen');
194187
if (drawerElement) {
@@ -199,7 +192,7 @@
199192
// Collapse drawer (if any) when moving to a large screen size.
200193
if (drawerElement) {
201194
drawerElement.classList.remove('is-visible');
202-
var obfuscator = layout.querySelector('mdl-layout__obfuscator')
195+
var obfuscator = layout.querySelector('.mdl-layout__obfuscator'); // corrected selector
203196
if (obfuscator) {
204197
obfuscator.classList.remove('is-visible');
205198
}
@@ -209,9 +202,8 @@
209202
}
210203
}
211204
}
212-
});
205+
}
213206
};
214-
215207
/**
216208
* Handles events of drawer button.
217209
*
@@ -432,11 +424,7 @@
432424
this.drawer_.setAttribute('aria-hidden', 'true');
433425
}
434426

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);
440428

441429
// Initialize tabs, if any.
442430
if (this.header_ && this.tabBar_) {

0 commit comments

Comments
 (0)