material_design_lite-sass 1.0.5 → 1.0.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1bd99bf6db38146ccc46e55aeacf059255b531fd
4
- data.tar.gz: d846cee60b6f7a3502050486f6b7c473101246a8
3
+ metadata.gz: 780cd10b6fd459c71a17f8fd2e9cce2a04a6c957
4
+ data.tar.gz: c099663211c4864b517d865bbbfd01e191370dfe
5
5
  SHA512:
6
- metadata.gz: 7ed2e3bcae2762c54896cdf76e39706f664dbd5158424d9f779d3278c628ae9dd3f23736a0b8f1c7077f42c49b964ae89a465944c8a87086068c349848185464
7
- data.tar.gz: e3eeb2618c40b8853abc761c6a9ce71b9a620b09062b80811e137955f6b12524fd818953d7b3050164b4ae55d68003d68fe991c0fb3bacc743410f264da7e58c
6
+ metadata.gz: cb55fb7e2ceb605d00e0e035ad68468f01f18160239199535f19808a7d2fd3ad5fa946835f4a9fe4644880c38197ee08df591d77d8030750551f8372a57a0f68
7
+ data.tar.gz: fa9874e0c315e1a07dadd2d607a9e469388ecc9da987bd883d4a5086aaa3c8815d1435893dc5d610debda0359a8ac112acd044a7cc71539be642d3923b9fad05
data/CHANGELOG.md CHANGED
@@ -1,3 +1,12 @@
1
+ ## 1.0.6 (2015-11-03)
2
+
3
+ - Update assets to match upstream version
4
+
5
+ Library version:
6
+
7
+ - Material Design Lite v1.0.6
8
+ - Material Icons v2.0
9
+
1
10
  ## 1.0.5 (2015-09-30)
2
11
 
3
12
  - Update assets to match upstream version
@@ -1,5 +1,5 @@
1
1
  module MaterialDesignLite
2
2
  module Sass
3
- VERSION = '1.0.5'
3
+ VERSION = '1.0.6'
4
4
  end
5
5
  end
