material_design_lite-sass 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +11 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +11 -0
  5. data/CHANGELOG.md +5 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE.txt +21 -0
  8. data/README.md +108 -0
  9. data/Rakefile +4 -0
  10. data/bin/console +14 -0
  11. data/bin/setup +7 -0
  12. data/lib/material_design_lite-sass.rb +46 -0
  13. data/lib/material_design_lite/sass/engine.rb +13 -0
  14. data/lib/material_design_lite/sass/version.rb +5 -0
  15. data/material_design_lite-sass.gemspec +28 -0
  16. data/vendor/assets/javascripts/material.js +3919 -0
  17. data/vendor/assets/javascripts/material/button.js +132 -0
  18. data/vendor/assets/javascripts/material/checkbox.js +265 -0
  19. data/vendor/assets/javascripts/material/data-table.js +149 -0
  20. data/vendor/assets/javascripts/material/icon-toggle.js +248 -0
  21. data/vendor/assets/javascripts/material/layout.js +434 -0
  22. data/vendor/assets/javascripts/material/mdlComponentHandler.js +346 -0
  23. data/vendor/assets/javascripts/material/menu.js +468 -0
  24. data/vendor/assets/javascripts/material/progress.js +116 -0
  25. data/vendor/assets/javascripts/material/rAF.js +38 -0
  26. data/vendor/assets/javascripts/material/radio.js +257 -0
  27. data/vendor/assets/javascripts/material/ripple.js +244 -0
  28. data/vendor/assets/javascripts/material/slider.js +252 -0
  29. data/vendor/assets/javascripts/material/spinner.js +140 -0
  30. data/vendor/assets/javascripts/material/switch.js +269 -0
  31. data/vendor/assets/javascripts/material/tabs.js +152 -0
  32. data/vendor/assets/javascripts/material/textfield.js +247 -0
  33. data/vendor/assets/javascripts/material/tooltip.js +146 -0
  34. data/vendor/assets/stylesheets/_material.scss +50 -0
  35. data/vendor/assets/stylesheets/material/_animation.scss +34 -0
  36. data/vendor/assets/stylesheets/material/_badge.scss +66 -0
  37. data/vendor/assets/stylesheets/material/_button.scss +298 -0
  38. data/vendor/assets/stylesheets/material/_card.scss +111 -0
  39. data/vendor/assets/stylesheets/material/_checkbox.scss +175 -0
  40. data/vendor/assets/stylesheets/material/_color-definitions.scss +599 -0
  41. data/vendor/assets/stylesheets/material/_data-table.scss +105 -0
  42. data/vendor/assets/stylesheets/material/_functions.scss +3 -0
  43. data/vendor/assets/stylesheets/material/_grid.scss +180 -0
  44. data/vendor/assets/stylesheets/material/_icon-toggle.scss +121 -0
  45. data/vendor/assets/stylesheets/material/_layout.scss +580 -0
  46. data/vendor/assets/stylesheets/material/_mega_footer.scss +309 -0
  47. data/vendor/assets/stylesheets/material/_menu.scss +193 -0
  48. data/vendor/assets/stylesheets/material/_mini_footer.scss +88 -0
  49. data/vendor/assets/stylesheets/material/_mixins.scss +268 -0
  50. data/vendor/assets/stylesheets/material/_palette.scss +2303 -0
  51. data/vendor/assets/stylesheets/material/_progress.scss +115 -0
  52. data/vendor/assets/stylesheets/material/_radio.scss +155 -0
  53. data/vendor/assets/stylesheets/material/_resets.scss +55 -0
  54. data/vendor/assets/stylesheets/material/_ripple.scss +42 -0
  55. data/vendor/assets/stylesheets/material/_shadow.scss +42 -0
  56. data/vendor/assets/stylesheets/material/_slider.scss +396 -0
  57. data/vendor/assets/stylesheets/material/_spinner.scss +248 -0
  58. data/vendor/assets/stylesheets/material/_switch.scss +199 -0
  59. data/vendor/assets/stylesheets/material/_tabs.scss +115 -0
  60. data/vendor/assets/stylesheets/material/_textfield.scss +190 -0
  61. data/vendor/assets/stylesheets/material/_tooltip.scss +66 -0
  62. data/vendor/assets/stylesheets/material/_typography.scss +297 -0
  63. data/vendor/assets/stylesheets/material/_variables.scss +572 -0
  64. data/vendor/assets/stylesheets/material/resets/_h5bp.scss +284 -0
  65. data/vendor/assets/stylesheets/material/resets/_mobile.scss +25 -0
  66. metadata +151 -0
