@materializecss/materialize 1.2.0 → 1.2.2
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.
- package/Gruntfile.js +722 -712
- package/LICENSE +21 -21
- package/README.md +91 -91
- package/dist/css/materialize.css +78 -137
- package/dist/css/materialize.min.css +12 -12
- package/dist/js/materialize.js +1502 -1378
- package/dist/js/materialize.min.js +6 -6
- package/extras/noUiSlider/nouislider.css +403 -403
- package/extras/noUiSlider/nouislider.js +2147 -2147
- package/js/anime.min.js +34 -34
- package/js/autocomplete.js +479 -479
- package/js/buttons.js +354 -354
- package/js/cards.js +40 -40
- package/js/carousel.js +732 -732
- package/js/cash.js +960 -960
- package/js/characterCounter.js +136 -136
- package/js/chips.js +486 -486
- package/js/collapsible.js +275 -275
- package/js/component.js +44 -44
- package/js/datepicker.js +983 -983
- package/js/dropdown.js +669 -669
- package/js/forms.js +285 -285
- package/js/global.js +428 -428
- package/js/materialbox.js +453 -453
- package/js/modal.js +382 -382
- package/js/parallax.js +138 -138
- package/js/pushpin.js +148 -148
- package/js/range.js +263 -263
- package/js/scrollspy.js +295 -295
- package/js/select.js +391 -391
- package/js/sidenav.js +583 -583
- package/js/slider.js +497 -359
- package/js/tabs.js +402 -402
- package/js/tapTarget.js +315 -315
- package/js/timepicker.js +712 -712
- package/js/toasts.js +325 -325
- package/js/tooltip.js +320 -320
- package/js/waves.js +614 -614
- package/package.json +87 -84
- package/sass/components/_badges.scss +55 -55
- package/sass/components/_buttons.scss +322 -322
- package/sass/components/_cards.scss +195 -195
- package/sass/components/_carousel.scss +90 -90
- package/sass/components/_chips.scss +96 -96
- package/sass/components/_collapsible.scss +91 -91
- package/sass/components/_collection.scss +106 -106
- package/sass/components/_color-classes.scss +32 -32
- package/sass/components/_color-variables.scss +370 -370
- package/sass/components/_datepicker.scss +191 -191
- package/sass/components/_dropdown.scss +84 -84
- package/sass/components/_global.scss +646 -646
- package/sass/components/_grid.scss +158 -158
- package/sass/components/_icons-material-design.scss +5 -5
- package/sass/components/_materialbox.scss +42 -42
- package/sass/components/_modal.scss +97 -97
- package/sass/components/_navbar.scss +208 -208
- package/sass/components/_normalize.scss +447 -447
- package/sass/components/_preloader.scss +334 -334
- package/sass/components/_pulse.scss +34 -34
- package/sass/components/_sidenav.scss +214 -214
- package/sass/components/_slider.scss +100 -91
- package/sass/components/_table_of_contents.scss +33 -33
- package/sass/components/_tabs.scss +99 -99
- package/sass/components/_tapTarget.scss +103 -103
- package/sass/components/_timepicker.scss +199 -199
- package/sass/components/_toast.scss +58 -58
- package/sass/components/_tooltip.scss +32 -32
- package/sass/components/_transitions.scss +12 -12
- package/sass/components/_typography.scss +62 -62
- package/sass/components/_variables.scss +352 -352
- package/sass/components/_waves.scss +187 -187
- package/sass/components/forms/_checkboxes.scss +200 -200
- package/sass/components/forms/_file-input.scss +44 -44
- package/sass/components/forms/_forms.scss +22 -22
- package/sass/components/forms/_input-fields.scss +388 -388
- package/sass/components/forms/_radio-buttons.scss +115 -115
- package/sass/components/forms/_range.scss +161 -161
- package/sass/components/forms/_select.scss +199 -199
- package/sass/components/forms/_switches.scss +91 -91
- package/sass/materialize.scss +42 -42
- package/sass/_style.scss +0 -929
- package/sass/ghpages-materialize.scss +0 -7
package/js/collapsible.js
CHANGED
|
@@ -1,275 +1,275 @@
|
|
|
1
|
-
(function($, anim) {
|
|
2
|
-
'use strict';
|
|
3
|
-
|
|
4
|
-
let _defaults = {
|
|
5
|
-
accordion: true,
|
|
6
|
-
onOpenStart: undefined,
|
|
7
|
-
onOpenEnd: undefined,
|
|
8
|
-
onCloseStart: undefined,
|
|
9
|
-
onCloseEnd: undefined,
|
|
10
|
-
inDuration: 300,
|
|
11
|
-
outDuration: 300
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* @class
|
|
16
|
-
*
|
|
17
|
-
*/
|
|
18
|
-
class Collapsible extends Component {
|
|
19
|
-
/**
|
|
20
|
-
* Construct Collapsible instance
|
|
21
|
-
* @constructor
|
|
22
|
-
* @param {Element} el
|
|
23
|
-
* @param {Object} options
|
|
24
|
-
*/
|
|
25
|
-
constructor(el, options) {
|
|
26
|
-
super(Collapsible, el, options);
|
|
27
|
-
|
|
28
|
-
this.el.M_Collapsible = this;
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Options for the collapsible
|
|
32
|
-
* @member Collapsible#options
|
|
33
|
-
* @prop {Boolean} [accordion=false] - Type of the collapsible
|
|
34
|
-
* @prop {Function} onOpenStart - Callback function called before collapsible is opened
|
|
35
|
-
* @prop {Function} onOpenEnd - Callback function called after collapsible is opened
|
|
36
|
-
* @prop {Function} onCloseStart - Callback function called before collapsible is closed
|
|
37
|
-
* @prop {Function} onCloseEnd - Callback function called after collapsible is closed
|
|
38
|
-
* @prop {Number} inDuration - Transition in duration in milliseconds.
|
|
39
|
-
* @prop {Number} outDuration - Transition duration in milliseconds.
|
|
40
|
-
*/
|
|
41
|
-
this.options = $.extend({}, Collapsible.defaults, options);
|
|
42
|
-
|
|
43
|
-
// Setup tab indices
|
|
44
|
-
this.$headers = this.$el.children('li').children('.collapsible-header');
|
|
45
|
-
this.$headers.attr('tabindex', 0);
|
|
46
|
-
|
|
47
|
-
this._setupEventHandlers();
|
|
48
|
-
|
|
49
|
-
// Open first active
|
|
50
|
-
let $activeBodies = this.$el.children('li.active').children('.collapsible-body');
|
|
51
|
-
if (this.options.accordion) {
|
|
52
|
-
// Handle Accordion
|
|
53
|
-
$activeBodies.first().css('display', 'block');
|
|
54
|
-
} else {
|
|
55
|
-
// Handle Expandables
|
|
56
|
-
$activeBodies.css('display', 'block');
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
static get defaults() {
|
|
61
|
-
return _defaults;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
static init(els, options) {
|
|
65
|
-
return super.init(this, els, options);
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Get Instance
|
|
70
|
-
*/
|
|
71
|
-
static getInstance(el) {
|
|
72
|
-
let domElem = !!el.jquery ? el[0] : el;
|
|
73
|
-
return domElem.M_Collapsible;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
/**
|
|
77
|
-
* Teardown component
|
|
78
|
-
*/
|
|
79
|
-
destroy() {
|
|
80
|
-
this._removeEventHandlers();
|
|
81
|
-
this.el.M_Collapsible = undefined;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
/**
|
|
85
|
-
* Setup Event Handlers
|
|
86
|
-
*/
|
|
87
|
-
_setupEventHandlers() {
|
|
88
|
-
this._handleCollapsibleClickBound = this._handleCollapsibleClick.bind(this);
|
|
89
|
-
this._handleCollapsibleKeydownBound = this._handleCollapsibleKeydown.bind(this);
|
|
90
|
-
this.el.addEventListener('click', this._handleCollapsibleClickBound);
|
|
91
|
-
this.$headers.each((header) => {
|
|
92
|
-
header.addEventListener('keydown', this._handleCollapsibleKeydownBound);
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
/**
|
|
97
|
-
* Remove Event Handlers
|
|
98
|
-
*/
|
|
99
|
-
_removeEventHandlers() {
|
|
100
|
-
this.el.removeEventListener('click', this._handleCollapsibleClickBound);
|
|
101
|
-
this.$headers.each((header) => {
|
|
102
|
-
header.removeEventListener('keydown', this._handleCollapsibleKeydownBound);
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
/**
|
|
107
|
-
* Handle Collapsible Click
|
|
108
|
-
* @param {Event} e
|
|
109
|
-
*/
|
|
110
|
-
_handleCollapsibleClick(e) {
|
|
111
|
-
let $header = $(e.target).closest('.collapsible-header');
|
|
112
|
-
if (e.target && $header.length) {
|
|
113
|
-
let $collapsible = $header.closest('.collapsible');
|
|
114
|
-
if ($collapsible[0] === this.el) {
|
|
115
|
-
let $collapsibleLi = $header.closest('li');
|
|
116
|
-
let $collapsibleLis = $collapsible.children('li');
|
|
117
|
-
let isActive = $collapsibleLi[0].classList.contains('active');
|
|
118
|
-
let index = $collapsibleLis.index($collapsibleLi);
|
|
119
|
-
|
|
120
|
-
if (isActive) {
|
|
121
|
-
this.close(index);
|
|
122
|
-
} else {
|
|
123
|
-
this.open(index);
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
/**
|
|
130
|
-
* Handle Collapsible Keydown
|
|
131
|
-
* @param {Event} e
|
|
132
|
-
*/
|
|
133
|
-
_handleCollapsibleKeydown(e) {
|
|
134
|
-
if (e.keyCode === 13) {
|
|
135
|
-
this._handleCollapsibleClickBound(e);
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
/**
|
|
140
|
-
* Animate in collapsible slide
|
|
141
|
-
* @param {Number} index - 0th index of slide
|
|
142
|
-
*/
|
|
143
|
-
_animateIn(index) {
|
|
144
|
-
let $collapsibleLi = this.$el.children('li').eq(index);
|
|
145
|
-
if ($collapsibleLi.length) {
|
|
146
|
-
let $body = $collapsibleLi.children('.collapsible-body');
|
|
147
|
-
|
|
148
|
-
anim.remove($body[0]);
|
|
149
|
-
$body.css({
|
|
150
|
-
display: 'block',
|
|
151
|
-
overflow: 'hidden',
|
|
152
|
-
height: 0,
|
|
153
|
-
paddingTop: '',
|
|
154
|
-
paddingBottom: ''
|
|
155
|
-
});
|
|
156
|
-
|
|
157
|
-
let pTop = $body.css('padding-top');
|
|
158
|
-
let pBottom = $body.css('padding-bottom');
|
|
159
|
-
let finalHeight = $body[0].scrollHeight;
|
|
160
|
-
$body.css({
|
|
161
|
-
paddingTop: 0,
|
|
162
|
-
paddingBottom: 0
|
|
163
|
-
});
|
|
164
|
-
|
|
165
|
-
anim({
|
|
166
|
-
targets: $body[0],
|
|
167
|
-
height: finalHeight,
|
|
168
|
-
paddingTop: pTop,
|
|
169
|
-
paddingBottom: pBottom,
|
|
170
|
-
duration: this.options.inDuration,
|
|
171
|
-
easing: 'easeInOutCubic',
|
|
172
|
-
complete: (anim) => {
|
|
173
|
-
$body.css({
|
|
174
|
-
overflow: '',
|
|
175
|
-
paddingTop: '',
|
|
176
|
-
paddingBottom: '',
|
|
177
|
-
height: ''
|
|
178
|
-
});
|
|
179
|
-
|
|
180
|
-
// onOpenEnd callback
|
|
181
|
-
if (typeof this.options.onOpenEnd === 'function') {
|
|
182
|
-
this.options.onOpenEnd.call(this, $collapsibleLi[0]);
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
});
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
/**
|
|
190
|
-
* Animate out collapsible slide
|
|
191
|
-
* @param {Number} index - 0th index of slide to open
|
|
192
|
-
*/
|
|
193
|
-
_animateOut(index) {
|
|
194
|
-
let $collapsibleLi = this.$el.children('li').eq(index);
|
|
195
|
-
if ($collapsibleLi.length) {
|
|
196
|
-
let $body = $collapsibleLi.children('.collapsible-body');
|
|
197
|
-
anim.remove($body[0]);
|
|
198
|
-
$body.css('overflow', 'hidden');
|
|
199
|
-
anim({
|
|
200
|
-
targets: $body[0],
|
|
201
|
-
height: 0,
|
|
202
|
-
paddingTop: 0,
|
|
203
|
-
paddingBottom: 0,
|
|
204
|
-
duration: this.options.outDuration,
|
|
205
|
-
easing: 'easeInOutCubic',
|
|
206
|
-
complete: () => {
|
|
207
|
-
$body.css({
|
|
208
|
-
height: '',
|
|
209
|
-
overflow: '',
|
|
210
|
-
padding: '',
|
|
211
|
-
display: ''
|
|
212
|
-
});
|
|
213
|
-
|
|
214
|
-
// onCloseEnd callback
|
|
215
|
-
if (typeof this.options.onCloseEnd === 'function') {
|
|
216
|
-
this.options.onCloseEnd.call(this, $collapsibleLi[0]);
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
});
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
/**
|
|
224
|
-
* Open Collapsible
|
|
225
|
-
* @param {Number} index - 0th index of slide
|
|
226
|
-
*/
|
|
227
|
-
open(index) {
|
|
228
|
-
let $collapsibleLi = this.$el.children('li').eq(index);
|
|
229
|
-
if ($collapsibleLi.length && !$collapsibleLi[0].classList.contains('active')) {
|
|
230
|
-
// onOpenStart callback
|
|
231
|
-
if (typeof this.options.onOpenStart === 'function') {
|
|
232
|
-
this.options.onOpenStart.call(this, $collapsibleLi[0]);
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
// Handle accordion behavior
|
|
236
|
-
if (this.options.accordion) {
|
|
237
|
-
let $collapsibleLis = this.$el.children('li');
|
|
238
|
-
let $activeLis = this.$el.children('li.active');
|
|
239
|
-
$activeLis.each((el) => {
|
|
240
|
-
let index = $collapsibleLis.index($(el));
|
|
241
|
-
this.close(index);
|
|
242
|
-
});
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
// Animate in
|
|
246
|
-
$collapsibleLi[0].classList.add('active');
|
|
247
|
-
this._animateIn(index);
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
/**
|
|
252
|
-
* Close Collapsible
|
|
253
|
-
* @param {Number} index - 0th index of slide
|
|
254
|
-
*/
|
|
255
|
-
close(index) {
|
|
256
|
-
let $collapsibleLi = this.$el.children('li').eq(index);
|
|
257
|
-
if ($collapsibleLi.length && $collapsibleLi[0].classList.contains('active')) {
|
|
258
|
-
// onCloseStart callback
|
|
259
|
-
if (typeof this.options.onCloseStart === 'function') {
|
|
260
|
-
this.options.onCloseStart.call(this, $collapsibleLi[0]);
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
// Animate out
|
|
264
|
-
$collapsibleLi[0].classList.remove('active');
|
|
265
|
-
this._animateOut(index);
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
M.Collapsible = Collapsible;
|
|
271
|
-
|
|
272
|
-
if (M.jQueryLoaded) {
|
|
273
|
-
M.initializeJqueryWrapper(Collapsible, 'collapsible', 'M_Collapsible');
|
|
274
|
-
}
|
|
275
|
-
})(cash, M.anime);
|
|
1
|
+
(function($, anim) {
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
let _defaults = {
|
|
5
|
+
accordion: true,
|
|
6
|
+
onOpenStart: undefined,
|
|
7
|
+
onOpenEnd: undefined,
|
|
8
|
+
onCloseStart: undefined,
|
|
9
|
+
onCloseEnd: undefined,
|
|
10
|
+
inDuration: 300,
|
|
11
|
+
outDuration: 300
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* @class
|
|
16
|
+
*
|
|
17
|
+
*/
|
|
18
|
+
class Collapsible extends Component {
|
|
19
|
+
/**
|
|
20
|
+
* Construct Collapsible instance
|
|
21
|
+
* @constructor
|
|
22
|
+
* @param {Element} el
|
|
23
|
+
* @param {Object} options
|
|
24
|
+
*/
|
|
25
|
+
constructor(el, options) {
|
|
26
|
+
super(Collapsible, el, options);
|
|
27
|
+
|
|
28
|
+
this.el.M_Collapsible = this;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Options for the collapsible
|
|
32
|
+
* @member Collapsible#options
|
|
33
|
+
* @prop {Boolean} [accordion=false] - Type of the collapsible
|
|
34
|
+
* @prop {Function} onOpenStart - Callback function called before collapsible is opened
|
|
35
|
+
* @prop {Function} onOpenEnd - Callback function called after collapsible is opened
|
|
36
|
+
* @prop {Function} onCloseStart - Callback function called before collapsible is closed
|
|
37
|
+
* @prop {Function} onCloseEnd - Callback function called after collapsible is closed
|
|
38
|
+
* @prop {Number} inDuration - Transition in duration in milliseconds.
|
|
39
|
+
* @prop {Number} outDuration - Transition duration in milliseconds.
|
|
40
|
+
*/
|
|
41
|
+
this.options = $.extend({}, Collapsible.defaults, options);
|
|
42
|
+
|
|
43
|
+
// Setup tab indices
|
|
44
|
+
this.$headers = this.$el.children('li').children('.collapsible-header');
|
|
45
|
+
this.$headers.attr('tabindex', 0);
|
|
46
|
+
|
|
47
|
+
this._setupEventHandlers();
|
|
48
|
+
|
|
49
|
+
// Open first active
|
|
50
|
+
let $activeBodies = this.$el.children('li.active').children('.collapsible-body');
|
|
51
|
+
if (this.options.accordion) {
|
|
52
|
+
// Handle Accordion
|
|
53
|
+
$activeBodies.first().css('display', 'block');
|
|
54
|
+
} else {
|
|
55
|
+
// Handle Expandables
|
|
56
|
+
$activeBodies.css('display', 'block');
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
static get defaults() {
|
|
61
|
+
return _defaults;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
static init(els, options) {
|
|
65
|
+
return super.init(this, els, options);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Get Instance
|
|
70
|
+
*/
|
|
71
|
+
static getInstance(el) {
|
|
72
|
+
let domElem = !!el.jquery ? el[0] : el;
|
|
73
|
+
return domElem.M_Collapsible;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Teardown component
|
|
78
|
+
*/
|
|
79
|
+
destroy() {
|
|
80
|
+
this._removeEventHandlers();
|
|
81
|
+
this.el.M_Collapsible = undefined;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Setup Event Handlers
|
|
86
|
+
*/
|
|
87
|
+
_setupEventHandlers() {
|
|
88
|
+
this._handleCollapsibleClickBound = this._handleCollapsibleClick.bind(this);
|
|
89
|
+
this._handleCollapsibleKeydownBound = this._handleCollapsibleKeydown.bind(this);
|
|
90
|
+
this.el.addEventListener('click', this._handleCollapsibleClickBound);
|
|
91
|
+
this.$headers.each((header) => {
|
|
92
|
+
header.addEventListener('keydown', this._handleCollapsibleKeydownBound);
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Remove Event Handlers
|
|
98
|
+
*/
|
|
99
|
+
_removeEventHandlers() {
|
|
100
|
+
this.el.removeEventListener('click', this._handleCollapsibleClickBound);
|
|
101
|
+
this.$headers.each((header) => {
|
|
102
|
+
header.removeEventListener('keydown', this._handleCollapsibleKeydownBound);
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Handle Collapsible Click
|
|
108
|
+
* @param {Event} e
|
|
109
|
+
*/
|
|
110
|
+
_handleCollapsibleClick(e) {
|
|
111
|
+
let $header = $(e.target).closest('.collapsible-header');
|
|
112
|
+
if (e.target && $header.length) {
|
|
113
|
+
let $collapsible = $header.closest('.collapsible');
|
|
114
|
+
if ($collapsible[0] === this.el) {
|
|
115
|
+
let $collapsibleLi = $header.closest('li');
|
|
116
|
+
let $collapsibleLis = $collapsible.children('li');
|
|
117
|
+
let isActive = $collapsibleLi[0].classList.contains('active');
|
|
118
|
+
let index = $collapsibleLis.index($collapsibleLi);
|
|
119
|
+
|
|
120
|
+
if (isActive) {
|
|
121
|
+
this.close(index);
|
|
122
|
+
} else {
|
|
123
|
+
this.open(index);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Handle Collapsible Keydown
|
|
131
|
+
* @param {Event} e
|
|
132
|
+
*/
|
|
133
|
+
_handleCollapsibleKeydown(e) {
|
|
134
|
+
if (e.keyCode === 13) {
|
|
135
|
+
this._handleCollapsibleClickBound(e);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Animate in collapsible slide
|
|
141
|
+
* @param {Number} index - 0th index of slide
|
|
142
|
+
*/
|
|
143
|
+
_animateIn(index) {
|
|
144
|
+
let $collapsibleLi = this.$el.children('li').eq(index);
|
|
145
|
+
if ($collapsibleLi.length) {
|
|
146
|
+
let $body = $collapsibleLi.children('.collapsible-body');
|
|
147
|
+
|
|
148
|
+
anim.remove($body[0]);
|
|
149
|
+
$body.css({
|
|
150
|
+
display: 'block',
|
|
151
|
+
overflow: 'hidden',
|
|
152
|
+
height: 0,
|
|
153
|
+
paddingTop: '',
|
|
154
|
+
paddingBottom: ''
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
let pTop = $body.css('padding-top');
|
|
158
|
+
let pBottom = $body.css('padding-bottom');
|
|
159
|
+
let finalHeight = $body[0].scrollHeight;
|
|
160
|
+
$body.css({
|
|
161
|
+
paddingTop: 0,
|
|
162
|
+
paddingBottom: 0
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
anim({
|
|
166
|
+
targets: $body[0],
|
|
167
|
+
height: finalHeight,
|
|
168
|
+
paddingTop: pTop,
|
|
169
|
+
paddingBottom: pBottom,
|
|
170
|
+
duration: this.options.inDuration,
|
|
171
|
+
easing: 'easeInOutCubic',
|
|
172
|
+
complete: (anim) => {
|
|
173
|
+
$body.css({
|
|
174
|
+
overflow: '',
|
|
175
|
+
paddingTop: '',
|
|
176
|
+
paddingBottom: '',
|
|
177
|
+
height: ''
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
// onOpenEnd callback
|
|
181
|
+
if (typeof this.options.onOpenEnd === 'function') {
|
|
182
|
+
this.options.onOpenEnd.call(this, $collapsibleLi[0]);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Animate out collapsible slide
|
|
191
|
+
* @param {Number} index - 0th index of slide to open
|
|
192
|
+
*/
|
|
193
|
+
_animateOut(index) {
|
|
194
|
+
let $collapsibleLi = this.$el.children('li').eq(index);
|
|
195
|
+
if ($collapsibleLi.length) {
|
|
196
|
+
let $body = $collapsibleLi.children('.collapsible-body');
|
|
197
|
+
anim.remove($body[0]);
|
|
198
|
+
$body.css('overflow', 'hidden');
|
|
199
|
+
anim({
|
|
200
|
+
targets: $body[0],
|
|
201
|
+
height: 0,
|
|
202
|
+
paddingTop: 0,
|
|
203
|
+
paddingBottom: 0,
|
|
204
|
+
duration: this.options.outDuration,
|
|
205
|
+
easing: 'easeInOutCubic',
|
|
206
|
+
complete: () => {
|
|
207
|
+
$body.css({
|
|
208
|
+
height: '',
|
|
209
|
+
overflow: '',
|
|
210
|
+
padding: '',
|
|
211
|
+
display: ''
|
|
212
|
+
});
|
|
213
|
+
|
|
214
|
+
// onCloseEnd callback
|
|
215
|
+
if (typeof this.options.onCloseEnd === 'function') {
|
|
216
|
+
this.options.onCloseEnd.call(this, $collapsibleLi[0]);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* Open Collapsible
|
|
225
|
+
* @param {Number} index - 0th index of slide
|
|
226
|
+
*/
|
|
227
|
+
open(index) {
|
|
228
|
+
let $collapsibleLi = this.$el.children('li').eq(index);
|
|
229
|
+
if ($collapsibleLi.length && !$collapsibleLi[0].classList.contains('active')) {
|
|
230
|
+
// onOpenStart callback
|
|
231
|
+
if (typeof this.options.onOpenStart === 'function') {
|
|
232
|
+
this.options.onOpenStart.call(this, $collapsibleLi[0]);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
// Handle accordion behavior
|
|
236
|
+
if (this.options.accordion) {
|
|
237
|
+
let $collapsibleLis = this.$el.children('li');
|
|
238
|
+
let $activeLis = this.$el.children('li.active');
|
|
239
|
+
$activeLis.each((el) => {
|
|
240
|
+
let index = $collapsibleLis.index($(el));
|
|
241
|
+
this.close(index);
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
// Animate in
|
|
246
|
+
$collapsibleLi[0].classList.add('active');
|
|
247
|
+
this._animateIn(index);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
/**
|
|
252
|
+
* Close Collapsible
|
|
253
|
+
* @param {Number} index - 0th index of slide
|
|
254
|
+
*/
|
|
255
|
+
close(index) {
|
|
256
|
+
let $collapsibleLi = this.$el.children('li').eq(index);
|
|
257
|
+
if ($collapsibleLi.length && $collapsibleLi[0].classList.contains('active')) {
|
|
258
|
+
// onCloseStart callback
|
|
259
|
+
if (typeof this.options.onCloseStart === 'function') {
|
|
260
|
+
this.options.onCloseStart.call(this, $collapsibleLi[0]);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
// Animate out
|
|
264
|
+
$collapsibleLi[0].classList.remove('active');
|
|
265
|
+
this._animateOut(index);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
M.Collapsible = Collapsible;
|
|
271
|
+
|
|
272
|
+
if (M.jQueryLoaded) {
|
|
273
|
+
M.initializeJqueryWrapper(Collapsible, 'collapsible', 'M_Collapsible');
|
|
274
|
+
}
|
|
275
|
+
})(cash, M.anime);
|
package/js/component.js
CHANGED
|
@@ -1,44 +1,44 @@
|
|
|
1
|
-
class Component {
|
|
2
|
-
/**
|
|
3
|
-
* Generic constructor for all components
|
|
4
|
-
* @constructor
|
|
5
|
-
* @param {Element} el
|
|
6
|
-
* @param {Object} options
|
|
7
|
-
*/
|
|
8
|
-
constructor(classDef, el, options) {
|
|
9
|
-
// Display error if el is valid HTML Element
|
|
10
|
-
if (!(el instanceof Element)) {
|
|
11
|
-
console.error(Error(el + ' is not an HTML Element'));
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
// If exists, destroy and reinitialize in child
|
|
15
|
-
let ins = classDef.getInstance(el);
|
|
16
|
-
if (!!ins) {
|
|
17
|
-
ins.destroy();
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
this.el = el;
|
|
21
|
-
this.$el = cash(el);
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Initializes components
|
|
26
|
-
* @param {class} classDef
|
|
27
|
-
* @param {Element | NodeList | jQuery} els
|
|
28
|
-
* @param {Object} options
|
|
29
|
-
*/
|
|
30
|
-
static init(classDef, els, options) {
|
|
31
|
-
let instances = null;
|
|
32
|
-
if (els instanceof Element) {
|
|
33
|
-
instances = new classDef(els, options);
|
|
34
|
-
} else if (!!els && (els.jquery || els.cash || els instanceof NodeList)) {
|
|
35
|
-
let instancesArr = [];
|
|
36
|
-
for (let i = 0; i < els.length; i++) {
|
|
37
|
-
instancesArr.push(new classDef(els[i], options));
|
|
38
|
-
}
|
|
39
|
-
instances = instancesArr;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
return instances;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
1
|
+
class Component {
|
|
2
|
+
/**
|
|
3
|
+
* Generic constructor for all components
|
|
4
|
+
* @constructor
|
|
5
|
+
* @param {Element} el
|
|
6
|
+
* @param {Object} options
|
|
7
|
+
*/
|
|
8
|
+
constructor(classDef, el, options) {
|
|
9
|
+
// Display error if el is valid HTML Element
|
|
10
|
+
if (!(el instanceof Element)) {
|
|
11
|
+
console.error(Error(el + ' is not an HTML Element'));
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
// If exists, destroy and reinitialize in child
|
|
15
|
+
let ins = classDef.getInstance(el);
|
|
16
|
+
if (!!ins) {
|
|
17
|
+
ins.destroy();
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
this.el = el;
|
|
21
|
+
this.$el = cash(el);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Initializes components
|
|
26
|
+
* @param {class} classDef
|
|
27
|
+
* @param {Element | NodeList | jQuery} els
|
|
28
|
+
* @param {Object} options
|
|
29
|
+
*/
|
|
30
|
+
static init(classDef, els, options) {
|
|
31
|
+
let instances = null;
|
|
32
|
+
if (els instanceof Element) {
|
|
33
|
+
instances = new classDef(els, options);
|
|
34
|
+
} else if (!!els && (els.jquery || els.cash || els instanceof NodeList)) {
|
|
35
|
+
let instancesArr = [];
|
|
36
|
+
for (let i = 0; i < els.length; i++) {
|
|
37
|
+
instancesArr.push(new classDef(els[i], options));
|
|
38
|
+
}
|
|
39
|
+
instances = instancesArr;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
return instances;
|
|
43
|
+
}
|
|
44
|
+
}
|