@@ -94,7 +94,7 @@ componentHandler = (function() {
94
94
  /** @type {!Array<componentHandler.Component>} */
95
95
  var createdComponents_ = [];
96
96
 
97
- var downgradeMethod_ = 'mdlDowngrade_';
97
+ var downgradeMethod_ = 'mdlDowngrade';
98
98
  var componentConfigProperty_ = 'mdlComponentConfigInternal_';
99
99
 
100
100
  /**
@@ -654,6 +654,13 @@ MaterialButton.prototype.mdlDowngrade_ = function () {
654
654
  this.element_.removeEventListener('mouseup', this.boundButtonBlurHandler);
655
655
  this.element_.removeEventListener('mouseleave', this.boundButtonBlurHandler);
656
656
  };
657
+ /**
658
+ * Public alias for the downgrade method.
659
+ *
660
+ * @public
661
+ */
662
+ MaterialButton.prototype.mdlDowngrade = MaterialButton.prototype.mdlDowngrade_;
663
+ MaterialButton.prototype['mdlDowngrade'] = MaterialButton.prototype.mdlDowngrade;
657
664
  // The component registers itself. It can assume componentHandler is available
658
665
  // in the global scope.
659
666
  componentHandler.register({
@@ -900,6 +907,13 @@ MaterialCheckbox.prototype.mdlDowngrade_ = function () {
900
907
  this.inputElement_.removeEventListener('blur', this.boundInputOnBlur);
901
908
  this.element_.removeEventListener('mouseup', this.boundElementMouseUp);
902
909
  };
910
+ /**
911
+ * Public alias for the downgrade method.
912
+ *
913
+ * @public
914
+ */
915
+ MaterialCheckbox.prototype.mdlDowngrade = MaterialCheckbox.prototype.mdlDowngrade_;
916
+ MaterialCheckbox.prototype['mdlDowngrade'] = MaterialCheckbox.prototype.mdlDowngrade;
903
917
  // The component registers itself. It can assume componentHandler is available
904
918
  // in the global scope.
905
919
  componentHandler.register({
@@ -1133,6 +1147,13 @@ MaterialIconToggle.prototype.mdlDowngrade_ = function () {
1133
1147
  this.inputElement_.removeEventListener('blur', this.boundInputOnBlur);
1134
1148
  this.element_.removeEventListener('mouseup', this.boundElementOnMouseUp);
1135
1149
  };
1150
+ /**
1151
+ * Public alias for the downgrade method.
1152
+ *
1153
+ * @public
1154
+ */
1155
+ MaterialIconToggle.prototype.mdlDowngrade = MaterialIconToggle.prototype.mdlDowngrade_;
1156
+ MaterialIconToggle.prototype['mdlDowngrade'] = MaterialIconToggle.prototype.mdlDowngrade;
1136
1157
  // The component registers itself. It can assume componentHandler is available
1137
1158
  // in the global scope.
1138
1159
  componentHandler.register({
@@ -1256,15 +1277,15 @@ MaterialMenu.prototype.init = function () {
1256
1277
  }
1257
1278
  }
1258
1279
  var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM);
1259
- this.boundItemKeydown = this.handleItemKeyboardEvent_.bind(this);
1260
- this.boundItemClick = this.handleItemClick_.bind(this);
1280
+ this.boundItemKeydown_ = this.handleItemKeyboardEvent_.bind(this);
1281
+ this.boundItemClick_ = this.handleItemClick_.bind(this);
1261
1282
  for (var i = 0; i < items.length; i++) {
1262
1283
  // Add a listener to each menu item.
1263
- items[i].addEventListener('click', this.boundItemClick);
1284
+ items[i].addEventListener('click', this.boundItemClick_);
1264
1285
  // Add a tab index to each menu item.
1265
1286
  items[i].tabIndex = '-1';
1266
1287
  // Add a keyboard listener to each menu item.
1267
- items[i].addEventListener('keydown', this.boundItemKeydown);
1288
+ items[i].addEventListener('keydown', this.boundItemKeydown_);
1268
1289
  }
1269
1290
  // Add ripple classes to each item, if the user has enabled ripples.
1270
1291
  if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {
@@ -1399,7 +1420,7 @@ MaterialMenu.prototype.handleItemKeyboardEvent_ = function (evt) {
1399
1420
  * @private
1400
1421
  */
1401
1422
  MaterialMenu.prototype.handleItemClick_ = function (evt) {
1402
- if (evt.target.getAttribute('disabled') !== null) {
1423
+ if (evt.target.hasAttribute('disabled')) {
1403
1424
  evt.stopPropagation();
1404
1425
  } else {
1405
1426
  // Wait some time before closing menu, so the user can see the ripple.
@@ -1497,7 +1518,9 @@ MaterialMenu.prototype.show = function (evt) {
1497
1518
  // displayed the menu in the first place. If so, do nothing.
1498
1519
  // Also check to see if the menu is in the process of closing itself, and
1499
1520
  // do nothing in that case.
1500
- if (e !== evt && !this.closing_) {
1521
+ // Also check if the clicked element is a menu item
1522
+ // if so, do nothing.
1523
+ if (e !== evt && !this.closing_ && e.target.parentNode !== this.element_) {
1501
1524
  document.removeEventListener('click', callback);
1502
1525
  this.hide();
1503
1526
  }
@@ -1519,8 +1542,9 @@ MaterialMenu.prototype.hide = function () {
1519
1542
  items[i].style.transitionDelay = null;
1520
1543
  }
1521
1544
  // Measure the inner element.
1522
- var height = this.element_.getBoundingClientRect().height;
1523
- var width = this.element_.getBoundingClientRect().width;
1545
+ var rect = this.element_.getBoundingClientRect();
1546
+ var height = rect.height;
1547
+ var width = rect.width;
1524
1548
  // Turn on animation, and apply the final clip. Also make invisible.
1525
1549
  // This triggers the transitions.
1526
1550
  this.element_.classList.add(this.CssClasses_.IS_ANIMATING);
@@ -1552,10 +1576,17 @@ MaterialMenu.prototype['toggle'] = MaterialMenu.prototype.toggle;
1552
1576
  MaterialMenu.prototype.mdlDowngrade_ = function () {
1553
1577
  var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM);
1554
1578
  for (var i = 0; i < items.length; i++) {
1555
- items[i].removeEventListener('click', this.boundItemClick);
1556
- items[i].removeEventListener('keydown', this.boundItemKeydown);
1579
+ items[i].removeEventListener('click', this.boundItemClick_);
1580
+ items[i].removeEventListener('keydown', this.boundItemKeydown_);
1557
1581
  }
1558
1582
  };
1583
+ /**
1584
+ * Public alias for the downgrade method.
1585
+ *
1586
+ * @public
1587
+ */
1588
+ MaterialMenu.prototype.mdlDowngrade = MaterialMenu.prototype.mdlDowngrade_;
1589
+ MaterialMenu.prototype['mdlDowngrade'] = MaterialMenu.prototype.mdlDowngrade;
1559
1590
  // The component registers itself. It can assume componentHandler is available
1560
1591
  // in the global scope.
1561
1592
  componentHandler.register({
@@ -1667,6 +1698,13 @@ MaterialProgress.prototype.mdlDowngrade_ = function () {
1667
1698
  this.element_.removeChild(this.element_.firstChild);
1668
1699
  }
1669
1700
  };
1701
+ /**
1702
+ * Public alias for the downgrade method.
1703
+ *
1704
+ * @public
1705
+ */
1706
+ MaterialProgress.prototype.mdlDowngrade = MaterialProgress.prototype.mdlDowngrade_;
1707
+ MaterialProgress.prototype['mdlDowngrade'] = MaterialProgress.prototype.mdlDowngrade;
1670
1708
  // The component registers itself. It can assume componentHandler is available
1671
1709
  // in the global scope.
1672
1710
  componentHandler.register({
@@ -1874,6 +1912,10 @@ MaterialRadio.prototype['uncheck'] = MaterialRadio.prototype.uncheck;
1874
1912
  MaterialRadio.prototype.init = function () {
1875
1913
  if (this.element_) {
1876
1914
  this.btnElement_ = this.element_.querySelector('.' + this.CssClasses_.RADIO_BTN);
1915
+ this.boundChangeHandler_ = this.onChange_.bind(this);
1916
+ this.boundFocusHandler_ = this.onChange_.bind(this);
1917
+ this.boundBlurHandler_ = this.onBlur_.bind(this);
1918
+ this.boundMouseUpHandler_ = this.onMouseup_.bind(this);
1877
1919
  var outerCircle = document.createElement('span');
1878
1920
  outerCircle.classList.add(this.CssClasses_.RADIO_OUTER_CIRCLE);
1879
1921
  var innerCircle = document.createElement('span');
@@ -1887,20 +1929,43 @@ MaterialRadio.prototype.init = function () {
1887
1929
  rippleContainer.classList.add(this.CssClasses_.RIPPLE_CONTAINER);
1888
1930
  rippleContainer.classList.add(this.CssClasses_.RIPPLE_EFFECT);
1889
1931
  rippleContainer.classList.add(this.CssClasses_.RIPPLE_CENTER);
1890
- rippleContainer.addEventListener('mouseup', this.onMouseup_.bind(this));
1932
+ rippleContainer.addEventListener('mouseup', this.boundMouseUpHandler_);
1891
1933
  var ripple = document.createElement('span');
1892
1934
  ripple.classList.add(this.CssClasses_.RIPPLE);
1893
1935
  rippleContainer.appendChild(ripple);
1894
1936
  this.element_.appendChild(rippleContainer);
1895
1937
  }
1896
- this.btnElement_.addEventListener('change', this.onChange_.bind(this));
1897
- this.btnElement_.addEventListener('focus', this.onFocus_.bind(this));
1898
- this.btnElement_.addEventListener('blur', this.onBlur_.bind(this));
1899
- this.element_.addEventListener('mouseup', this.onMouseup_.bind(this));
1938
+ this.btnElement_.addEventListener('change', this.boundChangeHandler_);
1939
+ this.btnElement_.addEventListener('focus', this.boundFocusHandler_);
1940
+ this.btnElement_.addEventListener('blur', this.boundBlurHandler_);
1941
+ this.element_.addEventListener('mouseup', this.boundMouseUpHandler_);
1900
1942
  this.updateClasses_();
1901
1943
  this.element_.classList.add(this.CssClasses_.IS_UPGRADED);
1902
1944
  }
1903
1945
  };
1946
+ /**
1947
+ * Downgrade the element.
1948
+ *
1949
+ * @private
1950
+ */
1951
+ MaterialRadio.prototype.mdlDowngrade_ = function () {
1952
+ var rippleContainer = this.element_.querySelector('.' + this.CssClasses_.RIPPLE_CONTAINER);
1953
+ this.btnElement_.removeEventListener('change', this.boundChangeHandler_);
1954
+ this.btnElement_.removeEventListener('focus', this.boundFocusHandler_);
1955
+ this.btnElement_.removeEventListener('blur', this.boundBlurHandler_);
1956
+ this.element_.removeEventListener('mouseup', this.boundMouseUpHandler_);
1957
+ if (rippleContainer) {
1958
+ rippleContainer.removeEventListener('mouseup', this.boundMouseUpHandler_);
1959
+ this.element_.removeChild(rippleContainer);
1960
+ }
1961
+ };
1962
+ /**
1963
+ * Public alias for the downgrade method.
1964
+ *
1965
+ * @public
1966
+ */
1967
+ MaterialRadio.prototype.mdlDowngrade = MaterialRadio.prototype.mdlDowngrade_;
1968
+ MaterialRadio.prototype['mdlDowngrade'] = MaterialRadio.prototype.mdlDowngrade;
1904
1969
  // The component registers itself. It can assume componentHandler is available
1905
1970
  // in the global scope.
1906
1971
  componentHandler.register({
@@ -2127,6 +2192,13 @@ MaterialSlider.prototype.mdlDowngrade_ = function () {
2127
2192
  this.element_.removeEventListener('mouseup', this.boundMouseUpHandler);
2128
2193
  this.element_.parentElement.removeEventListener('mousedown', this.boundContainerMouseDownHandler);
2129
2194
  };
2195
+ /**
2196
+ * Public alias for the downgrade method.
2197
+ *
2198
+ * @public
2199
+ */
2200
+ MaterialSlider.prototype.mdlDowngrade = MaterialSlider.prototype.mdlDowngrade_;
2201
+ MaterialSlider.prototype['mdlDowngrade'] = MaterialSlider.prototype.mdlDowngrade;
2130
2202
  // The component registers itself. It can assume componentHandler is available
2131
2203
  // in the global scope.
2132
2204
  componentHandler.register({
@@ -2498,6 +2570,13 @@ MaterialSwitch.prototype.mdlDowngrade_ = function () {
2498
2570
  this.inputElement_.removeEventListener('blur', this.boundBlurHandler);
2499
2571
  this.element_.removeEventListener('mouseup', this.boundMouseUpHandler);
2500
2572
  };
2573
+ /**
2574
+ * Public alias for the downgrade method.
2575
+ *
2576
+ * @public
2577
+ */
2578
+ MaterialSwitch.prototype.mdlDowngrade = MaterialSwitch.prototype.mdlDowngrade_;
2579
+ MaterialSwitch.prototype['mdlDowngrade'] = MaterialSwitch.prototype.mdlDowngrade;
2501
2580
  // The component registers itself. It can assume componentHandler is available
2502
2581
  // in the global scope.
2503
2582
  componentHandler.register({
@@ -2764,10 +2843,12 @@ MaterialTextfield.prototype['checkDisabled'] = MaterialTextfield.prototype.check
2764
2843
  * @public
2765
2844
  */
2766
2845
  MaterialTextfield.prototype.checkValidity = function () {
2767
- if (this.input_.validity.valid) {
2768
- this.element_.classList.remove(this.CssClasses_.IS_INVALID);
2769
- } else {
2770
- this.element_.classList.add(this.CssClasses_.IS_INVALID);
2846
+ if (this.input_.validity) {
2847
+ if (this.input_.validity.valid) {
2848
+ this.element_.classList.remove(this.CssClasses_.IS_INVALID);
2849
+ } else {
2850
+ this.element_.classList.add(this.CssClasses_.IS_INVALID);
2851
+ }
2771
2852
  }
2772
2853
  };
2773
2854
  MaterialTextfield.prototype['checkValidity'] = MaterialTextfield.prototype.checkValidity;
@@ -2811,11 +2892,7 @@ MaterialTextfield.prototype['enable'] = MaterialTextfield.prototype.enable;
2811
2892
  * @public
2812
2893
  */
2813
2894
  MaterialTextfield.prototype.change = function (value) {
2814
- if (value) {
2815
- this.input_.value = value;
2816
- } else {
2817
- this.input_.value = '';
2818
- }
2895
+ this.input_.value = value || '';
2819
2896
  this.updateClasses_();
2820
2897
  };
2821
2898
  MaterialTextfield.prototype['change'] = MaterialTextfield.prototype.change;
@@ -2845,8 +2922,12 @@ MaterialTextfield.prototype.init = function () {
2845
2922
  this.boundKeyDownHandler = this.onKeyDown_.bind(this);
2846
2923
  this.input_.addEventListener('keydown', this.boundKeyDownHandler);
2847
2924
  }
2925
+ var invalid = this.element_.classList.contains(this.CssClasses_.IS_INVALID);
2848
2926
  this.updateClasses_();
2849
2927
  this.element_.classList.add(this.CssClasses_.IS_UPGRADED);
2928
+ if (invalid) {
2929
+ this.element_.classList.add(this.CssClasses_.IS_INVALID);
2930
+ }
2850
2931
  }
2851
2932
  }
2852
2933
  };
@@ -2863,6 +2944,13 @@ MaterialTextfield.prototype.mdlDowngrade_ = function () {
2863
2944
  this.input_.removeEventListener('keydown', this.boundKeyDownHandler);
2864
2945
  }
2865
2946
  };
2947
+ /**
2948
+ * Public alias for the downgrade method.
2949
+ *
2950
+ * @public
2951
+ */
2952
+ MaterialTextfield.prototype.mdlDowngrade = MaterialTextfield.prototype.mdlDowngrade_;
2953
+ MaterialTextfield.prototype['mdlDowngrade'] = MaterialTextfield.prototype.mdlDowngrade;
2866
2954
  // The component registers itself. It can assume componentHandler is available
2867
2955
  // in the global scope.
2868
2956
  componentHandler.register({
@@ -2963,7 +3051,7 @@ MaterialTooltip.prototype.init = function () {
2963
3051
  }
2964
3052
  if (this.forElement_) {
2965
3053
  // Tabindex needs to be set for `blur` events to be emitted
2966
- if (!this.forElement_.getAttribute('tabindex')) {
3054
+ if (!this.forElement_.hasAttribute('tabindex')) {
2967
3055
  this.forElement_.setAttribute('tabindex', '0');
2968
3056
  }
2969
3057
  this.boundMouseEnterHandler = this.handleMouseEnter_.bind(this);
@@ -2989,6 +3077,13 @@ MaterialTooltip.prototype.mdlDowngrade_ = function () {
2989
3077
  this.forElement_.removeEventListener('mouseleave', this.boundMouseLeaveHandler);
2990
3078
  }
2991
3079
  };
3080
+ /**
3081
+ * Public alias for the downgrade method.
3082
+ *
3083
+ * @public
3084
+ */
3085
+ MaterialTooltip.prototype.mdlDowngrade = MaterialTooltip.prototype.mdlDowngrade_;
3086
+ MaterialTooltip.prototype['mdlDowngrade'] = MaterialTooltip.prototype.mdlDowngrade;
2992
3087
  // The component registers itself. It can assume componentHandler is available
2993
3088
  // in the global scope.
2994
3089
  componentHandler.register({
@@ -3127,6 +3222,7 @@ MaterialLayout.prototype.screenSizeHandler_ = function () {
3127
3222
  // Collapse drawer (if any) when moving to a large screen size.
3128
3223
  if (this.drawer_) {
3129
3224
  this.drawer_.classList.remove(this.CssClasses_.IS_DRAWER_OPEN);
3225
+ this.obfuscator_.classList.remove(this.CssClasses_.IS_DRAWER_OPEN);
3130
3226
  }
3131
3227
  }
3132
3228
  };
@@ -3137,6 +3233,7 @@ MaterialLayout.prototype.screenSizeHandler_ = function () {
3137
3233
  */
3138
3234
  MaterialLayout.prototype.drawerToggleHandler_ = function () {
3139
3235
  this.drawer_.classList.toggle(this.CssClasses_.IS_DRAWER_OPEN);
3236
+ this.obfuscator_.classList.toggle(this.CssClasses_.IS_DRAWER_OPEN);
3140
3237
  };
3141
3238
  /**
3142
3239
  * Handles (un)setting the `is-animating` class
@@ -3188,7 +3285,8 @@ MaterialLayout.prototype.init = function () {
3188
3285
  this.element_.parentElement.removeChild(this.element_);
3189
3286
  container.appendChild(this.element_);
3190
3287
  var directChildren = this.element_.childNodes;
3191
- for (var c = 0; c < directChildren.length; c++) {
3288
+ var numChildren = directChildren.length;
3289
+ for (var c = 0; c < numChildren; c++) {
3192
3290
  var child = directChildren[c];
3193
3291
  if (child.classList && child.classList.contains(this.CssClasses_.HEADER)) {
3194
3292
  this.header_ = child;
@@ -3204,11 +3302,6 @@ MaterialLayout.prototype.init = function () {
3204
3302
  this.tabBar_ = this.header_.querySelector('.' + this.CssClasses_.TAB_BAR);
3205
3303
  }
3206
3304
  var mode = this.Mode_.STANDARD;
3207
- // Keep an eye on screen size, and add/remove auxiliary class for styling
3208
- // of small screens.
3209
- this.screenSizeMediaQuery_ = window.matchMedia(this.Constant_.MAX_WIDTH);
3210
- this.screenSizeMediaQuery_.addListener(this.screenSizeHandler_.bind(this));
3211
- this.screenSizeHandler_();
3212
3305
  if (this.header_) {
3213
3306
  if (this.header_.classList.contains(this.CssClasses_.HEADER_SEAMED)) {
3214
3307
  mode = this.Mode_.SEAMED;
@@ -3238,17 +3331,10 @@ MaterialLayout.prototype.init = function () {
3238
3331
  this.contentScrollHandler_();
3239
3332
  }
3240
3333
  }
3241
- /**
3242
- * Prevents an event from triggering the default behaviour.
3243
- * @param {Event} ev the event to eat.
3244
- */
3245
- var eatEvent = function (ev) {
3246
- ev.preventDefault();
3247
- };
3248
3334
  // Add drawer toggling button to our layout, if we have an openable drawer.
3249
3335
  if (this.drawer_) {
3250
3336
  var drawerButton = this.element_.querySelector('.' + this.CssClasses_.DRAWER_BTN);
3251
- if (typeof drawerButton === 'undefined' || drawerButton === null) {
3337
+ if (!drawerButton) {
3252
3338
  drawerButton = document.createElement('div');
3253
3339
  drawerButton.classList.add(this.CssClasses_.DRAWER_BTN);
3254
3340
  var drawerButtonIcon = document.createElement('i');
@@ -3268,7 +3354,6 @@ MaterialLayout.prototype.init = function () {
3268
3354
  // Adds the HAS_DRAWER to the elements since this.header_ may or may
3269
3355
  // not be present.
3270
3356
  this.element_.classList.add(this.CssClasses_.HAS_DRAWER);
3271
- this.drawer_.addEventListener('mousewheel', eatEvent);
3272
3357
  // If we have a fixed header, add the button to the header rather than
3273
3358
  // the layout.
3274
3359
  if (this.element_.classList.contains(this.CssClasses_.FIXED_HEADER)) {
@@ -3280,8 +3365,13 @@ MaterialLayout.prototype.init = function () {
3280
3365
  obfuscator.classList.add(this.CssClasses_.OBFUSCATOR);
3281
3366
  this.element_.appendChild(obfuscator);
3282
3367
  obfuscator.addEventListener('click', this.drawerToggleHandler_.bind(this));
3283
- obfuscator.addEventListener('mousewheel', eatEvent);
3368
+ this.obfuscator_ = obfuscator;
3284
3369
  }
3370
+ // Keep an eye on screen size, and add/remove auxiliary class for styling
3371
+ // of small screens.
3372
+ this.screenSizeMediaQuery_ = window.matchMedia(this.Constant_.MAX_WIDTH);
3373
+ this.screenSizeMediaQuery_.addListener(this.screenSizeHandler_.bind(this));
3374
+ this.screenSizeHandler_();
3285
3375
  // Initialize tabs, if any.
3286
3376
  if (this.header_ && this.tabBar_) {
3287
3377
  this.element_.classList.add(this.CssClasses_.HAS_TABS);
@@ -3351,26 +3441,24 @@ MaterialLayout.prototype.init = function () {
3351
3441
  * @param {MaterialLayout} layout The MaterialLayout object that owns the tab.
3352
3442
  */
3353
3443
  function MaterialLayoutTab(tab, tabs, panels, layout) {
3354
- if (tab) {
3355
- if (layout.tabBar_.classList.contains(layout.CssClasses_.JS_RIPPLE_EFFECT)) {
3356
- var rippleContainer = document.createElement('span');
3357
- rippleContainer.classList.add(layout.CssClasses_.RIPPLE_CONTAINER);
3358
- rippleContainer.classList.add(layout.CssClasses_.JS_RIPPLE_EFFECT);
3359
- var ripple = document.createElement('span');
3360
- ripple.classList.add(layout.CssClasses_.RIPPLE);
3361
- rippleContainer.appendChild(ripple);
3362
- tab.appendChild(rippleContainer);
3363
- }
3364
- tab.addEventListener('click', function (e) {
3365
- e.preventDefault();
3366
- var href = tab.href.split('#')[1];
3367
- var panel = layout.content_.querySelector('#' + href);
3368
- layout.resetTabState_(tabs);
3369
- layout.resetPanelState_(panels);
3370
- tab.classList.add(layout.CssClasses_.IS_ACTIVE);
3371
- panel.classList.add(layout.CssClasses_.IS_ACTIVE);
3372
- });
3373
- }
3444
+ if (layout.tabBar_.classList.contains(layout.CssClasses_.JS_RIPPLE_EFFECT)) {
3445
+ var rippleContainer = document.createElement('span');
3446
+ rippleContainer.classList.add(layout.CssClasses_.RIPPLE_CONTAINER);
3447
+ rippleContainer.classList.add(layout.CssClasses_.JS_RIPPLE_EFFECT);
3448
+ var ripple = document.createElement('span');
3449
+ ripple.classList.add(layout.CssClasses_.RIPPLE);
3450
+ rippleContainer.appendChild(ripple);
3451
+ tab.appendChild(rippleContainer);
3452
+ }
3453
+ tab.addEventListener('click', function (e) {
3454
+ e.preventDefault();
3455
+ var href = tab.href.split('#')[1];
3456
+ var panel = layout.content_.querySelector('#' + href);
3457
+ layout.resetTabState_(tabs);
3458
+ layout.resetPanelState_(panels);
3459
+ tab.classList.add(layout.CssClasses_.IS_ACTIVE);
3460
+ panel.classList.add(layout.CssClasses_.IS_ACTIVE);
3461
+ });
3374
3462
  }
3375
3463
  // The component registers itself. It can assume componentHandler is available
3376
3464
  // in the global scope.
@@ -3427,6 +3515,7 @@ MaterialDataTable.prototype.Constant_ = {};
3427
3515
  MaterialDataTable.prototype.CssClasses_ = {
3428
3516
  DATA_TABLE: 'mdl-data-table',
3429
3517
  SELECTABLE: 'mdl-data-table--selectable',
3518
+ SELECT_ELEMENT: 'mdl-data-table__select',
3430
3519
  IS_SELECTED: 'is-selected',
3431
3520
  IS_UPGRADED: 'is-upgraded'
3432
3521
  };
@@ -3479,18 +3568,17 @@ MaterialDataTable.prototype.selectRow_ = function (checkbox, row, opt_rows) {
3479
3568
  */
3480
3569
  MaterialDataTable.prototype.createCheckbox_ = function (row, opt_rows) {
3481
3570
  var label = document.createElement('label');
3482
- label.classList.add('mdl-checkbox');
3483
- label.classList.add('mdl-js-checkbox');
3484
- label.classList.add('mdl-js-ripple-effect');
3485
- label.classList.add('mdl-data-table__select');
3571
+ var labelClasses = [
3572
+ 'mdl-checkbox',
3573
+ 'mdl-js-checkbox',
3574
+ 'mdl-js-ripple-effect',
3575
+ this.CssClasses_.SELECT_ELEMENT
3576
+ ];
3577
+ label.className = labelClasses.join(' ');
3486
3578
  var checkbox = document.createElement('input');
3487
3579
  checkbox.type = 'checkbox';
3488
3580
  checkbox.classList.add('mdl-checkbox__input');
3489
- if (row) {
3490
- checkbox.addEventListener('change', this.selectRow_(checkbox, row));
3491
- } else if (opt_rows) {
3492
- checkbox.addEventListener('change', this.selectRow_(checkbox, null, opt_rows));
3493
- }
3581
+ checkbox.addEventListener('change', this.selectRow_(checkbox, row, opt_rows));
3494
3582
  label.appendChild(checkbox);
3495
3583
  componentHandler.upgradeElement(label, 'MaterialCheckbox');
3496
3584
  return label;
@@ -3759,6 +3847,13 @@ MaterialRipple.prototype.mdlDowngrade_ = function () {
3759
3847
  this.element_.removeEventListener('touchend', this.boundUpHandler);
3760
3848
  this.element_.removeEventListener('blur', this.boundUpHandler);
3761
3849
  };
3850
+ /**
3851
+ * Public alias for the downgrade method.
3852
+ *
3853
+ * @public
3854
+ */
3855
+ MaterialRipple.prototype.mdlDowngrade = MaterialRipple.prototype.mdlDowngrade_;
3856
+ MaterialRipple.prototype['mdlDowngrade'] = MaterialRipple.prototype.mdlDowngrade;
3762
3857
  // The component registers itself. It can assume componentHandler is available
3763
3858
  // in the global scope.
3764
3859
  componentHandler.register({