@@ -0,0 +1,132 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2015 Google Inc. All Rights Reserved.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ /**
19
+ * Class constructor for Button MDL component.
20
+ * Implements MDL component design pattern defined at:
21
+ * https://github.com/jasonmayes/mdl-component-design-pattern
22
+ * @param {HTMLElement} element The element that will be upgraded.
23
+ */
24
+ function MaterialButton(element) {
25
+ 'use strict';
26
+
27
+ this.element_ = element;
28
+
29
+ // Initialize instance.
30
+ this.init();
31
+ }
32
+
33
+ /**
34
+ * Store constants in one place so they can be updated easily.
35
+ * @enum {string | number}
36
+ * @private
37
+ */
38
+ MaterialButton.prototype.Constant_ = {
39
+ // None for now.
40
+ };
41
+
42
+ /**
43
+ * Store strings for class names defined by this component that are used in
44
+ * JavaScript. This allows us to simply change it in one place should we
45
+ * decide to modify at a later date.
46
+ * @enum {string}
47
+ * @private
48
+ */
49
+ MaterialButton.prototype.CssClasses_ = {
50
+ RIPPLE_EFFECT: 'mdl-js-ripple-effect',
51
+ RIPPLE_CONTAINER: 'mdl-button__ripple-container',
52
+ RIPPLE: 'mdl-ripple'
53
+ };
54
+
55
+ /**
56
+ * Handle blur of element.
57
+ * @param {HTMLElement} element The instance of a button we want to blur.
58
+ * @private
59
+ */
60
+ MaterialButton.prototype.blurHandler = function(event) {
61
+ 'use strict';
62
+
63
+ if (event) {
64
+ this.element_.blur();
65
+ }
66
+ };
67
+
68
+ // Public methods.
69
+
70
+ /**
71
+ * Disable button.
72
+ * @public
73
+ */
74
+ MaterialButton.prototype.disable = function() {
75
+ 'use strict';
76
+
77
+ this.element_.disabled = true;
78
+ };
79
+
80
+ /**
81
+ * Enable button.
82
+ * @public
83
+ */
84
+ MaterialButton.prototype.enable = function() {
85
+ 'use strict';
86
+
87
+ this.element_.disabled = false;
88
+ };
89
+
90
+ /**
91
+ * Initialize element.
92
+ */
93
+ MaterialButton.prototype.init = function() {
94
+ 'use strict';
95
+
96
+ if (this.element_) {
97
+ if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {
98
+ var rippleContainer = document.createElement('span');
99
+ rippleContainer.classList.add(this.CssClasses_.RIPPLE_CONTAINER);
100
+ this.rippleElement_ = document.createElement('span');
101
+ this.rippleElement_.classList.add(this.CssClasses_.RIPPLE);
102
+ rippleContainer.appendChild(this.rippleElement_);
103
+ this.boundRippleBlurHandler = this.blurHandler.bind(this);
104
+ this.rippleElement_.addEventListener('mouseup', this.boundRippleBlurHandler);
105
+ this.element_.appendChild(rippleContainer);
106
+ }
107
+ this.boundButtonBlurHandler = this.blurHandler.bind(this);
108
+ this.element_.addEventListener('mouseup', this.boundButtonBlurHandler);
109
+ this.element_.addEventListener('mouseleave', this.boundButtonBlurHandler);
110
+ }
111
+ };
112
+
113
+ /**
114
+ * Downgrade the element.
115
+ */
116
+ MaterialButton.prototype.mdlDowngrade_ = function() {
117
+ 'use strict';
118
+ if (this.rippleElement_) {
119
+ this.rippleElement_.removeEventListener('mouseup', this.boundRippleBlurHandler);
120
+ }
121
+ this.element_.removeEventListener('mouseup', this.boundButtonBlurHandler);
122
+ this.element_.removeEventListener('mouseleave', this.boundButtonBlurHandler);
123
+ };
124
+
125
+ // The component registers itself. It can assume componentHandler is available
126
+ // in the global scope.
127
+ componentHandler.register({
128
+ constructor: MaterialButton,
129
+ classAsString: 'MaterialButton',
130
+ cssClass: 'mdl-js-button',
131
+ widget: true
132
+ });
@@ -0,0 +1,265 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2015 Google Inc. All Rights Reserved.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ /**
19
+ * Class constructor for Checkbox MDL component.
20
+ * Implements MDL component design pattern defined at:
21
+ * https://github.com/jasonmayes/mdl-component-design-pattern
22
+ * @param {HTMLElement} element The element that will be upgraded.
23
+ */
24
+ function MaterialCheckbox(element) {
25
+ 'use strict';
26
+
27
+ this.element_ = element;
28
+
29
+ // Initialize instance.
30
+ this.init();
31
+ }
32
+
33
+ /**
34
+ * Store constants in one place so they can be updated easily.
35
+ * @enum {string | number}
36
+ * @private
37
+ */
38
+ MaterialCheckbox.prototype.Constant_ = {
39
+ TINY_TIMEOUT: 0.001
40
+ };
41
+
42
+ /**
43
+ * Store strings for class names defined by this component that are used in
44
+ * JavaScript. This allows us to simply change it in one place should we
45
+ * decide to modify at a later date.
46
+ * @enum {string}
47
+ * @private
48
+ */
49
+ MaterialCheckbox.prototype.CssClasses_ = {
50
+ INPUT: 'mdl-checkbox__input',
51
+ BOX_OUTLINE: 'mdl-checkbox__box-outline',
52
+ FOCUS_HELPER: 'mdl-checkbox__focus-helper',
53
+ TICK_OUTLINE: 'mdl-checkbox__tick-outline',
54
+ RIPPLE_EFFECT: 'mdl-js-ripple-effect',
55
+ RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',
56
+ RIPPLE_CONTAINER: 'mdl-checkbox__ripple-container',
57
+ RIPPLE_CENTER: 'mdl-ripple--center',
58
+ RIPPLE: 'mdl-ripple',
59
+ IS_FOCUSED: 'is-focused',
60
+ IS_DISABLED: 'is-disabled',
61
+ IS_CHECKED: 'is-checked',
62
+ IS_UPGRADED: 'is-upgraded'
63
+ };
64
+
65
+ /**
66
+ * Handle change of state.
67
+ * @param {Event} event The event that fired.
68
+ * @private
69
+ */
70
+ MaterialCheckbox.prototype.onChange_ = function(event) {
71
+ 'use strict';
72
+
73
+ this.updateClasses_();
74
+ };
75
+
76
+ /**
77
+ * Handle focus of element.
78
+ * @param {Event} event The event that fired.
79
+ * @private
80
+ */
81
+ MaterialCheckbox.prototype.onFocus_ = function(event) {
82
+ 'use strict';
83
+
84
+ this.element_.classList.add(this.CssClasses_.IS_FOCUSED);
85
+ };
86
+
87
+ /**
88
+ * Handle lost focus of element.
89
+ * @param {Event} event The event that fired.
90
+ * @private
91
+ */
92
+ MaterialCheckbox.prototype.onBlur_ = function(event) {
93
+ 'use strict';
94
+
95
+ this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);
96
+ };
97
+
98
+ /**
99
+ * Handle mouseup.
100
+ * @param {Event} event The event that fired.
101
+ * @private
102
+ */
103
+ MaterialCheckbox.prototype.onMouseUp_ = function(event) {
104
+ 'use strict';
105
+
106
+ this.blur_();
107
+ };
108
+
109
+ /**
110
+ * Handle class updates.
111
+ * @param {HTMLElement} button The button whose classes we should update.
112
+ * @param {HTMLElement} label The label whose classes we should update.
113
+ * @private
114
+ */
115
+ MaterialCheckbox.prototype.updateClasses_ = function() {
116
+ 'use strict';
117
+
118
+ if (this.inputElement_.disabled) {
119
+ this.element_.classList.add(this.CssClasses_.IS_DISABLED);
120
+ } else {
121
+ this.element_.classList.remove(this.CssClasses_.IS_DISABLED);
122
+ }
123
+
124
+ if (this.inputElement_.checked) {
125
+ this.element_.classList.add(this.CssClasses_.IS_CHECKED);
126
+ } else {
127
+ this.element_.classList.remove(this.CssClasses_.IS_CHECKED);
128
+ }
129
+ };
130
+
131
+ /**
132
+ * Add blur.
133
+ * @private
134
+ */
135
+ MaterialCheckbox.prototype.blur_ = function(event) {
136
+ 'use strict';
137
+
138
+ // TODO: figure out why there's a focus event being fired after our blur,
139
+ // so that we can avoid this hack.
140
+ window.setTimeout(function() {
141
+ this.inputElement_.blur();
142
+ }.bind(this), this.Constant_.TINY_TIMEOUT);
143
+ };
144
+
145
+ // Public methods.
146
+
147
+ /**
148
+ * Disable checkbox.
149
+ * @public
150
+ */
151
+ MaterialCheckbox.prototype.disable = function() {
152
+ 'use strict';
153
+
154
+ this.inputElement_.disabled = true;
155
+ this.updateClasses_();
156
+ };
157
+
158
+ /**
159
+ * Enable checkbox.
160
+ * @public
161
+ */
162
+ MaterialCheckbox.prototype.enable = function() {
163
+ 'use strict';
164
+
165
+ this.inputElement_.disabled = false;
166
+ this.updateClasses_();
167
+ };
168
+
169
+ /**
170
+ * Check checkbox.
171
+ * @public
172
+ */
173
+ MaterialCheckbox.prototype.check = function() {
174
+ 'use strict';
175
+
176
+ this.inputElement_.checked = true;
177
+ this.updateClasses_();
178
+ };
179
+
180
+ /**
181
+ * Uncheck checkbox.
182
+ * @public
183
+ */
184
+ MaterialCheckbox.prototype.uncheck = function() {
185
+ 'use strict';
186
+
187
+ this.inputElement_.checked = false;
188
+ this.updateClasses_();
189
+ };
190
+
191
+ /**
192
+ * Initialize element.
193
+ */
194
+ MaterialCheckbox.prototype.init = function() {
195
+ 'use strict';
196
+
197
+ if (this.element_) {
198
+ this.inputElement_ = this.element_.querySelector('.' +
199
+ this.CssClasses_.INPUT);
200
+
201
+ var boxOutline = document.createElement('span');
202
+ boxOutline.classList.add(this.CssClasses_.BOX_OUTLINE);
203
+
204
+ var tickContainer = document.createElement('span');
205
+ tickContainer.classList.add(this.CssClasses_.FOCUS_HELPER);
206
+
207
+ var tickOutline = document.createElement('span');
208
+ tickOutline.classList.add(this.CssClasses_.TICK_OUTLINE);
209
+
210
+ boxOutline.appendChild(tickOutline);
211
+
212
+ this.element_.appendChild(tickContainer);
213
+ this.element_.appendChild(boxOutline);
214
+
215
+ if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {
216
+ this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);
217
+ this.rippleContainerElement_ = document.createElement('span');
218
+ this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER);
219
+ this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_EFFECT);
220
+ this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER);
221
+ this.boundRippleMouseUp = this.onMouseUp_.bind(this);
222
+ this.rippleContainerElement_.addEventListener('mouseup', this.boundRippleMouseUp);
223
+
224
+ var ripple = document.createElement('span');
225
+ ripple.classList.add(this.CssClasses_.RIPPLE);
226
+
227
+ this.rippleContainerElement_.appendChild(ripple);
228
+ this.element_.appendChild(this.rippleContainerElement_);
229
+ }
230
+ this.boundInputOnChange = this.onChange_.bind(this);
231
+ this.boundInputOnFocus = this.onFocus_.bind(this);
232
+ this.boundInputOnBlur = this.onBlur_.bind(this);
233
+ this.boundElementMouseUp = this.onMouseUp_.bind(this);
234
+ this.inputElement_.addEventListener('change', this.boundInputOnChange);
235
+ this.inputElement_.addEventListener('focus', this.boundInputOnFocus);
236
+ this.inputElement_.addEventListener('blur', this.boundInputOnBlur);
237
+ this.element_.addEventListener('mouseup', this.boundElementMouseUp);
238
+
239
+ this.updateClasses_();
240
+ this.element_.classList.add(this.CssClasses_.IS_UPGRADED);
241
+ }
242
+ };
243
+
244
+ /*
245
+ * Downgrade the component.
246
+ */
247
+ MaterialCheckbox.prototype.mdlDowngrade_ = function() {
248
+ 'use strict';
249
+ if (this.rippleContainerElement_) {
250
+ this.rippleContainerElement_.removeEventListener('mouseup', this.boundRippleMouseUp);
251
+ }
252
+ this.inputElement_.removeEventListener('change', this.boundInputOnChange);
253
+ this.inputElement_.removeEventListener('focus', this.boundInputOnFocus);
254
+ this.inputElement_.removeEventListener('blur', this.boundInputOnBlur);
255
+ this.element_.removeEventListener('mouseup', this.boundElementMouseUp);
256
+ };
257
+
258
+ // The component registers itself. It can assume componentHandler is available
259
+ // in the global scope.
260
+ componentHandler.register({
261
+ constructor: MaterialCheckbox,
262
+ classAsString: 'MaterialCheckbox',
263
+ cssClass: 'mdl-js-checkbox',
264
+ widget: true
265
+ });
@@ -0,0 +1,149 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2015 Google Inc. All Rights Reserved.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ /**
19
+ * Class constructor for Data Table Card MDL component.
20
+ * Implements MDL component design pattern defined at:
21
+ * https://github.com/jasonmayes/mdl-component-design-pattern
22
+ * @param {HTMLElement} element The element that will be upgraded.
23
+ */
24
+ function MaterialDataTable(element) {
25
+ 'use strict';
26
+
27
+ this.element_ = element;
28
+
29
+ // Initialize instance.
30
+ this.init();
31
+ }
32
+
33
+ /**
34
+ * Store constants in one place so they can be updated easily.
35
+ * @enum {string | number}
36
+ * @private
37
+ */
38
+ MaterialDataTable.prototype.Constant_ = {
39
+ // None at the moment.
40
+ };
41
+
42
+ /**
43
+ * Store strings for class names defined by this component that are used in
44
+ * JavaScript. This allows us to simply change it in one place should we
45
+ * decide to modify at a later date.
46
+ * @enum {string}
47
+ * @private
48
+ */
49
+ MaterialDataTable.prototype.CssClasses_ = {
50
+ DATA_TABLE: 'mdl-data-table',
51
+ SELECTABLE: 'mdl-data-table--selectable',
52
+ IS_SELECTED: 'is-selected',
53
+ IS_UPGRADED: 'is-upgraded'
54
+ };
55
+
56
+ MaterialDataTable.prototype.selectRow_ = function(checkbox, row, rows) {
57
+ 'use strict';
58
+
59
+ if (row) {
60
+ return function() {
61
+ if (checkbox.checked) {
62
+ row.classList.add(this.CssClasses_.IS_SELECTED);
63
+ } else {
64
+ row.classList.remove(this.CssClasses_.IS_SELECTED);
65
+ }
66
+ }.bind(this);
67
+ }
68
+
69
+ if (rows) {
70
+ return function() {
71
+ var i;
72
+ var el;
73
+ if (checkbox.checked) {
74
+ for (i = 0; i < rows.length; i++) {
75
+ el = rows[i].querySelector('td').querySelector('.mdl-checkbox');
76
+ el.MaterialCheckbox.check();
77
+ rows[i].classList.add(this.CssClasses_.IS_SELECTED);
78
+ }
79
+ } else {
80
+ for (i = 0; i < rows.length; i++) {
81
+ el = rows[i].querySelector('td').querySelector('.mdl-checkbox');
82
+ el.MaterialCheckbox.uncheck();
83
+ rows[i].classList.remove(this.CssClasses_.IS_SELECTED);
84
+ }
85
+ }
86
+ }.bind(this);
87
+ }
88
+ };
89
+
90
+ MaterialDataTable.prototype.createCheckbox_ = function(row, rows) {
91
+ 'use strict';
92
+
93
+ var label = document.createElement('label');
94
+ label.classList.add('mdl-checkbox');
95
+ label.classList.add('mdl-js-checkbox');
96
+ label.classList.add('mdl-js-ripple-effect');
97
+ label.classList.add('mdl-data-table__select');
98
+ var checkbox = document.createElement('input');
99
+ checkbox.type = 'checkbox';
100
+ checkbox.classList.add('mdl-checkbox__input');
101
+ if (row) {
102
+ checkbox.addEventListener('change', this.selectRow_(checkbox, row));
103
+ } else if (rows) {
104
+ checkbox.addEventListener('change', this.selectRow_(checkbox, null, rows));
105
+ }
106
+ label.appendChild(checkbox);
107
+ componentHandler.upgradeElement(label, 'MaterialCheckbox');
108
+ return label;
109
+ };
110
+
111
+ /**
112
+ * Initialize element.
113
+ */
114
+ MaterialDataTable.prototype.init = function() {
115
+ 'use strict';
116
+
117
+ if (this.element_) {
118
+
119
+ var firstHeader = this.element_.querySelector('th');
120
+ var rows = this.element_.querySelector('tbody').querySelectorAll('tr');
121
+
122
+ if (this.element_.classList.contains(this.CssClasses_.SELECTABLE)) {
123
+ var th = document.createElement('th');
124
+ var headerCheckbox = this.createCheckbox_(null, rows);
125
+ th.appendChild(headerCheckbox);
126
+ firstHeader.parentElement.insertBefore(th, firstHeader);
127
+
128
+ for (var i = 0; i < rows.length; i++) {
129
+ var firstCell = rows[i].querySelector('td');
130
+ if (firstCell) {
131
+ var td = document.createElement('td');
132
+ var rowCheckbox = this.createCheckbox_(rows[i]);
133
+ td.appendChild(rowCheckbox);
134
+ rows[i].insertBefore(td, firstCell);
135
+ }
136
+ }
137
+ }
138
+
139
+ this.element_.classList.add(this.CssClasses_.IS_UPGRADED);
140
+ }
141
+ };
142
+
143
+ // The component registers itself. It can assume componentHandler is available
144
+ // in the global scope.
145
+ componentHandler.register({
146
+ constructor: MaterialDataTable,
147
+ classAsString: 'MaterialDataTable',
148
+ cssClass: 'mdl-js-data-table'
149
+ });