Ultimate Member – User Profile & Membership Plugin - Version 2.0.44

Version Description

Download this release

Release Info

Developer nsinelnikov
Plugin Icon 128x128 Ultimate Member – User Profile & Membership Plugin
Version 2.0.44
Comparing to
See all releases

Code changes from version 2.0.43 to 2.0.44

Files changed (61) hide show
  1. assets/css/simplebar.css +190 -0
  2. assets/css/um-fonticons-fa.css +3 -0
  3. assets/css/um-scrollbar.css +0 -1267
  4. assets/js/simplebar.js +4452 -0
  5. assets/js/simplebar.min.js +1 -0
  6. assets/js/um-functions.js +1 -9
  7. assets/js/um-functions.min.js +1 -1
  8. assets/js/um-scripts.js +432 -407
  9. assets/js/um-scripts.min.js +1 -1
  10. assets/js/um-scrollbar.js +0 -2683
  11. assets/js/um-scrollbar.min.js +0 -1
  12. includes/admin/assets/js/um-admin-modal.js +2 -0
  13. includes/admin/assets/js/um-admin-scripts.js +79 -0
  14. includes/admin/core/class-admin-enqueue.php +38 -6
  15. includes/admin/core/class-admin-metabox.php +23 -6
  16. includes/admin/core/class-admin-settings.php +15 -2
  17. includes/admin/core/class-admin-theme-updater.php +187 -0
  18. includes/admin/core/class-admin-users.php +7 -0
  19. includes/admin/core/list-tables/emails-list-table.php +9 -2
  20. includes/admin/core/packages/2.0.44/functions.php +14 -0
  21. includes/admin/core/packages/2.0.44/hooks.php +5 -0
  22. includes/admin/core/packages/2.0.44/init.php +31 -0
  23. includes/admin/core/packages/2.0.44/metafields.php +33 -0
  24. includes/class-config.php +2 -1
  25. includes/class-dependencies.php +4 -1
  26. includes/class-functions.php +21 -0
  27. includes/class-init.php +62 -12
  28. includes/core/class-access.php +137 -4
  29. includes/core/class-builtin.php +13 -8
  30. includes/core/class-enqueue.php +4 -3
  31. includes/core/class-external-integrations.php +53 -9
  32. includes/core/class-fields.php +22 -4
  33. includes/core/class-form.php +1 -1
  34. includes/core/class-logout.php +6 -6
  35. includes/core/class-mail.php +59 -3
  36. includes/core/class-members.php +19 -18
  37. includes/core/class-modal.php +13 -5
  38. includes/core/class-multisite.php +62 -0
  39. includes/core/class-password.php +62 -9
  40. includes/core/class-permalinks.php +7 -1
  41. includes/core/class-plugin-updater.php +29 -7
  42. includes/core/class-profile.php +31 -0
  43. includes/core/class-rest-api.php +0 -1160
  44. includes/core/class-shortcodes.php +33 -0
  45. includes/core/class-user.php +33 -2
  46. includes/core/rest/class-api-v1.php +541 -0
  47. includes/core/rest/class-api-v2.php +540 -0
  48. includes/core/rest/class-api.php +615 -0
  49. includes/core/um-actions-core.php +6 -0
  50. includes/core/um-actions-form.php +8 -8
  51. includes/core/um-actions-profile.php +1 -1
  52. includes/core/um-filters-members.php +23 -14
  53. includes/core/um-filters-profile.php +1 -1
  54. includes/um-deprecated-functions.php +5 -5
  55. includes/um-short-functions.php +106 -52
  56. languages/ultimate-member-en.po +5 -0
  57. languages/ultimate-member-en_US.mo +0 -0
  58. languages/ultimate-member-en_US.po +914 -870
  59. languages/ultimatemember-en_US.po +5 -0
  60. readme.txt +31 -3
  61. ultimate-member.php +1 -1
assets/css/simplebar.css ADDED
@@ -0,0 +1,190 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [data-simplebar] {
2
+ position: relative;
3
+ flex-direction: column;
4
+ flex-wrap: wrap;
5
+ justify-content: flex-start;
6
+ align-content: flex-start;
7
+ align-items: flex-start;
8
+ }
9
+
10
+ .simplebar-wrapper {
11
+ overflow: hidden;
12
+ width: inherit;
13
+ height: inherit;
14
+ max-width: inherit;
15
+ max-height: inherit;
16
+ }
17
+
18
+ .simplebar-mask {
19
+ direction: inherit;
20
+ position: absolute;
21
+ overflow: hidden;
22
+ padding: 0;
23
+ margin: 0;
24
+ left: 0;
25
+ top: 0;
26
+ bottom: 0;
27
+ right: 0;
28
+ width: auto !important;
29
+ height: auto !important;
30
+ z-index: 0;
31
+ }
32
+
33
+ .simplebar-offset {
34
+ direction: inherit !important;
35
+ box-sizing: inherit !important;
36
+ resize: none !important;
37
+ position: absolute;
38
+ top: 0;
39
+ left: 0;
40
+ bottom: 0;
41
+ right: 0;
42
+ padding: 0;
43
+ margin: 0;
44
+ -webkit-overflow-scrolling: touch;
45
+ }
46
+
47
+ .simplebar-content-wrapper {
48
+ direction: inherit;
49
+ box-sizing: border-box !important;
50
+ position: relative;
51
+ display: block;
52
+ height: 100%; /* Required for horizontal native scrollbar to not appear if parent is taller than natural height */
53
+ width: auto;
54
+ visibility: visible;
55
+ overflow: auto; /* Scroll on this element otherwise element can't have a padding applied properly */
56
+ max-width: 100%; /* Not required for horizontal scroll to trigger */
57
+ max-height: 100%; /* Needed for vertical scroll to trigger */
58
+ }
59
+
60
+ .simplebar-content:before,
61
+ .simplebar-content:after {
62
+ content: " ";
63
+ display: table;
64
+ }
65
+
66
+ .simplebar-placeholder {
67
+ max-height: 100%;
68
+ max-width: 100%;
69
+ width: 100%;
70
+ pointer-events: none;
71
+ }
72
+
73
+ .simplebar-height-auto-observer-wrapper {
74
+ box-sizing: inherit !important;
75
+ height: 100%;
76
+ width: inherit;
77
+ max-width: 1px;
78
+ position: relative;
79
+ float: left;
80
+ max-height: 1px;
81
+ overflow: hidden;
82
+ z-index: -1;
83
+ padding: 0;
84
+ margin: 0;
85
+ pointer-events: none;
86
+ flex-grow: inherit;
87
+ flex-shrink: 0;
88
+ flex-basis: 0;
89
+ }
90
+
91
+ .simplebar-height-auto-observer {
92
+ box-sizing: inherit;
93
+ display: block;
94
+ opacity: 0;
95
+ position: absolute;
96
+ top: 0;
97
+ left: 0;
98
+ height: 1000%;
99
+ width: 1000%;
100
+ min-height: 1px;
101
+ min-width: 1px;
102
+ overflow: hidden;
103
+ pointer-events: none;
104
+ z-index: -1;
105
+ }
106
+
107
+ .simplebar-track {
108
+ z-index: 1;
109
+ position: absolute;
110
+ right: 0;
111
+ bottom: 0;
112
+ pointer-events: none;
113
+ overflow: hidden;
114
+ }
115
+
116
+ [data-simplebar].simplebar-dragging .simplebar-track {
117
+ pointer-events: all;
118
+ }
119
+
120
+ .simplebar-scrollbar {
121
+ position: absolute;
122
+ right: 2px;
123
+ width: 7px;
124
+ min-height: 10px;
125
+ }
126
+
127
+ .simplebar-scrollbar:before {
128
+ position: absolute;
129
+ content: "";
130
+ background: black;
131
+ border-radius: 7px;
132
+ left: 0;
133
+ right: 0;
134
+ opacity: 0;
135
+ transition: opacity 0.2s linear;
136
+ }
137
+
138
+ .simplebar-track .simplebar-scrollbar.simplebar-visible:before {
139
+ /* When hovered, remove all transitions from drag handle */
140
+ opacity: 0.5;
141
+ transition: opacity 0s linear;
142
+ }
143
+
144
+ .simplebar-track.simplebar-vertical {
145
+ top: 0;
146
+ width: 11px;
147
+ }
148
+
149
+ .simplebar-track.simplebar-vertical .simplebar-scrollbar:before {
150
+ top: 2px;
151
+ bottom: 2px;
152
+ }
153
+
154
+ .simplebar-track.simplebar-horizontal {
155
+ left: 0;
156
+ height: 11px;
157
+ }
158
+
159
+ .simplebar-track.simplebar-horizontal .simplebar-scrollbar:before {
160
+ height: 100%;
161
+ left: 2px;
162
+ right: 2px;
163
+ }
164
+
165
+ .simplebar-track.simplebar-horizontal .simplebar-scrollbar {
166
+ right: auto;
167
+ left: 0;
168
+ top: 2px;
169
+ height: 7px;
170
+ min-height: 0;
171
+ min-width: 10px;
172
+ width: auto;
173
+ }
174
+
175
+ /* Rtl support */
176
+ [data-simplebar-direction="rtl"] .simplebar-track.simplebar-vertical {
177
+ right: auto;
178
+ left: 0;
179
+ }
180
+
181
+ .hs-dummy-scrollbar-size {
182
+ direction: rtl;
183
+ position: fixed;
184
+ opacity: 0;
185
+ visibility: hidden;
186
+ height: 500px;
187
+ width: 500px;
188
+ overflow-y: hidden;
189
+ overflow-x: scroll;
190
+ }
assets/css/um-fonticons-fa.css CHANGED
@@ -24,6 +24,9 @@
24
  -moz-osx-font-smoothing: grayscale;
25
  }
26
 
 
 
 
27
  .um-faicon-glass:before {
28
  content: "\f000";
29
  }
24
  -moz-osx-font-smoothing: grayscale;
25
  }
26
 
27
+ .um-faicon-sticky-note:before {
28
+ content: "\f249";
29
+ }
30
  .um-faicon-glass:before {
31
  content: "\f000";
32
  }
assets/css/um-scrollbar.css DELETED
@@ -1,1267 +0,0 @@
1
- /*
2
- == malihu jquery custom scrollbar plugin ==
3
- Plugin URI: http://manos.malihu.gr/jquery-custom-content-scroller
4
- */
5
-
6
-
7
-
8
- /*
9
- CONTENTS:
10
- 1. BASIC STYLE - Plugin's basic/essential CSS properties (normally, should not be edited).
11
- 2. VERTICAL SCROLLBAR - Positioning and dimensions of vertical scrollbar.
12
- 3. HORIZONTAL SCROLLBAR - Positioning and dimensions of horizontal scrollbar.
13
- 4. VERTICAL AND HORIZONTAL SCROLLBARS - Positioning and dimensions of 2-axis scrollbars.
14
- 5. TRANSITIONS - CSS3 transitions for hover events, auto-expanded and auto-hidden scrollbars.
15
- 6. SCROLLBAR COLORS, OPACITY AND BACKGROUNDS
16
- 6.1 THEMES - Scrollbar colors, opacity, dimensions, backgrounds etc. via ready-to-use themes.
17
- */
18
-
19
-
20
-
21
- /*
22
- ------------------------------------------------------------------------------------------------------------------------
23
- 1. BASIC STYLE
24
- ------------------------------------------------------------------------------------------------------------------------
25
- */
26
-
27
- .mCustomScrollbar{ -ms-touch-action: pinch-zoom; touch-action: pinch-zoom; /* direct pointer events to js */ }
28
- .mCustomScrollbar.mCS_no_scrollbar, .mCustomScrollbar.mCS_touch_action{ -ms-touch-action: auto; touch-action: auto; }
29
-
30
- .mCustomScrollBox{ /* contains plugin's markup */
31
- position: relative;
32
- overflow: hidden;
33
- height: 100%;
34
- max-width: 100%;
35
- outline: none;
36
- direction: ltr;
37
- }
38
-
39
- .mCSB_container{ /* contains the original content */
40
- overflow: hidden;
41
- width: auto;
42
- height: auto;
43
- }
44
-
45
-
46
-
47
- /*
48
- ------------------------------------------------------------------------------------------------------------------------
49
- 2. VERTICAL SCROLLBAR
50
- y-axis
51
- ------------------------------------------------------------------------------------------------------------------------
52
- */
53
-
54
- .mCSB_inside > .mCSB_container{ margin-right: 30px; }
55
-
56
- .mCSB_container.mCS_no_scrollbar_y.mCS_y_hidden{ margin-right: 0; } /* non-visible scrollbar */
57
-
58
- .mCS-dir-rtl > .mCSB_inside > .mCSB_container{ /* RTL direction/left-side scrollbar */
59
- margin-right: 0;
60
- margin-left: 30px;
61
- }
62
-
63
- .mCS-dir-rtl > .mCSB_inside > .mCSB_container.mCS_no_scrollbar_y.mCS_y_hidden{ margin-left: 0; } /* RTL direction/left-side scrollbar */
64
-
65
- .mCSB_scrollTools{ /* contains scrollbar markup (draggable element, dragger rail, buttons etc.) */
66
- position: absolute;
67
- width: 16px;
68
- height: auto;
69
- left: auto;
70
- top: 0;
71
- right: 0;
72
- bottom: 0;
73
- }
74
-
75
- .mCSB_outside + .mCSB_scrollTools{ right: -26px; } /* scrollbar position: outside */
76
-
77
- .mCS-dir-rtl > .mCSB_inside > .mCSB_scrollTools,
78
- .mCS-dir-rtl > .mCSB_outside + .mCSB_scrollTools{ /* RTL direction/left-side scrollbar */
79
- right: auto;
80
- left: 0;
81
- }
82
-
83
- .mCS-dir-rtl > .mCSB_outside + .mCSB_scrollTools{ left: -26px; } /* RTL direction/left-side scrollbar (scrollbar position: outside) */
84
-
85
- .mCSB_scrollTools .mCSB_draggerContainer{ /* contains the draggable element and dragger rail markup */
86
- position: absolute;
87
- top: 0;
88
- left: 0;
89
- bottom: 0;
90
- right: 0;
91
- height: auto;
92
- }
93
-
94
- .mCSB_scrollTools a + .mCSB_draggerContainer{ margin: 20px 0; }
95
-
96
- .mCSB_scrollTools .mCSB_draggerRail{
97
- width: 2px;
98
- height: 100%;
99
- margin: 0 auto;
100
- -webkit-border-radius: 16px; -moz-border-radius: 16px; border-radius: 16px;
101
- }
102
-
103
- .mCSB_scrollTools .mCSB_dragger{ /* the draggable element */
104
- cursor: pointer;
105
- width: 100%;
106
- height: 30px; /* minimum dragger height */
107
- z-index: 1;
108
- }
109
-
110
- .mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ /* the dragger element */
111
- position: relative;
112
- width: 4px;
113
- height: 100%;
114
- margin: 0 auto;
115
- -webkit-border-radius: 16px; -moz-border-radius: 16px; border-radius: 16px;
116
- text-align: center;
117
- }
118
-
119
- .mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,
120
- .mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{ width: 12px; /* auto-expanded scrollbar */ }
121
-
122
- .mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded + .mCSB_draggerRail,
123
- .mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{ width: 8px; /* auto-expanded scrollbar */ }
124
-
125
- .mCSB_scrollTools .mCSB_buttonUp,
126
- .mCSB_scrollTools .mCSB_buttonDown{
127
- display: block;
128
- position: absolute;
129
- height: 20px;
130
- width: 100%;
131
- overflow: hidden;
132
- margin: 0 auto;
133
- cursor: pointer;
134
- }
135
-
136
- .mCSB_scrollTools .mCSB_buttonDown{ bottom: 0; }
137
-
138
-
139
-
140
- /*
141
- ------------------------------------------------------------------------------------------------------------------------
142
- 3. HORIZONTAL SCROLLBAR
143
- x-axis
144
- ------------------------------------------------------------------------------------------------------------------------
145
- */
146
-
147
- .mCSB_horizontal.mCSB_inside > .mCSB_container{
148
- margin-right: 0;
149
- margin-bottom: 30px;
150
- }
151
-
152
- .mCSB_horizontal.mCSB_outside > .mCSB_container{ min-height: 100%; }
153
-
154
- .mCSB_horizontal > .mCSB_container.mCS_no_scrollbar_x.mCS_x_hidden{ margin-bottom: 0; } /* non-visible scrollbar */
155
-
156
- .mCSB_scrollTools.mCSB_scrollTools_horizontal{
157
- width: auto;
158
- height: 16px;
159
- top: auto;
160
- right: 0;
161
- bottom: 0;
162
- left: 0;
163
- }
164
-
165
- .mCustomScrollBox + .mCSB_scrollTools.mCSB_scrollTools_horizontal,
166
- .mCustomScrollBox + .mCSB_scrollTools + .mCSB_scrollTools.mCSB_scrollTools_horizontal{ bottom: -26px; } /* scrollbar position: outside */
167
-
168
- .mCSB_scrollTools.mCSB_scrollTools_horizontal a + .mCSB_draggerContainer{ margin: 0 20px; }
169
-
170
- .mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_draggerRail{
171
- width: 100%;
172
- height: 2px;
173
- margin: 7px 0;
174
- }
175
-
176
- .mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_dragger{
177
- width: 30px; /* minimum dragger width */
178
- height: 100%;
179
- left: 0;
180
- }
181
-
182
- .mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{
183
- width: 100%;
184
- height: 4px;
185
- margin: 6px auto;
186
- }
187
-
188
- .mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,
189
- .mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{
190
- height: 12px; /* auto-expanded scrollbar */
191
- margin: 2px auto;
192
- }
193
-
194
- .mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded + .mCSB_draggerRail,
195
- .mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{
196
- height: 8px; /* auto-expanded scrollbar */
197
- margin: 4px 0;
198
- }
199
-
200
- .mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonLeft,
201
- .mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonRight{
202
- display: block;
203
- position: absolute;
204
- width: 20px;
205
- height: 100%;
206
- overflow: hidden;
207
- margin: 0 auto;
208
- cursor: pointer;
209
- }
210
-
211
- .mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonLeft{ left: 0; }
212
-
213
- .mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonRight{ right: 0; }
214
-
215
-
216
-
217
- /*
218
- ------------------------------------------------------------------------------------------------------------------------
219
- 4. VERTICAL AND HORIZONTAL SCROLLBARS
220
- yx-axis
221
- ------------------------------------------------------------------------------------------------------------------------
222
- */
223
-
224
- .mCSB_container_wrapper{
225
- position: absolute;
226
- height: auto;
227
- width: auto;
228
- overflow: hidden;
229
- top: 0;
230
- left: 0;
231
- right: 0;
232
- bottom: 0;
233
- margin-right: 30px;
234
- margin-bottom: 30px;
235
- }
236
-
237
- .mCSB_container_wrapper > .mCSB_container{
238
- padding-right: 30px;
239
- padding-bottom: 30px;
240
- -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box;
241
- }
242
-
243
- .mCSB_vertical_horizontal > .mCSB_scrollTools.mCSB_scrollTools_vertical{ bottom: 20px; }
244
-
245
- .mCSB_vertical_horizontal > .mCSB_scrollTools.mCSB_scrollTools_horizontal{ right: 20px; }
246
-
247
- /* non-visible horizontal scrollbar */
248
- .mCSB_container_wrapper.mCS_no_scrollbar_x.mCS_x_hidden + .mCSB_scrollTools.mCSB_scrollTools_vertical{ bottom: 0; }
249
-
250
- /* non-visible vertical scrollbar/RTL direction/left-side scrollbar */
251
- .mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden + .mCSB_scrollTools ~ .mCSB_scrollTools.mCSB_scrollTools_horizontal,
252
- .mCS-dir-rtl > .mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside > .mCSB_scrollTools.mCSB_scrollTools_horizontal{ right: 0; }
253
-
254
- /* RTL direction/left-side scrollbar */
255
- .mCS-dir-rtl > .mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside > .mCSB_scrollTools.mCSB_scrollTools_horizontal{ left: 20px; }
256
-
257
- /* non-visible scrollbar/RTL direction/left-side scrollbar */
258
- .mCS-dir-rtl > .mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside > .mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden + .mCSB_scrollTools ~ .mCSB_scrollTools.mCSB_scrollTools_horizontal{ left: 0; }
259
-
260
- .mCS-dir-rtl > .mCSB_inside > .mCSB_container_wrapper{ /* RTL direction/left-side scrollbar */
261
- margin-right: 0;
262
- margin-left: 30px;
263
- }
264
-
265
- .mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden > .mCSB_container{ padding-right: 0; }
266
-
267
- .mCSB_container_wrapper.mCS_no_scrollbar_x.mCS_x_hidden > .mCSB_container{ padding-bottom: 0; }
268
-
269
- .mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside > .mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden{
270
- margin-right: 0; /* non-visible scrollbar */
271
- margin-left: 0;
272
- }
273
-
274
- /* non-visible horizontal scrollbar */
275
- .mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside > .mCSB_container_wrapper.mCS_no_scrollbar_x.mCS_x_hidden{ margin-bottom: 0; }
276
-
277
-
278
-
279
- /*
280
- ------------------------------------------------------------------------------------------------------------------------
281
- 5. TRANSITIONS
282
- ------------------------------------------------------------------------------------------------------------------------
283
- */
284
-
285
- .mCSB_scrollTools,
286
- .mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,
287
- .mCSB_scrollTools .mCSB_buttonUp,
288
- .mCSB_scrollTools .mCSB_buttonDown,
289
- .mCSB_scrollTools .mCSB_buttonLeft,
290
- .mCSB_scrollTools .mCSB_buttonRight{
291
- -webkit-transition: opacity .2s ease-in-out, background-color .2s ease-in-out;
292
- -moz-transition: opacity .2s ease-in-out, background-color .2s ease-in-out;
293
- -o-transition: opacity .2s ease-in-out, background-color .2s ease-in-out;
294
- transition: opacity .2s ease-in-out, background-color .2s ease-in-out;
295
- }
296
-
297
- .mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger_bar, /* auto-expanded scrollbar */
298
- .mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerRail,
299
- .mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger_bar,
300
- .mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerRail{
301
- -webkit-transition: width .2s ease-out .2s, height .2s ease-out .2s,
302
- margin-left .2s ease-out .2s, margin-right .2s ease-out .2s,
303
- margin-top .2s ease-out .2s, margin-bottom .2s ease-out .2s,
304
- opacity .2s ease-in-out, background-color .2s ease-in-out;
305
- -moz-transition: width .2s ease-out .2s, height .2s ease-out .2s,
306
- margin-left .2s ease-out .2s, margin-right .2s ease-out .2s,
307
- margin-top .2s ease-out .2s, margin-bottom .2s ease-out .2s,
308
- opacity .2s ease-in-out, background-color .2s ease-in-out;
309
- -o-transition: width .2s ease-out .2s, height .2s ease-out .2s,
310
- margin-left .2s ease-out .2s, margin-right .2s ease-out .2s,
311
- margin-top .2s ease-out .2s, margin-bottom .2s ease-out .2s,
312
- opacity .2s ease-in-out, background-color .2s ease-in-out;
313
- transition: width .2s ease-out .2s, height .2s ease-out .2s,
314
- margin-left .2s ease-out .2s, margin-right .2s ease-out .2s,
315
- margin-top .2s ease-out .2s, margin-bottom .2s ease-out .2s,
316
- opacity .2s ease-in-out, background-color .2s ease-in-out;
317
- }
318
-
319
-
320
-
321
- /*
322
- ------------------------------------------------------------------------------------------------------------------------
323
- 6. SCROLLBAR COLORS, OPACITY AND BACKGROUNDS
324
- ------------------------------------------------------------------------------------------------------------------------
325
- */
326
-
327
- /*
328
- ----------------------------------------
329
- 6.1 THEMES
330
- ----------------------------------------
331
- */
332
-
333
- /* default theme ("light") */
334
-
335
- .mCSB_scrollTools{ opacity: 0.75; filter: "alpha(opacity=75)"; -ms-filter: "alpha(opacity=75)"; }
336
-
337
- .mCS-autoHide > .mCustomScrollBox > .mCSB_scrollTools,
338
- .mCS-autoHide > .mCustomScrollBox ~ .mCSB_scrollTools{ opacity: 0; filter: "alpha(opacity=0)"; -ms-filter: "alpha(opacity=0)"; }
339
-
340
- .mCustomScrollbar > .mCustomScrollBox > .mCSB_scrollTools.mCSB_scrollTools_onDrag,
341
- .mCustomScrollbar > .mCustomScrollBox ~ .mCSB_scrollTools.mCSB_scrollTools_onDrag,
342
- .mCustomScrollBox:hover > .mCSB_scrollTools,
343
- .mCustomScrollBox:hover ~ .mCSB_scrollTools,
344
- .mCS-autoHide:hover > .mCustomScrollBox > .mCSB_scrollTools,
345
- .mCS-autoHide:hover > .mCustomScrollBox ~ .mCSB_scrollTools{ opacity: 1; filter: "alpha(opacity=100)"; -ms-filter: "alpha(opacity=100)"; }
346
-
347
- .mCSB_scrollTools .mCSB_draggerRail{
348
- background-color: #000; background-color: rgba(0,0,0,0.4);
349
- filter: "alpha(opacity=40)"; -ms-filter: "alpha(opacity=40)";
350
- }
351
-
352
- .mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{
353
- background-color: #fff; background-color: rgba(255,255,255,0.75);
354
- filter: "alpha(opacity=75)"; -ms-filter: "alpha(opacity=75)";
355
- }
356
-
357
- .mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{
358
- background-color: #fff; background-color: rgba(255,255,255,0.85);
359
- filter: "alpha(opacity=85)"; -ms-filter: "alpha(opacity=85)";
360
- }
361
- .mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,
362
- .mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{
363
- background-color: #fff; background-color: rgba(255,255,255,0.9);
364
- filter: "alpha(opacity=90)"; -ms-filter: "alpha(opacity=90)";
365
- }
366
-
367
- .mCSB_scrollTools .mCSB_buttonUp,
368
- .mCSB_scrollTools .mCSB_buttonDown,
369
- .mCSB_scrollTools .mCSB_buttonLeft,
370
- .mCSB_scrollTools .mCSB_buttonRight{
371
- background-image: url(mCSB_buttons.png); /* css sprites */
372
- background-repeat: no-repeat;
373
- opacity: 0.4; filter: "alpha(opacity=40)"; -ms-filter: "alpha(opacity=40)";
374
- }
375
-
376
- .mCSB_scrollTools .mCSB_buttonUp{
377
- background-position: 0 0;
378
- /*
379
- sprites locations
380
- light: 0 0, -16px 0, -32px 0, -48px 0, 0 -72px, -16px -72px, -32px -72px
381
- dark: -80px 0, -96px 0, -112px 0, -128px 0, -80px -72px, -96px -72px, -112px -72px
382
- */
383
- }
384
-
385
- .mCSB_scrollTools .mCSB_buttonDown{
386
- background-position: 0 -20px;
387
- /*
388
- sprites locations
389
- light: 0 -20px, -16px -20px, -32px -20px, -48px -20px, 0 -92px, -16px -92px, -32px -92px
390
- dark: -80px -20px, -96px -20px, -112px -20px, -128px -20px, -80px -92px, -96px -92px, -112 -92px
391
- */
392
- }
393
-
394
- .mCSB_scrollTools .mCSB_buttonLeft{
395
- background-position: 0 -40px;
396
- /*
397
- sprites locations
398
- light: 0 -40px, -20px -40px, -40px -40px, -60px -40px, 0 -112px, -20px -112px, -40px -112px
399
- dark: -80px -40px, -100px -40px, -120px -40px, -140px -40px, -80px -112px, -100px -112px, -120px -112px
400
- */
401
- }
402
-
403
- .mCSB_scrollTools .mCSB_buttonRight{
404
- background-position: 0 -56px;
405
- /*
406
- sprites locations
407
- light: 0 -56px, -20px -56px, -40px -56px, -60px -56px, 0 -128px, -20px -128px, -40px -128px
408
- dark: -80px -56px, -100px -56px, -120px -56px, -140px -56px, -80px -128px, -100px -128px, -120px -128px
409
- */
410
- }
411
-
412
- .mCSB_scrollTools .mCSB_buttonUp:hover,
413
- .mCSB_scrollTools .mCSB_buttonDown:hover,
414
- .mCSB_scrollTools .mCSB_buttonLeft:hover,
415
- .mCSB_scrollTools .mCSB_buttonRight:hover{ opacity: 0.75; filter: "alpha(opacity=75)"; -ms-filter: "alpha(opacity=75)"; }
416
-
417
- .mCSB_scrollTools .mCSB_buttonUp:active,
418
- .mCSB_scrollTools .mCSB_buttonDown:active,
419
- .mCSB_scrollTools .mCSB_buttonLeft:active,
420
- .mCSB_scrollTools .mCSB_buttonRight:active{ opacity: 0.9; filter: "alpha(opacity=90)"; -ms-filter: "alpha(opacity=90)"; }
421
-
422
-
423
- /* theme: "dark" */
424
-
425
- .mCS-dark.mCSB_scrollTools .mCSB_draggerRail{ background-color: #000; background-color: rgba(0,0,0,0.15); }
426
-
427
- .mCS-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.75); }
428
-
429
- .mCS-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{ background-color: rgba(0,0,0,0.85); }
430
-
431
- .mCS-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,
432
- .mCS-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{ background-color: rgba(0,0,0,0.9); }
433
-
434
- .mCS-dark.mCSB_scrollTools .mCSB_buttonUp{ background-position: -80px 0; }
435
-
436
- .mCS-dark.mCSB_scrollTools .mCSB_buttonDown{ background-position: -80px -20px; }
437
-
438
- .mCS-dark.mCSB_scrollTools .mCSB_buttonLeft{ background-position: -80px -40px; }
439
-
440
- .mCS-dark.mCSB_scrollTools .mCSB_buttonRight{ background-position: -80px -56px; }
441
-
442
- /* ---------------------------------------- */
443
-
444
-
445
-
446
- /* theme: "light-2", "dark-2" */
447
-
448
- .mCS-light-2.mCSB_scrollTools .mCSB_draggerRail,
449
- .mCS-dark-2.mCSB_scrollTools .mCSB_draggerRail{
450
- width: 4px;
451
- background-color: #fff; background-color: rgba(255,255,255,0.1);
452
- -webkit-border-radius: 1px; -moz-border-radius: 1px; border-radius: 1px;
453
- }
454
-
455
- .mCS-light-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,
456
- .mCS-dark-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{
457
- width: 4px;
458
- background-color: #fff; background-color: rgba(255,255,255,0.75);
459
- -webkit-border-radius: 1px; -moz-border-radius: 1px; border-radius: 1px;
460
- }
461
-
462
- .mCS-light-2.mCSB_scrollTools_horizontal .mCSB_draggerRail,
463
- .mCS-dark-2.mCSB_scrollTools_horizontal .mCSB_draggerRail,
464
- .mCS-light-2.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,
465
- .mCS-dark-2.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{
466
- width: 100%;
467
- height: 4px;
468
- margin: 6px auto;
469
- }
470
-
471
- .mCS-light-2.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{ background-color: #fff; background-color: rgba(255,255,255,0.85); }
472
-
473
- .mCS-light-2.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,
474
- .mCS-light-2.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{ background-color: #fff; background-color: rgba(255,255,255,0.9); }
475
-
476
- .mCS-light-2.mCSB_scrollTools .mCSB_buttonUp{ background-position: -32px 0; }
477
-
478
- .mCS-light-2.mCSB_scrollTools .mCSB_buttonDown{ background-position: -32px -20px; }
479
-
480
- .mCS-light-2.mCSB_scrollTools .mCSB_buttonLeft{ background-position: -40px -40px; }
481
-
482
- .mCS-light-2.mCSB_scrollTools .mCSB_buttonRight{ background-position: -40px -56px; }
483
-
484
-
485
- /* theme: "dark-2" */
486
-
487
- .mCS-dark-2.mCSB_scrollTools .mCSB_draggerRail{
488
- background-color: #000; background-color: rgba(0,0,0,0.1);
489
- -webkit-border-radius: 1px; -moz-border-radius: 1px; border-radius: 1px;
490
- }
491
-
492
- .mCS-dark-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{
493
- background-color: #000; background-color: rgba(0,0,0,0.75);
494
- -webkit-border-radius: 1px; -moz-border-radius: 1px; border-radius: 1px;
495
- }
496
-
497
- .mCS-dark-2.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.85); }
498
-
499
- .mCS-dark-2.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,
500
- .mCS-dark-2.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.9); }
501
-
502
- .mCS-dark-2.mCSB_scrollTools .mCSB_buttonUp{ background-position: -112px 0; }
503
-
504
- .mCS-dark-2.mCSB_scrollTools .mCSB_buttonDown{ background-position: -112px -20px; }
505
-
506
- .mCS-dark-2.mCSB_scrollTools .mCSB_buttonLeft{ background-position: -120px -40px; }
507
-
508
- .mCS-dark-2.mCSB_scrollTools .mCSB_buttonRight{ background-position: -120px -56px; }
509
-
510
- /* ---------------------------------------- */
511
-
512
-
513
-
514
- /* theme: "light-thick", "dark-thick" */
515
-
516
- .mCS-light-thick.mCSB_scrollTools .mCSB_draggerRail,
517
- .mCS-dark-thick.mCSB_scrollTools .mCSB_draggerRail{
518
- width: 4px;
519
- background-color: #fff; background-color: rgba(255,255,255,0.1);
520
- -webkit-border-radius: 2px; -moz-border-radius: 2px; border-radius: 2px;
521
- }
522
-
523
- .mCS-light-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,
524
- .mCS-dark-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{
525
- width: 6px;
526
- background-color: #fff; background-color: rgba(255,255,255,0.75);
527
- -webkit-border-radius: 2px; -moz-border-radius: 2px; border-radius: 2px;
528
- }
529
-
530
- .mCS-light-thick.mCSB_scrollTools_horizontal .mCSB_draggerRail,
531
- .mCS-dark-thick.mCSB_scrollTools_horizontal .mCSB_draggerRail{
532
- width: 100%;
533
- height: 4px;
534
- margin: 6px 0;
535
- }
536
-
537
- .mCS-light-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,
538
- .mCS-dark-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{
539
- width: 100%;
540
- height: 6px;
541
- margin: 5px auto;
542
- }
543
-
544
- .mCS-light-thick.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{ background-color: #fff; background-color: rgba(255,255,255,0.85); }
545
-
546
- .mCS-light-thick.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,
547
- .mCS-light-thick.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{ background-color: #fff; background-color: rgba(255,255,255,0.9); }
548
-
549
- .mCS-light-thick.mCSB_scrollTools .mCSB_buttonUp{ background-position: -16px 0; }
550
-
551
- .mCS-light-thick.mCSB_scrollTools .mCSB_buttonDown{ background-position: -16px -20px; }
552
-
553
- .mCS-light-thick.mCSB_scrollTools .mCSB_buttonLeft{ background-position: -20px -40px; }
554
-
555
- .mCS-light-thick.mCSB_scrollTools .mCSB_buttonRight{ background-position: -20px -56px; }
556
-
557
-
558
- /* theme: "dark-thick" */
559
-
560
- .mCS-dark-thick.mCSB_scrollTools .mCSB_draggerRail{
561
- background-color: #000; background-color: rgba(0,0,0,0.1);
562
- -webkit-border-radius: 2px; -moz-border-radius: 2px; border-radius: 2px;
563
- }
564
-
565
- .mCS-dark-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{
566
- background-color: #000; background-color: rgba(0,0,0,0.75);
567
- -webkit-border-radius: 2px; -moz-border-radius: 2px; border-radius: 2px;
568
- }
569
-
570
- .mCS-dark-thick.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.85); }
571
-
572
- .mCS-dark-thick.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,
573
- .mCS-dark-thick.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.9); }
574
-
575
- .mCS-dark-thick.mCSB_scrollTools .mCSB_buttonUp{ background-position: -96px 0; }
576
-
577
- .mCS-dark-thick.mCSB_scrollTools .mCSB_buttonDown{ background-position: -96px -20px; }
578
-
579
- .mCS-dark-thick.mCSB_scrollTools .mCSB_buttonLeft{ background-position: -100px -40px; }
580
-
581
- .mCS-dark-thick.mCSB_scrollTools .mCSB_buttonRight{ background-position: -100px -56px; }
582
-
583
- /* ---------------------------------------- */
584
-
585
-
586
-
587
- /* theme: "light-thin", "dark-thin" */
588
-
589
- .mCS-light-thin.mCSB_scrollTools .mCSB_draggerRail{ background-color: #fff; background-color: rgba(255,255,255,0.1); }
590
-
591
- .mCS-light-thin.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,
592
- .mCS-dark-thin.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ width: 2px; }
593
-
594
- .mCS-light-thin.mCSB_scrollTools_horizontal .mCSB_draggerRail,
595
- .mCS-dark-thin.mCSB_scrollTools_horizontal .mCSB_draggerRail{ width: 100%; }
596
-
597
- .mCS-light-thin.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,
598
- .mCS-dark-thin.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{
599
- width: 100%;
600
- height: 2px;
601
- margin: 7px auto;
602
- }
603
-
604
-
605
- /* theme "dark-thin" */
606
-
607
- .mCS-dark-thin.mCSB_scrollTools .mCSB_draggerRail{ background-color: #000; background-color: rgba(0,0,0,0.15); }
608
-
609
- .mCS-dark-thin.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.75); }
610
-
611
- .mCS-dark-thin.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.85); }
612
-
613
- .mCS-dark-thin.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,
614
- .mCS-dark-thin.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.9); }
615
-
616
- .mCS-dark-thin.mCSB_scrollTools .mCSB_buttonUp{ background-position: -80px 0; }
617
-
618
- .mCS-dark-thin.mCSB_scrollTools .mCSB_buttonDown{ background-position: -80px -20px; }
619
-
620
- .mCS-dark-thin.mCSB_scrollTools .mCSB_buttonLeft{ background-position: -80px -40px; }
621
-
622
- .mCS-dark-thin.mCSB_scrollTools .mCSB_buttonRight{ background-position: -80px -56px; }
623
-
624
- /* ---------------------------------------- */
625
-
626
-
627
-
628
- /* theme "rounded", "rounded-dark", "rounded-dots", "rounded-dots-dark" */
629
-
630
- .mCS-rounded.mCSB_scrollTools .mCSB_draggerRail{ background-color: #fff; background-color: rgba(255,255,255,0.15); }
631
-
632
- .mCS-rounded.mCSB_scrollTools .mCSB_dragger,
633
- .mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger,
634
- .mCS-rounded-dots.mCSB_scrollTools .mCSB_dragger,
635
- .mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger{ height: 14px; }
636
-
637
- .mCS-rounded.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,
638
- .mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,
639
- .mCS-rounded-dots.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,
640
- .mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{
641
- width: 14px;
642
- margin: 0 1px;
643
- }
644
-
645
- .mCS-rounded.mCSB_scrollTools_horizontal .mCSB_dragger,
646
- .mCS-rounded-dark.mCSB_scrollTools_horizontal .mCSB_dragger,
647
- .mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_dragger,
648
- .mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_dragger{ width: 14px; }
649
-
650
- .mCS-rounded.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,
651
- .mCS-rounded-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,
652
- .mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,
653
- .mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{
654
- height: 14px;
655
- margin: 1px 0;
656
- }
657
-
658
- .mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,
659
- .mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar,
660
- .mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,
661
- .mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{
662
- width: 16px; /* auto-expanded scrollbar */
663
- height: 16px;
664
- margin: -1px 0;
665
- }
666
-
667
- .mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded + .mCSB_draggerRail,
668
- .mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail,
669
- .mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded + .mCSB_draggerRail,
670
- .mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{ width: 4px; /* auto-expanded scrollbar */ }
671
-
672
- .mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,
673
- .mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar,
674
- .mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,
675
- .mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{
676
- height: 16px; /* auto-expanded scrollbar */
677
- width: 16px;
678
- margin: 0 -1px;
679
- }
680
-
681
- .mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded + .mCSB_draggerRail,
682
- .mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail,
683
- .mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded + .mCSB_draggerRail,
684
- .mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{
685
- height: 4px; /* auto-expanded scrollbar */
686
- margin: 6px 0;
687
- }
688
-
689
- .mCS-rounded.mCSB_scrollTools .mCSB_buttonUp{ background-position: 0 -72px; }
690
-
691
- .mCS-rounded.mCSB_scrollTools .mCSB_buttonDown{ background-position: 0 -92px; }
692
-
693
- .mCS-rounded.mCSB_scrollTools .mCSB_buttonLeft{ background-position: 0 -112px; }
694
-
695
- .mCS-rounded.mCSB_scrollTools .mCSB_buttonRight{ background-position: 0 -128px; }
696
-
697
-
698
- /* theme "rounded-dark", "rounded-dots-dark" */
699
-
700
- .mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,
701
- .mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.75); }
702
-
703
- .mCS-rounded-dark.mCSB_scrollTools .mCSB_draggerRail{ background-color: #000; background-color: rgba(0,0,0,0.15); }
704
-
705
- .mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,
706
- .mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.85); }
707
-
708
- .mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,
709
- .mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,
710
- .mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,
711
- .mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.9); }
712
-
713
- .mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonUp{ background-position: -80px -72px; }
714
-
715
- .mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonDown{ background-position: -80px -92px; }
716
-
717
- .mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonLeft{ background-position: -80px -112px; }
718
-
719
- .mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonRight{ background-position: -80px -128px; }
720
-
721
-
722
- /* theme "rounded-dots", "rounded-dots-dark" */
723
-
724
- .mCS-rounded-dots.mCSB_scrollTools_vertical .mCSB_draggerRail,
725
- .mCS-rounded-dots-dark.mCSB_scrollTools_vertical .mCSB_draggerRail{ width: 4px; }
726
-
727
- .mCS-rounded-dots.mCSB_scrollTools .mCSB_draggerRail,
728
- .mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_draggerRail,
729
- .mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_draggerRail,
730
- .mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail{
731
- background-color: transparent;
732
- background-position: center;
733
- }
734
-
735
- .mCS-rounded-dots.mCSB_scrollTools .mCSB_draggerRail,
736
- .mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_draggerRail{
737
- background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAANElEQVQYV2NkIAAYiVbw//9/Y6DiM1ANJoyMjGdBbLgJQAX/kU0DKgDLkaQAvxW4HEvQFwCRcxIJK1XznAAAAABJRU5ErkJggg==");
738
- background-repeat: repeat-y;
739
- opacity: 0.3;
740
- filter: "alpha(opacity=30)"; -ms-filter: "alpha(opacity=30)";
741
- }
742
-
743
- .mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_draggerRail,
744
- .mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail{
745
- height: 4px;
746
- margin: 6px 0;
747
- background-repeat: repeat-x;
748
- }
749
-
750
- .mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonUp{ background-position: -16px -72px; }
751
-
752
- .mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonDown{ background-position: -16px -92px; }
753
-
754
- .mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonLeft{ background-position: -20px -112px; }
755
-
756
- .mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonRight{ background-position: -20px -128px; }
757
-
758
-
759
- /* theme "rounded-dots-dark" */
760
-
761
- .mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_draggerRail{
762
- background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAALElEQVQYV2NkIAAYSVFgDFR8BqrBBEifBbGRTfiPZhpYjiQFBK3A6l6CvgAAE9kGCd1mvgEAAAAASUVORK5CYII=");
763
- }
764
-
765
- .mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonUp{ background-position: -96px -72px; }
766
-
767
- .mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonDown{ background-position: -96px -92px; }
768
-
769
- .mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonLeft{ background-position: -100px -112px; }
770
-
771
- .mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonRight{ background-position: -100px -128px; }
772
-
773
- /* ---------------------------------------- */
774
-
775
-
776
-
777
- /* theme "3d", "3d-dark", "3d-thick", "3d-thick-dark" */
778
-
779
- .mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,
780
- .mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,
781
- .mCS-3d-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,
782
- .mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{
783
- background-repeat: repeat-y;
784
- background-image: -moz-linear-gradient(left, rgba(255,255,255,0.5) 0%, rgba(255,255,255,0) 100%);
785
- background-image: -webkit-gradient(linear, left top, right top, color-stop(0%,rgba(255,255,255,0.5)), color-stop(100%,rgba(255,255,255,0)));
786
- background-image: -webkit-linear-gradient(left, rgba(255,255,255,0.5) 0%,rgba(255,255,255,0) 100%);
787
- background-image: -o-linear-gradient(left, rgba(255,255,255,0.5) 0%,rgba(255,255,255,0) 100%);
788
- background-image: -ms-linear-gradient(left, rgba(255,255,255,0.5) 0%,rgba(255,255,255,0) 100%);
789
- background-image: linear-gradient(to right, rgba(255,255,255,0.5) 0%,rgba(255,255,255,0) 100%);
790
- }
791
-
792
- .mCS-3d.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,
793
- .mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,
794
- .mCS-3d-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,
795
- .mCS-3d-thick-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{
796
- background-repeat: repeat-x;
797
- background-image: -moz-linear-gradient(top, rgba(255,255,255,0.5) 0%, rgba(255,255,255,0) 100%);
798
- background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,0.5)), color-stop(100%,rgba(255,255,255,0)));
799
- background-image: -webkit-linear-gradient(top, rgba(255,255,255,0.5) 0%,rgba(255,255,255,0) 100%);
800
- background-image: -o-linear-gradient(top, rgba(255,255,255,0.5) 0%,rgba(255,255,255,0) 100%);
801
- background-image: -ms-linear-gradient(top, rgba(255,255,255,0.5) 0%,rgba(255,255,255,0) 100%);
802
- background-image: linear-gradient(to bottom, rgba(255,255,255,0.5) 0%,rgba(255,255,255,0) 100%);
803
- }
804
-
805
-
806
- /* theme "3d", "3d-dark" */
807
-
808
- .mCS-3d.mCSB_scrollTools_vertical .mCSB_dragger,
809
- .mCS-3d-dark.mCSB_scrollTools_vertical .mCSB_dragger{ height: 70px; }
810
-
811
- .mCS-3d.mCSB_scrollTools_horizontal .mCSB_dragger,
812
- .mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_dragger{ width: 70px; }
813
-
814
- .mCS-3d.mCSB_scrollTools,
815
- .mCS-3d-dark.mCSB_scrollTools{
816
- opacity: 1;
817
- filter: "alpha(opacity=30)"; -ms-filter: "alpha(opacity=30)";
818
- }
819
-
820
- .mCS-3d.mCSB_scrollTools .mCSB_draggerRail,
821
- .mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,
822
- .mCS-3d-dark.mCSB_scrollTools .mCSB_draggerRail,
823
- .mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ -webkit-border-radius: 16px; -moz-border-radius: 16px; border-radius: 16px; }
824
-
825
- .mCS-3d.mCSB_scrollTools .mCSB_draggerRail,
826
- .mCS-3d-dark.mCSB_scrollTools .mCSB_draggerRail{
827
- width: 8px;
828
- background-color: #000; background-color: rgba(0,0,0,0.2);
829
- box-shadow: inset 1px 0 1px rgba(0,0,0,0.5), inset -1px 0 1px rgba(255,255,255,0.2);
830
- }
831
-
832
- .mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,
833
- .mCS-3d.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,
834
- .mCS-3d.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,
835
- .mCS-3d.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,
836
- .mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,
837
- .mCS-3d-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,
838
- .mCS-3d-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,
839
- .mCS-3d-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{ background-color: #555; }
840
-
841
- .mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,
842
- .mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ width: 8px; }
843
-
844
- .mCS-3d.mCSB_scrollTools_horizontal .mCSB_draggerRail,
845
- .mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail{
846
- width: 100%;
847
- height: 8px;
848
- margin: 4px 0;
849
- box-shadow: inset 0 1px 1px rgba(0,0,0,0.5), inset 0 -1px 1px rgba(255,255,255,0.2);
850
- }
851
-
852
- .mCS-3d.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,
853
- .mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{
854
- width: 100%;
855
- height: 8px;
856
- margin: 4px auto;
857
- }
858
-
859
- .mCS-3d.mCSB_scrollTools .mCSB_buttonUp{ background-position: -32px -72px; }
860
-
861
- .mCS-3d.mCSB_scrollTools .mCSB_buttonDown{ background-position: -32px -92px; }
862
-
863
- .mCS-3d.mCSB_scrollTools .mCSB_buttonLeft{ background-position: -40px -112px; }
864
-
865
- .mCS-3d.mCSB_scrollTools .mCSB_buttonRight{ background-position: -40px -128px; }
866
-
867
-
868
- /* theme "3d-dark" */
869
-
870
- .mCS-3d-dark.mCSB_scrollTools .mCSB_draggerRail{
871
- background-color: #000; background-color: rgba(0,0,0,0.1);
872
- box-shadow: inset 1px 0 1px rgba(0,0,0,0.1);
873
- }
874
-
875
- .mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail{ box-shadow: inset 0 1px 1px rgba(0,0,0,0.1); }
876
-
877
- .mCS-3d-dark.mCSB_scrollTools .mCSB_buttonUp{ background-position: -112px -72px; }
878
-
879
- .mCS-3d-dark.mCSB_scrollTools .mCSB_buttonDown{ background-position: -112px -92px; }
880
-
881
- .mCS-3d-dark.mCSB_scrollTools .mCSB_buttonLeft{ background-position: -120px -112px; }
882
-
883
- .mCS-3d-dark.mCSB_scrollTools .mCSB_buttonRight{ background-position: -120px -128px; }
884
-
885
- /* ---------------------------------------- */
886
-
887
-
888
-
889
- /* theme: "3d-thick", "3d-thick-dark" */
890
-
891
- .mCS-3d-thick.mCSB_scrollTools,
892
- .mCS-3d-thick-dark.mCSB_scrollTools{
893
- opacity: 1;
894
- filter: "alpha(opacity=30)"; -ms-filter: "alpha(opacity=30)";
895
- }
896
-
897
- .mCS-3d-thick.mCSB_scrollTools,
898
- .mCS-3d-thick-dark.mCSB_scrollTools,
899
- .mCS-3d-thick.mCSB_scrollTools .mCSB_draggerContainer,
900
- .mCS-3d-thick-dark.mCSB_scrollTools .mCSB_draggerContainer{ -webkit-border-radius: 7px; -moz-border-radius: 7px; border-radius: 7px; }
901
-
902
- .mCS-3d-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,
903
- .mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; }
904
-
905
- .mCSB_inside + .mCS-3d-thick.mCSB_scrollTools_vertical,
906
- .mCSB_inside + .mCS-3d-thick-dark.mCSB_scrollTools_vertical{ right: 1px; }
907
-
908
- .mCS-3d-thick.mCSB_scrollTools_vertical,
909
- .mCS-3d-thick-dark.mCSB_scrollTools_vertical{ box-shadow: inset 1px 0 1px rgba(0,0,0,0.1), inset 0 0 14px rgba(0,0,0,0.5); }
910
-
911
- .mCS-3d-thick.mCSB_scrollTools_horizontal,
912
- .mCS-3d-thick-dark.mCSB_scrollTools_horizontal{
913
- bottom: 1px;
914
- box-shadow: inset 0 1px 1px rgba(0,0,0,0.1), inset 0 0 14px rgba(0,0,0,0.5);
915
- }
916
-
917
- .mCS-3d-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,
918
- .mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{
919
- box-shadow: inset 1px 0 0 rgba(255,255,255,0.4);
920
- width: 12px;
921
- margin: 2px;
922
- position: absolute;
923
- height: auto;
924
- top: 0;
925
- bottom: 0;
926
- left: 0;
927
- right: 0;
928
- }
929
-
930
- .mCS-3d-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,
931
- .mCS-3d-thick-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{ box-shadow: inset 0 1px 0 rgba(255,255,255,0.4); }
932
-
933
- .mCS-3d-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,
934
- .mCS-3d-thick.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,
935
- .mCS-3d-thick.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,
936
- .mCS-3d-thick.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{ background-color: #555; }
937
-
938
- .mCS-3d-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,
939
- .mCS-3d-thick-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{
940
- height: 12px;
941
- width: auto;
942
- }
943
-
944
- .mCS-3d-thick.mCSB_scrollTools .mCSB_draggerContainer{
945
- background-color: #000; background-color: rgba(0,0,0,0.05);
946
- box-shadow: inset 1px 1px 16px rgba(0,0,0,0.1);
947
- }
948
-
949
- .mCS-3d-thick.mCSB_scrollTools .mCSB_draggerRail{ background-color: transparent; }
950
-
951
- .mCS-3d-thick.mCSB_scrollTools .mCSB_buttonUp{ background-position: -32px -72px; }
952
-
953
- .mCS-3d-thick.mCSB_scrollTools .mCSB_buttonDown{ background-position: -32px -92px; }
954
-
955
- .mCS-3d-thick.mCSB_scrollTools .mCSB_buttonLeft{ background-position: -40px -112px; }
956
-
957
- .mCS-3d-thick.mCSB_scrollTools .mCSB_buttonRight{ background-position: -40px -128px; }
958
-
959
-
960
- /* theme: "3d-thick-dark" */
961
-
962
- .mCS-3d-thick-dark.mCSB_scrollTools{ box-shadow: inset 0 0 14px rgba(0,0,0,0.2); }
963
-
964
- .mCS-3d-thick-dark.mCSB_scrollTools_horizontal{ box-shadow: inset 0 1px 1px rgba(0,0,0,0.1), inset 0 0 14px rgba(0,0,0,0.2); }
965
-
966
- .mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ box-shadow: inset 1px 0 0 rgba(255,255,255,0.4), inset -1px 0 0 rgba(0,0,0,0.2); }
967
-
968
- .mCS-3d-thick-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{ box-shadow: inset 0 1px 0 rgba(255,255,255,0.4), inset 0 -1px 0 rgba(0,0,0,0.2); }
969
-
970
- .mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,
971
- .mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,
972
- .mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,
973
- .mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{ background-color: #777; }
974
-
975
- .mCS-3d-thick-dark.mCSB_scrollTools .mCSB_draggerContainer{
976
- background-color: #fff; background-color: rgba(0,0,0,0.05);
977
- box-shadow: inset 1px 1px 16px rgba(0,0,0,0.1);
978
- }
979
-
980
- .mCS-3d-thick-dark.mCSB_scrollTools .mCSB_draggerRail{ background-color: transparent; }
981
-
982
- .mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonUp{ background-position: -112px -72px; }
983
-
984
- .mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonDown{ background-position: -112px -92px; }
985
-
986
- .mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonLeft{ background-position: -120px -112px; }
987
-
988
- .mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonRight{ background-position: -120px -128px; }
989
-
990
- /* ---------------------------------------- */
991
-
992
-
993
-
994
- /* theme: "minimal", "minimal-dark" */
995
-
996
- .mCSB_outside + .mCS-minimal.mCSB_scrollTools_vertical,
997
- .mCSB_outside + .mCS-minimal-dark.mCSB_scrollTools_vertical{
998
- right: 0;
999
- margin: 12px 0;
1000
- }
1001
-
1002
- .mCustomScrollBox.mCS-minimal + .mCSB_scrollTools.mCSB_scrollTools_horizontal,
1003
- .mCustomScrollBox.mCS-minimal + .mCSB_scrollTools + .mCSB_scrollTools.mCSB_scrollTools_horizontal,
1004
- .mCustomScrollBox.mCS-minimal-dark + .mCSB_scrollTools.mCSB_scrollTools_horizontal,
1005
- .mCustomScrollBox.mCS-minimal-dark + .mCSB_scrollTools + .mCSB_scrollTools.mCSB_scrollTools_horizontal{
1006
- bottom: 0;
1007
- margin: 0 12px;
1008
- }
1009
-
1010
- /* RTL direction/left-side scrollbar */
1011
- .mCS-dir-rtl > .mCSB_outside + .mCS-minimal.mCSB_scrollTools_vertical,
1012
- .mCS-dir-rtl > .mCSB_outside + .mCS-minimal-dark.mCSB_scrollTools_vertical{
1013
- left: 0;
1014
- right: auto;
1015
- }
1016
-
1017
- .mCS-minimal.mCSB_scrollTools .mCSB_draggerRail,
1018
- .mCS-minimal-dark.mCSB_scrollTools .mCSB_draggerRail{ background-color: transparent; }
1019
-
1020
- .mCS-minimal.mCSB_scrollTools_vertical .mCSB_dragger,
1021
- .mCS-minimal-dark.mCSB_scrollTools_vertical .mCSB_dragger{ height: 50px; }
1022
-
1023
- .mCS-minimal.mCSB_scrollTools_horizontal .mCSB_dragger,
1024
- .mCS-minimal-dark.mCSB_scrollTools_horizontal .mCSB_dragger{ width: 50px; }
1025
-
1026
- .mCS-minimal.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{
1027
- background-color: #fff; background-color: rgba(255,255,255,0.2);
1028
- filter: "alpha(opacity=20)"; -ms-filter: "alpha(opacity=20)";
1029
- }
1030
-
1031
- .mCS-minimal.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,
1032
- .mCS-minimal.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{
1033
- background-color: #fff; background-color: rgba(255,255,255,0.5);
1034
- filter: "alpha(opacity=50)"; -ms-filter: "alpha(opacity=50)";
1035
- }
1036
-
1037
-
1038
- /* theme: "minimal-dark" */
1039
-
1040
- .mCS-minimal-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{
1041
- background-color: #000; background-color: rgba(0,0,0,0.2);
1042
- filter: "alpha(opacity=20)"; -ms-filter: "alpha(opacity=20)";
1043
- }
1044
-
1045
- .mCS-minimal-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,
1046
- .mCS-minimal-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{
1047
- background-color: #000; background-color: rgba(0,0,0,0.5);
1048
- filter: "alpha(opacity=50)"; -ms-filter: "alpha(opacity=50)";
1049
- }
1050
-
1051
- /* ---------------------------------------- */
1052
-
1053
-
1054
-
1055
- /* theme "light-3", "dark-3" */
1056
-
1057
- .mCS-light-3.mCSB_scrollTools .mCSB_draggerRail,
1058
- .mCS-dark-3.mCSB_scrollTools .mCSB_draggerRail{
1059
- width: 6px;
1060
- background-color: #000; background-color: rgba(0,0,0,0.2);
1061
- }
1062
-
1063
- .mCS-light-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,
1064
- .mCS-dark-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ width: 6px; }
1065
-
1066
- .mCS-light-3.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,
1067
- .mCS-dark-3.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,
1068
- .mCS-light-3.mCSB_scrollTools_horizontal .mCSB_draggerRail,
1069
- .mCS-dark-3.mCSB_scrollTools_horizontal .mCSB_draggerRail{
1070
- width: 100%;
1071
- height: 6px;
1072
- margin: 5px 0;
1073
- }
1074
-
1075
- .mCS-light-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded + .mCSB_draggerRail,
1076
- .mCS-light-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail,
1077
- .mCS-dark-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded + .mCSB_draggerRail,
1078
- .mCS-dark-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{
1079
- width: 12px;
1080
- }
1081
-
1082
- .mCS-light-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded + .mCSB_draggerRail,
1083
- .mCS-light-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail,
1084
- .mCS-dark-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded + .mCSB_draggerRail,
1085
- .mCS-dark-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{
1086
- height: 12px;
1087
- margin: 2px 0;
1088
- }
1089
-
1090
- .mCS-light-3.mCSB_scrollTools .mCSB_buttonUp{ background-position: -32px -72px; }
1091
-
1092
- .mCS-light-3.mCSB_scrollTools .mCSB_buttonDown{ background-position: -32px -92px; }
1093
-
1094
- .mCS-light-3.mCSB_scrollTools .mCSB_buttonLeft{ background-position: -40px -112px; }
1095
-
1096
- .mCS-light-3.mCSB_scrollTools .mCSB_buttonRight{ background-position: -40px -128px; }
1097
-
1098
-
1099
- /* theme "dark-3" */
1100
-
1101
- .mCS-dark-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.75); }
1102
-
1103
- .mCS-dark-3.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.85); }
1104
-
1105
- .mCS-dark-3.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,
1106
- .mCS-dark-3.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.9); }
1107
-
1108
- .mCS-dark-3.mCSB_scrollTools .mCSB_draggerRail{ background-color: #000; background-color: rgba(0,0,0,0.1); }
1109
-
1110
- .mCS-dark-3.mCSB_scrollTools .mCSB_buttonUp{ background-position: -112px -72px; }
1111
-
1112
- .mCS-dark-3.mCSB_scrollTools .mCSB_buttonDown{ background-position: -112px -92px; }
1113
-
1114
- .mCS-dark-3.mCSB_scrollTools .mCSB_buttonLeft{ background-position: -120px -112px; }
1115
-
1116
- .mCS-dark-3.mCSB_scrollTools .mCSB_buttonRight{ background-position: -120px -128px; }
1117
-
1118
- /* ---------------------------------------- */
1119
-
1120
-
1121
-
1122
- /* theme "inset", "inset-dark", "inset-2", "inset-2-dark", "inset-3", "inset-3-dark" */
1123
-
1124
- .mCS-inset.mCSB_scrollTools .mCSB_draggerRail,
1125
- .mCS-inset-dark.mCSB_scrollTools .mCSB_draggerRail,
1126
- .mCS-inset-2.mCSB_scrollTools .mCSB_draggerRail,
1127
- .mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail,
1128
- .mCS-inset-3.mCSB_scrollTools .mCSB_draggerRail,
1129
- .mCS-inset-3-dark.mCSB_scrollTools .mCSB_draggerRail{
1130
- width: 12px;
1131
- background-color: #000; background-color: rgba(0,0,0,0.2);
1132
- }
1133
-
1134
- .mCS-inset.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,
1135
- .mCS-inset-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,
1136
- .mCS-inset-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,
1137
- .mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,
1138
- .mCS-inset-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,
1139
- .mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{
1140
- width: 6px;
1141
- margin: 3px 5px;
1142
- position: absolute;
1143
- height: auto;
1144
- top: 0;
1145
- bottom: 0;
1146
- left: 0;
1147
- right: 0;
1148
- }
1149
-
1150
- .mCS-inset.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,
1151
- .mCS-inset-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,
1152
- .mCS-inset-2.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,
1153
- .mCS-inset-2-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,
1154
- .mCS-inset-3.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,
1155
- .mCS-inset-3-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{
1156
- height: 6px;
1157
- margin: 5px 3px;
1158
- position: absolute;
1159
- width: auto;
1160
- top: 0;
1161
- bottom: 0;
1162
- left: 0;
1163
- right: 0;
1164
- }
1165
-
1166
- .mCS-inset.mCSB_scrollTools_horizontal .mCSB_draggerRail,
1167
- .mCS-inset-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,
1168
- .mCS-inset-2.mCSB_scrollTools_horizontal .mCSB_draggerRail,
1169
- .mCS-inset-2-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,
1170
- .mCS-inset-3.mCSB_scrollTools_horizontal .mCSB_draggerRail,
1171
- .mCS-inset-3-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail{
1172
- width: 100%;
1173
- height: 12px;
1174
- margin: 2px 0;
1175
- }
1176
-
1177
- .mCS-inset.mCSB_scrollTools .mCSB_buttonUp,
1178
- .mCS-inset-2.mCSB_scrollTools .mCSB_buttonUp,
1179
- .mCS-inset-3.mCSB_scrollTools .mCSB_buttonUp{ background-position: -32px -72px; }
1180
-
1181
- .mCS-inset.mCSB_scrollTools .mCSB_buttonDown,
1182
- .mCS-inset-2.mCSB_scrollTools .mCSB_buttonDown,
1183
- .mCS-inset-3.mCSB_scrollTools .mCSB_buttonDown{ background-position: -32px -92px; }
1184
-
1185
- .mCS-inset.mCSB_scrollTools .mCSB_buttonLeft,
1186
- .mCS-inset-2.mCSB_scrollTools .mCSB_buttonLeft,
1187
- .mCS-inset-3.mCSB_scrollTools .mCSB_buttonLeft{ background-position: -40px -112px; }
1188
-
1189
- .mCS-inset.mCSB_scrollTools .mCSB_buttonRight,
1190
- .mCS-inset-2.mCSB_scrollTools .mCSB_buttonRight,
1191
- .mCS-inset-3.mCSB_scrollTools .mCSB_buttonRight{ background-position: -40px -128px; }
1192
-
1193
-
1194
- /* theme "inset-dark", "inset-2-dark", "inset-3-dark" */
1195
-
1196
- .mCS-inset-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,
1197
- .mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,
1198
- .mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.75); }
1199
-
1200
- .mCS-inset-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,
1201
- .mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,
1202
- .mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.85); }
1203
-
1204
- .mCS-inset-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,
1205
- .mCS-inset-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,
1206
- .mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,
1207
- .mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,
1208
- .mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,
1209
- .mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.9); }
1210
-
1211
- .mCS-inset-dark.mCSB_scrollTools .mCSB_draggerRail,
1212
- .mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail,
1213
- .mCS-inset-3-dark.mCSB_scrollTools .mCSB_draggerRail{ background-color: #000; background-color: rgba(0,0,0,0.1); }
1214
-
1215
- .mCS-inset-dark.mCSB_scrollTools .mCSB_buttonUp,
1216
- .mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonUp,
1217
- .mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonUp{ background-position: -112px -72px; }
1218
-
1219
- .mCS-inset-dark.mCSB_scrollTools .mCSB_buttonDown,
1220
- .mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonDown,
1221
- .mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonDown{ background-position: -112px -92px; }
1222
-
1223
- .mCS-inset-dark.mCSB_scrollTools .mCSB_buttonLeft,
1224
- .mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonLeft,
1225
- .mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonLeft{ background-position: -120px -112px; }
1226
-
1227
- .mCS-inset-dark.mCSB_scrollTools .mCSB_buttonRight,
1228
- .mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonRight,
1229
- .mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonRight{ background-position: -120px -128px; }
1230
-
1231
-
1232
- /* theme "inset-2", "inset-2-dark" */
1233
-
1234
- .mCS-inset-2.mCSB_scrollTools .mCSB_draggerRail,
1235
- .mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail{
1236
- background-color: transparent;
1237
- border-width: 1px;
1238
- border-style: solid;
1239
- border-color: #fff;
1240
- border-color: rgba(255,255,255,0.2);
1241
- -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box;
1242
- }
1243
-
1244
- .mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail{ border-color: #000; border-color: rgba(0,0,0,0.2); }
1245
-
1246
-
1247
- /* theme "inset-3", "inset-3-dark" */
1248
-
1249
- .mCS-inset-3.mCSB_scrollTools .mCSB_draggerRail{ background-color: #fff; background-color: rgba(255,255,255,0.6); }
1250
-
1251
- .mCS-inset-3-dark.mCSB_scrollTools .mCSB_draggerRail{ background-color: #000; background-color: rgba(0,0,0,0.6); }
1252
-
1253
- .mCS-inset-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.75); }
1254
-
1255
- .mCS-inset-3.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.85); }
1256
-
1257
- .mCS-inset-3.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,
1258
- .mCS-inset-3.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.9); }
1259
-
1260
- .mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ background-color: #fff; background-color: rgba(255,255,255,0.75); }
1261
-
1262
- .mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{ background-color: #fff; background-color: rgba(255,255,255,0.85); }
1263
-
1264
- .mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,
1265
- .mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{ background-color: #fff; background-color: rgba(255,255,255,0.9); }
1266
-
1267
- /* ---------------------------------------- */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/simplebar.js ADDED
@@ -0,0 +1,4452 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * SimpleBar.js - v4.0.0-alpha.5
3
+ * Scrollbars, simpler.
4
+ * https://grsmto.github.io/simplebar/
5
+ *
6
+ * Made by Adrien Denat from a fork by Jonathan Nicol
7
+ * Under MIT License
8
+ */
9
+
10
+ (function (global, factory) {
11
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
12
+ typeof define === 'function' && define.amd ? define(factory) :
13
+ (global = global || self, global.SimpleBar = factory());
14
+ }(this, function () { 'use strict';
15
+
16
+ var aFunction = function (it) {
17
+ if (typeof it != 'function') {
18
+ throw TypeError(String(it) + ' is not a function');
19
+ } return it;
20
+ };
21
+
22
+ // optional / simple context binding
23
+ var bindContext = function (fn, that, length) {
24
+ aFunction(fn);
25
+ if (that === undefined) return fn;
26
+ switch (length) {
27
+ case 0: return function () {
28
+ return fn.call(that);
29
+ };
30
+ case 1: return function (a) {
31
+ return fn.call(that, a);
32
+ };
33
+ case 2: return function (a, b) {
34
+ return fn.call(that, a, b);
35
+ };
36
+ case 3: return function (a, b, c) {
37
+ return fn.call(that, a, b, c);
38
+ };
39
+ }
40
+ return function (/* ...args */) {
41
+ return fn.apply(that, arguments);
42
+ };
43
+ };
44
+
45
+ var fails = function (exec) {
46
+ try {
47
+ return !!exec();
48
+ } catch (error) {
49
+ return true;
50
+ }
51
+ };
52
+
53
+ var toString = {}.toString;
54
+
55
+ var classofRaw = function (it) {
56
+ return toString.call(it).slice(8, -1);
57
+ };
58
+
59
+ // fallback for non-array-like ES3 and non-enumerable old V8 strings
60
+
61
+
62
+ var split = ''.split;
63
+
64
+ var indexedObject = fails(function () {
65
+ // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346
66
+ // eslint-disable-next-line no-prototype-builtins
67
+ return !Object('z').propertyIsEnumerable(0);
68
+ }) ? function (it) {
69
+ return classofRaw(it) == 'String' ? split.call(it, '') : Object(it);
70
+ } : Object;
71
+
72
+ // `RequireObjectCoercible` abstract operation
73
+ // https://tc39.github.io/ecma262/#sec-requireobjectcoercible
74
+ var requireObjectCoercible = function (it) {
75
+ if (it == undefined) throw TypeError("Can't call method on " + it);
76
+ return it;
77
+ };
78
+
79
+ // `ToObject` abstract operation
80
+ // https://tc39.github.io/ecma262/#sec-toobject
81
+ var toObject = function (argument) {
82
+ return Object(requireObjectCoercible(argument));
83
+ };
84
+
85
+ var ceil = Math.ceil;
86
+ var floor = Math.floor;
87
+
88
+ // `ToInteger` abstract operation
89
+ // https://tc39.github.io/ecma262/#sec-tointeger
90
+ var toInteger = function (argument) {
91
+ return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument);
92
+ };
93
+
94
+ var min = Math.min;
95
+
96
+ // `ToLength` abstract operation
97
+ // https://tc39.github.io/ecma262/#sec-tolength
98
+ var toLength = function (argument) {
99
+ return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991
100
+ };
101
+
102
+ var isObject = function (it) {
103
+ return typeof it === 'object' ? it !== null : typeof it === 'function';
104
+ };
105
+
106
+ // `IsArray` abstract operation
107
+ // https://tc39.github.io/ecma262/#sec-isarray
108
+ var isArray = Array.isArray || function isArray(arg) {
109
+ return classofRaw(arg) == 'Array';
110
+ };
111
+
112
+ var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
113
+
114
+ function createCommonjsModule(fn, module) {
115
+ return module = { exports: {} }, fn(module, module.exports), module.exports;
116
+ }
117
+
118
+ // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
119
+ var global$1 = typeof window == 'object' && window && window.Math == Math ? window
120
+ : typeof self == 'object' && self && self.Math == Math ? self
121
+ // eslint-disable-next-line no-new-func
122
+ : Function('return this')();
123
+
124
+ // Thank's IE8 for his funny defineProperty
125
+ var descriptors = !fails(function () {
126
+ return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;
127
+ });
128
+
129
+ var document$1 = global$1.document;
130
+ // typeof document.createElement is 'object' in old IE
131
+ var exist = isObject(document$1) && isObject(document$1.createElement);
132
+
133
+ var documentCreateElement = function (it) {
134
+ return exist ? document$1.createElement(it) : {};
135
+ };
136
+
137
+ // Thank's IE8 for his funny defineProperty
138
+ var ie8DomDefine = !descriptors && !fails(function () {
139
+ return Object.defineProperty(documentCreateElement('div'), 'a', {
140
+ get: function () { return 7; }
141
+ }).a != 7;
142
+ });
143
+
144
+ var anObject = function (it) {
145
+ if (!isObject(it)) {
146
+ throw TypeError(String(it) + ' is not an object');
147
+ } return it;
148
+ };
149
+
150
+ // 7.1.1 ToPrimitive(input [, PreferredType])
151
+
152
+ // instead of the ES6 spec version, we didn't implement @@toPrimitive case
153
+ // and the second argument - flag - preferred type is a string
154
+ var toPrimitive = function (it, S) {
155
+ if (!isObject(it)) return it;
156
+ var fn, val;
157
+ if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
158
+ if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;
159
+ if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
160
+ throw TypeError("Can't convert object to primitive value");
161
+ };
162
+
163
+ var nativeDefineProperty = Object.defineProperty;
164
+
165
+ var f = descriptors ? nativeDefineProperty : function defineProperty(O, P, Attributes) {
166
+ anObject(O);
167
+ P = toPrimitive(P, true);
168
+ anObject(Attributes);
169
+ if (ie8DomDefine) try {
170
+ return nativeDefineProperty(O, P, Attributes);
171
+ } catch (error) { /* empty */ }
172
+ if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');
173
+ if ('value' in Attributes) O[P] = Attributes.value;
174
+ return O;
175
+ };
176
+
177
+ var objectDefineProperty = {
178
+ f: f
179
+ };
180
+
181
+ var createPropertyDescriptor = function (bitmap, value) {
182
+ return {
183
+ enumerable: !(bitmap & 1),
184
+ configurable: !(bitmap & 2),
185
+ writable: !(bitmap & 4),
186
+ value: value
187
+ };
188
+ };
189
+
190
+ var hide = descriptors ? function (object, key, value) {
191
+ return objectDefineProperty.f(object, key, createPropertyDescriptor(1, value));
192
+ } : function (object, key, value) {
193
+ object[key] = value;
194
+ return object;
195
+ };
196
+
197
+ var setGlobal = function (key, value) {
198
+ try {
199
+ hide(global$1, key, value);
200
+ } catch (error) {
201
+ global$1[key] = value;
202
+ } return value;
203
+ };
204
+
205
+ var shared = createCommonjsModule(function (module) {
206
+ var SHARED = '__core-js_shared__';
207
+ var store = global$1[SHARED] || setGlobal(SHARED, {});
208
+
209
+ (module.exports = function (key, value) {
210
+ return store[key] || (store[key] = value !== undefined ? value : {});
211
+ })('versions', []).push({
212
+ version: '3.0.1',
213
+ mode: 'global',
214
+ copyright: '© 2019 Denis Pushkarev (zloirock.ru)'
215
+ });
216
+ });
217
+
218
+ var id = 0;
219
+ var postfix = Math.random();
220
+
221
+ var uid = function (key) {
222
+ return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + postfix).toString(36));
223
+ };
224
+
225
+ // Chrome 38 Symbol has incorrect toString conversion
226
+ var nativeSymbol = !fails(function () {
227
+ // eslint-disable-next-line no-undef
228
+ return !String(Symbol());
229
+ });
230
+
231
+ var store = shared('wks');
232
+
233
+ var Symbol$1 = global$1.Symbol;
234
+
235
+
236
+ var wellKnownSymbol = function (name) {
237
+ return store[name] || (store[name] = nativeSymbol && Symbol$1[name]
238
+ || (nativeSymbol ? Symbol$1 : uid)('Symbol.' + name));
239
+ };
240
+
241
+ var SPECIES = wellKnownSymbol('species');
242
+
243
+ // `ArraySpeciesCreate` abstract operation
244
+ // https://tc39.github.io/ecma262/#sec-arrayspeciescreate
245
+ var arraySpeciesCreate = function (originalArray, length) {
246
+ var C;
247
+ if (isArray(originalArray)) {
248
+ C = originalArray.constructor;
249
+ // cross-realm fallback
250
+ if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;
251
+ else if (isObject(C)) {
252
+ C = C[SPECIES];
253
+ if (C === null) C = undefined;
254
+ }
255
+ } return new (C === undefined ? Array : C)(length === 0 ? 0 : length);
256
+ };
257
+
258
+ // `Array.prototype.{ forEach, map, filter, some, every, find, findIndex }` methods implementation
259
+ // 0 -> Array#forEach
260
+ // https://tc39.github.io/ecma262/#sec-array.prototype.foreach
261
+ // 1 -> Array#map
262
+ // https://tc39.github.io/ecma262/#sec-array.prototype.map
263
+ // 2 -> Array#filter
264
+ // https://tc39.github.io/ecma262/#sec-array.prototype.filter
265
+ // 3 -> Array#some
266
+ // https://tc39.github.io/ecma262/#sec-array.prototype.some
267
+ // 4 -> Array#every
268
+ // https://tc39.github.io/ecma262/#sec-array.prototype.every
269
+ // 5 -> Array#find
270
+ // https://tc39.github.io/ecma262/#sec-array.prototype.find
271
+ // 6 -> Array#findIndex
272
+ // https://tc39.github.io/ecma262/#sec-array.prototype.findIndex
273
+ var arrayMethods = function (TYPE, specificCreate) {
274
+ var IS_MAP = TYPE == 1;
275
+ var IS_FILTER = TYPE == 2;
276
+ var IS_SOME = TYPE == 3;
277
+ var IS_EVERY = TYPE == 4;
278
+ var IS_FIND_INDEX = TYPE == 6;
279
+ var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;
280
+ var create = specificCreate || arraySpeciesCreate;
281
+ return function ($this, callbackfn, that) {
282
+ var O = toObject($this);
283
+ var self = indexedObject(O);
284
+ var boundFunction = bindContext(callbackfn, that, 3);
285
+ var length = toLength(self.length);
286
+ var index = 0;
287
+ var target = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;
288
+ var value, result;
289
+ for (;length > index; index++) if (NO_HOLES || index in self) {
290
+ value = self[index];
291
+ result = boundFunction(value, index, O);
292
+ if (TYPE) {
293
+ if (IS_MAP) target[index] = result; // map
294
+ else if (result) switch (TYPE) {
295
+ case 3: return true; // some
296
+ case 5: return value; // find
297
+ case 6: return index; // findIndex
298
+ case 2: target.push(value); // filter
299
+ } else if (IS_EVERY) return false; // every
300
+ }
301
+ }
302
+ return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;
303
+ };
304
+ };
305
+
306
+ var SPECIES$1 = wellKnownSymbol('species');
307
+
308
+ var arrayMethodHasSpeciesSupport = function (METHOD_NAME) {
309
+ return !fails(function () {
310
+ var array = [];
311
+ var constructor = array.constructor = {};
312
+ constructor[SPECIES$1] = function () {
313
+ return { foo: 1 };
314
+ };
315
+ return array[METHOD_NAME](Boolean).foo !== 1;
316
+ });
317
+ };
318
+
319
+ var nativePropertyIsEnumerable = {}.propertyIsEnumerable;
320
+ var nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
321
+
322
+ // Nashorn ~ JDK8 bug
323
+ var NASHORN_BUG = nativeGetOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1);
324
+
325
+ var f$1 = NASHORN_BUG ? function propertyIsEnumerable(V) {
326
+ var descriptor = nativeGetOwnPropertyDescriptor(this, V);
327
+ return !!descriptor && descriptor.enumerable;
328
+ } : nativePropertyIsEnumerable;
329
+
330
+ var objectPropertyIsEnumerable = {
331
+ f: f$1
332
+ };
333
+
334
+ // toObject with fallback for non-array-like ES3 strings
335
+
336
+
337
+
338
+ var toIndexedObject = function (it) {
339
+ return indexedObject(requireObjectCoercible(it));
340
+ };
341
+
342
+ var hasOwnProperty = {}.hasOwnProperty;
343
+
344
+ var has = function (it, key) {
345
+ return hasOwnProperty.call(it, key);
346
+ };
347
+
348
+ var nativeGetOwnPropertyDescriptor$1 = Object.getOwnPropertyDescriptor;
349
+
350
+ var f$2 = descriptors ? nativeGetOwnPropertyDescriptor$1 : function getOwnPropertyDescriptor(O, P) {
351
+ O = toIndexedObject(O);
352
+ P = toPrimitive(P, true);
353
+ if (ie8DomDefine) try {
354
+ return nativeGetOwnPropertyDescriptor$1(O, P);
355
+ } catch (error) { /* empty */ }
356
+ if (has(O, P)) return createPropertyDescriptor(!objectPropertyIsEnumerable.f.call(O, P), O[P]);
357
+ };
358
+
359
+ var objectGetOwnPropertyDescriptor = {
360
+ f: f$2
361
+ };
362
+
363
+ var functionToString = shared('native-function-to-string', Function.toString);
364
+
365
+ var WeakMap$1 = global$1.WeakMap;
366
+
367
+ var nativeWeakMap = typeof WeakMap$1 === 'function' && /native code/.test(functionToString.call(WeakMap$1));
368
+
369
+ var shared$1 = shared('keys');
370
+
371
+
372
+ var sharedKey = function (key) {
373
+ return shared$1[key] || (shared$1[key] = uid(key));
374
+ };
375
+
376
+ var hiddenKeys = {};
377
+
378
+ var WeakMap$2 = global$1.WeakMap;
379
+ var set, get, has$1;
380
+
381
+ var enforce = function (it) {
382
+ return has$1(it) ? get(it) : set(it, {});
383
+ };
384
+
385
+ var getterFor = function (TYPE) {
386
+ return function (it) {
387
+ var state;
388
+ if (!isObject(it) || (state = get(it)).type !== TYPE) {
389
+ throw TypeError('Incompatible receiver, ' + TYPE + ' required');
390
+ } return state;
391
+ };
392
+ };
393
+
394
+ if (nativeWeakMap) {
395
+ var store$1 = new WeakMap$2();
396
+ var wmget = store$1.get;
397
+ var wmhas = store$1.has;
398
+ var wmset = store$1.set;
399
+ set = function (it, metadata) {
400
+ wmset.call(store$1, it, metadata);
401
+ return metadata;
402
+ };
403
+ get = function (it) {
404
+ return wmget.call(store$1, it) || {};
405
+ };
406
+ has$1 = function (it) {
407
+ return wmhas.call(store$1, it);
408
+ };
409
+ } else {
410
+ var STATE = sharedKey('state');
411
+ hiddenKeys[STATE] = true;
412
+ set = function (it, metadata) {
413
+ hide(it, STATE, metadata);
414
+ return metadata;
415
+ };
416
+ get = function (it) {
417
+ return has(it, STATE) ? it[STATE] : {};
418
+ };
419
+ has$1 = function (it) {
420
+ return has(it, STATE);
421
+ };
422
+ }
423
+
424
+ var internalState = {
425
+ set: set,
426
+ get: get,
427
+ has: has$1,
428
+ enforce: enforce,
429
+ getterFor: getterFor
430
+ };
431
+
432
+ var redefine = createCommonjsModule(function (module) {
433
+ var getInternalState = internalState.get;
434
+ var enforceInternalState = internalState.enforce;
435
+ var TEMPLATE = String(functionToString).split('toString');
436
+
437
+ shared('inspectSource', function (it) {
438
+ return functionToString.call(it);
439
+ });
440
+
441
+ (module.exports = function (O, key, value, options) {
442
+ var unsafe = options ? !!options.unsafe : false;
443
+ var simple = options ? !!options.enumerable : false;
444
+ var noTargetGet = options ? !!options.noTargetGet : false;
445
+ if (typeof value == 'function') {
446
+ if (typeof key == 'string' && !has(value, 'name')) hide(value, 'name', key);
447
+ enforceInternalState(value).source = TEMPLATE.join(typeof key == 'string' ? key : '');
448
+ }
449
+ if (O === global$1) {
450
+ if (simple) O[key] = value;
451
+ else setGlobal(key, value);
452
+ return;
453
+ } else if (!unsafe) {
454
+ delete O[key];
455
+ } else if (!noTargetGet && O[key]) {
456
+ simple = true;
457
+ }
458
+ if (simple) O[key] = value;
459
+ else hide(O, key, value);
460
+ // add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative
461
+ })(Function.prototype, 'toString', function toString() {
462
+ return typeof this == 'function' && getInternalState(this).source || functionToString.call(this);
463
+ });
464
+ });
465
+
466
+ var max = Math.max;
467
+ var min$1 = Math.min;
468
+
469
+ // Helper for a popular repeating case of the spec:
470
+ // Let integer be ? ToInteger(index).
471
+ // If integer < 0, let result be max((length + integer), 0); else let result be min(length, length).
472
+ var toAbsoluteIndex = function (index, length) {
473
+ var integer = toInteger(index);
474
+ return integer < 0 ? max(integer + length, 0) : min$1(integer, length);
475
+ };
476
+
477
+ // `Array.prototype.{ indexOf, includes }` methods implementation
478
+ // false -> Array#indexOf
479
+ // https://tc39.github.io/ecma262/#sec-array.prototype.indexof
480
+ // true -> Array#includes
481
+ // https://tc39.github.io/ecma262/#sec-array.prototype.includes
482
+ var arrayIncludes = function (IS_INCLUDES) {
483
+ return function ($this, el, fromIndex) {
484
+ var O = toIndexedObject($this);
485
+ var length = toLength(O.length);
486
+ var index = toAbsoluteIndex(fromIndex, length);
487
+ var value;
488
+ // Array#includes uses SameValueZero equality algorithm
489
+ // eslint-disable-next-line no-self-compare
490
+ if (IS_INCLUDES && el != el) while (length > index) {
491
+ value = O[index++];
492
+ // eslint-disable-next-line no-self-compare
493
+ if (value != value) return true;
494
+ // Array#indexOf ignores holes, Array#includes - not
495
+ } else for (;length > index; index++) if (IS_INCLUDES || index in O) {
496
+ if (O[index] === el) return IS_INCLUDES || index || 0;
497
+ } return !IS_INCLUDES && -1;
498
+ };
499
+ };
500
+
501
+ var arrayIndexOf = arrayIncludes(false);
502
+
503
+
504
+ var objectKeysInternal = function (object, names) {
505
+ var O = toIndexedObject(object);
506
+ var i = 0;
507
+ var result = [];
508
+ var key;
509
+ for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key);
510
+ // Don't enum bug & hidden keys
511
+ while (names.length > i) if (has(O, key = names[i++])) {
512
+ ~arrayIndexOf(result, key) || result.push(key);
513
+ }
514
+ return result;
515
+ };
516
+
517
+ // IE8- don't enum bug keys
518
+ var enumBugKeys = [
519
+ 'constructor',
520
+ 'hasOwnProperty',
521
+ 'isPrototypeOf',
522
+ 'propertyIsEnumerable',
523
+ 'toLocaleString',
524
+ 'toString',
525
+ 'valueOf'
526
+ ];
527
+
528
+ // 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)
529
+
530
+ var hiddenKeys$1 = enumBugKeys.concat('length', 'prototype');
531
+
532
+ var f$3 = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {
533
+ return objectKeysInternal(O, hiddenKeys$1);
534
+ };
535
+
536
+ var objectGetOwnPropertyNames = {
537
+ f: f$3
538
+ };
539
+
540
+ var f$4 = Object.getOwnPropertySymbols;
541
+
542
+ var objectGetOwnPropertySymbols = {
543
+ f: f$4
544
+ };
545
+
546
+ var Reflect = global$1.Reflect;
547
+
548
+ // all object keys, includes non-enumerable and symbols
549
+ var ownKeys = Reflect && Reflect.ownKeys || function ownKeys(it) {
550
+ var keys = objectGetOwnPropertyNames.f(anObject(it));
551
+ var getOwnPropertySymbols = objectGetOwnPropertySymbols.f;
552
+ return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys;
553
+ };
554
+
555
+ var copyConstructorProperties = function (target, source) {
556
+ var keys = ownKeys(source);
557
+ var defineProperty = objectDefineProperty.f;
558
+ var getOwnPropertyDescriptor = objectGetOwnPropertyDescriptor.f;
559
+ for (var i = 0; i < keys.length; i++) {
560
+ var key = keys[i];
561
+ if (!has(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key));
562
+ }
563
+ };
564
+
565
+ var replacement = /#|\.prototype\./;
566
+
567
+ var isForced = function (feature, detection) {
568
+ var value = data[normalize(feature)];
569
+ return value == POLYFILL ? true
570
+ : value == NATIVE ? false
571
+ : typeof detection == 'function' ? fails(detection)
572
+ : !!detection;
573
+ };
574
+
575
+ var normalize = isForced.normalize = function (string) {
576
+ return String(string).replace(replacement, '.').toLowerCase();
577
+ };
578
+
579
+ var data = isForced.data = {};
580
+ var NATIVE = isForced.NATIVE = 'N';
581
+ var POLYFILL = isForced.POLYFILL = 'P';
582
+
583
+ var isForced_1 = isForced;
584
+
585
+ var getOwnPropertyDescriptor = objectGetOwnPropertyDescriptor.f;
586
+
587
+
588
+
589
+
590
+
591
+
592
+ /*
593
+ options.target - name of the target object
594
+ options.global - target is the global object
595
+ options.stat - export as static methods of target
596
+ options.proto - export as prototype methods of target
597
+ options.real - real prototype method for the `pure` version
598
+ options.forced - export even if the native feature is available
599
+ options.bind - bind methods to the target, required for the `pure` version
600
+ options.wrap - wrap constructors to preventing global pollution, required for the `pure` version
601
+ options.unsafe - use the simple assignment of property instead of delete + defineProperty
602
+ options.sham - add a flag to not completely full polyfills
603
+ options.enumerable - export as enumerable property
604
+ options.noTargetGet - prevent calling a getter on target
605
+ */
606
+ var _export = function (options, source) {
607
+ var TARGET = options.target;
608
+ var GLOBAL = options.global;
609
+ var STATIC = options.stat;
610
+ var FORCED, target, key, targetProperty, sourceProperty, descriptor;
611
+ if (GLOBAL) {
612
+ target = global$1;
613
+ } else if (STATIC) {
614
+ target = global$1[TARGET] || setGlobal(TARGET, {});
615
+ } else {
616
+ target = (global$1[TARGET] || {}).prototype;
617
+ }
618
+ if (target) for (key in source) {
619
+ sourceProperty = source[key];
620
+ if (options.noTargetGet) {
621
+ descriptor = getOwnPropertyDescriptor(target, key);
622
+ targetProperty = descriptor && descriptor.value;
623
+ } else targetProperty = target[key];
624
+ FORCED = isForced_1(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);
625
+ // contained in target
626
+ if (!FORCED && targetProperty !== undefined) {
627
+ if (typeof sourceProperty === typeof targetProperty) continue;
628
+ copyConstructorProperties(sourceProperty, targetProperty);
629
+ }
630
+ // add a flag to not completely full polyfills
631
+ if (options.sham || (targetProperty && targetProperty.sham)) {
632
+ hide(sourceProperty, 'sham', true);
633
+ }
634
+ // extend global
635
+ redefine(target, key, sourceProperty, options);
636
+ }
637
+ };
638
+
639
+ var internalFilter = arrayMethods(2);
640
+
641
+ var SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter');
642
+
643
+ // `Array.prototype.filter` method
644
+ // https://tc39.github.io/ecma262/#sec-array.prototype.filter
645
+ // with adding support of @@species
646
+ _export({ target: 'Array', proto: true, forced: !SPECIES_SUPPORT }, {
647
+ filter: function filter(callbackfn /* , thisArg */) {
648
+ return internalFilter(this, callbackfn, arguments[1]);
649
+ }
650
+ });
651
+
652
+ var sloppyArrayMethod = function (METHOD_NAME, argument) {
653
+ var method = [][METHOD_NAME];
654
+ return !method || !fails(function () {
655
+ // eslint-disable-next-line no-useless-call,no-throw-literal
656
+ method.call(null, argument || function () { throw 1; }, 1);
657
+ });
658
+ };
659
+
660
+ var nativeForEach = [].forEach;
661
+ var internalForEach = arrayMethods(0);
662
+
663
+ var SLOPPY_METHOD = sloppyArrayMethod('forEach');
664
+
665
+ // `Array.prototype.forEach` method implementation
666
+ // https://tc39.github.io/ecma262/#sec-array.prototype.foreach
667
+ var arrayForEach = SLOPPY_METHOD ? function forEach(callbackfn /* , thisArg */) {
668
+ return internalForEach(this, callbackfn, arguments[1]);
669
+ } : nativeForEach;
670
+
671
+ // `Array.prototype.forEach` method
672
+ // https://tc39.github.io/ecma262/#sec-array.prototype.foreach
673
+ _export({ target: 'Array', proto: true, forced: [].forEach != arrayForEach }, { forEach: arrayForEach });
674
+
675
+ // `Array.prototype.{ reduce, reduceRight }` methods implementation
676
+ // https://tc39.github.io/ecma262/#sec-array.prototype.reduce
677
+ // https://tc39.github.io/ecma262/#sec-array.prototype.reduceright
678
+ var arrayReduce = function (that, callbackfn, argumentsLength, memo, isRight) {
679
+ aFunction(callbackfn);
680
+ var O = toObject(that);
681
+ var self = indexedObject(O);
682
+ var length = toLength(O.length);
683
+ var index = isRight ? length - 1 : 0;
684
+ var i = isRight ? -1 : 1;
685
+ if (argumentsLength < 2) while (true) {
686
+ if (index in self) {
687
+ memo = self[index];
688
+ index += i;
689
+ break;
690
+ }
691
+ index += i;
692
+ if (isRight ? index < 0 : length <= index) {
693
+ throw TypeError('Reduce of empty array with no initial value');
694
+ }
695
+ }
696
+ for (;isRight ? index >= 0 : length > index; index += i) if (index in self) {
697
+ memo = callbackfn(memo, self[index], index, O);
698
+ }
699
+ return memo;
700
+ };
701
+
702
+ var SLOPPY_METHOD$1 = sloppyArrayMethod('reduce');
703
+
704
+ // `Array.prototype.reduce` method
705
+ // https://tc39.github.io/ecma262/#sec-array.prototype.reduce
706
+ _export({ target: 'Array', proto: true, forced: SLOPPY_METHOD$1 }, {
707
+ reduce: function reduce(callbackfn /* , initialValue */) {
708
+ return arrayReduce(this, callbackfn, arguments.length, arguments[1], false);
709
+ }
710
+ });
711
+
712
+ var defineProperty = objectDefineProperty.f;
713
+ var FunctionPrototype = Function.prototype;
714
+ var FunctionPrototypeToString = FunctionPrototype.toString;
715
+ var nameRE = /^\s*function ([^ (]*)/;
716
+ var NAME = 'name';
717
+
718
+ // Function instances `.name` property
719
+ // https://tc39.github.io/ecma262/#sec-function-instances-name
720
+ if (descriptors && !(NAME in FunctionPrototype)) {
721
+ defineProperty(FunctionPrototype, NAME, {
722
+ configurable: true,
723
+ get: function () {
724
+ try {
725
+ return FunctionPrototypeToString.call(this).match(nameRE)[1];
726
+ } catch (error) {
727
+ return '';
728
+ }
729
+ }
730
+ });
731
+ }
732
+
733
+ // 19.1.2.14 / 15.2.3.14 Object.keys(O)
734
+
735
+
736
+
737
+ var objectKeys = Object.keys || function keys(O) {
738
+ return objectKeysInternal(O, enumBugKeys);
739
+ };
740
+
741
+ // 19.1.2.1 Object.assign(target, source, ...)
742
+
743
+
744
+
745
+
746
+
747
+ var nativeAssign = Object.assign;
748
+
749
+ // should work with symbols and should have deterministic property order (V8 bug)
750
+ var objectAssign = !nativeAssign || fails(function () {
751
+ var A = {};
752
+ var B = {};
753
+ // eslint-disable-next-line no-undef
754
+ var symbol = Symbol();
755
+ var alphabet = 'abcdefghijklmnopqrst';
756
+ A[symbol] = 7;
757
+ alphabet.split('').forEach(function (chr) { B[chr] = chr; });
758
+ return nativeAssign({}, A)[symbol] != 7 || objectKeys(nativeAssign({}, B)).join('') != alphabet;
759
+ }) ? function assign(target, source) { // eslint-disable-line no-unused-vars
760
+ var T = toObject(target);
761
+ var argumentsLength = arguments.length;
762
+ var index = 1;
763
+ var getOwnPropertySymbols = objectGetOwnPropertySymbols.f;
764
+ var propertyIsEnumerable = objectPropertyIsEnumerable.f;
765
+ while (argumentsLength > index) {
766
+ var S = indexedObject(arguments[index++]);
767
+ var keys = getOwnPropertySymbols ? objectKeys(S).concat(getOwnPropertySymbols(S)) : objectKeys(S);
768
+ var length = keys.length;
769
+ var j = 0;
770
+ var key;
771
+ while (length > j) if (propertyIsEnumerable.call(S, key = keys[j++])) T[key] = S[key];
772
+ } return T;
773
+ } : nativeAssign;
774
+
775
+ // `Object.assign` method
776
+ // https://tc39.github.io/ecma262/#sec-object.assign
777
+ _export({ target: 'Object', stat: true, forced: Object.assign !== objectAssign }, { assign: objectAssign });
778
+
779
+ // a string of all valid unicode whitespaces
780
+ // eslint-disable-next-line max-len
781
+ var whitespaces = '\u0009\u000A\u000B\u000C\u000D\u0020\u00A0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF';
782
+
783
+ var whitespace = '[' + whitespaces + ']';
784
+ var ltrim = RegExp('^' + whitespace + whitespace + '*');
785
+ var rtrim = RegExp(whitespace + whitespace + '*$');
786
+
787
+ // 1 -> String#trimStart
788
+ // 2 -> String#trimEnd
789
+ // 3 -> String#trim
790
+ var stringTrim = function (string, TYPE) {
791
+ string = String(requireObjectCoercible(string));
792
+ if (TYPE & 1) string = string.replace(ltrim, '');
793
+ if (TYPE & 2) string = string.replace(rtrim, '');
794
+ return string;
795
+ };
796
+
797
+ var nativeParseInt = global$1.parseInt;
798
+
799
+
800
+ var hex = /^[-+]?0[xX]/;
801
+ var FORCED = nativeParseInt(whitespaces + '08') !== 8 || nativeParseInt(whitespaces + '0x16') !== 22;
802
+
803
+ var _parseInt = FORCED ? function parseInt(str, radix) {
804
+ var string = stringTrim(String(str), 3);
805
+ return nativeParseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));
806
+ } : nativeParseInt;
807
+
808
+ // `parseInt` method
809
+ // https://tc39.github.io/ecma262/#sec-parseint-string-radix
810
+ _export({ global: true, forced: parseInt != _parseInt }, {
811
+ parseInt: _parseInt
812
+ });
813
+
814
+ // `RegExp.prototype.flags` getter implementation
815
+ // https://tc39.github.io/ecma262/#sec-get-regexp.prototype.flags
816
+ var regexpFlags = function () {
817
+ var that = anObject(this);
818
+ var result = '';
819
+ if (that.global) result += 'g';
820
+ if (that.ignoreCase) result += 'i';
821
+ if (that.multiline) result += 'm';
822
+ if (that.unicode) result += 'u';
823
+ if (that.sticky) result += 'y';
824
+ return result;
825
+ };
826
+
827
+ var nativeExec = RegExp.prototype.exec;
828
+ // This always refers to the native implementation, because the
829
+ // String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,
830
+ // which loads this file before patching the method.
831
+ var nativeReplace = String.prototype.replace;
832
+
833
+ var patchedExec = nativeExec;
834
+
835
+ var UPDATES_LAST_INDEX_WRONG = (function () {
836
+ var re1 = /a/;
837
+ var re2 = /b*/g;
838
+ nativeExec.call(re1, 'a');
839
+ nativeExec.call(re2, 'a');
840
+ return re1.lastIndex !== 0 || re2.lastIndex !== 0;
841
+ })();
842
+
843
+ // nonparticipating capturing group, copied from es5-shim's String#split patch.
844
+ var NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;
845
+
846
+ var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;
847
+
848
+ if (PATCH) {
849
+ patchedExec = function exec(str) {
850
+ var re = this;
851
+ var lastIndex, reCopy, match, i;
852
+
853
+ if (NPCG_INCLUDED) {
854
+ reCopy = new RegExp('^' + re.source + '$(?!\\s)', regexpFlags.call(re));
855
+ }
856
+ if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex;
857
+
858
+ match = nativeExec.call(re, str);
859
+
860
+ if (UPDATES_LAST_INDEX_WRONG && match) {
861
+ re.lastIndex = re.global ? match.index + match[0].length : lastIndex;
862
+ }
863
+ if (NPCG_INCLUDED && match && match.length > 1) {
864
+ // Fix browsers whose `exec` methods don't consistently return `undefined`
865
+ // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/
866
+ nativeReplace.call(match[0], reCopy, function () {
867
+ for (i = 1; i < arguments.length - 2; i++) {
868
+ if (arguments[i] === undefined) match[i] = undefined;
869
+ }
870
+ });
871
+ }
872
+
873
+ return match;
874
+ };
875
+ }
876
+
877
+ var regexpExec = patchedExec;
878
+
879
+ _export({ target: 'RegExp', proto: true, forced: /./.exec !== regexpExec }, {
880
+ exec: regexpExec
881
+ });
882
+
883
+ // CONVERT_TO_STRING: true -> String#at
884
+ // CONVERT_TO_STRING: false -> String#codePointAt
885
+ var stringAt = function (that, pos, CONVERT_TO_STRING) {
886
+ var S = String(requireObjectCoercible(that));
887
+ var position = toInteger(pos);
888
+ var size = S.length;
889
+ var first, second;
890
+ if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;
891
+ first = S.charCodeAt(position);
892
+ return first < 0xD800 || first > 0xDBFF || position + 1 === size
893
+ || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF
894
+ ? CONVERT_TO_STRING ? S.charAt(position) : first
895
+ : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;
896
+ };
897
+
898
+ // `AdvanceStringIndex` abstract operation
899
+ // https://tc39.github.io/ecma262/#sec-advancestringindex
900
+ var advanceStringIndex = function (S, index, unicode) {
901
+ return index + (unicode ? stringAt(S, index, true).length : 1);
902
+ };
903
+
904
+ // `RegExpExec` abstract operation
905
+ // https://tc39.github.io/ecma262/#sec-regexpexec
906
+ var regexpExecAbstract = function (R, S) {
907
+ var exec = R.exec;
908
+ if (typeof exec === 'function') {
909
+ var result = exec.call(R, S);
910
+ if (typeof result !== 'object') {
911
+ throw TypeError('RegExp exec method returned something other than an Object or null');
912
+ }
913
+ return result;
914
+ }
915
+
916
+ if (classofRaw(R) !== 'RegExp') {
917
+ throw TypeError('RegExp#exec called on incompatible receiver');
918
+ }
919
+
920
+ return regexpExec.call(R, S);
921
+ };
922
+
923
+ var SPECIES$2 = wellKnownSymbol('species');
924
+
925
+ var REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {
926
+ // #replace needs built-in support for named groups.
927
+ // #match works fine because it just return the exec results, even if it has
928
+ // a "grops" property.
929
+ var re = /./;
930
+ re.exec = function () {
931
+ var result = [];
932
+ result.groups = { a: '7' };
933
+ return result;
934
+ };
935
+ return ''.replace(re, '$<a>') !== '7';
936
+ });
937
+
938
+ // Chrome 51 has a buggy "split" implementation when RegExp#exec !== nativeExec
939
+ // Weex JS has frozen built-in prototypes, so use try / catch wrapper
940
+ var SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function () {
941
+ var re = /(?:)/;
942
+ var originalExec = re.exec;
943
+ re.exec = function () { return originalExec.apply(this, arguments); };
944
+ var result = 'ab'.split(re);
945
+ return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b';
946
+ });
947
+
948
+ var fixRegexpWellKnownSymbolLogic = function (KEY, length, exec, sham) {
949
+ var SYMBOL = wellKnownSymbol(KEY);
950
+
951
+ var DELEGATES_TO_SYMBOL = !fails(function () {
952
+ // String methods call symbol-named RegEp methods
953
+ var O = {};
954
+ O[SYMBOL] = function () { return 7; };
955
+ return ''[KEY](O) != 7;
956
+ });
957
+
958
+ var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function () {
959
+ // Symbol-named RegExp methods call .exec
960
+ var execCalled = false;
961
+ var re = /a/;
962
+ re.exec = function () { execCalled = true; return null; };
963
+
964
+ if (KEY === 'split') {
965
+ // RegExp[@@split] doesn't call the regex's exec method, but first creates
966
+ // a new one. We need to return the patched regex when creating the new one.
967
+ re.constructor = {};
968
+ re.constructor[SPECIES$2] = function () { return re; };
969
+ }
970
+
971
+ re[SYMBOL]('');
972
+ return !execCalled;
973
+ });
974
+
975
+ if (
976
+ !DELEGATES_TO_SYMBOL ||
977
+ !DELEGATES_TO_EXEC ||
978
+ (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) ||
979
+ (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)
980
+ ) {
981
+ var nativeRegExpMethod = /./[SYMBOL];
982
+ var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) {
983
+ if (regexp.exec === regexpExec) {
984
+ if (DELEGATES_TO_SYMBOL && !forceStringMethod) {
985
+ // The native String method already delegates to @@method (this
986
+ // polyfilled function), leasing to infinite recursion.
987
+ // We avoid it by directly calling the native @@method method.
988
+ return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };
989
+ }
990
+ return { done: true, value: nativeMethod.call(str, regexp, arg2) };
991
+ }
992
+ return { done: false };
993
+ });
994
+ var stringMethod = methods[0];
995
+ var regexMethod = methods[1];
996
+
997
+ redefine(String.prototype, KEY, stringMethod);
998
+ redefine(RegExp.prototype, SYMBOL, length == 2
999
+ // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)
1000
+ // 21.2.5.11 RegExp.prototype[@@split](string, limit)
1001
+ ? function (string, arg) { return regexMethod.call(string, this, arg); }
1002
+ // 21.2.5.6 RegExp.prototype[@@match](string)
1003
+ // 21.2.5.9 RegExp.prototype[@@search](string)
1004
+ : function (string) { return regexMethod.call(string, this); }
1005
+ );
1006
+ if (sham) hide(RegExp.prototype[SYMBOL], 'sham', true);
1007
+ }
1008
+ };
1009
+
1010
+ // @@match logic
1011
+ fixRegexpWellKnownSymbolLogic(
1012
+ 'match',
1013
+ 1,
1014
+ function (MATCH, nativeMatch, maybeCallNative) {
1015
+ return [
1016
+ // `String.prototype.match` method
1017
+ // https://tc39.github.io/ecma262/#sec-string.prototype.match
1018
+ function match(regexp) {
1019
+ var O = requireObjectCoercible(this);
1020
+ var matcher = regexp == undefined ? undefined : regexp[MATCH];
1021
+ return matcher !== undefined ? matcher.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));
1022
+ },
1023
+ // `RegExp.prototype[@@match]` method
1024
+ // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match
1025
+ function (regexp) {
1026
+ var res = maybeCallNative(nativeMatch, regexp, this);
1027
+ if (res.done) return res.value;
1028
+
1029
+ var rx = anObject(regexp);
1030
+ var S = String(this);
1031
+
1032
+ if (!rx.global) return regexpExecAbstract(rx, S);
1033
+
1034
+ var fullUnicode = rx.unicode;
1035
+ rx.lastIndex = 0;
1036
+ var A = [];
1037
+ var n = 0;
1038
+ var result;
1039
+ while ((result = regexpExecAbstract(rx, S)) !== null) {
1040
+ var matchStr = String(result[0]);
1041
+ A[n] = matchStr;
1042
+ if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);
1043
+ n++;
1044
+ }
1045
+ return n === 0 ? null : A;
1046
+ }
1047
+ ];
1048
+ }
1049
+ );
1050
+
1051
+ var max$1 = Math.max;
1052
+ var min$2 = Math.min;
1053
+ var floor$1 = Math.floor;
1054
+ var SUBSTITUTION_SYMBOLS = /\$([$&`']|\d\d?|<[^>]*>)/g;
1055
+ var SUBSTITUTION_SYMBOLS_NO_NAMED = /\$([$&`']|\d\d?)/g;
1056
+
1057
+ var maybeToString = function (it) {
1058
+ return it === undefined ? it : String(it);
1059
+ };
1060
+
1061
+ // @@replace logic
1062
+ fixRegexpWellKnownSymbolLogic(
1063
+ 'replace',
1064
+ 2,
1065
+ function (REPLACE, nativeReplace, maybeCallNative) {
1066
+ return [
1067
+ // `String.prototype.replace` method
1068
+ // https://tc39.github.io/ecma262/#sec-string.prototype.replace
1069
+ function replace(searchValue, replaceValue) {
1070
+ var O = requireObjectCoercible(this);
1071
+ var replacer = searchValue == undefined ? undefined : searchValue[REPLACE];
1072
+ return replacer !== undefined
1073
+ ? replacer.call(searchValue, O, replaceValue)
1074
+ : nativeReplace.call(String(O), searchValue, replaceValue);
1075
+ },
1076
+ // `RegExp.prototype[@@replace]` method
1077
+ // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace
1078
+ function (regexp, replaceValue) {
1079
+ var res = maybeCallNative(nativeReplace, regexp, this, replaceValue);
1080
+ if (res.done) return res.value;
1081
+
1082
+ var rx = anObject(regexp);
1083
+ var S = String(this);
1084
+
1085
+ var functionalReplace = typeof replaceValue === 'function';
1086
+ if (!functionalReplace) replaceValue = String(replaceValue);
1087
+
1088
+ var global = rx.global;
1089
+ if (global) {
1090
+ var fullUnicode = rx.unicode;
1091
+ rx.lastIndex = 0;
1092
+ }
1093
+ var results = [];
1094
+ while (true) {
1095
+ var result = regexpExecAbstract(rx, S);
1096
+ if (result === null) break;
1097
+
1098
+ results.push(result);
1099
+ if (!global) break;
1100
+
1101
+ var matchStr = String(result[0]);
1102
+ if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);
1103
+ }
1104
+
1105
+ var accumulatedResult = '';
1106
+ var nextSourcePosition = 0;
1107
+ for (var i = 0; i < results.length; i++) {
1108
+ result = results[i];
1109
+
1110
+ var matched = String(result[0]);
1111
+ var position = max$1(min$2(toInteger(result.index), S.length), 0);
1112
+ var captures = [];
1113
+ // NOTE: This is equivalent to
1114
+ // captures = result.slice(1).map(maybeToString)
1115
+ // but for some reason `nativeSlice.call(result, 1, result.length)` (called in
1116
+ // the slice polyfill when slicing native arrays) "doesn't work" in safari 9 and
1117
+ // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.
1118
+ for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));
1119
+ var namedCaptures = result.groups;
1120
+ if (functionalReplace) {
1121
+ var replacerArgs = [matched].concat(captures, position, S);
1122
+ if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);
1123
+ var replacement = String(replaceValue.apply(undefined, replacerArgs));
1124
+ } else {
1125
+ replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);
1126
+ }
1127
+ if (position >= nextSourcePosition) {
1128
+ accumulatedResult += S.slice(nextSourcePosition, position) + replacement;
1129
+ nextSourcePosition = position + matched.length;
1130
+ }
1131
+ }
1132
+ return accumulatedResult + S.slice(nextSourcePosition);
1133
+ }
1134
+ ];
1135
+
1136
+ // https://tc39.github.io/ecma262/#sec-getsubstitution
1137
+ function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {
1138
+ var tailPos = position + matched.length;
1139
+ var m = captures.length;
1140
+ var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;
1141
+ if (namedCaptures !== undefined) {
1142
+ namedCaptures = toObject(namedCaptures);
1143
+ symbols = SUBSTITUTION_SYMBOLS;
1144
+ }
1145
+ return nativeReplace.call(replacement, symbols, function (match, ch) {
1146
+ var capture;
1147
+ switch (ch.charAt(0)) {
1148
+ case '$': return '$';
1149
+ case '&': return matched;
1150
+ case '`': return str.slice(0, position);
1151
+ case "'": return str.slice(tailPos);
1152
+ case '<':
1153
+ capture = namedCaptures[ch.slice(1, -1)];
1154
+ break;
1155
+ default: // \d\d?
1156
+ var n = +ch;
1157
+ if (n === 0) return match;
1158
+ if (n > m) {
1159
+ var f = floor$1(n / 10);
1160
+ if (f === 0) return match;
1161
+ if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);
1162
+ return match;
1163
+ }
1164
+ capture = captures[n - 1];
1165
+ }
1166
+ return capture === undefined ? '' : capture;
1167
+ });
1168
+ }
1169
+ }
1170
+ );
1171
+
1172
+ // iterable DOM collections
1173
+ // flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods
1174
+ var domIterables = {
1175
+ CSSRuleList: 0,
1176
+ CSSStyleDeclaration: 0,
1177
+ CSSValueList: 0,
1178
+ ClientRectList: 0,
1179
+ DOMRectList: 0,
1180
+ DOMStringList: 0,
1181
+ DOMTokenList: 1,
1182
+ DataTransferItemList: 0,
1183
+ FileList: 0,
1184
+ HTMLAllCollection: 0,
1185
+ HTMLCollection: 0,
1186
+ HTMLFormElement: 0,
1187
+ HTMLSelectElement: 0,
1188
+ MediaList: 0,
1189
+ MimeTypeArray: 0,
1190
+ NamedNodeMap: 0,
1191
+ NodeList: 1,
1192
+ PaintRequestList: 0,
1193
+ Plugin: 0,
1194
+ PluginArray: 0,
1195
+ SVGLengthList: 0,
1196
+ SVGNumberList: 0,
1197
+ SVGPathSegList: 0,
1198
+ SVGPointList: 0,
1199
+ SVGStringList: 0,
1200
+ SVGTransformList: 0,
1201
+ SourceBufferList: 0,
1202
+ StyleSheetList: 0,
1203
+ TextTrackCueList: 0,
1204
+ TextTrackList: 0,
1205
+ TouchList: 0
1206
+ };
1207
+
1208
+ for (var COLLECTION_NAME in domIterables) {
1209
+ var Collection = global$1[COLLECTION_NAME];
1210
+ var CollectionPrototype = Collection && Collection.prototype;
1211
+ // some Chrome versions have non-configurable methods on DOMTokenList
1212
+ if (CollectionPrototype && CollectionPrototype.forEach !== arrayForEach) try {
1213
+ hide(CollectionPrototype, 'forEach', arrayForEach);
1214
+ } catch (error) {
1215
+ CollectionPrototype.forEach = arrayForEach;
1216
+ }
1217
+ }
1218
+
1219
+ var scrollbarWidth = createCommonjsModule(function (module, exports) {
1220
+ /*! scrollbarWidth.js v0.1.3 | felixexter | MIT | https://github.com/felixexter/scrollbarWidth */
1221
+ (function (root, factory) {
1222
+ {
1223
+ module.exports = factory();
1224
+ }
1225
+ }(commonjsGlobal, function () {
1226
+
1227
+ function scrollbarWidth() {
1228
+ if (typeof document === 'undefined') {
1229
+ return 0
1230
+ }
1231
+
1232
+ var
1233
+ body = document.body,
1234
+ box = document.createElement('div'),
1235
+ boxStyle = box.style,
1236
+ width;
1237
+
1238
+ boxStyle.position = 'absolute';
1239
+ boxStyle.top = boxStyle.left = '-9999px';
1240
+ boxStyle.width = boxStyle.height = '100px';
1241
+ boxStyle.overflow = 'scroll';
1242
+
1243
+ body.appendChild(box);
1244
+
1245
+ width = box.offsetWidth - box.clientWidth;
1246
+
1247
+ body.removeChild(box);
1248
+
1249
+ return width;
1250
+ }
1251
+
1252
+ return scrollbarWidth;
1253
+ }));
1254
+ });
1255
+
1256
+ /**
1257
+ * lodash (Custom Build) <https://lodash.com/>
1258
+ * Build: `lodash modularize exports="npm" -o ./`
1259
+ * Copyright jQuery Foundation and other contributors <https://jquery.org/>
1260
+ * Released under MIT license <https://lodash.com/license>
1261
+ * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
1262
+ * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
1263
+ */
1264
+
1265
+ /** Used as the `TypeError` message for "Functions" methods. */
1266
+ var FUNC_ERROR_TEXT = 'Expected a function';
1267
+
1268
+ /** Used as references for various `Number` constants. */
1269
+ var NAN = 0 / 0;
1270
+
1271
+ /** `Object#toString` result references. */
1272
+ var symbolTag = '[object Symbol]';
1273
+
1274
+ /** Used to match leading and trailing whitespace. */
1275
+ var reTrim = /^\s+|\s+$/g;
1276
+
1277
+ /** Used to detect bad signed hexadecimal string values. */
1278
+ var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
1279
+
1280
+ /** Used to detect binary string values. */
1281
+ var reIsBinary = /^0b[01]+$/i;
1282
+
1283
+ /** Used to detect octal string values. */
1284
+ var reIsOctal = /^0o[0-7]+$/i;
1285
+
1286
+ /** Built-in method references without a dependency on `root`. */
1287
+ var freeParseInt = parseInt;
1288
+
1289
+ /** Detect free variable `global` from Node.js. */
1290
+ var freeGlobal = typeof commonjsGlobal == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal;
1291
+
1292
+ /** Detect free variable `self`. */
1293
+ var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
1294
+
1295
+ /** Used as a reference to the global object. */
1296
+ var root = freeGlobal || freeSelf || Function('return this')();
1297
+
1298
+ /** Used for built-in method references. */
1299
+ var objectProto = Object.prototype;
1300
+
1301
+ /**
1302
+ * Used to resolve the
1303
+ * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
1304
+ * of values.
1305
+ */
1306
+ var objectToString = objectProto.toString;
1307
+
1308
+ /* Built-in method references for those with the same name as other `lodash` methods. */
1309
+ var nativeMax = Math.max,
1310
+ nativeMin = Math.min;
1311
+
1312
+ /**
1313
+ * Gets the timestamp of the number of milliseconds that have elapsed since
1314
+ * the Unix epoch (1 January 1970 00:00:00 UTC).
1315
+ *
1316
+ * @static
1317
+ * @memberOf _
1318
+ * @since 2.4.0
1319
+ * @category Date
1320
+ * @returns {number} Returns the timestamp.
1321
+ * @example
1322
+ *
1323
+ * _.defer(function(stamp) {
1324
+ * console.log(_.now() - stamp);
1325
+ * }, _.now());
1326
+ * // => Logs the number of milliseconds it took for the deferred invocation.
1327
+ */
1328
+ var now = function() {
1329
+ return root.Date.now();
1330
+ };
1331
+
1332
+ /**
1333
+ * Creates a debounced function that delays invoking `func` until after `wait`
1334
+ * milliseconds have elapsed since the last time the debounced function was
1335
+ * invoked. The debounced function comes with a `cancel` method to cancel
1336
+ * delayed `func` invocations and a `flush` method to immediately invoke them.
1337
+ * Provide `options` to indicate whether `func` should be invoked on the
1338
+ * leading and/or trailing edge of the `wait` timeout. The `func` is invoked
1339
+ * with the last arguments provided to the debounced function. Subsequent
1340
+ * calls to the debounced function return the result of the last `func`
1341
+ * invocation.
1342
+ *
1343
+ * **Note:** If `leading` and `trailing` options are `true`, `func` is
1344
+ * invoked on the trailing edge of the timeout only if the debounced function
1345
+ * is invoked more than once during the `wait` timeout.
1346
+ *
1347
+ * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
1348
+ * until to the next tick, similar to `setTimeout` with a timeout of `0`.
1349
+ *
1350
+ * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
1351
+ * for details over the differences between `_.debounce` and `_.throttle`.
1352
+ *
1353
+ * @static
1354
+ * @memberOf _
1355
+ * @since 0.1.0
1356
+ * @category Function
1357
+ * @param {Function} func The function to debounce.
1358
+ * @param {number} [wait=0] The number of milliseconds to delay.
1359
+ * @param {Object} [options={}] The options object.
1360
+ * @param {boolean} [options.leading=false]
1361
+ * Specify invoking on the leading edge of the timeout.
1362
+ * @param {number} [options.maxWait]
1363
+ * The maximum time `func` is allowed to be delayed before it's invoked.
1364
+ * @param {boolean} [options.trailing=true]
1365
+ * Specify invoking on the trailing edge of the timeout.
1366
+ * @returns {Function} Returns the new debounced function.
1367
+ * @example
1368
+ *
1369
+ * // Avoid costly calculations while the window size is in flux.
1370
+ * jQuery(window).on('resize', _.debounce(calculateLayout, 150));
1371
+ *
1372
+ * // Invoke `sendMail` when clicked, debouncing subsequent calls.
1373
+ * jQuery(element).on('click', _.debounce(sendMail, 300, {
1374
+ * 'leading': true,
1375
+ * 'trailing': false
1376
+ * }));
1377
+ *
1378
+ * // Ensure `batchLog` is invoked once after 1 second of debounced calls.
1379
+ * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });
1380
+ * var source = new EventSource('/stream');
1381
+ * jQuery(source).on('message', debounced);
1382
+ *
1383
+ * // Cancel the trailing debounced invocation.
1384
+ * jQuery(window).on('popstate', debounced.cancel);
1385
+ */
1386
+ function debounce(func, wait, options) {
1387
+ var lastArgs,
1388
+ lastThis,
1389
+ maxWait,
1390
+ result,
1391
+ timerId,
1392
+ lastCallTime,
1393
+ lastInvokeTime = 0,
1394
+ leading = false,
1395
+ maxing = false,
1396
+ trailing = true;
1397
+
1398
+ if (typeof func != 'function') {
1399
+ throw new TypeError(FUNC_ERROR_TEXT);
1400
+ }
1401
+ wait = toNumber(wait) || 0;
1402
+ if (isObject$1(options)) {
1403
+ leading = !!options.leading;
1404
+ maxing = 'maxWait' in options;
1405
+ maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;
1406
+ trailing = 'trailing' in options ? !!options.trailing : trailing;
1407
+ }
1408
+
1409
+ function invokeFunc(time) {
1410
+ var args = lastArgs,
1411
+ thisArg = lastThis;
1412
+
1413
+ lastArgs = lastThis = undefined;
1414
+ lastInvokeTime = time;
1415
+ result = func.apply(thisArg, args);
1416
+ return result;
1417
+ }
1418
+
1419
+ function leadingEdge(time) {
1420
+ // Reset any `maxWait` timer.
1421
+ lastInvokeTime = time;
1422
+ // Start the timer for the trailing edge.
1423
+ timerId = setTimeout(timerExpired, wait);
1424
+ // Invoke the leading edge.
1425
+ return leading ? invokeFunc(time) : result;
1426
+ }
1427
+
1428
+ function remainingWait(time) {
1429
+ var timeSinceLastCall = time - lastCallTime,
1430
+ timeSinceLastInvoke = time - lastInvokeTime,
1431
+ result = wait - timeSinceLastCall;
1432
+
1433
+ return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;
1434
+ }
1435
+
1436
+ function shouldInvoke(time) {
1437
+ var timeSinceLastCall = time - lastCallTime,
1438
+ timeSinceLastInvoke = time - lastInvokeTime;
1439
+
1440
+ // Either this is the first call, activity has stopped and we're at the
1441
+ // trailing edge, the system time has gone backwards and we're treating
1442
+ // it as the trailing edge, or we've hit the `maxWait` limit.
1443
+ return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||
1444
+ (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));
1445
+ }
1446
+
1447
+ function timerExpired() {
1448
+ var time = now();
1449
+ if (shouldInvoke(time)) {
1450
+ return trailingEdge(time);
1451
+ }
1452
+ // Restart the timer.
1453
+ timerId = setTimeout(timerExpired, remainingWait(time));
1454
+ }
1455
+
1456
+ function trailingEdge(time) {
1457
+ timerId = undefined;
1458
+
1459
+ // Only invoke if we have `lastArgs` which means `func` has been
1460
+ // debounced at least once.
1461
+ if (trailing && lastArgs) {
1462
+ return invokeFunc(time);
1463
+ }
1464
+ lastArgs = lastThis = undefined;
1465
+ return result;
1466
+ }
1467
+
1468
+ function cancel() {
1469
+ if (timerId !== undefined) {
1470
+ clearTimeout(timerId);
1471
+ }
1472
+ lastInvokeTime = 0;
1473
+ lastArgs = lastCallTime = lastThis = timerId = undefined;
1474
+ }
1475
+
1476
+ function flush() {
1477
+ return timerId === undefined ? result : trailingEdge(now());
1478
+ }
1479
+
1480
+ function debounced() {
1481
+ var time = now(),
1482
+ isInvoking = shouldInvoke(time);
1483
+
1484
+ lastArgs = arguments;
1485
+ lastThis = this;
1486
+ lastCallTime = time;
1487
+
1488
+ if (isInvoking) {
1489
+ if (timerId === undefined) {
1490
+ return leadingEdge(lastCallTime);
1491
+ }
1492
+ if (maxing) {
1493
+ // Handle invocations in a tight loop.
1494
+ timerId = setTimeout(timerExpired, wait);
1495
+ return invokeFunc(lastCallTime);
1496
+ }
1497
+ }
1498
+ if (timerId === undefined) {
1499
+ timerId = setTimeout(timerExpired, wait);
1500
+ }
1501
+ return result;
1502
+ }
1503
+ debounced.cancel = cancel;
1504
+ debounced.flush = flush;
1505
+ return debounced;
1506
+ }
1507
+
1508
+ /**
1509
+ * Creates a throttled function that only invokes `func` at most once per
1510
+ * every `wait` milliseconds. The throttled function comes with a `cancel`
1511
+ * method to cancel delayed `func` invocations and a `flush` method to
1512
+ * immediately invoke them. Provide `options` to indicate whether `func`
1513
+ * should be invoked on the leading and/or trailing edge of the `wait`
1514
+ * timeout. The `func` is invoked with the last arguments provided to the
1515
+ * throttled function. Subsequent calls to the throttled function return the
1516
+ * result of the last `func` invocation.
1517
+ *
1518
+ * **Note:** If `leading` and `trailing` options are `true`, `func` is
1519
+ * invoked on the trailing edge of the timeout only if the throttled function
1520
+ * is invoked more than once during the `wait` timeout.
1521
+ *
1522
+ * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
1523
+ * until to the next tick, similar to `setTimeout` with a timeout of `0`.
1524
+ *
1525
+ * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
1526
+ * for details over the differences between `_.throttle` and `_.debounce`.
1527
+ *
1528
+ * @static
1529
+ * @memberOf _
1530
+ * @since 0.1.0
1531
+ * @category Function
1532
+ * @param {Function} func The function to throttle.
1533
+ * @param {number} [wait=0] The number of milliseconds to throttle invocations to.
1534
+ * @param {Object} [options={}] The options object.
1535
+ * @param {boolean} [options.leading=true]
1536
+ * Specify invoking on the leading edge of the timeout.
1537
+ * @param {boolean} [options.trailing=true]
1538
+ * Specify invoking on the trailing edge of the timeout.
1539
+ * @returns {Function} Returns the new throttled function.
1540
+ * @example
1541
+ *
1542
+ * // Avoid excessively updating the position while scrolling.
1543
+ * jQuery(window).on('scroll', _.throttle(updatePosition, 100));
1544
+ *
1545
+ * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.
1546
+ * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });
1547
+ * jQuery(element).on('click', throttled);
1548
+ *
1549
+ * // Cancel the trailing throttled invocation.
1550
+ * jQuery(window).on('popstate', throttled.cancel);
1551
+ */
1552
+ function throttle(func, wait, options) {
1553
+ var leading = true,
1554
+ trailing = true;
1555
+
1556
+ if (typeof func != 'function') {
1557
+ throw new TypeError(FUNC_ERROR_TEXT);
1558
+ }
1559
+ if (isObject$1(options)) {
1560
+ leading = 'leading' in options ? !!options.leading : leading;
1561
+ trailing = 'trailing' in options ? !!options.trailing : trailing;
1562
+ }
1563
+ return debounce(func, wait, {
1564
+ 'leading': leading,
1565
+ 'maxWait': wait,
1566
+ 'trailing': trailing
1567
+ });
1568
+ }
1569
+
1570
+ /**
1571
+ * Checks if `value` is the
1572
+ * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
1573
+ * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
1574
+ *
1575
+ * @static
1576
+ * @memberOf _
1577
+ * @since 0.1.0
1578
+ * @category Lang
1579
+ * @param {*} value The value to check.
1580
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
1581
+ * @example
1582
+ *
1583
+ * _.isObject({});
1584
+ * // => true
1585
+ *
1586
+ * _.isObject([1, 2, 3]);
1587
+ * // => true
1588
+ *
1589
+ * _.isObject(_.noop);
1590
+ * // => true
1591
+ *
1592
+ * _.isObject(null);
1593
+ * // => false
1594
+ */
1595
+ function isObject$1(value) {
1596
+ var type = typeof value;
1597
+ return !!value && (type == 'object' || type == 'function');
1598
+ }
1599
+
1600
+ /**
1601
+ * Checks if `value` is object-like. A value is object-like if it's not `null`
1602
+ * and has a `typeof` result of "object".
1603
+ *
1604
+ * @static
1605
+ * @memberOf _
1606
+ * @since 4.0.0
1607
+ * @category Lang
1608
+ * @param {*} value The value to check.
1609
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
1610
+ * @example
1611
+ *
1612
+ * _.isObjectLike({});
1613
+ * // => true
1614
+ *
1615
+ * _.isObjectLike([1, 2, 3]);
1616
+ * // => true
1617
+ *
1618
+ * _.isObjectLike(_.noop);
1619
+ * // => false
1620
+ *
1621
+ * _.isObjectLike(null);
1622
+ * // => false
1623
+ */
1624
+ function isObjectLike(value) {
1625
+ return !!value && typeof value == 'object';
1626
+ }
1627
+
1628
+ /**
1629
+ * Checks if `value` is classified as a `Symbol` primitive or object.
1630
+ *
1631
+ * @static
1632
+ * @memberOf _
1633
+ * @since 4.0.0
1634
+ * @category Lang
1635
+ * @param {*} value The value to check.
1636
+ * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
1637
+ * @example
1638
+ *
1639
+ * _.isSymbol(Symbol.iterator);
1640
+ * // => true
1641
+ *
1642
+ * _.isSymbol('abc');
1643
+ * // => false
1644
+ */
1645
+ function isSymbol(value) {
1646
+ return typeof value == 'symbol' ||
1647
+ (isObjectLike(value) && objectToString.call(value) == symbolTag);
1648
+ }
1649
+
1650
+ /**
1651
+ * Converts `value` to a number.
1652
+ *
1653
+ * @static
1654
+ * @memberOf _
1655
+ * @since 4.0.0
1656
+ * @category Lang
1657
+ * @param {*} value The value to process.
1658
+ * @returns {number} Returns the number.
1659
+ * @example
1660
+ *
1661
+ * _.toNumber(3.2);
1662
+ * // => 3.2
1663
+ *
1664
+ * _.toNumber(Number.MIN_VALUE);
1665
+ * // => 5e-324
1666
+ *
1667
+ * _.toNumber(Infinity);
1668
+ * // => Infinity
1669
+ *
1670
+ * _.toNumber('3.2');
1671
+ * // => 3.2
1672
+ */
1673
+ function toNumber(value) {
1674
+ if (typeof value == 'number') {
1675
+ return value;
1676
+ }
1677
+ if (isSymbol(value)) {
1678
+ return NAN;
1679
+ }
1680
+ if (isObject$1(value)) {
1681
+ var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
1682
+ value = isObject$1(other) ? (other + '') : other;
1683
+ }
1684
+ if (typeof value != 'string') {
1685
+ return value === 0 ? value : +value;
1686
+ }
1687
+ value = value.replace(reTrim, '');
1688
+ var isBinary = reIsBinary.test(value);
1689
+ return (isBinary || reIsOctal.test(value))
1690
+ ? freeParseInt(value.slice(2), isBinary ? 2 : 8)
1691
+ : (reIsBadHex.test(value) ? NAN : +value);
1692
+ }
1693
+
1694
+ var lodash_throttle = throttle;
1695
+
1696
+ /**
1697
+ * lodash (Custom Build) <https://lodash.com/>
1698
+ * Build: `lodash modularize exports="npm" -o ./`
1699
+ * Copyright jQuery Foundation and other contributors <https://jquery.org/>
1700
+ * Released under MIT license <https://lodash.com/license>
1701
+ * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
1702
+ * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
1703
+ */
1704
+
1705
+ /** Used as the `TypeError` message for "Functions" methods. */
1706
+ var FUNC_ERROR_TEXT$1 = 'Expected a function';
1707
+
1708
+ /** Used as references for various `Number` constants. */
1709
+ var NAN$1 = 0 / 0;
1710
+
1711
+ /** `Object#toString` result references. */
1712
+ var symbolTag$1 = '[object Symbol]';
1713
+
1714
+ /** Used to match leading and trailing whitespace. */
1715
+ var reTrim$1 = /^\s+|\s+$/g;
1716
+
1717
+ /** Used to detect bad signed hexadecimal string values. */
1718
+ var reIsBadHex$1 = /^[-+]0x[0-9a-f]+$/i;
1719
+
1720
+ /** Used to detect binary string values. */
1721
+ var reIsBinary$1 = /^0b[01]+$/i;
1722
+
1723
+ /** Used to detect octal string values. */
1724
+ var reIsOctal$1 = /^0o[0-7]+$/i;
1725
+
1726
+ /** Built-in method references without a dependency on `root`. */
1727
+ var freeParseInt$1 = parseInt;
1728
+
1729
+ /** Detect free variable `global` from Node.js. */
1730
+ var freeGlobal$1 = typeof commonjsGlobal == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal;
1731
+
1732
+ /** Detect free variable `self`. */
1733
+ var freeSelf$1 = typeof self == 'object' && self && self.Object === Object && self;
1734
+
1735
+ /** Used as a reference to the global object. */
1736
+ var root$1 = freeGlobal$1 || freeSelf$1 || Function('return this')();
1737
+
1738
+ /** Used for built-in method references. */
1739
+ var objectProto$1 = Object.prototype;
1740
+
1741
+ /**
1742
+ * Used to resolve the
1743
+ * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
1744
+ * of values.
1745
+ */
1746
+ var objectToString$1 = objectProto$1.toString;
1747
+
1748
+ /* Built-in method references for those with the same name as other `lodash` methods. */
1749
+ var nativeMax$1 = Math.max,
1750
+ nativeMin$1 = Math.min;
1751
+
1752
+ /**
1753
+ * Gets the timestamp of the number of milliseconds that have elapsed since
1754
+ * the Unix epoch (1 January 1970 00:00:00 UTC).
1755
+ *
1756
+ * @static
1757
+ * @memberOf _
1758
+ * @since 2.4.0
1759
+ * @category Date
1760
+ * @returns {number} Returns the timestamp.
1761
+ * @example
1762
+ *
1763
+ * _.defer(function(stamp) {
1764
+ * console.log(_.now() - stamp);
1765
+ * }, _.now());
1766
+ * // => Logs the number of milliseconds it took for the deferred invocation.
1767
+ */
1768
+ var now$1 = function() {
1769
+ return root$1.Date.now();
1770
+ };
1771
+
1772
+ /**
1773
+ * Creates a debounced function that delays invoking `func` until after `wait`
1774
+ * milliseconds have elapsed since the last time the debounced function was
1775
+ * invoked. The debounced function comes with a `cancel` method to cancel
1776
+ * delayed `func` invocations and a `flush` method to immediately invoke them.
1777
+ * Provide `options` to indicate whether `func` should be invoked on the
1778
+ * leading and/or trailing edge of the `wait` timeout. The `func` is invoked
1779
+ * with the last arguments provided to the debounced function. Subsequent
1780
+ * calls to the debounced function return the result of the last `func`
1781
+ * invocation.
1782
+ *
1783
+ * **Note:** If `leading` and `trailing` options are `true`, `func` is
1784
+ * invoked on the trailing edge of the timeout only if the debounced function
1785
+ * is invoked more than once during the `wait` timeout.
1786
+ *
1787
+ * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
1788
+ * until to the next tick, similar to `setTimeout` with a timeout of `0`.
1789
+ *
1790
+ * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
1791
+ * for details over the differences between `_.debounce` and `_.throttle`.
1792
+ *
1793
+ * @static
1794
+ * @memberOf _
1795
+ * @since 0.1.0
1796
+ * @category Function
1797
+ * @param {Function} func The function to debounce.
1798
+ * @param {number} [wait=0] The number of milliseconds to delay.
1799
+ * @param {Object} [options={}] The options object.
1800
+ * @param {boolean} [options.leading=false]
1801
+ * Specify invoking on the leading edge of the timeout.
1802
+ * @param {number} [options.maxWait]
1803
+ * The maximum time `func` is allowed to be delayed before it's invoked.
1804
+ * @param {boolean} [options.trailing=true]
1805
+ * Specify invoking on the trailing edge of the timeout.
1806
+ * @returns {Function} Returns the new debounced function.
1807
+ * @example
1808
+ *
1809
+ * // Avoid costly calculations while the window size is in flux.
1810
+ * jQuery(window).on('resize', _.debounce(calculateLayout, 150));
1811
+ *
1812
+ * // Invoke `sendMail` when clicked, debouncing subsequent calls.
1813
+ * jQuery(element).on('click', _.debounce(sendMail, 300, {
1814
+ * 'leading': true,
1815
+ * 'trailing': false
1816
+ * }));
1817
+ *
1818
+ * // Ensure `batchLog` is invoked once after 1 second of debounced calls.
1819
+ * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });
1820
+ * var source = new EventSource('/stream');
1821
+ * jQuery(source).on('message', debounced);
1822
+ *
1823
+ * // Cancel the trailing debounced invocation.
1824
+ * jQuery(window).on('popstate', debounced.cancel);
1825
+ */
1826
+ function debounce$1(func, wait, options) {
1827
+ var lastArgs,
1828
+ lastThis,
1829
+ maxWait,
1830
+ result,
1831
+ timerId,
1832
+ lastCallTime,
1833
+ lastInvokeTime = 0,
1834
+ leading = false,
1835
+ maxing = false,
1836
+ trailing = true;
1837
+
1838
+ if (typeof func != 'function') {
1839
+ throw new TypeError(FUNC_ERROR_TEXT$1);
1840
+ }
1841
+ wait = toNumber$1(wait) || 0;
1842
+ if (isObject$2(options)) {
1843
+ leading = !!options.leading;
1844
+ maxing = 'maxWait' in options;
1845
+ maxWait = maxing ? nativeMax$1(toNumber$1(options.maxWait) || 0, wait) : maxWait;
1846
+ trailing = 'trailing' in options ? !!options.trailing : trailing;
1847
+ }
1848
+
1849
+ function invokeFunc(time) {
1850
+ var args = lastArgs,
1851
+ thisArg = lastThis;
1852
+
1853
+ lastArgs = lastThis = undefined;
1854
+ lastInvokeTime = time;
1855
+ result = func.apply(thisArg, args);
1856
+ return result;
1857
+ }
1858
+
1859
+ function leadingEdge(time) {
1860
+ // Reset any `maxWait` timer.
1861
+ lastInvokeTime = time;
1862
+ // Start the timer for the trailing edge.
1863
+ timerId = setTimeout(timerExpired, wait);
1864
+ // Invoke the leading edge.
1865
+ return leading ? invokeFunc(time) : result;
1866
+ }
1867
+
1868
+ function remainingWait(time) {
1869
+ var timeSinceLastCall = time - lastCallTime,
1870
+ timeSinceLastInvoke = time - lastInvokeTime,
1871
+ result = wait - timeSinceLastCall;
1872
+
1873
+ return maxing ? nativeMin$1(result, maxWait - timeSinceLastInvoke) : result;
1874
+ }
1875
+
1876
+ function shouldInvoke(time) {
1877
+ var timeSinceLastCall = time - lastCallTime,
1878
+ timeSinceLastInvoke = time - lastInvokeTime;
1879
+
1880
+ // Either this is the first call, activity has stopped and we're at the
1881
+ // trailing edge, the system time has gone backwards and we're treating
1882
+ // it as the trailing edge, or we've hit the `maxWait` limit.
1883
+ return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||
1884
+ (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));
1885
+ }
1886
+
1887
+ function timerExpired() {
1888
+ var time = now$1();
1889
+ if (shouldInvoke(time)) {
1890
+ return trailingEdge(time);
1891
+ }
1892
+ // Restart the timer.
1893
+ timerId = setTimeout(timerExpired, remainingWait(time));
1894
+ }
1895
+
1896
+ function trailingEdge(time) {
1897
+ timerId = undefined;
1898
+
1899
+ // Only invoke if we have `lastArgs` which means `func` has been
1900
+ // debounced at least once.
1901
+ if (trailing && lastArgs) {
1902
+ return invokeFunc(time);
1903
+ }
1904
+ lastArgs = lastThis = undefined;
1905
+ return result;
1906
+ }
1907
+
1908
+ function cancel() {
1909
+ if (timerId !== undefined) {
1910
+ clearTimeout(timerId);
1911
+ }
1912
+ lastInvokeTime = 0;
1913
+ lastArgs = lastCallTime = lastThis = timerId = undefined;
1914
+ }
1915
+
1916
+ function flush() {
1917
+ return timerId === undefined ? result : trailingEdge(now$1());
1918
+ }
1919
+
1920
+ function debounced() {
1921
+ var time = now$1(),
1922
+ isInvoking = shouldInvoke(time);
1923
+
1924
+ lastArgs = arguments;
1925
+ lastThis = this;
1926
+ lastCallTime = time;
1927
+
1928
+ if (isInvoking) {
1929
+ if (timerId === undefined) {
1930
+ return leadingEdge(lastCallTime);
1931
+ }
1932
+ if (maxing) {
1933
+ // Handle invocations in a tight loop.
1934
+ timerId = setTimeout(timerExpired, wait);
1935
+ return invokeFunc(lastCallTime);
1936
+ }
1937
+ }
1938
+ if (timerId === undefined) {
1939
+ timerId = setTimeout(timerExpired, wait);
1940
+ }
1941
+ return result;
1942
+ }
1943
+ debounced.cancel = cancel;
1944
+ debounced.flush = flush;
1945
+ return debounced;
1946
+ }
1947
+
1948
+ /**
1949
+ * Checks if `value` is the
1950
+ * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
1951
+ * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
1952
+ *
1953
+ * @static
1954
+ * @memberOf _
1955
+ * @since 0.1.0
1956
+ * @category Lang
1957
+ * @param {*} value The value to check.
1958
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
1959
+ * @example
1960
+ *
1961
+ * _.isObject({});
1962
+ * // => true
1963
+ *
1964
+ * _.isObject([1, 2, 3]);
1965
+ * // => true
1966
+ *
1967
+ * _.isObject(_.noop);
1968
+ * // => true
1969
+ *
1970
+ * _.isObject(null);
1971
+ * // => false
1972
+ */
1973
+ function isObject$2(value) {
1974
+ var type = typeof value;
1975
+ return !!value && (type == 'object' || type == 'function');
1976
+ }
1977
+
1978
+ /**
1979
+ * Checks if `value` is object-like. A value is object-like if it's not `null`
1980
+ * and has a `typeof` result of "object".
1981
+ *
1982
+ * @static
1983
+ * @memberOf _
1984
+ * @since 4.0.0
1985
+ * @category Lang
1986
+ * @param {*} value The value to check.
1987
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
1988
+ * @example
1989
+ *
1990
+ * _.isObjectLike({});
1991
+ * // => true
1992
+ *
1993
+ * _.isObjectLike([1, 2, 3]);
1994
+ * // => true
1995
+ *
1996
+ * _.isObjectLike(_.noop);
1997
+ * // => false
1998
+ *
1999
+ * _.isObjectLike(null);
2000
+ * // => false
2001
+ */
2002
+ function isObjectLike$1(value) {
2003
+ return !!value && typeof value == 'object';
2004
+ }
2005
+
2006
+ /**
2007
+ * Checks if `value` is classified as a `Symbol` primitive or object.
2008
+ *
2009
+ * @static
2010
+ * @memberOf _
2011
+ * @since 4.0.0
2012
+ * @category Lang
2013
+ * @param {*} value The value to check.
2014
+ * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
2015
+ * @example
2016
+ *
2017
+ * _.isSymbol(Symbol.iterator);
2018
+ * // => true
2019
+ *
2020
+ * _.isSymbol('abc');
2021
+ * // => false
2022
+ */
2023
+ function isSymbol$1(value) {
2024
+ return typeof value == 'symbol' ||
2025
+ (isObjectLike$1(value) && objectToString$1.call(value) == symbolTag$1);
2026
+ }
2027
+
2028
+ /**
2029
+ * Converts `value` to a number.
2030
+ *
2031
+ * @static
2032
+ * @memberOf _
2033
+ * @since 4.0.0
2034
+ * @category Lang
2035
+ * @param {*} value The value to process.
2036
+ * @returns {number} Returns the number.
2037
+ * @example
2038
+ *
2039
+ * _.toNumber(3.2);
2040
+ * // => 3.2
2041
+ *
2042
+ * _.toNumber(Number.MIN_VALUE);
2043
+ * // => 5e-324
2044
+ *
2045
+ * _.toNumber(Infinity);
2046
+ * // => Infinity
2047
+ *
2048
+ * _.toNumber('3.2');
2049
+ * // => 3.2
2050
+ */
2051
+ function toNumber$1(value) {
2052
+ if (typeof value == 'number') {
2053
+ return value;
2054
+ }
2055
+ if (isSymbol$1(value)) {
2056
+ return NAN$1;
2057
+ }
2058
+ if (isObject$2(value)) {
2059
+ var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
2060
+ value = isObject$2(other) ? (other + '') : other;
2061
+ }
2062
+ if (typeof value != 'string') {
2063
+ return value === 0 ? value : +value;
2064
+ }
2065
+ value = value.replace(reTrim$1, '');
2066
+ var isBinary = reIsBinary$1.test(value);
2067
+ return (isBinary || reIsOctal$1.test(value))
2068
+ ? freeParseInt$1(value.slice(2), isBinary ? 2 : 8)
2069
+ : (reIsBadHex$1.test(value) ? NAN$1 : +value);
2070
+ }
2071
+
2072
+ var lodash_debounce = debounce$1;
2073
+
2074
+ /**
2075
+ * lodash (Custom Build) <https://lodash.com/>
2076
+ * Build: `lodash modularize exports="npm" -o ./`
2077
+ * Copyright jQuery Foundation and other contributors <https://jquery.org/>
2078
+ * Released under MIT license <https://lodash.com/license>
2079
+ * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
2080
+ * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
2081
+ */
2082
+
2083
+ /** Used as the `TypeError` message for "Functions" methods. */
2084
+ var FUNC_ERROR_TEXT$2 = 'Expected a function';
2085
+
2086
+ /** Used to stand-in for `undefined` hash values. */
2087
+ var HASH_UNDEFINED = '__lodash_hash_undefined__';
2088
+
2089
+ /** `Object#toString` result references. */
2090
+ var funcTag = '[object Function]',
2091
+ genTag = '[object GeneratorFunction]';
2092
+
2093
+ /**
2094
+ * Used to match `RegExp`
2095
+ * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
2096
+ */
2097
+ var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
2098
+
2099
+ /** Used to detect host constructors (Safari). */
2100
+ var reIsHostCtor = /^\[object .+?Constructor\]$/;
2101
+
2102
+ /** Detect free variable `global` from Node.js. */
2103
+ var freeGlobal$2 = typeof commonjsGlobal == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal;
2104
+
2105
+ /** Detect free variable `self`. */
2106
+ var freeSelf$2 = typeof self == 'object' && self && self.Object === Object && self;
2107
+
2108
+ /** Used as a reference to the global object. */
2109
+ var root$2 = freeGlobal$2 || freeSelf$2 || Function('return this')();
2110
+
2111
+ /**
2112
+ * Gets the value at `key` of `object`.
2113
+ *
2114
+ * @private
2115
+ * @param {Object} [object] The object to query.
2116
+ * @param {string} key The key of the property to get.
2117
+ * @returns {*} Returns the property value.
2118
+ */
2119
+ function getValue(object, key) {
2120
+ return object == null ? undefined : object[key];
2121
+ }
2122
+
2123
+ /**
2124
+ * Checks if `value` is a host object in IE < 9.
2125
+ *
2126
+ * @private
2127
+ * @param {*} value The value to check.
2128
+ * @returns {boolean} Returns `true` if `value` is a host object, else `false`.
2129
+ */
2130
+ function isHostObject(value) {
2131
+ // Many host objects are `Object` objects that can coerce to strings
2132
+ // despite having improperly defined `toString` methods.
2133
+ var result = false;
2134
+ if (value != null && typeof value.toString != 'function') {
2135
+ try {
2136
+ result = !!(value + '');
2137
+ } catch (e) {}
2138
+ }
2139
+ return result;
2140
+ }
2141
+
2142
+ /** Used for built-in method references. */
2143
+ var arrayProto = Array.prototype,
2144
+ funcProto = Function.prototype,
2145
+ objectProto$2 = Object.prototype;
2146
+
2147
+ /** Used to detect overreaching core-js shims. */
2148
+ var coreJsData = root$2['__core-js_shared__'];
2149
+
2150
+ /** Used to detect methods masquerading as native. */
2151
+ var maskSrcKey = (function() {
2152
+ var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
2153
+ return uid ? ('Symbol(src)_1.' + uid) : '';
2154
+ }());
2155
+
2156
+ /** Used to resolve the decompiled source of functions. */
2157
+ var funcToString = funcProto.toString;
2158
+
2159
+ /** Used to check objects for own properties. */
2160
+ var hasOwnProperty$1 = objectProto$2.hasOwnProperty;
2161
+
2162
+ /**
2163
+ * Used to resolve the
2164
+ * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
2165
+ * of values.
2166
+ */
2167
+ var objectToString$2 = objectProto$2.toString;
2168
+
2169
+ /** Used to detect if a method is native. */
2170
+ var reIsNative = RegExp('^' +
2171
+ funcToString.call(hasOwnProperty$1).replace(reRegExpChar, '\\$&')
2172
+ .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
2173
+ );
2174
+
2175
+ /** Built-in value references. */
2176
+ var splice = arrayProto.splice;
2177
+
2178
+ /* Built-in method references that are verified to be native. */
2179
+ var Map$1 = getNative(root$2, 'Map'),
2180
+ nativeCreate = getNative(Object, 'create');
2181
+
2182
+ /**
2183
+ * Creates a hash object.
2184
+ *
2185
+ * @private
2186
+ * @constructor
2187
+ * @param {Array} [entries] The key-value pairs to cache.
2188
+ */
2189
+ function Hash(entries) {
2190
+ var index = -1,
2191
+ length = entries ? entries.length : 0;
2192
+
2193
+ this.clear();
2194
+ while (++index < length) {
2195
+ var entry = entries[index];
2196
+ this.set(entry[0], entry[1]);
2197
+ }
2198
+ }
2199
+
2200
+ /**
2201
+ * Removes all key-value entries from the hash.
2202
+ *
2203
+ * @private
2204
+ * @name clear
2205
+ * @memberOf Hash
2206
+ */
2207
+ function hashClear() {
2208
+ this.__data__ = nativeCreate ? nativeCreate(null) : {};
2209
+ }
2210
+
2211
+ /**
2212
+ * Removes `key` and its value from the hash.
2213
+ *
2214
+ * @private
2215
+ * @name delete
2216
+ * @memberOf Hash
2217
+ * @param {Object} hash The hash to modify.
2218
+ * @param {string} key The key of the value to remove.
2219
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
2220
+ */
2221
+ function hashDelete(key) {
2222
+ return this.has(key) && delete this.__data__[key];
2223
+ }
2224
+
2225
+ /**
2226
+ * Gets the hash value for `key`.
2227
+ *
2228
+ * @private
2229
+ * @name get
2230
+ * @memberOf Hash
2231
+ * @param {string} key The key of the value to get.
2232
+ * @returns {*} Returns the entry value.
2233
+ */
2234
+ function hashGet(key) {
2235
+ var data = this.__data__;
2236
+ if (nativeCreate) {
2237
+ var result = data[key];
2238
+ return result === HASH_UNDEFINED ? undefined : result;
2239
+ }
2240
+ return hasOwnProperty$1.call(data, key) ? data[key] : undefined;
2241
+ }
2242
+
2243
+ /**
2244
+ * Checks if a hash value for `key` exists.
2245
+ *
2246
+ * @private
2247
+ * @name has
2248
+ * @memberOf Hash
2249
+ * @param {string} key The key of the entry to check.
2250
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
2251
+ */
2252
+ function hashHas(key) {
2253
+ var data = this.__data__;
2254
+ return nativeCreate ? data[key] !== undefined : hasOwnProperty$1.call(data, key);
2255
+ }
2256
+
2257
+ /**
2258
+ * Sets the hash `key` to `value`.
2259
+ *
2260
+ * @private
2261
+ * @name set
2262
+ * @memberOf Hash
2263
+ * @param {string} key The key of the value to set.
2264
+ * @param {*} value The value to set.
2265
+ * @returns {Object} Returns the hash instance.
2266
+ */
2267
+ function hashSet(key, value) {
2268
+ var data = this.__data__;
2269
+ data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
2270
+ return this;
2271
+ }
2272
+
2273
+ // Add methods to `Hash`.
2274
+ Hash.prototype.clear = hashClear;
2275
+ Hash.prototype['delete'] = hashDelete;
2276
+ Hash.prototype.get = hashGet;
2277
+ Hash.prototype.has = hashHas;
2278
+ Hash.prototype.set = hashSet;
2279
+
2280
+ /**
2281
+ * Creates an list cache object.
2282
+ *
2283
+ * @private
2284
+ * @constructor
2285
+ * @param {Array} [entries] The key-value pairs to cache.
2286
+ */
2287
+ function ListCache(entries) {
2288
+ var index = -1,
2289
+ length = entries ? entries.length : 0;
2290
+
2291
+ this.clear();
2292
+ while (++index < length) {
2293
+ var entry = entries[index];
2294
+ this.set(entry[0], entry[1]);
2295
+ }
2296
+ }
2297
+
2298
+ /**
2299
+ * Removes all key-value entries from the list cache.
2300
+ *
2301
+ * @private
2302
+ * @name clear
2303
+ * @memberOf ListCache
2304
+ */
2305
+ function listCacheClear() {
2306
+ this.__data__ = [];
2307
+ }
2308
+
2309
+ /**
2310
+ * Removes `key` and its value from the list cache.
2311
+ *
2312
+ * @private
2313
+ * @name delete
2314
+ * @memberOf ListCache
2315
+ * @param {string} key The key of the value to remove.
2316
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
2317
+ */
2318
+ function listCacheDelete(key) {
2319
+ var data = this.__data__,
2320
+ index = assocIndexOf(data, key);
2321
+
2322
+ if (index < 0) {
2323
+ return false;
2324
+ }
2325
+ var lastIndex = data.length - 1;
2326
+ if (index == lastIndex) {
2327
+ data.pop();
2328
+ } else {
2329
+ splice.call(data, index, 1);
2330
+ }
2331
+ return true;
2332
+ }
2333
+
2334
+ /**
2335
+ * Gets the list cache value for `key`.
2336
+ *
2337
+ * @private
2338
+ * @name get
2339
+ * @memberOf ListCache
2340
+ * @param {string} key The key of the value to get.
2341
+ * @returns {*} Returns the entry value.
2342
+ */
2343
+ function listCacheGet(key) {
2344
+ var data = this.__data__,
2345
+ index = assocIndexOf(data, key);
2346
+
2347
+ return index < 0 ? undefined : data[index][1];
2348
+ }
2349
+
2350
+ /**
2351
+ * Checks if a list cache value for `key` exists.
2352
+ *
2353
+ * @private
2354
+ * @name has
2355
+ * @memberOf ListCache
2356
+ * @param {string} key The key of the entry to check.
2357
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
2358
+ */
2359
+ function listCacheHas(key) {
2360
+ return assocIndexOf(this.__data__, key) > -1;
2361
+ }
2362
+
2363
+ /**
2364
+ * Sets the list cache `key` to `value`.
2365
+ *
2366
+ * @private
2367
+ * @name set
2368
+ * @memberOf ListCache
2369
+ * @param {string} key The key of the value to set.
2370
+ * @param {*} value The value to set.
2371
+ * @returns {Object} Returns the list cache instance.
2372
+ */
2373
+ function listCacheSet(key, value) {
2374
+ var data = this.__data__,
2375
+ index = assocIndexOf(data, key);
2376
+
2377
+ if (index < 0) {
2378
+ data.push([key, value]);
2379
+ } else {
2380
+ data[index][1] = value;
2381
+ }
2382
+ return this;
2383
+ }
2384
+
2385
+ // Add methods to `ListCache`.
2386
+ ListCache.prototype.clear = listCacheClear;
2387
+ ListCache.prototype['delete'] = listCacheDelete;
2388
+ ListCache.prototype.get = listCacheGet;
2389
+ ListCache.prototype.has = listCacheHas;
2390
+ ListCache.prototype.set = listCacheSet;
2391
+
2392
+ /**
2393
+ * Creates a map cache object to store key-value pairs.
2394
+ *
2395
+ * @private
2396
+ * @constructor
2397
+ * @param {Array} [entries] The key-value pairs to cache.
2398
+ */
2399
+ function MapCache(entries) {
2400
+ var index = -1,
2401
+ length = entries ? entries.length : 0;
2402
+
2403
+ this.clear();
2404
+ while (++index < length) {
2405
+ var entry = entries[index];
2406
+ this.set(entry[0], entry[1]);
2407
+ }
2408
+ }
2409
+
2410
+ /**
2411
+ * Removes all key-value entries from the map.
2412
+ *
2413
+ * @private
2414
+ * @name clear
2415
+ * @memberOf MapCache
2416
+ */
2417
+ function mapCacheClear() {
2418
+ this.__data__ = {
2419
+ 'hash': new Hash,
2420
+ 'map': new (Map$1 || ListCache),
2421
+ 'string': new Hash
2422
+ };
2423
+ }
2424
+
2425
+ /**
2426
+ * Removes `key` and its value from the map.
2427
+ *
2428
+ * @private
2429
+ * @name delete
2430
+ * @memberOf MapCache
2431
+ * @param {string} key The key of the value to remove.
2432
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
2433
+ */
2434
+ function mapCacheDelete(key) {
2435
+ return getMapData(this, key)['delete'](key);
2436
+ }
2437
+
2438
+ /**
2439
+ * Gets the map value for `key`.
2440
+ *
2441
+ * @private
2442
+ * @name get
2443
+ * @memberOf MapCache
2444
+ * @param {string} key The key of the value to get.
2445
+ * @returns {*} Returns the entry value.
2446
+ */
2447
+ function mapCacheGet(key) {
2448
+ return getMapData(this, key).get(key);
2449
+ }
2450
+
2451
+ /**
2452
+ * Checks if a map value for `key` exists.
2453
+ *
2454
+ * @private
2455
+ * @name has
2456
+ * @memberOf MapCache
2457
+ * @param {string} key The key of the entry to check.
2458
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
2459
+ */
2460
+ function mapCacheHas(key) {
2461
+ return getMapData(this, key).has(key);
2462
+ }
2463
+
2464
+ /**
2465
+ * Sets the map `key` to `value`.
2466
+ *
2467
+ * @private
2468
+ * @name set
2469
+ * @memberOf MapCache
2470
+ * @param {string} key The key of the value to set.
2471
+ * @param {*} value The value to set.
2472
+ * @returns {Object} Returns the map cache instance.
2473
+ */
2474
+ function mapCacheSet(key, value) {
2475
+ getMapData(this, key).set(key, value);
2476
+ return this;
2477
+ }
2478
+
2479
+ // Add methods to `MapCache`.
2480
+ MapCache.prototype.clear = mapCacheClear;
2481
+ MapCache.prototype['delete'] = mapCacheDelete;
2482
+ MapCache.prototype.get = mapCacheGet;
2483
+ MapCache.prototype.has = mapCacheHas;
2484
+ MapCache.prototype.set = mapCacheSet;
2485
+
2486
+ /**
2487
+ * Gets the index at which the `key` is found in `array` of key-value pairs.
2488
+ *
2489
+ * @private
2490
+ * @param {Array} array The array to inspect.
2491
+ * @param {*} key The key to search for.
2492
+ * @returns {number} Returns the index of the matched value, else `-1`.
2493
+ */
2494
+ function assocIndexOf(array, key) {
2495
+ var length = array.length;
2496
+ while (length--) {
2497
+ if (eq(array[length][0], key)) {
2498
+ return length;
2499
+ }
2500
+ }
2501
+ return -1;
2502
+ }
2503
+
2504
+ /**
2505
+ * The base implementation of `_.isNative` without bad shim checks.
2506
+ *
2507
+ * @private
2508
+ * @param {*} value The value to check.
2509
+ * @returns {boolean} Returns `true` if `value` is a native function,
2510
+ * else `false`.
2511
+ */
2512
+ function baseIsNative(value) {
2513
+ if (!isObject$3(value) || isMasked(value)) {
2514
+ return false;
2515
+ }
2516
+ var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;
2517
+ return pattern.test(toSource(value));
2518
+ }
2519
+
2520
+ /**
2521
+ * Gets the data for `map`.
2522
+ *
2523
+ * @private
2524
+ * @param {Object} map The map to query.
2525
+ * @param {string} key The reference key.
2526
+ * @returns {*} Returns the map data.
2527
+ */
2528
+ function getMapData(map, key) {
2529
+ var data = map.__data__;
2530
+ return isKeyable(key)
2531
+ ? data[typeof key == 'string' ? 'string' : 'hash']
2532
+ : data.map;
2533
+ }
2534
+
2535
+ /**
2536
+ * Gets the native function at `key` of `object`.
2537
+ *
2538
+ * @private
2539
+ * @param {Object} object The object to query.
2540
+ * @param {string} key The key of the method to get.
2541
+ * @returns {*} Returns the function if it's native, else `undefined`.
2542
+ */
2543
+ function getNative(object, key) {
2544
+ var value = getValue(object, key);
2545
+ return baseIsNative(value) ? value : undefined;
2546
+ }
2547
+
2548
+ /**
2549
+ * Checks if `value` is suitable for use as unique object key.
2550
+ *
2551
+ * @private
2552
+ * @param {*} value The value to check.
2553
+ * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
2554
+ */
2555
+ function isKeyable(value) {
2556
+ var type = typeof value;
2557
+ return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
2558
+ ? (value !== '__proto__')
2559
+ : (value === null);
2560
+ }
2561
+
2562
+ /**
2563
+ * Checks if `func` has its source masked.
2564
+ *
2565
+ * @private
2566
+ * @param {Function} func The function to check.
2567
+ * @returns {boolean} Returns `true` if `func` is masked, else `false`.
2568
+ */
2569
+ function isMasked(func) {
2570
+ return !!maskSrcKey && (maskSrcKey in func);
2571
+ }
2572
+
2573
+ /**
2574
+ * Converts `func` to its source code.
2575
+ *
2576
+ * @private
2577
+ * @param {Function} func The function to process.
2578
+ * @returns {string} Returns the source code.
2579
+ */
2580
+ function toSource(func) {
2581
+ if (func != null) {
2582
+ try {
2583
+ return funcToString.call(func);
2584
+ } catch (e) {}
2585
+ try {
2586
+ return (func + '');
2587
+ } catch (e) {}
2588
+ }
2589
+ return '';
2590
+ }
2591
+
2592
+ /**
2593
+ * Creates a function that memoizes the result of `func`. If `resolver` is
2594
+ * provided, it determines the cache key for storing the result based on the
2595
+ * arguments provided to the memoized function. By default, the first argument
2596
+ * provided to the memoized function is used as the map cache key. The `func`
2597
+ * is invoked with the `this` binding of the memoized function.
2598
+ *
2599
+ * **Note:** The cache is exposed as the `cache` property on the memoized
2600
+ * function. Its creation may be customized by replacing the `_.memoize.Cache`
2601
+ * constructor with one whose instances implement the
2602
+ * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)
2603
+ * method interface of `delete`, `get`, `has`, and `set`.
2604
+ *
2605
+ * @static
2606
+ * @memberOf _
2607
+ * @since 0.1.0
2608
+ * @category Function
2609
+ * @param {Function} func The function to have its output memoized.
2610
+ * @param {Function} [resolver] The function to resolve the cache key.
2611
+ * @returns {Function} Returns the new memoized function.
2612
+ * @example
2613
+ *
2614
+ * var object = { 'a': 1, 'b': 2 };
2615
+ * var other = { 'c': 3, 'd': 4 };
2616
+ *
2617
+ * var values = _.memoize(_.values);
2618
+ * values(object);
2619
+ * // => [1, 2]
2620
+ *
2621
+ * values(other);
2622
+ * // => [3, 4]
2623
+ *
2624
+ * object.a = 2;
2625
+ * values(object);
2626
+ * // => [1, 2]
2627
+ *
2628
+ * // Modify the result cache.
2629
+ * values.cache.set(object, ['a', 'b']);
2630
+ * values(object);
2631
+ * // => ['a', 'b']
2632
+ *
2633
+ * // Replace `_.memoize.Cache`.
2634
+ * _.memoize.Cache = WeakMap;
2635
+ */
2636
+ function memoize(func, resolver) {
2637
+ if (typeof func != 'function' || (resolver && typeof resolver != 'function')) {
2638
+ throw new TypeError(FUNC_ERROR_TEXT$2);
2639
+ }
2640
+ var memoized = function() {
2641
+ var args = arguments,
2642
+ key = resolver ? resolver.apply(this, args) : args[0],
2643
+ cache = memoized.cache;
2644
+
2645
+ if (cache.has(key)) {
2646
+ return cache.get(key);
2647
+ }
2648
+ var result = func.apply(this, args);
2649
+ memoized.cache = cache.set(key, result);
2650
+ return result;
2651
+ };
2652
+ memoized.cache = new (memoize.Cache || MapCache);
2653
+ return memoized;
2654
+ }
2655
+
2656
+ // Assign cache to `_.memoize`.
2657
+ memoize.Cache = MapCache;
2658
+
2659
+ /**
2660
+ * Performs a
2661
+ * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
2662
+ * comparison between two values to determine if they are equivalent.
2663
+ *
2664
+ * @static
2665
+ * @memberOf _
2666
+ * @since 4.0.0
2667
+ * @category Lang
2668
+ * @param {*} value The value to compare.
2669
+ * @param {*} other The other value to compare.
2670
+ * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
2671
+ * @example
2672
+ *
2673
+ * var object = { 'a': 1 };
2674
+ * var other = { 'a': 1 };
2675
+ *
2676
+ * _.eq(object, object);
2677
+ * // => true
2678
+ *
2679
+ * _.eq(object, other);
2680
+ * // => false
2681
+ *
2682
+ * _.eq('a', 'a');
2683
+ * // => true
2684
+ *
2685
+ * _.eq('a', Object('a'));
2686
+ * // => false
2687
+ *
2688
+ * _.eq(NaN, NaN);
2689
+ * // => true
2690
+ */
2691
+ function eq(value, other) {
2692
+ return value === other || (value !== value && other !== other);
2693
+ }
2694
+
2695
+ /**
2696
+ * Checks if `value` is classified as a `Function` object.
2697
+ *
2698
+ * @static
2699
+ * @memberOf _
2700
+ * @since 0.1.0
2701
+ * @category Lang
2702
+ * @param {*} value The value to check.
2703
+ * @returns {boolean} Returns `true` if `value` is a function, else `false`.
2704
+ * @example
2705
+ *
2706
+ * _.isFunction(_);
2707
+ * // => true
2708
+ *
2709
+ * _.isFunction(/abc/);
2710
+ * // => false
2711
+ */
2712
+ function isFunction(value) {
2713
+ // The use of `Object#toString` avoids issues with the `typeof` operator
2714
+ // in Safari 8-9 which returns 'object' for typed array and other constructors.
2715
+ var tag = isObject$3(value) ? objectToString$2.call(value) : '';
2716
+ return tag == funcTag || tag == genTag;
2717
+ }
2718
+
2719
+ /**
2720
+ * Checks if `value` is the
2721
+ * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
2722
+ * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
2723
+ *
2724
+ * @static
2725
+ * @memberOf _
2726
+ * @since 0.1.0
2727
+ * @category Lang
2728
+ * @param {*} value The value to check.
2729
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
2730
+ * @example
2731
+ *
2732
+ * _.isObject({});
2733
+ * // => true
2734
+ *
2735
+ * _.isObject([1, 2, 3]);
2736
+ * // => true
2737
+ *
2738
+ * _.isObject(_.noop);
2739
+ * // => true
2740
+ *
2741
+ * _.isObject(null);
2742
+ * // => false
2743
+ */
2744
+ function isObject$3(value) {
2745
+ var type = typeof value;
2746
+ return !!value && (type == 'object' || type == 'function');
2747
+ }
2748
+
2749
+ var lodash_memoize = memoize;
2750
+
2751
+ /**
2752
+ * A collection of shims that provide minimal functionality of the ES6 collections.
2753
+ *
2754
+ * These implementations are not meant to be used outside of the ResizeObserver
2755
+ * modules as they cover only a limited range of use cases.
2756
+ */
2757
+ /* eslint-disable require-jsdoc, valid-jsdoc */
2758
+ var MapShim = (function () {
2759
+ if (typeof Map !== 'undefined') {
2760
+ return Map;
2761
+ }
2762
+ /**
2763
+ * Returns index in provided array that matches the specified key.
2764
+ *
2765
+ * @param {Array<Array>} arr
2766
+ * @param {*} key
2767
+ * @returns {number}
2768
+ */
2769
+ function getIndex(arr, key) {
2770
+ var result = -1;
2771
+ arr.some(function (entry, index) {
2772
+ if (entry[0] === key) {
2773
+ result = index;
2774
+ return true;
2775
+ }
2776
+ return false;
2777
+ });
2778
+ return result;
2779
+ }
2780
+ return /** @class */ (function () {
2781
+ function class_1() {
2782
+ this.__entries__ = [];
2783
+ }
2784
+ Object.defineProperty(class_1.prototype, "size", {
2785
+ /**
2786
+ * @returns {boolean}
2787
+ */
2788
+ get: function () {
2789
+ return this.__entries__.length;
2790
+ },
2791
+ enumerable: true,
2792
+ configurable: true
2793
+ });
2794
+ /**
2795
+ * @param {*} key
2796
+ * @returns {*}
2797
+ */
2798
+ class_1.prototype.get = function (key) {
2799
+ var index = getIndex(this.__entries__, key);
2800
+ var entry = this.__entries__[index];
2801
+ return entry && entry[1];
2802
+ };
2803
+ /**
2804
+ * @param {*} key
2805
+ * @param {*} value
2806
+ * @returns {void}
2807
+ */
2808
+ class_1.prototype.set = function (key, value) {
2809
+ var index = getIndex(this.__entries__, key);
2810
+ if (~index) {
2811
+ this.__entries__[index][1] = value;
2812
+ }
2813
+ else {
2814
+ this.__entries__.push([key, value]);
2815
+ }
2816
+ };
2817
+ /**
2818
+ * @param {*} key
2819
+ * @returns {void}
2820
+ */
2821
+ class_1.prototype.delete = function (key) {
2822
+ var entries = this.__entries__;
2823
+ var index = getIndex(entries, key);
2824
+ if (~index) {
2825
+ entries.splice(index, 1);
2826
+ }
2827
+ };
2828
+ /**
2829
+ * @param {*} key
2830
+ * @returns {void}
2831
+ */
2832
+ class_1.prototype.has = function (key) {
2833
+ return !!~getIndex(this.__entries__, key);
2834
+ };
2835
+ /**
2836
+ * @returns {void}
2837
+ */
2838
+ class_1.prototype.clear = function () {
2839
+ this.__entries__.splice(0);
2840
+ };
2841
+ /**
2842
+ * @param {Function} callback
2843
+ * @param {*} [ctx=null]
2844
+ * @returns {void}
2845
+ */
2846
+ class_1.prototype.forEach = function (callback, ctx) {
2847
+ if (ctx === void 0) { ctx = null; }
2848
+ for (var _i = 0, _a = this.__entries__; _i < _a.length; _i++) {
2849
+ var entry = _a[_i];
2850
+ callback.call(ctx, entry[1], entry[0]);
2851
+ }
2852
+ };
2853
+ return class_1;
2854
+ }());
2855
+ })();
2856
+
2857
+ /**
2858
+ * Detects whether window and document objects are available in current environment.
2859
+ */
2860
+ var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && window.document === document;
2861
+
2862
+ // Returns global object of a current environment.
2863
+ var global$1$1 = (function () {
2864
+ if (typeof global !== 'undefined' && global.Math === Math) {
2865
+ return global;
2866
+ }
2867
+ if (typeof self !== 'undefined' && self.Math === Math) {
2868
+ return self;
2869
+ }
2870
+ if (typeof window !== 'undefined' && window.Math === Math) {
2871
+ return window;
2872
+ }
2873
+ // eslint-disable-next-line no-new-func
2874
+ return Function('return this')();
2875
+ })();
2876
+
2877
+ /**
2878
+ * A shim for the requestAnimationFrame which falls back to the setTimeout if
2879
+ * first one is not supported.
2880
+ *
2881
+ * @returns {number} Requests' identifier.
2882
+ */
2883
+ var requestAnimationFrame$1 = (function () {
2884
+ if (typeof requestAnimationFrame === 'function') {
2885
+ // It's required to use a bounded function because IE sometimes throws
2886
+ // an "Invalid calling object" error if rAF is invoked without the global
2887
+ // object on the left hand side.
2888
+ return requestAnimationFrame.bind(global$1$1);
2889
+ }
2890
+ return function (callback) { return setTimeout(function () { return callback(Date.now()); }, 1000 / 60); };
2891
+ })();
2892
+
2893
+ // Defines minimum timeout before adding a trailing call.
2894
+ var trailingTimeout = 2;
2895
+ /**
2896
+ * Creates a wrapper function which ensures that provided callback will be
2897
+ * invoked only once during the specified delay period.
2898
+ *
2899
+ * @param {Function} callback - Function to be invoked after the delay period.
2900
+ * @param {number} delay - Delay after which to invoke callback.
2901
+ * @returns {Function}
2902
+ */
2903
+ function throttle$1 (callback, delay) {
2904
+ var leadingCall = false, trailingCall = false, lastCallTime = 0;
2905
+ /**
2906
+ * Invokes the original callback function and schedules new invocation if
2907
+ * the "proxy" was called during current request.
2908
+ *
2909
+ * @returns {void}
2910
+ */
2911
+ function resolvePending() {
2912
+ if (leadingCall) {
2913
+ leadingCall = false;
2914
+ callback();
2915
+ }
2916
+ if (trailingCall) {
2917
+ proxy();
2918
+ }
2919
+ }
2920
+ /**
2921
+ * Callback invoked after the specified delay. It will further postpone
2922
+ * invocation of the original function delegating it to the
2923
+ * requestAnimationFrame.
2924
+ *
2925
+ * @returns {void}
2926
+ */
2927
+ function timeoutCallback() {
2928
+ requestAnimationFrame$1(resolvePending);
2929
+ }
2930
+ /**
2931
+ * Schedules invocation of the original function.
2932
+ *
2933
+ * @returns {void}
2934
+ */
2935
+ function proxy() {
2936
+ var timeStamp = Date.now();
2937
+ if (leadingCall) {
2938
+ // Reject immediately following calls.
2939
+ if (timeStamp - lastCallTime < trailingTimeout) {
2940
+ return;
2941
+ }
2942
+ // Schedule new call to be in invoked when the pending one is resolved.
2943
+ // This is important for "transitions" which never actually start
2944
+ // immediately so there is a chance that we might miss one if change
2945
+ // happens amids the pending invocation.
2946
+ trailingCall = true;
2947
+ }
2948
+ else {
2949
+ leadingCall = true;
2950
+ trailingCall = false;
2951
+ setTimeout(timeoutCallback, delay);
2952
+ }
2953
+ lastCallTime = timeStamp;
2954
+ }
2955
+ return proxy;
2956
+ }
2957
+
2958
+ // Minimum delay before invoking the update of observers.
2959
+ var REFRESH_DELAY = 20;
2960
+ // A list of substrings of CSS properties used to find transition events that
2961
+ // might affect dimensions of observed elements.
2962
+ var transitionKeys = ['top', 'right', 'bottom', 'left', 'width', 'height', 'size', 'weight'];
2963
+ // Check if MutationObserver is available.
2964
+ var mutationObserverSupported = typeof MutationObserver !== 'undefined';
2965
+ /**
2966
+ * Singleton controller class which handles updates of ResizeObserver instances.
2967
+ */
2968
+ var ResizeObserverController = /** @class */ (function () {
2969
+ /**
2970
+ * Creates a new instance of ResizeObserverController.
2971
+ *
2972
+ * @private
2973
+ */
2974
+ function ResizeObserverController() {
2975
+ /**
2976
+ * Indicates whether DOM listeners have been added.
2977
+ *
2978
+ * @private {boolean}
2979
+ */
2980
+ this.connected_ = false;
2981
+ /**
2982
+ * Tells that controller has subscribed for Mutation Events.
2983
+ *
2984
+ * @private {boolean}
2985
+ */
2986
+ this.mutationEventsAdded_ = false;
2987
+ /**
2988
+ * Keeps reference to the instance of MutationObserver.
2989
+ *
2990
+ * @private {MutationObserver}
2991
+ */
2992
+ this.mutationsObserver_ = null;
2993
+ /**
2994
+ * A list of connected observers.
2995
+ *
2996
+ * @private {Array<ResizeObserverSPI>}
2997
+ */
2998
+ this.observers_ = [];
2999
+ this.onTransitionEnd_ = this.onTransitionEnd_.bind(this);
3000
+ this.refresh = throttle$1(this.refresh.bind(this), REFRESH_DELAY);
3001
+ }
3002
+ /**
3003
+ * Adds observer to observers list.
3004
+ *
3005
+ * @param {ResizeObserverSPI} observer - Observer to be added.
3006
+ * @returns {void}
3007
+ */
3008
+ ResizeObserverController.prototype.addObserver = function (observer) {
3009
+ if (!~this.observers_.indexOf(observer)) {
3010
+ this.observers_.push(observer);
3011
+ }
3012
+ // Add listeners if they haven't been added yet.
3013
+ if (!this.connected_) {
3014
+ this.connect_();
3015
+ }
3016
+ };
3017
+ /**
3018
+ * Removes observer from observers list.
3019
+ *
3020
+ * @param {ResizeObserverSPI} observer - Observer to be removed.
3021
+ * @returns {void}
3022
+ */
3023
+ ResizeObserverController.prototype.removeObserver = function (observer) {
3024
+ var observers = this.observers_;
3025
+ var index = observers.indexOf(observer);
3026
+ // Remove observer if it's present in registry.
3027
+ if (~index) {
3028
+ observers.splice(index, 1);
3029
+ }
3030
+ // Remove listeners if controller has no connected observers.
3031
+ if (!observers.length && this.connected_) {
3032
+ this.disconnect_();
3033
+ }
3034
+ };
3035
+ /**
3036
+ * Invokes the update of observers. It will continue running updates insofar
3037
+ * it detects changes.
3038
+ *
3039
+ * @returns {void}
3040
+ */
3041
+ ResizeObserverController.prototype.refresh = function () {
3042
+ var changesDetected = this.updateObservers_();
3043
+ // Continue running updates if changes have been detected as there might
3044
+ // be future ones caused by CSS transitions.
3045
+ if (changesDetected) {
3046
+ this.refresh();
3047
+ }
3048
+ };
3049
+ /**
3050
+ * Updates every observer from observers list and notifies them of queued
3051
+ * entries.
3052
+ *
3053
+ * @private
3054
+ * @returns {boolean} Returns "true" if any observer has detected changes in
3055
+ * dimensions of it's elements.
3056
+ */
3057
+ ResizeObserverController.prototype.updateObservers_ = function () {
3058
+ // Collect observers that have active observations.
3059
+ var activeObservers = this.observers_.filter(function (observer) {
3060
+ return observer.gatherActive(), observer.hasActive();
3061
+ });
3062
+ // Deliver notifications in a separate cycle in order to avoid any
3063
+ // collisions between observers, e.g. when multiple instances of
3064
+ // ResizeObserver are tracking the same element and the callback of one
3065
+ // of them changes content dimensions of the observed target. Sometimes
3066
+ // this may result in notifications being blocked for the rest of observers.
3067
+ activeObservers.forEach(function (observer) { return observer.broadcastActive(); });
3068
+ return activeObservers.length > 0;
3069
+ };
3070
+ /**
3071
+ * Initializes DOM listeners.
3072
+ *
3073
+ * @private
3074
+ * @returns {void}
3075
+ */
3076
+ ResizeObserverController.prototype.connect_ = function () {
3077
+ // Do nothing if running in a non-browser environment or if listeners
3078
+ // have been already added.
3079
+ if (!isBrowser || this.connected_) {
3080
+ return;
3081
+ }
3082
+ // Subscription to the "Transitionend" event is used as a workaround for
3083
+ // delayed transitions. This way it's possible to capture at least the
3084
+ // final state of an element.
3085
+ document.addEventListener('transitionend', this.onTransitionEnd_);
3086
+ window.addEventListener('resize', this.refresh);
3087
+ if (mutationObserverSupported) {
3088
+ this.mutationsObserver_ = new MutationObserver(this.refresh);
3089
+ this.mutationsObserver_.observe(document, {
3090
+ attributes: true,
3091
+ childList: true,
3092
+ characterData: true,
3093
+ subtree: true
3094
+ });
3095
+ }
3096
+ else {
3097
+ document.addEventListener('DOMSubtreeModified', this.refresh);
3098
+ this.mutationEventsAdded_ = true;
3099
+ }
3100
+ this.connected_ = true;
3101
+ };
3102
+ /**
3103
+ * Removes DOM listeners.
3104
+ *
3105
+ * @private
3106
+ * @returns {void}
3107
+ */
3108
+ ResizeObserverController.prototype.disconnect_ = function () {
3109
+ // Do nothing if running in a non-browser environment or if listeners
3110
+ // have been already removed.
3111
+ if (!isBrowser || !this.connected_) {
3112
+ return;
3113
+ }
3114
+ document.removeEventListener('transitionend', this.onTransitionEnd_);
3115
+ window.removeEventListener('resize', this.refresh);
3116
+ if (this.mutationsObserver_) {
3117
+ this.mutationsObserver_.disconnect();
3118
+ }
3119
+ if (this.mutationEventsAdded_) {
3120
+ document.removeEventListener('DOMSubtreeModified', this.refresh);
3121
+ }
3122
+ this.mutationsObserver_ = null;
3123
+ this.mutationEventsAdded_ = false;
3124
+ this.connected_ = false;
3125
+ };
3126
+ /**
3127
+ * "Transitionend" event handler.
3128
+ *
3129
+ * @private
3130
+ * @param {TransitionEvent} event
3131
+ * @returns {void}
3132
+ */
3133
+ ResizeObserverController.prototype.onTransitionEnd_ = function (_a) {
3134
+ var _b = _a.propertyName, propertyName = _b === void 0 ? '' : _b;
3135
+ // Detect whether transition may affect dimensions of an element.
3136
+ var isReflowProperty = transitionKeys.some(function (key) {
3137
+ return !!~propertyName.indexOf(key);
3138
+ });
3139
+ if (isReflowProperty) {
3140
+ this.refresh();
3141
+ }
3142
+ };
3143
+ /**
3144
+ * Returns instance of the ResizeObserverController.
3145
+ *
3146
+ * @returns {ResizeObserverController}
3147
+ */
3148
+ ResizeObserverController.getInstance = function () {
3149
+ if (!this.instance_) {
3150
+ this.instance_ = new ResizeObserverController();
3151
+ }
3152
+ return this.instance_;
3153
+ };
3154
+ /**
3155
+ * Holds reference to the controller's instance.
3156
+ *
3157
+ * @private {ResizeObserverController}
3158
+ */
3159
+ ResizeObserverController.instance_ = null;
3160
+ return ResizeObserverController;
3161
+ }());
3162
+
3163
+ /**
3164
+ * Defines non-writable/enumerable properties of the provided target object.
3165
+ *
3166
+ * @param {Object} target - Object for which to define properties.
3167
+ * @param {Object} props - Properties to be defined.
3168
+ * @returns {Object} Target object.
3169
+ */
3170
+ var defineConfigurable = (function (target, props) {
3171
+ for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) {
3172
+ var key = _a[_i];
3173
+ Object.defineProperty(target, key, {
3174
+ value: props[key],
3175
+ enumerable: false,
3176
+ writable: false,
3177
+ configurable: true
3178
+ });
3179
+ }
3180
+ return target;
3181
+ });
3182
+
3183
+ /**
3184
+ * Returns the global object associated with provided element.
3185
+ *
3186
+ * @param {Object} target
3187
+ * @returns {Object}
3188
+ */
3189
+ var getWindowOf = (function (target) {
3190
+ // Assume that the element is an instance of Node, which means that it
3191
+ // has the "ownerDocument" property from which we can retrieve a
3192
+ // corresponding global object.
3193
+ var ownerGlobal = target && target.ownerDocument && target.ownerDocument.defaultView;
3194
+ // Return the local global object if it's not possible extract one from
3195
+ // provided element.
3196
+ return ownerGlobal || global$1$1;
3197
+ });
3198
+
3199
+ // Placeholder of an empty content rectangle.
3200
+ var emptyRect = createRectInit(0, 0, 0, 0);
3201
+ /**
3202
+ * Converts provided string to a number.
3203
+ *
3204
+ * @param {number|string} value
3205
+ * @returns {number}
3206
+ */
3207
+ function toFloat(value) {
3208
+ return parseFloat(value) || 0;
3209
+ }
3210
+ /**
3211
+ * Extracts borders size from provided styles.
3212
+ *
3213
+ * @param {CSSStyleDeclaration} styles
3214
+ * @param {...string} positions - Borders positions (top, right, ...)
3215
+ * @returns {number}
3216
+ */
3217
+ function getBordersSize(styles) {
3218
+ var positions = [];
3219
+ for (var _i = 1; _i < arguments.length; _i++) {
3220
+ positions[_i - 1] = arguments[_i];
3221
+ }
3222
+ return positions.reduce(function (size, position) {
3223
+ var value = styles['border-' + position + '-width'];
3224
+ return size + toFloat(value);
3225
+ }, 0);
3226
+ }
3227
+ /**
3228
+ * Extracts paddings sizes from provided styles.
3229
+ *
3230
+ * @param {CSSStyleDeclaration} styles
3231
+ * @returns {Object} Paddings box.
3232
+ */
3233
+ function getPaddings(styles) {
3234
+ var positions = ['top', 'right', 'bottom', 'left'];
3235
+ var paddings = {};
3236
+ for (var _i = 0, positions_1 = positions; _i < positions_1.length; _i++) {
3237
+ var position = positions_1[_i];
3238
+ var value = styles['padding-' + position];
3239
+ paddings[position] = toFloat(value);
3240
+ }
3241
+ return paddings;
3242
+ }
3243
+ /**
3244
+ * Calculates content rectangle of provided SVG element.
3245
+ *
3246
+ * @param {SVGGraphicsElement} target - Element content rectangle of which needs
3247
+ * to be calculated.
3248
+ * @returns {DOMRectInit}
3249
+ */
3250
+ function getSVGContentRect(target) {
3251
+ var bbox = target.getBBox();
3252
+ return createRectInit(0, 0, bbox.width, bbox.height);
3253
+ }
3254
+ /**
3255
+ * Calculates content rectangle of provided HTMLElement.
3256
+ *
3257
+ * @param {HTMLElement} target - Element for which to calculate the content rectangle.
3258
+ * @returns {DOMRectInit}
3259
+ */
3260
+ function getHTMLElementContentRect(target) {
3261
+ // Client width & height properties can't be
3262
+ // used exclusively as they provide rounded values.
3263
+ var clientWidth = target.clientWidth, clientHeight = target.clientHeight;
3264
+ // By this condition we can catch all non-replaced inline, hidden and
3265
+ // detached elements. Though elements with width & height properties less
3266
+ // than 0.5 will be discarded as well.
3267
+ //
3268
+ // Without it we would need to implement separate methods for each of
3269
+ // those cases and it's not possible to perform a precise and performance
3270
+ // effective test for hidden elements. E.g. even jQuery's ':visible' filter
3271
+ // gives wrong results for elements with width & height less than 0.5.
3272
+ if (!clientWidth && !clientHeight) {
3273
+ return emptyRect;
3274
+ }
3275
+ var styles = getWindowOf(target).getComputedStyle(target);
3276
+ var paddings = getPaddings(styles);
3277
+ var horizPad = paddings.left + paddings.right;
3278
+ var vertPad = paddings.top + paddings.bottom;
3279
+ // Computed styles of width & height are being used because they are the
3280
+ // only dimensions available to JS that contain non-rounded values. It could
3281
+ // be possible to utilize the getBoundingClientRect if only it's data wasn't
3282
+ // affected by CSS transformations let alone paddings, borders and scroll bars.
3283
+ var width = toFloat(styles.width), height = toFloat(styles.height);
3284
+ // Width & height include paddings and borders when the 'border-box' box
3285
+ // model is applied (except for IE).
3286
+ if (styles.boxSizing === 'border-box') {
3287
+ // Following conditions are required to handle Internet Explorer which
3288
+ // doesn't include paddings and borders to computed CSS dimensions.
3289
+ //
3290
+ // We can say that if CSS dimensions + paddings are equal to the "client"
3291
+ // properties then it's either IE, and thus we don't need to subtract
3292
+ // anything, or an element merely doesn't have paddings/borders styles.
3293
+ if (Math.round(width + horizPad) !== clientWidth) {
3294
+ width -= getBordersSize(styles, 'left', 'right') + horizPad;
3295
+ }
3296
+ if (Math.round(height + vertPad) !== clientHeight) {
3297
+ height -= getBordersSize(styles, 'top', 'bottom') + vertPad;
3298
+ }
3299
+ }
3300
+ // Following steps can't be applied to the document's root element as its
3301
+ // client[Width/Height] properties represent viewport area of the window.
3302
+ // Besides, it's as well not necessary as the <html> itself neither has
3303
+ // rendered scroll bars nor it can be clipped.
3304
+ if (!isDocumentElement(target)) {
3305
+ // In some browsers (only in Firefox, actually) CSS width & height
3306
+ // include scroll bars size which can be removed at this step as scroll
3307
+ // bars are the only difference between rounded dimensions + paddings
3308
+ // and "client" properties, though that is not always true in Chrome.
3309
+ var vertScrollbar = Math.round(width + horizPad) - clientWidth;
3310
+ var horizScrollbar = Math.round(height + vertPad) - clientHeight;
3311
+ // Chrome has a rather weird rounding of "client" properties.
3312
+ // E.g. for an element with content width of 314.2px it sometimes gives
3313
+ // the client width of 315px and for the width of 314.7px it may give
3314
+ // 314px. And it doesn't happen all the time. So just ignore this delta
3315
+ // as a non-relevant.
3316
+ if (Math.abs(vertScrollbar) !== 1) {
3317
+ width -= vertScrollbar;
3318
+ }
3319
+ if (Math.abs(horizScrollbar) !== 1) {
3320
+ height -= horizScrollbar;
3321
+ }
3322
+ }
3323
+ return createRectInit(paddings.left, paddings.top, width, height);
3324
+ }
3325
+ /**
3326
+ * Checks whether provided element is an instance of the SVGGraphicsElement.
3327
+ *
3328
+ * @param {Element} target - Element to be checked.
3329
+ * @returns {boolean}
3330
+ */
3331
+ var isSVGGraphicsElement = (function () {
3332
+ // Some browsers, namely IE and Edge, don't have the SVGGraphicsElement
3333
+ // interface.
3334
+ if (typeof SVGGraphicsElement !== 'undefined') {
3335
+ return function (target) { return target instanceof getWindowOf(target).SVGGraphicsElement; };
3336
+ }
3337
+ // If it's so, then check that element is at least an instance of the
3338
+ // SVGElement and that it has the "getBBox" method.
3339
+ // eslint-disable-next-line no-extra-parens
3340
+ return function (target) { return (target instanceof getWindowOf(target).SVGElement &&
3341
+ typeof target.getBBox === 'function'); };
3342
+ })();
3343
+ /**
3344
+ * Checks whether provided element is a document element (<html>).
3345
+ *
3346
+ * @param {Element} target - Element to be checked.
3347
+ * @returns {boolean}
3348
+ */
3349
+ function isDocumentElement(target) {
3350
+ return target === getWindowOf(target).document.documentElement;
3351
+ }
3352
+ /**
3353
+ * Calculates an appropriate content rectangle for provided html or svg element.
3354
+ *
3355
+ * @param {Element} target - Element content rectangle of which needs to be calculated.
3356
+ * @returns {DOMRectInit}
3357
+ */
3358
+ function getContentRect(target) {
3359
+ if (!isBrowser) {
3360
+ return emptyRect;
3361
+ }
3362
+ if (isSVGGraphicsElement(target)) {
3363
+ return getSVGContentRect(target);
3364
+ }
3365
+ return getHTMLElementContentRect(target);
3366
+ }
3367
+ /**
3368
+ * Creates rectangle with an interface of the DOMRectReadOnly.
3369
+ * Spec: https://drafts.fxtf.org/geometry/#domrectreadonly
3370
+ *
3371
+ * @param {DOMRectInit} rectInit - Object with rectangle's x/y coordinates and dimensions.
3372
+ * @returns {DOMRectReadOnly}
3373
+ */
3374
+ function createReadOnlyRect(_a) {
3375
+ var x = _a.x, y = _a.y, width = _a.width, height = _a.height;
3376
+ // If DOMRectReadOnly is available use it as a prototype for the rectangle.
3377
+ var Constr = typeof DOMRectReadOnly !== 'undefined' ? DOMRectReadOnly : Object;
3378
+ var rect = Object.create(Constr.prototype);
3379
+ // Rectangle's properties are not writable and non-enumerable.
3380
+ defineConfigurable(rect, {
3381
+ x: x, y: y, width: width, height: height,
3382
+ top: y,
3383
+ right: x + width,
3384
+ bottom: height + y,
3385
+ left: x
3386
+ });
3387
+ return rect;
3388
+ }
3389
+ /**
3390
+ * Creates DOMRectInit object based on the provided dimensions and the x/y coordinates.
3391
+ * Spec: https://drafts.fxtf.org/geometry/#dictdef-domrectinit
3392
+ *
3393
+ * @param {number} x - X coordinate.
3394
+ * @param {number} y - Y coordinate.
3395
+ * @param {number} width - Rectangle's width.
3396
+ * @param {number} height - Rectangle's height.
3397
+ * @returns {DOMRectInit}
3398
+ */
3399
+ function createRectInit(x, y, width, height) {
3400
+ return { x: x, y: y, width: width, height: height };
3401
+ }
3402
+
3403
+ /**
3404
+ * Class that is responsible for computations of the content rectangle of
3405
+ * provided DOM element and for keeping track of it's changes.
3406
+ */
3407
+ var ResizeObservation = /** @class */ (function () {
3408
+ /**
3409
+ * Creates an instance of ResizeObservation.
3410
+ *
3411
+ * @param {Element} target - Element to be observed.
3412
+ */
3413
+ function ResizeObservation(target) {
3414
+ /**
3415
+ * Broadcasted width of content rectangle.
3416
+ *
3417
+ * @type {number}
3418
+ */
3419
+ this.broadcastWidth = 0;
3420
+ /**
3421
+ * Broadcasted height of content rectangle.
3422
+ *
3423
+ * @type {number}
3424
+ */
3425
+ this.broadcastHeight = 0;
3426
+ /**
3427
+ * Reference to the last observed content rectangle.
3428
+ *
3429
+ * @private {DOMRectInit}
3430
+ */
3431
+ this.contentRect_ = createRectInit(0, 0, 0, 0);
3432
+ this.target = target;
3433
+ }
3434
+ /**
3435
+ * Updates content rectangle and tells whether it's width or height properties
3436
+ * have changed since the last broadcast.
3437
+ *
3438
+ * @returns {boolean}
3439
+ */
3440
+ ResizeObservation.prototype.isActive = function () {
3441
+ var rect = getContentRect(this.target);
3442
+ this.contentRect_ = rect;
3443
+ return (rect.width !== this.broadcastWidth ||
3444
+ rect.height !== this.broadcastHeight);
3445
+ };
3446
+ /**
3447
+ * Updates 'broadcastWidth' and 'broadcastHeight' properties with a data
3448
+ * from the corresponding properties of the last observed content rectangle.
3449
+ *
3450
+ * @returns {DOMRectInit} Last observed content rectangle.
3451
+ */
3452
+ ResizeObservation.prototype.broadcastRect = function () {
3453
+ var rect = this.contentRect_;
3454
+ this.broadcastWidth = rect.width;
3455
+ this.broadcastHeight = rect.height;
3456
+ return rect;
3457
+ };
3458
+ return ResizeObservation;
3459
+ }());
3460
+
3461
+ var ResizeObserverEntry = /** @class */ (function () {
3462
+ /**
3463
+ * Creates an instance of ResizeObserverEntry.
3464
+ *
3465
+ * @param {Element} target - Element that is being observed.
3466
+ * @param {DOMRectInit} rectInit - Data of the element's content rectangle.
3467
+ */
3468
+ function ResizeObserverEntry(target, rectInit) {
3469
+ var contentRect = createReadOnlyRect(rectInit);
3470
+ // According to the specification following properties are not writable
3471
+ // and are also not enumerable in the native implementation.
3472
+ //
3473
+ // Property accessors are not being used as they'd require to define a
3474
+ // private WeakMap storage which may cause memory leaks in browsers that
3475
+ // don't support this type of collections.
3476
+ defineConfigurable(this, { target: target, contentRect: contentRect });
3477
+ }
3478
+ return ResizeObserverEntry;
3479
+ }());
3480
+
3481
+ var ResizeObserverSPI = /** @class */ (function () {
3482
+ /**
3483
+ * Creates a new instance of ResizeObserver.
3484
+ *
3485
+ * @param {ResizeObserverCallback} callback - Callback function that is invoked
3486
+ * when one of the observed elements changes it's content dimensions.
3487
+ * @param {ResizeObserverController} controller - Controller instance which
3488
+ * is responsible for the updates of observer.
3489
+ * @param {ResizeObserver} callbackCtx - Reference to the public
3490
+ * ResizeObserver instance which will be passed to callback function.
3491
+ */
3492
+ function ResizeObserverSPI(callback, controller, callbackCtx) {
3493
+ /**
3494
+ * Collection of resize observations that have detected changes in dimensions
3495
+ * of elements.
3496
+ *
3497
+ * @private {Array<ResizeObservation>}
3498
+ */
3499
+ this.activeObservations_ = [];
3500
+ /**
3501
+ * Registry of the ResizeObservation instances.
3502
+ *
3503
+ * @private {Map<Element, ResizeObservation>}
3504
+ */
3505
+ this.observations_ = new MapShim();
3506
+ if (typeof callback !== 'function') {
3507
+ throw new TypeError('The callback provided as parameter 1 is not a function.');
3508
+ }
3509
+ this.callback_ = callback;
3510
+ this.controller_ = controller;
3511
+ this.callbackCtx_ = callbackCtx;
3512
+ }
3513
+ /**
3514
+ * Starts observing provided element.
3515
+ *
3516
+ * @param {Element} target - Element to be observed.
3517
+ * @returns {void}
3518
+ */
3519
+ ResizeObserverSPI.prototype.observe = function (target) {
3520
+ if (!arguments.length) {
3521
+ throw new TypeError('1 argument required, but only 0 present.');
3522
+ }
3523
+ // Do nothing if current environment doesn't have the Element interface.
3524
+ if (typeof Element === 'undefined' || !(Element instanceof Object)) {
3525
+ return;
3526
+ }
3527
+ if (!(target instanceof getWindowOf(target).Element)) {
3528
+ throw new TypeError('parameter 1 is not of type "Element".');
3529
+ }
3530
+ var observations = this.observations_;
3531
+ // Do nothing if element is already being observed.
3532
+ if (observations.has(target)) {
3533
+ return;
3534
+ }
3535
+ observations.set(target, new ResizeObservation(target));
3536
+ this.controller_.addObserver(this);
3537
+ // Force the update of observations.
3538
+ this.controller_.refresh();
3539
+ };
3540
+ /**
3541
+ * Stops observing provided element.
3542
+ *
3543
+ * @param {Element} target - Element to stop observing.
3544
+ * @returns {void}
3545
+ */
3546
+ ResizeObserverSPI.prototype.unobserve = function (target) {
3547
+ if (!arguments.length) {
3548
+ throw new TypeError('1 argument required, but only 0 present.');
3549
+ }
3550
+ // Do nothing if current environment doesn't have the Element interface.
3551
+ if (typeof Element === 'undefined' || !(Element instanceof Object)) {
3552
+ return;
3553
+ }
3554
+ if (!(target instanceof getWindowOf(target).Element)) {
3555
+ throw new TypeError('parameter 1 is not of type "Element".');
3556
+ }
3557
+ var observations = this.observations_;
3558
+ // Do nothing if element is not being observed.
3559
+ if (!observations.has(target)) {
3560
+ return;
3561
+ }
3562
+ observations.delete(target);
3563
+ if (!observations.size) {
3564
+ this.controller_.removeObserver(this);
3565
+ }
3566
+ };
3567
+ /**
3568
+ * Stops observing all elements.
3569
+ *
3570
+ * @returns {void}
3571
+ */
3572
+ ResizeObserverSPI.prototype.disconnect = function () {
3573
+ this.clearActive();
3574
+ this.observations_.clear();
3575
+ this.controller_.removeObserver(this);
3576
+ };
3577
+ /**
3578
+ * Collects observation instances the associated element of which has changed
3579
+ * it's content rectangle.
3580
+ *
3581
+ * @returns {void}
3582
+ */
3583
+ ResizeObserverSPI.prototype.gatherActive = function () {
3584
+ var _this = this;
3585
+ this.clearActive();
3586
+ this.observations_.forEach(function (observation) {
3587
+ if (observation.isActive()) {
3588
+ _this.activeObservations_.push(observation);
3589
+ }
3590
+ });
3591
+ };
3592
+ /**
3593
+ * Invokes initial callback function with a list of ResizeObserverEntry
3594
+ * instances collected from active resize observations.
3595
+ *
3596
+ * @returns {void}
3597
+ */
3598
+ ResizeObserverSPI.prototype.broadcastActive = function () {
3599
+ // Do nothing if observer doesn't have active observations.
3600
+ if (!this.hasActive()) {
3601
+ return;
3602
+ }
3603
+ var ctx = this.callbackCtx_;
3604
+ // Create ResizeObserverEntry instance for every active observation.
3605
+ var entries = this.activeObservations_.map(function (observation) {
3606
+ return new ResizeObserverEntry(observation.target, observation.broadcastRect());
3607
+ });
3608
+ this.callback_.call(ctx, entries, ctx);
3609
+ this.clearActive();
3610
+ };
3611
+ /**
3612
+ * Clears the collection of active observations.
3613
+ *
3614
+ * @returns {void}
3615
+ */
3616
+ ResizeObserverSPI.prototype.clearActive = function () {
3617
+ this.activeObservations_.splice(0);
3618
+ };
3619
+ /**
3620
+ * Tells whether observer has active observations.
3621
+ *
3622
+ * @returns {boolean}
3623
+ */
3624
+ ResizeObserverSPI.prototype.hasActive = function () {
3625
+ return this.activeObservations_.length > 0;
3626
+ };
3627
+ return ResizeObserverSPI;
3628
+ }());
3629
+
3630
+ // Registry of internal observers. If WeakMap is not available use current shim
3631
+ // for the Map collection as it has all required methods and because WeakMap
3632
+ // can't be fully polyfilled anyway.
3633
+ var observers = typeof WeakMap !== 'undefined' ? new WeakMap() : new MapShim();
3634
+ /**
3635
+ * ResizeObserver API. Encapsulates the ResizeObserver SPI implementation
3636
+ * exposing only those methods and properties that are defined in the spec.
3637
+ */
3638
+ var ResizeObserver = /** @class */ (function () {
3639
+ /**
3640
+ * Creates a new instance of ResizeObserver.
3641
+ *
3642
+ * @param {ResizeObserverCallback} callback - Callback that is invoked when
3643
+ * dimensions of the observed elements change.
3644
+ */
3645
+ function ResizeObserver(callback) {
3646
+ if (!(this instanceof ResizeObserver)) {
3647
+ throw new TypeError('Cannot call a class as a function.');
3648
+ }
3649
+ if (!arguments.length) {
3650
+ throw new TypeError('1 argument required, but only 0 present.');
3651
+ }
3652
+ var controller = ResizeObserverController.getInstance();
3653
+ var observer = new ResizeObserverSPI(callback, controller, this);
3654
+ observers.set(this, observer);
3655
+ }
3656
+ return ResizeObserver;
3657
+ }());
3658
+ // Expose public methods of ResizeObserver.
3659
+ [
3660
+ 'observe',
3661
+ 'unobserve',
3662
+ 'disconnect'
3663
+ ].forEach(function (method) {
3664
+ ResizeObserver.prototype[method] = function () {
3665
+ var _a;
3666
+ return (_a = observers.get(this))[method].apply(_a, arguments);
3667
+ };
3668
+ });
3669
+
3670
+ var index = (function () {
3671
+ // Export existing implementation if available.
3672
+ if (typeof global$1$1.ResizeObserver !== 'undefined') {
3673
+ return global$1$1.ResizeObserver;
3674
+ }
3675
+ return ResizeObserver;
3676
+ })();
3677
+
3678
+ var canUseDOM = !!(
3679
+ typeof window !== 'undefined' &&
3680
+ window.document &&
3681
+ window.document.createElement
3682
+ );
3683
+
3684
+ var canUseDom = canUseDOM;
3685
+
3686
+ var SimpleBar =
3687
+ /*#__PURE__*/
3688
+ function () {
3689
+ function SimpleBar(element, options) {
3690
+ var _this = this;
3691
+
3692
+ this.onScroll = function () {
3693
+ if (!_this.scrollXTicking) {
3694
+ window.requestAnimationFrame(_this.scrollX);
3695
+ _this.scrollXTicking = true;
3696
+ }
3697
+
3698
+ if (!_this.scrollYTicking) {
3699
+ window.requestAnimationFrame(_this.scrollY);
3700
+ _this.scrollYTicking = true;
3701
+ }
3702
+ };
3703
+
3704
+ this.scrollX = function () {
3705
+ if (_this.axis.x.isOverflowing) {
3706
+ _this.showScrollbar('x');
3707
+
3708
+ _this.positionScrollbar('x');
3709
+ }
3710
+
3711
+ _this.scrollXTicking = false;
3712
+ };
3713
+
3714
+ this.scrollY = function () {
3715
+ if (_this.axis.y.isOverflowing) {
3716
+ _this.showScrollbar('y');
3717
+
3718
+ _this.positionScrollbar('y');
3719
+ }
3720
+
3721
+ _this.scrollYTicking = false;
3722
+ };
3723
+
3724
+ this.onMouseEnter = function () {
3725
+ _this.showScrollbar('x');
3726
+
3727
+ _this.showScrollbar('y');
3728
+ };
3729
+
3730
+ this.onMouseMove = function (e) {
3731
+ _this.mouseX = e.clientX;
3732
+ _this.mouseY = e.clientY;
3733
+
3734
+ if (_this.axis.x.isOverflowing || _this.axis.x.forceVisible) {
3735
+ _this.onMouseMoveForAxis('x');
3736
+ }
3737
+
3738
+ if (_this.axis.y.isOverflowing || _this.axis.y.forceVisible) {
3739
+ _this.onMouseMoveForAxis('y');
3740
+ }
3741
+ };
3742
+
3743
+ this.onMouseLeave = function () {
3744
+ _this.onMouseMove.cancel();
3745
+
3746
+ if (_this.axis.x.isOverflowing || _this.axis.x.forceVisible) {
3747
+ _this.onMouseLeaveForAxis('x');
3748
+ }
3749
+
3750
+ if (_this.axis.y.isOverflowing || _this.axis.y.forceVisible) {
3751
+ _this.onMouseLeaveForAxis('y');
3752
+ }
3753
+
3754
+ _this.mouseX = -1;
3755
+ _this.mouseY = -1;
3756
+ };
3757
+
3758
+ this.onWindowResize = function () {
3759
+ // Recalculate scrollbarWidth in case it's a zoom
3760
+ _this.scrollbarWidth = scrollbarWidth();
3761
+
3762
+ _this.hideNativeScrollbar();
3763
+ };
3764
+
3765
+ this.hideScrollbars = function () {
3766
+ _this.axis.x.track.rect = _this.axis.x.track.el.getBoundingClientRect();
3767
+ _this.axis.y.track.rect = _this.axis.y.track.el.getBoundingClientRect();
3768
+
3769
+ if (!_this.isWithinBounds(_this.axis.y.track.rect)) {
3770
+ _this.axis.y.scrollbar.el.classList.remove(_this.classNames.visible);
3771
+
3772
+ _this.axis.y.isVisible = false;
3773
+ }
3774
+
3775
+ if (!_this.isWithinBounds(_this.axis.x.track.rect)) {
3776
+ _this.axis.x.scrollbar.el.classList.remove(_this.classNames.visible);
3777
+
3778
+ _this.axis.x.isVisible = false;
3779
+ }
3780
+ };
3781
+
3782
+ this.onPointerEvent = function (e) {
3783
+ var isWithinBoundsY, isWithinBoundsX;
3784
+ _this.axis.x.scrollbar.rect = _this.axis.x.scrollbar.el.getBoundingClientRect();
3785
+ _this.axis.y.scrollbar.rect = _this.axis.y.scrollbar.el.getBoundingClientRect();
3786
+
3787
+ if (_this.axis.x.isOverflowing || _this.axis.x.forceVisible) {
3788
+ isWithinBoundsX = _this.isWithinBounds(_this.axis.x.scrollbar.rect);
3789
+ }
3790
+
3791
+ if (_this.axis.y.isOverflowing || _this.axis.y.forceVisible) {
3792
+ isWithinBoundsY = _this.isWithinBounds(_this.axis.y.scrollbar.rect);
3793
+ } // If any pointer event is called on the scrollbar
3794
+
3795
+
3796
+ if (isWithinBoundsY || isWithinBoundsX) {
3797
+ // Preventing the event's default action stops text being
3798
+ // selectable during the drag.
3799
+ e.preventDefault(); // Prevent event leaking
3800
+
3801
+ e.stopPropagation();
3802
+
3803
+ if (e.type === 'mousedown') {
3804
+ if (isWithinBoundsY) {
3805
+ _this.onDragStart(e, 'y');
3806
+ }
3807
+
3808
+ if (isWithinBoundsX) {
3809
+ _this.onDragStart(e, 'x');
3810
+ }
3811
+ }
3812
+ }
3813
+ };
3814
+
3815
+ this.drag = function (e) {
3816
+ var eventOffset;
3817
+ var track = _this.axis[_this.draggedAxis].track;
3818
+ var trackSize = track.rect[_this.axis[_this.draggedAxis].sizeAttr];
3819
+ var scrollbar = _this.axis[_this.draggedAxis].scrollbar;
3820
+ e.preventDefault();
3821
+ e.stopPropagation();
3822
+
3823
+ if (_this.draggedAxis === 'y') {
3824
+ eventOffset = e.pageY;
3825
+ } else {
3826
+ eventOffset = e.pageX;
3827
+ } // Calculate how far the user's mouse is from the top/left of the scrollbar (minus the dragOffset).
3828
+
3829
+
3830
+ var dragPos = eventOffset - track.rect[_this.axis[_this.draggedAxis].offsetAttr] - _this.axis[_this.draggedAxis].dragOffset; // Convert the mouse position into a percentage of the scrollbar height/width.
3831
+
3832
+ var dragPerc = dragPos / track.rect[_this.axis[_this.draggedAxis].sizeAttr]; // Scroll the content by the same percentage.
3833
+
3834
+ var scrollPos = dragPerc * _this.contentWrapperEl[_this.axis[_this.draggedAxis].scrollSizeAttr]; // Fix browsers inconsistency on RTL
3835
+
3836
+ if (_this.draggedAxis === 'x') {
3837
+ scrollPos = _this.isRtl && SimpleBar.getRtlHelpers().isRtlScrollbarInverted ? scrollPos - (trackSize + scrollbar.size) : scrollPos;
3838
+ scrollPos = _this.isRtl && SimpleBar.getRtlHelpers().isRtlScrollingInverted ? -scrollPos : scrollPos;
3839
+ }
3840
+
3841
+ _this.contentWrapperEl[_this.axis[_this.draggedAxis].scrollOffsetAttr] = scrollPos;
3842
+ };
3843
+
3844
+ this.onEndDrag = function (e) {
3845
+ e.preventDefault();
3846
+ e.stopPropagation();
3847
+
3848
+ _this.el.classList.remove(_this.classNames.dragging);
3849
+
3850
+ document.removeEventListener('mousemove', _this.drag);
3851
+ document.removeEventListener('mouseup', _this.onEndDrag);
3852
+ };
3853
+
3854
+ this.el = element;
3855
+ this.flashTimeout;
3856
+ this.contentEl;
3857
+ this.contentWrapperEl;
3858
+ this.offsetEl;
3859
+ this.maskEl;
3860
+ this.globalObserver;
3861
+ this.mutationObserver;
3862
+ this.resizeObserver;
3863
+ this.scrollbarWidth;
3864
+ this.minScrollbarWidth = 20;
3865
+ this.options = Object.assign({}, SimpleBar.defaultOptions, options);
3866
+ this.classNames = Object.assign({}, SimpleBar.defaultOptions.classNames, this.options.classNames);
3867
+ this.isRtl;
3868
+ this.axis = {
3869
+ x: {
3870
+ scrollOffsetAttr: 'scrollLeft',
3871
+ sizeAttr: 'width',
3872
+ scrollSizeAttr: 'scrollWidth',
3873
+ offsetAttr: 'left',
3874
+ overflowAttr: 'overflowX',
3875
+ dragOffset: 0,
3876
+ isOverflowing: true,
3877
+ isVisible: false,
3878
+ forceVisible: false,
3879
+ track: {},
3880
+ scrollbar: {}
3881
+ },
3882
+ y: {
3883
+ scrollOffsetAttr: 'scrollTop',
3884
+ sizeAttr: 'height',
3885
+ scrollSizeAttr: 'scrollHeight',
3886
+ offsetAttr: 'top',
3887
+ overflowAttr: 'overflowY',
3888
+ dragOffset: 0,
3889
+ isOverflowing: true,
3890
+ isVisible: false,
3891
+ forceVisible: false,
3892
+ track: {},
3893
+ scrollbar: {}
3894
+ }
3895
+ }; // Don't re-instantiate over an existing one
3896
+
3897
+ if (this.el.SimpleBar) {
3898
+ return;
3899
+ }
3900
+
3901
+ this.recalculate = lodash_throttle(this.recalculate.bind(this), 64);
3902
+ this.onMouseMove = lodash_throttle(this.onMouseMove.bind(this), 64);
3903
+ this.hideScrollbars = lodash_debounce(this.hideScrollbars.bind(this), this.options.timeout);
3904
+ this.onWindowResize = lodash_debounce(this.onWindowResize.bind(this), 64, {
3905
+ leading: true
3906
+ });
3907
+ SimpleBar.getRtlHelpers = lodash_memoize(SimpleBar.getRtlHelpers);
3908
+ this.init();
3909
+ }
3910
+ /**
3911
+ * Static properties
3912
+ */
3913
+
3914
+ /**
3915
+ * Helper to fix browsers inconsistency on RTL:
3916
+ * - Firefox inverts the scrollbar initial position
3917
+ * - IE11 inverts both scrollbar position and scrolling offset
3918
+ * Directly inspired by @KingSora's OverlayScrollbars https://github.com/KingSora/OverlayScrollbars/blob/master/js/OverlayScrollbars.js#L1634
3919
+ */
3920
+
3921
+
3922
+ SimpleBar.getRtlHelpers = function getRtlHelpers() {
3923
+ var dummyDiv = document.createElement('div');
3924
+ dummyDiv.innerHTML = '<div class="hs-dummy-scrollbar-size"><div style="height: 200%; width: 200%; margin: 10px 0;"></div></div>';
3925
+ var scrollbarDummyEl = dummyDiv.firstElementChild;
3926
+ document.body.appendChild(scrollbarDummyEl);
3927
+ var dummyContainerChild = scrollbarDummyEl.firstElementChild;
3928
+ scrollbarDummyEl.scrollLeft = 0;
3929
+ var dummyContainerOffset = SimpleBar.getOffset(scrollbarDummyEl);
3930
+ var dummyContainerChildOffset = SimpleBar.getOffset(dummyContainerChild);
3931
+ scrollbarDummyEl.scrollLeft = 999;
3932
+ var dummyContainerScrollOffsetAfterScroll = SimpleBar.getOffset(dummyContainerChild);
3933
+ return {
3934
+ // determines if the scrolling is responding with negative values
3935
+ isRtlScrollingInverted: dummyContainerOffset.left !== dummyContainerChildOffset.left && dummyContainerChildOffset.left - dummyContainerScrollOffsetAfterScroll.left !== 0,
3936
+ // determines if the origin scrollbar position is inverted or not (positioned on left or right)
3937
+ isRtlScrollbarInverted: dummyContainerOffset.left !== dummyContainerChildOffset.left
3938
+ };
3939
+ };
3940
+
3941
+ SimpleBar.initHtmlApi = function initHtmlApi() {
3942
+ this.initDOMLoadedElements = this.initDOMLoadedElements.bind(this); // MutationObserver is IE11+
3943
+
3944
+ if (typeof MutationObserver !== 'undefined') {
3945
+ // Mutation observer to observe dynamically added elements
3946
+ this.globalObserver = new MutationObserver(function (mutations) {
3947
+ mutations.forEach(function (mutation) {
3948
+ Array.prototype.forEach.call(mutation.addedNodes, function (addedNode) {
3949
+ if (addedNode.nodeType === 1) {
3950
+ if (addedNode.hasAttribute('data-simplebar')) {
3951
+ !addedNode.SimpleBar && new SimpleBar(addedNode, SimpleBar.getElOptions(addedNode));
3952
+ } else {
3953
+ Array.prototype.forEach.call(addedNode.querySelectorAll('[data-simplebar]'), function (el) {
3954
+ !el.SimpleBar && new SimpleBar(el, SimpleBar.getElOptions(el));
3955
+ });
3956
+ }
3957
+ }
3958
+ });
3959
+ Array.prototype.forEach.call(mutation.removedNodes, function (removedNode) {
3960
+ if (removedNode.nodeType === 1) {
3961
+ if (removedNode.hasAttribute('data-simplebar')) {
3962
+ removedNode.SimpleBar && removedNode.SimpleBar.unMount();
3963
+ } else {
3964
+ Array.prototype.forEach.call(removedNode.querySelectorAll('[data-simplebar]'), function (el) {
3965
+ el.SimpleBar && el.SimpleBar.unMount();
3966
+ });
3967
+ }
3968
+ }
3969
+ });
3970
+ });
3971
+ });
3972
+ this.globalObserver.observe(document, {
3973
+ childList: true,
3974
+ subtree: true
3975
+ });
3976
+ } // Taken from jQuery `ready` function
3977
+ // Instantiate elements already present on the page
3978
+
3979
+
3980
+ if (document.readyState === 'complete' || document.readyState !== 'loading' && !document.documentElement.doScroll) {
3981
+ // Handle it asynchronously to allow scripts the opportunity to delay init
3982
+ window.setTimeout(this.initDOMLoadedElements);
3983
+ } else {
3984
+ document.addEventListener('DOMContentLoaded', this.initDOMLoadedElements);
3985
+ window.addEventListener('load', this.initDOMLoadedElements);
3986
+ }
3987
+ } // Helper function to retrieve options from element attributes
3988
+ ;
3989
+
3990
+ SimpleBar.getElOptions = function getElOptions(el) {
3991
+ var options = Array.prototype.reduce.call(el.attributes, function (acc, attribute) {
3992
+ var option = attribute.name.match(/data-simplebar-(.+)/);
3993
+
3994
+ if (option) {
3995
+ var key = option[1].replace(/\W+(.)/g, function (x, chr) {
3996
+ return chr.toUpperCase();
3997
+ });
3998
+
3999
+ switch (attribute.value) {
4000
+ case 'true':
4001
+ acc[key] = true;
4002
+ break;
4003
+
4004
+ case 'false':
4005
+ acc[key] = false;
4006
+ break;
4007
+
4008
+ case undefined:
4009
+ acc[key] = true;
4010
+ break;
4011
+
4012
+ default:
4013
+ acc[key] = attribute.value;
4014
+ }
4015
+ }
4016
+
4017
+ return acc;
4018
+ }, {});
4019
+ return options;
4020
+ };
4021
+
4022
+ SimpleBar.removeObserver = function removeObserver() {
4023
+ this.globalObserver.disconnect();
4024
+ };
4025
+
4026
+ SimpleBar.initDOMLoadedElements = function initDOMLoadedElements() {
4027
+ document.removeEventListener('DOMContentLoaded', this.initDOMLoadedElements);
4028
+ window.removeEventListener('load', this.initDOMLoadedElements);
4029
+ Array.prototype.forEach.call(document.querySelectorAll('[data-simplebar]'), function (el) {
4030
+ if (!el.SimpleBar) new SimpleBar(el, SimpleBar.getElOptions(el));
4031
+ });
4032
+ };
4033
+
4034
+ SimpleBar.getOffset = function getOffset(el) {
4035
+ var rect = el.getBoundingClientRect();
4036
+ return {
4037
+ top: rect.top + (window.pageYOffset || document.documentElement.scrollTop),
4038
+ left: rect.left + (window.pageXOffset || document.documentElement.scrollLeft)
4039
+ };
4040
+ };
4041
+
4042
+ var _proto = SimpleBar.prototype;
4043
+
4044
+ _proto.init = function init() {
4045
+ // Save a reference to the instance, so we know this DOM node has already been instancied
4046
+ this.el.SimpleBar = this; // We stop here on server-side
4047
+
4048
+ if (canUseDom) {
4049
+ this.initDOM();
4050
+ this.scrollbarWidth = scrollbarWidth();
4051
+ this.recalculate();
4052
+ this.initListeners();
4053
+ }
4054
+ };
4055
+
4056
+ _proto.initDOM = function initDOM() {
4057
+ var _this2 = this;
4058
+
4059
+ // make sure this element doesn't have the elements yet
4060
+ if (Array.prototype.filter.call(this.el.children, function (child) {
4061
+ return child.classList.contains(_this2.classNames.wrapper);
4062
+ }).length) {
4063
+ // assume that element has his DOM already initiated
4064
+ this.wrapperEl = this.el.querySelector("." + this.classNames.wrapper);
4065
+ this.contentWrapperEl = this.el.querySelector("." + this.classNames.contentWrapper);
4066
+ this.offsetEl = this.el.querySelector("." + this.classNames.offset);
4067
+ this.maskEl = this.el.querySelector("." + this.classNames.mask);
4068
+ this.contentEl = this.el.querySelector("." + this.classNames.contentEl);
4069
+ this.placeholderEl = this.el.querySelector("." + this.classNames.placeholder);
4070
+ this.heightAutoObserverWrapperEl = this.el.querySelector("." + this.classNames.heightAutoObserverWrapperEl);
4071
+ this.heightAutoObserverEl = this.el.querySelector("." + this.classNames.heightAutoObserverEl);
4072
+ this.axis.x.track.el = this.el.querySelector("." + this.classNames.track + "." + this.classNames.horizontal);
4073
+ this.axis.y.track.el = this.el.querySelector("." + this.classNames.track + "." + this.classNames.vertical);
4074
+ } else {
4075
+ // Prepare DOM
4076
+ this.wrapperEl = document.createElement('div');
4077
+ this.contentWrapperEl = document.createElement('div');
4078
+ this.offsetEl = document.createElement('div');
4079
+ this.maskEl = document.createElement('div');
4080
+ this.contentEl = document.createElement('div');
4081
+ this.placeholderEl = document.createElement('div');
4082
+ this.heightAutoObserverWrapperEl = document.createElement('div');
4083
+ this.heightAutoObserverEl = document.createElement('div');
4084
+ this.wrapperEl.classList.add(this.classNames.wrapper);
4085
+ this.contentWrapperEl.classList.add(this.classNames.contentWrapper);
4086
+ this.offsetEl.classList.add(this.classNames.offset);
4087
+ this.maskEl.classList.add(this.classNames.mask);
4088
+ this.contentEl.classList.add(this.classNames.contentEl);
4089
+ this.placeholderEl.classList.add(this.classNames.placeholder);
4090
+ this.heightAutoObserverWrapperEl.classList.add(this.classNames.heightAutoObserverWrapperEl);
4091
+ this.heightAutoObserverEl.classList.add(this.classNames.heightAutoObserverEl);
4092
+
4093
+ while (this.el.firstChild) {
4094
+ this.contentEl.appendChild(this.el.firstChild);
4095
+ }
4096
+
4097
+ this.contentWrapperEl.appendChild(this.contentEl);
4098
+ this.offsetEl.appendChild(this.contentWrapperEl);
4099
+ this.maskEl.appendChild(this.offsetEl);
4100
+ this.heightAutoObserverWrapperEl.appendChild(this.heightAutoObserverEl);
4101
+ this.wrapperEl.appendChild(this.heightAutoObserverWrapperEl);
4102
+ this.wrapperEl.appendChild(this.maskEl);
4103
+ this.wrapperEl.appendChild(this.placeholderEl);
4104
+ this.el.appendChild(this.wrapperEl);
4105
+ }
4106
+
4107
+ if (!this.axis.x.track.el || !this.axis.y.track.el) {
4108
+ var track = document.createElement('div');
4109
+ var scrollbar = document.createElement('div');
4110
+ track.classList.add(this.classNames.track);
4111
+ scrollbar.classList.add(this.classNames.scrollbar);
4112
+ track.appendChild(scrollbar);
4113
+ this.axis.x.track.el = track.cloneNode(true);
4114
+ this.axis.x.track.el.classList.add(this.classNames.horizontal);
4115
+ this.axis.y.track.el = track.cloneNode(true);
4116
+ this.axis.y.track.el.classList.add(this.classNames.vertical);
4117
+ this.el.appendChild(this.axis.x.track.el);
4118
+ this.el.appendChild(this.axis.y.track.el);
4119
+ }
4120
+
4121
+ this.axis.x.scrollbar.el = this.axis.x.track.el.querySelector("." + this.classNames.scrollbar);
4122
+ this.axis.y.scrollbar.el = this.axis.y.track.el.querySelector("." + this.classNames.scrollbar);
4123
+
4124
+ if (!this.options.autoHide) {
4125
+ this.axis.x.scrollbar.el.classList.add(this.classNames.visible);
4126
+ this.axis.y.scrollbar.el.classList.add(this.classNames.visible);
4127
+ }
4128
+
4129
+ this.el.setAttribute('data-simplebar', 'init');
4130
+ };
4131
+
4132
+ _proto.initListeners = function initListeners() {
4133
+ var _this3 = this;
4134
+
4135
+ // Event listeners
4136
+ if (this.options.autoHide) {
4137
+ this.el.addEventListener('mouseenter', this.onMouseEnter);
4138
+ }
4139
+
4140
+ ['mousedown', 'click', 'dblclick', 'touchstart', 'touchend', 'touchmove'].forEach(function (e) {
4141
+ _this3.el.addEventListener(e, _this3.onPointerEvent, true);
4142
+ });
4143
+ this.el.addEventListener('mousemove', this.onMouseMove);
4144
+ this.el.addEventListener('mouseleave', this.onMouseLeave);
4145
+ this.contentWrapperEl.addEventListener('scroll', this.onScroll); // Browser zoom triggers a window resize
4146
+
4147
+ window.addEventListener('resize', this.onWindowResize);
4148
+ this.resizeObserver = new index(this.recalculate);
4149
+ this.resizeObserver.observe(this.el);
4150
+ this.resizeObserver.observe(this.contentEl);
4151
+ };
4152
+
4153
+ _proto.recalculate = function recalculate() {
4154
+ var isHeightAuto = this.heightAutoObserverEl.offsetHeight <= 1;
4155
+ var isWidthAuto = this.heightAutoObserverEl.offsetWidth <= 1;
4156
+ this.elStyles = window.getComputedStyle(this.el);
4157
+ this.isRtl = this.elStyles.direction === 'rtl';
4158
+ this.contentEl.style.padding = this.elStyles.paddingTop + " " + this.elStyles.paddingRight + " " + this.elStyles.paddingBottom + " " + this.elStyles.paddingLeft;
4159
+ this.wrapperEl.style.margin = "-" + this.elStyles.paddingTop + " -" + this.elStyles.paddingRight + " -" + this.elStyles.paddingBottom + " -" + this.elStyles.paddingLeft;
4160
+ this.contentWrapperEl.style.height = isHeightAuto ? 'auto' : '100%'; // Determine placeholder size
4161
+
4162
+ this.placeholderEl.style.width = isWidthAuto ? this.contentEl.offsetWidth + "px" : 'auto';
4163
+ this.placeholderEl.style.height = this.contentEl.scrollHeight + "px"; // Set isOverflowing to false if scrollbar is not necessary (content is shorter than offset)
4164
+
4165
+ this.axis.x.isOverflowing = this.contentWrapperEl.scrollWidth > this.contentWrapperEl.offsetWidth;
4166
+ this.axis.y.isOverflowing = this.contentWrapperEl.scrollHeight > this.contentWrapperEl.offsetHeight; // Set isOverflowing to false if user explicitely set hidden overflow
4167
+
4168
+ this.axis.x.isOverflowing = this.elStyles.overflowX === 'hidden' ? false : this.axis.x.isOverflowing;
4169
+ this.axis.y.isOverflowing = this.elStyles.overflowY === 'hidden' ? false : this.axis.y.isOverflowing;
4170
+ this.axis.x.forceVisible = this.options.forceVisible === 'x' || this.options.forceVisible === true;
4171
+ this.axis.y.forceVisible = this.options.forceVisible === 'y' || this.options.forceVisible === true;
4172
+ this.hideNativeScrollbar();
4173
+ this.axis.x.track.rect = this.axis.x.track.el.getBoundingClientRect();
4174
+ this.axis.y.track.rect = this.axis.y.track.el.getBoundingClientRect();
4175
+ this.axis.x.scrollbar.size = this.getScrollbarSize('x');
4176
+ this.axis.y.scrollbar.size = this.getScrollbarSize('y');
4177
+ this.axis.x.scrollbar.el.style.width = this.axis.x.scrollbar.size + "px";
4178
+ this.axis.y.scrollbar.el.style.height = this.axis.y.scrollbar.size + "px";
4179
+ this.positionScrollbar('x');
4180
+ this.positionScrollbar('y');
4181
+ this.toggleTrackVisibility('x');
4182
+ this.toggleTrackVisibility('y');
4183
+ }
4184
+ /**
4185
+ * Calculate scrollbar size
4186
+ */
4187
+ ;
4188
+
4189
+ _proto.getScrollbarSize = function getScrollbarSize(axis) {
4190
+ if (axis === void 0) {
4191
+ axis = 'y';
4192
+ }
4193
+
4194
+ var contentSize = this.scrollbarWidth ? this.contentWrapperEl[this.axis[axis].scrollSizeAttr] : this.contentWrapperEl[this.axis[axis].scrollSizeAttr] - this.minScrollbarWidth;
4195
+ var trackSize = this.axis[axis].track.rect[this.axis[axis].sizeAttr];
4196
+ var scrollbarSize;
4197
+
4198
+ if (!this.axis[axis].isOverflowing) {
4199
+ return;
4200
+ }
4201
+
4202
+ var scrollbarRatio = trackSize / contentSize; // Calculate new height/position of drag handle.
4203
+
4204
+ scrollbarSize = Math.max(~~(scrollbarRatio * trackSize), this.options.scrollbarMinSize);
4205
+
4206
+ if (this.options.scrollbarMaxSize) {
4207
+ scrollbarSize = Math.min(scrollbarSize, this.options.scrollbarMaxSize);
4208
+ }
4209
+
4210
+ return scrollbarSize;
4211
+ };
4212
+
4213
+ _proto.positionScrollbar = function positionScrollbar(axis) {
4214
+ if (axis === void 0) {
4215
+ axis = 'y';
4216
+ }
4217
+
4218
+ var contentSize = this.contentWrapperEl[this.axis[axis].scrollSizeAttr];
4219
+ var trackSize = this.axis[axis].track.rect[this.axis[axis].sizeAttr];
4220
+ var hostSize = parseInt(this.elStyles[this.axis[axis].sizeAttr], 10);
4221
+ var scrollbar = this.axis[axis].scrollbar;
4222
+ var scrollOffset = this.contentWrapperEl[this.axis[axis].scrollOffsetAttr];
4223
+ scrollOffset = axis === 'x' && this.isRtl && SimpleBar.getRtlHelpers().isRtlScrollingInverted ? -scrollOffset : scrollOffset;
4224
+ var scrollPourcent = scrollOffset / (contentSize - hostSize);
4225
+ var handleOffset = ~~((trackSize - scrollbar.size) * scrollPourcent);
4226
+ handleOffset = axis === 'x' && this.isRtl && SimpleBar.getRtlHelpers().isRtlScrollbarInverted ? handleOffset + (trackSize - scrollbar.size) : handleOffset;
4227
+ scrollbar.el.style.transform = axis === 'x' ? "translate3d(" + handleOffset + "px, 0, 0)" : "translate3d(0, " + handleOffset + "px, 0)";
4228
+ };
4229
+
4230
+ _proto.toggleTrackVisibility = function toggleTrackVisibility(axis) {
4231
+ if (axis === void 0) {
4232
+ axis = 'y';
4233
+ }
4234
+
4235
+ var track = this.axis[axis].track.el;
4236
+ var scrollbar = this.axis[axis].scrollbar.el;
4237
+
4238
+ if (this.axis[axis].isOverflowing || this.axis[axis].forceVisible) {
4239
+ track.style.visibility = 'visible';
4240
+ this.contentWrapperEl.style[this.axis[axis].overflowAttr] = 'scroll';
4241
+ } else {
4242
+ track.style.visibility = 'hidden';
4243
+ this.contentWrapperEl.style[this.axis[axis].overflowAttr] = 'hidden';
4244
+ } // Even if forceVisible is enabled, scrollbar itself should be hidden
4245
+
4246
+
4247
+ if (this.axis[axis].isOverflowing) {
4248
+ scrollbar.style.display = 'block';
4249
+ } else {
4250
+ scrollbar.style.display = 'none';
4251
+ }
4252
+ };
4253
+
4254
+ _proto.hideNativeScrollbar = function hideNativeScrollbar() {
4255
+ this.offsetEl.style[this.isRtl ? 'left' : 'right'] = this.axis.y.isOverflowing || this.axis.y.forceVisible ? "-" + (this.scrollbarWidth || this.minScrollbarWidth) + "px" : 0;
4256
+ this.offsetEl.style.bottom = this.axis.x.isOverflowing || this.axis.x.forceVisible ? "-" + (this.scrollbarWidth || this.minScrollbarWidth) + "px" : 0; // If floating scrollbar
4257
+
4258
+ if (!this.scrollbarWidth) {
4259
+ var paddingDirection = [this.isRtl ? 'paddingLeft' : 'paddingRight'];
4260
+ this.contentWrapperEl.style[paddingDirection] = this.axis.y.isOverflowing || this.axis.y.forceVisible ? this.minScrollbarWidth + "px" : 0;
4261
+ this.contentWrapperEl.style.paddingBottom = this.axis.x.isOverflowing || this.axis.x.forceVisible ? this.minScrollbarWidth + "px" : 0;
4262
+ }
4263
+ }
4264
+ /**
4265
+ * On scroll event handling
4266
+ */
4267
+ ;
4268
+
4269
+ _proto.onMouseMoveForAxis = function onMouseMoveForAxis(axis) {
4270
+ if (axis === void 0) {
4271
+ axis = 'y';
4272
+ }
4273
+
4274
+ this.axis[axis].track.rect = this.axis[axis].track.el.getBoundingClientRect();
4275
+ this.axis[axis].scrollbar.rect = this.axis[axis].scrollbar.el.getBoundingClientRect();
4276
+ var isWithinScrollbarBoundsX = this.isWithinBounds(this.axis[axis].scrollbar.rect);
4277
+
4278
+ if (isWithinScrollbarBoundsX) {
4279
+ this.axis[axis].scrollbar.el.classList.add(this.classNames.hover);
4280
+ } else {
4281
+ this.axis[axis].scrollbar.el.classList.remove(this.classNames.hover);
4282
+ }
4283
+
4284
+ if (this.isWithinBounds(this.axis[axis].track.rect)) {
4285
+ this.showScrollbar(axis);
4286
+ this.axis[axis].track.el.classList.add(this.classNames.hover);
4287
+ } else {
4288
+ this.axis[axis].track.el.classList.remove(this.classNames.hover);
4289
+ }
4290
+ };
4291
+
4292
+ _proto.onMouseLeaveForAxis = function onMouseLeaveForAxis(axis) {
4293
+ if (axis === void 0) {
4294
+ axis = 'y';
4295
+ }
4296
+
4297
+ this.axis[axis].track.el.classList.remove(this.classNames.hover);
4298
+ this.axis[axis].scrollbar.el.classList.remove(this.classNames.hover);
4299
+ };
4300
+
4301
+ /**
4302
+ * Show scrollbar
4303
+ */
4304
+ _proto.showScrollbar = function showScrollbar(axis) {
4305
+ if (axis === void 0) {
4306
+ axis = 'y';
4307
+ }
4308
+
4309
+ var scrollbar = this.axis[axis].scrollbar.el;
4310
+
4311
+ if (!this.axis[axis].isVisible) {
4312
+ scrollbar.classList.add(this.classNames.visible);
4313
+ this.axis[axis].isVisible = true;
4314
+ }
4315
+
4316
+ if (this.options.autoHide) {
4317
+ this.hideScrollbars();
4318
+ }
4319
+ }
4320
+ /**
4321
+ * Hide Scrollbar
4322
+ */
4323
+ ;
4324
+
4325
+ /**
4326
+ * on scrollbar handle drag movement starts
4327
+ */
4328
+ _proto.onDragStart = function onDragStart(e, axis) {
4329
+ if (axis === void 0) {
4330
+ axis = 'y';
4331
+ }
4332
+
4333
+ var scrollbar = this.axis[axis].scrollbar.el; // Measure how far the user's mouse is from the top of the scrollbar drag handle.
4334
+
4335
+ var eventOffset = axis === 'y' ? e.pageY : e.pageX;
4336
+ this.axis[axis].dragOffset = eventOffset - scrollbar.getBoundingClientRect()[this.axis[axis].offsetAttr];
4337
+ this.draggedAxis = axis;
4338
+ this.el.classList.add(this.classNames.dragging);
4339
+ document.addEventListener('mousemove', this.drag);
4340
+ document.addEventListener('mouseup', this.onEndDrag);
4341
+ }
4342
+ /**
4343
+ * Drag scrollbar handle
4344
+ */
4345
+ ;
4346
+
4347
+ /**
4348
+ * Getter for content element
4349
+ */
4350
+ _proto.getContentElement = function getContentElement() {
4351
+ return this.contentEl;
4352
+ }
4353
+ /**
4354
+ * Getter for original scrolling element
4355
+ */
4356
+ ;
4357
+
4358
+ _proto.getScrollElement = function getScrollElement() {
4359
+ return this.contentWrapperEl;
4360
+ };
4361
+
4362
+ _proto.removeListeners = function removeListeners() {
4363
+ var _this4 = this;
4364
+
4365
+ // Event listeners
4366
+ if (this.options.autoHide) {
4367
+ this.el.removeEventListener('mouseenter', this.onMouseEnter);
4368
+ }
4369
+
4370
+ ['mousedown', 'click', 'dblclick', 'touchstart', 'touchend', 'touchmove'].forEach(function (e) {
4371
+ _this4.el.removeEventListener(e, _this4.onPointerEvent);
4372
+ });
4373
+ this.el.removeEventListener('mousemove', this.onMouseMove);
4374
+ this.el.removeEventListener('mouseleave', this.onMouseLeave);
4375
+ this.contentWrapperEl.removeEventListener('scroll', this.onScroll);
4376
+ window.removeEventListener('resize', this.onWindowResize);
4377
+ this.mutationObserver && this.mutationObserver.disconnect();
4378
+ this.resizeObserver.disconnect(); // Cancel all debounced functions
4379
+
4380
+ this.recalculate.cancel();
4381
+ this.onMouseMove.cancel();
4382
+ this.hideScrollbars.cancel();
4383
+ this.onWindowResize.cancel();
4384
+ }
4385
+ /**
4386
+ * UnMount mutation observer and delete SimpleBar instance from DOM element
4387
+ */
4388
+ ;
4389
+
4390
+ _proto.unMount = function unMount() {
4391
+ this.removeListeners();
4392
+ this.el.SimpleBar = null;
4393
+ }
4394
+ /**
4395
+ * Recursively walks up the parent nodes looking for this.el
4396
+ */
4397
+ ;
4398
+
4399
+ _proto.isChildNode = function isChildNode(el) {
4400
+ if (el === null) return false;
4401
+ if (el === this.el) return true;
4402
+ return this.isChildNode(el.parentNode);
4403
+ }
4404
+ /**
4405
+ * Check if mouse is within bounds
4406
+ */
4407
+ ;
4408
+
4409
+ _proto.isWithinBounds = function isWithinBounds(bbox) {
4410
+ return this.mouseX >= bbox.left && this.mouseX <= bbox.left + bbox.width && this.mouseY >= bbox.top && this.mouseY <= bbox.top + bbox.height;
4411
+ };
4412
+
4413
+ return SimpleBar;
4414
+ }();
4415
+ /**
4416
+ * HTML API
4417
+ * Called only in a browser env.
4418
+ */
4419
+
4420
+
4421
+ SimpleBar.defaultOptions = {
4422
+ autoHide: true,
4423
+ forceVisible: false,
4424
+ classNames: {
4425
+ contentEl: 'simplebar-content',
4426
+ contentWrapper: 'simplebar-content-wrapper',
4427
+ offset: 'simplebar-offset',
4428
+ mask: 'simplebar-mask',
4429
+ wrapper: 'simplebar-wrapper',
4430
+ placeholder: 'simplebar-placeholder',
4431
+ scrollbar: 'simplebar-scrollbar',
4432
+ track: 'simplebar-track',
4433
+ heightAutoObserverWrapperEl: 'simplebar-height-auto-observer-wrapper',
4434
+ heightAutoObserverEl: 'simplebar-height-auto-observer',
4435
+ visible: 'simplebar-visible',
4436
+ horizontal: 'simplebar-horizontal',
4437
+ vertical: 'simplebar-vertical',
4438
+ hover: 'simplebar-hover',
4439
+ dragging: 'simplebar-dragging'
4440
+ },
4441
+ scrollbarMinSize: 25,
4442
+ scrollbarMaxSize: 0,
4443
+ timeout: 1000
4444
+ };
4445
+
4446
+ if (canUseDom) {
4447
+ SimpleBar.initHtmlApi();
4448
+ }
4449
+
4450
+ return SimpleBar;
4451
+
4452
+ }));
assets/js/simplebar.min.js ADDED
@@ -0,0 +1 @@
 
1
+ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).SimpleBar=e()}(this,function(){"use strict";var y=function(t){if("function"!=typeof t)throw TypeError(String(t)+" is not a function");return t},h=function(t){try{return!!t()}catch(t){return!0}},e={}.toString,n=function(t){return e.call(t).slice(8,-1)},i="".split,x=h(function(){return!Object("z").propertyIsEnumerable(0)})?function(t){return"String"==n(t)?i.call(t,""):Object(t)}:Object,f=function(t){if(null==t)throw TypeError("Can't call method on "+t);return t},_=function(t){return Object(f(t))},r=Math.ceil,s=Math.floor,S=function(t){return isNaN(t=+t)?0:(0<t?s:r)(t)},o=Math.min,A=function(t){return 0<t?o(S(t),9007199254740991):0},a=function(t){return"object"==typeof t?null!==t:"function"==typeof t},l=Array.isArray||function(t){return"Array"==n(t)},t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function c(t,e){return t(e={exports:{}},e.exports),e.exports}var u,d,p,v,g="object"==typeof window&&window&&window.Math==Math?window:"object"==typeof self&&self&&self.Math==Math?self:Function("return this")(),b=!h(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}),m=g.document,E=a(m)&&a(m.createElement),w=!b&&!h(function(){return 7!=Object.defineProperty((t="div",E?m.createElement(t):{}),"a",{get:function(){return 7}}).a;var t}),L=function(t){if(!a(t))throw TypeError(String(t)+" is not an object");return t},O=function(t,e){if(!a(t))return t;var i,r;if(e&&"function"==typeof(i=t.toString)&&!a(r=i.call(t)))return r;if("function"==typeof(i=t.valueOf)&&!a(r=i.call(t)))return r;if(!e&&"function"==typeof(i=t.toString)&&!a(r=i.call(t)))return r;throw TypeError("Can't convert object to primitive value")},M=Object.defineProperty,k={f:b?M:function(t,e,i){if(L(t),e=O(e,!0),L(i),w)try{return M(t,e,i)}catch(t){}if("get"in i||"set"in i)throw TypeError("Accessors not supported");return"value"in i&&(t[e]=i.value),t}},W=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}},T=b?function(t,e,i){return k.f(t,e,W(1,i))}:function(t,e,i){return t[e]=i,t},R=function(e,i){try{T(g,e,i)}catch(t){g[e]=i}return i},j=c(function(t){var e="__core-js_shared__",i=g[e]||R(e,{});(t.exports=function(t,e){return i[t]||(i[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.0.1",mode:"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})}),N=0,z=Math.random(),C=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++N+z).toString(36))},V=!h(function(){return!String(Symbol())}),D=j("wks"),B=g.Symbol,I=function(t){return D[t]||(D[t]=V&&B[t]||(V?B:C)("Symbol."+t))},P=I("species"),H=function(t,e){var i;return l(t)&&("function"!=typeof(i=t.constructor)||i!==Array&&!l(i.prototype)?a(i)&&null===(i=i[P])&&(i=void 0):i=void 0),new(void 0===i?Array:i)(0===e?0:e)},F=function(h,t){var f=1==h,d=2==h,p=3==h,v=4==h,g=6==h,b=5==h||g,m=t||H;return function(t,e,i){for(var r,n,s=_(t),o=x(s),a=function(r,n,t){if(y(r),void 0===n)return r;switch(t){case 0:return function(){return r.call(n)};case 1:return function(t){return r.call(n,t)};case 2:return function(t,e){return r.call(n,t,e)};case 3:return function(t,e,i){return r.call(n,t,e,i)}}return function(){return r.apply(n,arguments)}}(e,i,3),l=A(o.length),c=0,u=f?m(t,l):d?m(t,0):void 0;c<l;c++)if((b||c in o)&&(n=a(r=o[c],c,s),h))if(f)u[c]=n;else if(n)switch(h){case 3:return!0;case 5:return r;case 6:return c;case 2:u.push(r)}else if(v)return!1;return g?-1:p||v?v:u}},q=I("species"),$={}.propertyIsEnumerable,X=Object.getOwnPropertyDescriptor,Y={f:X&&!$.call({1:2},1)?function(t){var e=X(this,t);return!!e&&e.enumerable}:$},G=function(t){return x(f(t))},K={}.hasOwnProperty,U=function(t,e){return K.call(t,e)},J=Object.getOwnPropertyDescriptor,Q={f:b?J:function(t,e){if(t=G(t),e=O(e,!0),w)try{return J(t,e)}catch(t){}if(U(t,e))return W(!Y.f.call(t,e),t[e])}},Z=j("native-function-to-string",Function.toString),tt=g.WeakMap,et="function"==typeof tt&&/native code/.test(Z.call(tt)),it=j("keys"),rt={},nt=g.WeakMap;if(et){var st=new nt,ot=st.get,at=st.has,lt=st.set;u=function(t,e){return lt.call(st,t,e),e},d=function(t){return ot.call(st,t)||{}},p=function(t){return at.call(st,t)}}else{var ct=it[v="state"]||(it[v]=C(v));rt[ct]=!0,u=function(t,e){return T(t,ct,e),e},d=function(t){return U(t,ct)?t[ct]:{}},p=function(t){return U(t,ct)}}var ut,ht,ft={set:u,get:d,has:p,enforce:function(t){return p(t)?d(t):u(t,{})},getterFor:function(i){return function(t){var e;if(!a(t)||(e=d(t)).type!==i)throw TypeError("Incompatible receiver, "+i+" required");return e}}},dt=c(function(t){var e=ft.get,a=ft.enforce,l=String(Z).split("toString");j("inspectSource",function(t){return Z.call(t)}),(t.exports=function(t,e,i,r){var n=!!r&&!!r.unsafe,s=!!r&&!!r.enumerable,o=!!r&&!!r.noTargetGet;"function"==typeof i&&("string"!=typeof e||U(i,"name")||T(i,"name",e),a(i).source=l.join("string"==typeof e?e:"")),t!==g?(n?!o&&t[e]&&(s=!0):delete t[e],s?t[e]=i:T(t,e,i)):s?t[e]=i:R(e,i)})(Function.prototype,"toString",function(){return"function"==typeof this&&e(this).source||Z.call(this)})}),pt=Math.max,vt=Math.min,gt=(ut=!1,function(t,e,i){var r,n,s,o=G(t),a=A(o.length),l=(r=a,(n=S(i))<0?pt(n+r,0):vt(n,r));if(ut&&e!=e){for(;l<a;)if((s=o[l++])!=s)return!0}else for(;l<a;l++)if((ut||l in o)&&o[l]===e)return ut||l||0;return!ut&&-1}),bt=function(t,e){var i,r=G(t),n=0,s=[];for(i in r)!U(rt,i)&&U(r,i)&&s.push(i);for(;e.length>n;)U(r,i=e[n++])&&(~gt(s,i)||s.push(i));return s},mt=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],yt=mt.concat("length","prototype"),xt={f:Object.getOwnPropertyNames||function(t){return bt(t,yt)}},Et={f:Object.getOwnPropertySymbols},wt=g.Reflect,Ot=wt&&wt.ownKeys||function(t){var e=xt.f(L(t)),i=Et.f;return i?e.concat(i(t)):e},_t=function(t,e){for(var i=Ot(e),r=k.f,n=Q.f,s=0;s<i.length;s++){var o=i[s];U(t,o)||r(t,o,n(e,o))}},St=/#|\.prototype\./,At=function(t,e){var i=Mt[Lt(t)];return i==Wt||i!=kt&&("function"==typeof e?h(e):!!e)},Lt=At.normalize=function(t){return String(t).replace(St,".").toLowerCase()},Mt=At.data={},kt=At.NATIVE="N",Wt=At.POLYFILL="P",Tt=At,Rt=Q.f,jt=function(t,e){var i,r,n,s,o,a=t.target,l=t.global,c=t.stat;if(i=l?g:c?g[a]||R(a,{}):(g[a]||{}).prototype)for(r in e){if(s=e[r],n=t.noTargetGet?(o=Rt(i,r))&&o.value:i[r],!Tt(l?r:a+(c?".":"#")+r,t.forced)&&void 0!==n){if(typeof s==typeof n)continue;_t(s,n)}(t.sham||n&&n.sham)&&T(s,"sham",!0),dt(i,r,s,t)}},Nt=F(2);jt({target:"Array",proto:!0,forced:!(ht="filter",!h(function(){var t=[];return(t.constructor={})[q]=function(){return{foo:1}},1!==t[ht](Boolean).foo}))},{filter:function(t){return Nt(this,t,arguments[1])}});var zt=function(t,e){var i=[][t];return!i||!h(function(){i.call(null,e||function(){throw 1},1)})},Ct=[].forEach,Vt=F(0),Dt=zt("forEach")?function(t){return Vt(this,t,arguments[1])}:Ct;jt({target:"Array",proto:!0,forced:[].forEach!=Dt},{forEach:Dt});jt({target:"Array",proto:!0,forced:zt("reduce")},{reduce:function(t){return function(t,e,i,r,n){y(e);var s=_(t),o=x(s),a=A(s.length),l=n?a-1:0,c=n?-1:1;if(i<2)for(;;){if(l in o){r=o[l],l+=c;break}if(l+=c,n?l<0:a<=l)throw TypeError("Reduce of empty array with no initial value")}for(;n?0<=l:l<a;l+=c)l in o&&(r=e(r,o[l],l,s));return r}(this,t,arguments.length,arguments[1],!1)}});var Bt=k.f,It=Function.prototype,Pt=It.toString,Ht=/^\s*function ([^ (]*)/;!b||"name"in It||Bt(It,"name",{configurable:!0,get:function(){try{return Pt.call(this).match(Ht)[1]}catch(t){return""}}});var Ft=Object.keys||function(t){return bt(t,mt)},qt=Object.assign,$t=!qt||h(function(){var t={},e={},i=Symbol(),r="abcdefghijklmnopqrst";return t[i]=7,r.split("").forEach(function(t){e[t]=t}),7!=qt({},t)[i]||Ft(qt({},e)).join("")!=r})?function(t,e){for(var i=_(t),r=arguments.length,n=1,s=Et.f,o=Y.f;n<r;)for(var a,l=x(arguments[n++]),c=s?Ft(l).concat(s(l)):Ft(l),u=c.length,h=0;h<u;)o.call(l,a=c[h++])&&(i[a]=l[a]);return i}:qt;jt({target:"Object",stat:!0,forced:Object.assign!==$t},{assign:$t});var Xt="\t\n\v\f\r                 \u2028\u2029\ufeff",Yt="["+Xt+"]",Gt=RegExp("^"+Yt+Yt+"*"),Kt=RegExp(Yt+Yt+"*$"),Ut=g.parseInt,Jt=/^[-+]?0[xX]/,Qt=8!==Ut(Xt+"08")||22!==Ut(Xt+"0x16")?function(t,e){var i,r,n=(i=String(t),r=3,i=String(f(i)),1&r&&(i=i.replace(Gt,"")),2&r&&(i=i.replace(Kt,"")),i);return Ut(n,e>>>0||(Jt.test(n)?16:10))}:Ut;jt({global:!0,forced:parseInt!=Qt},{parseInt:Qt});var Zt,te,ee=RegExp.prototype.exec,ie=String.prototype.replace,re=ee,ne=(Zt=/a/,te=/b*/g,ee.call(Zt,"a"),ee.call(te,"a"),0!==Zt.lastIndex||0!==te.lastIndex),se=void 0!==/()??/.exec("")[1];(ne||se)&&(re=function(t){var e,i,r,n,s=this;return se&&(i=new RegExp("^"+s.source+"$(?!\\s)",function(){var t=L(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}.call(s))),ne&&(e=s.lastIndex),r=ee.call(s,t),ne&&r&&(s.lastIndex=s.global?r.index+r[0].length:e),se&&r&&1<r.length&&ie.call(r[0],i,function(){for(n=1;n<arguments.length-2;n++)void 0===arguments[n]&&(r[n]=void 0)}),r});var oe=re;jt({target:"RegExp",proto:!0,forced:/./.exec!==oe},{exec:oe});var ae=function(t,e,i){return e+(i?(r=t,n=e,s=!0,l=String(f(r)),c=S(n),u=l.length,c<0||u<=c?s?"":void 0:(o=l.charCodeAt(c))<55296||56319<o||c+1===u||(a=l.charCodeAt(c+1))<56320||57343<a?s?l.charAt(c):o:s?l.slice(c,c+2):a-56320+(o-55296<<10)+65536).length:1);var r,n,s,o,a,l,c,u},le=function(t,e){var i=t.exec;if("function"==typeof i){var r=i.call(t,e);if("object"!=typeof r)throw TypeError("RegExp exec method returned something other than an Object or null");return r}if("RegExp"!==n(t))throw TypeError("RegExp#exec called on incompatible receiver");return oe.call(t,e)},ce=I("species"),ue=!h(function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$<a>")}),he=!h(function(){var t=/(?:)/,e=t.exec;t.exec=function(){return e.apply(this,arguments)};var i="ab".split(t);return 2!==i.length||"a"!==i[0]||"b"!==i[1]}),fe=function(i,t,e,r){var n=I(i),s=!h(function(){var t={};return t[n]=function(){return 7},7!=""[i](t)}),o=s&&!h(function(){var t=!1,e=/a/;return e.exec=function(){return t=!0,null},"split"===i&&(e.constructor={},e.constructor[ce]=function(){return e}),e[n](""),!t});if(!s||!o||"replace"===i&&!ue||"split"===i&&!he){var a=/./[n],l=e(n,""[i],function(t,e,i,r,n){return e.exec===oe?s&&!n?{done:!0,value:a.call(e,i,r)}:{done:!0,value:t.call(i,e,r)}:{done:!1}}),c=l[0],u=l[1];dt(String.prototype,i,c),dt(RegExp.prototype,n,2==t?function(t,e){return u.call(t,this,e)}:function(t){return u.call(t,this)}),r&&T(RegExp.prototype[n],"sham",!0)}};fe("match",1,function(r,c,u){return[function(t){var e=f(this),i=null==t?void 0:t[r];return void 0!==i?i.call(t,e):new RegExp(t)[r](String(e))},function(t){var e=u(c,t,this);if(e.done)return e.value;var i=L(t),r=String(this);if(!i.global)return le(i,r);for(var n,s=i.unicode,o=[],a=i.lastIndex=0;null!==(n=le(i,r));){var l=String(n[0]);""===(o[a]=l)&&(i.lastIndex=ae(r,A(i.lastIndex),s)),a++}return 0===a?null:o}]});var de=Math.max,pe=Math.min,ve=Math.floor,ge=/\$([$&`']|\d\d?|<[^>]*>)/g,be=/\$([$&`']|\d\d?)/g;fe("replace",2,function(n,E,w){return[function(t,e){var i=f(this),r=null==t?void 0:t[n];return void 0!==r?r.call(t,i,e):E.call(String(i),t,e)},function(t,e){var i=w(E,t,this,e);if(i.done)return i.value;var r=L(t),n=String(this),s="function"==typeof e;s||(e=String(e));var o=r.global;if(o){var a=r.unicode;r.lastIndex=0}for(var l=[];;){var c=le(r,n);if(null===c)break;if(l.push(c),!o)break;""===String(c[0])&&(r.lastIndex=ae(n,A(r.lastIndex),a))}for(var u,h="",f=0,d=0;d<l.length;d++){c=l[d];for(var p=String(c[0]),v=de(pe(S(c.index),n.length),0),g=[],b=1;b<c.length;b++)g.push(void 0===(u=c[b])?u:String(u));var m=c.groups;if(s){var y=[p].concat(g,v,n);void 0!==m&&y.push(m);var x=String(e.apply(void 0,y))}else x=O(p,n,v,g,m,e);f<=v&&(h+=n.slice(f,v)+x,f=v+p.length)}return h+n.slice(f)}];function O(s,o,a,l,c,t){var u=a+s.length,h=l.length,e=be;return void 0!==c&&(c=_(c),e=ge),E.call(t,e,function(t,e){var i;switch(e.charAt(0)){case"$":return"$";case"&":return s;case"`":return o.slice(0,a);case"'":return o.slice(u);case"<":i=c[e.slice(1,-1)];break;default:var r=+e;if(0===r)return t;if(h<r){var n=ve(r/10);return 0===n?t:n<=h?void 0===l[n-1]?e.charAt(1):l[n-1]+e.charAt(1):t}i=l[r-1]}return void 0===i?"":i})}});for(var me in{CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}){var ye=g[me],xe=ye&&ye.prototype;if(xe&&xe.forEach!==Dt)try{T(xe,"forEach",Dt)}catch(t){xe.forEach=Dt}}var Ee=c(function(t,e){t.exports=function(){if("undefined"==typeof document)return 0;var t,e=document.body,i=document.createElement("div"),r=i.style;return r.position="absolute",r.top=r.left="-9999px",r.width=r.height="100px",r.overflow="scroll",e.appendChild(i),t=i.offsetWidth-i.clientWidth,e.removeChild(i),t}}),we="Expected a function",Oe=NaN,_e="[object Symbol]",Se=/^\s+|\s+$/g,Ae=/^[-+]0x[0-9a-f]+$/i,Le=/^0b[01]+$/i,Me=/^0o[0-7]+$/i,ke=parseInt,We="object"==typeof t&&t&&t.Object===Object&&t,Te="object"==typeof self&&self&&self.Object===Object&&self,Re=We||Te||Function("return this")(),je=Object.prototype.toString,Ne=Math.max,ze=Math.min,Ce=function(){return Re.Date.now()};function Ve(r,n,t){var s,o,a,l,c,u,h=0,f=!1,d=!1,e=!0;if("function"!=typeof r)throw new TypeError(we);function p(t){var e=s,i=o;return s=o=void 0,h=t,l=r.apply(i,e)}function v(t){var e=t-u;return void 0===u||n<=e||e<0||d&&a<=t-h}function g(){var t,e,i=Ce();if(v(i))return b(i);c=setTimeout(g,(e=n-((t=i)-u),d?ze(e,a-(t-h)):e))}function b(t){return c=void 0,e&&s?p(t):(s=o=void 0,l)}function i(){var t,e=Ce(),i=v(e);if(s=arguments,o=this,u=e,i){if(void 0===c)return h=t=u,c=setTimeout(g,n),f?p(t):l;if(d)return c=setTimeout(g,n),p(u)}return void 0===c&&(c=setTimeout(g,n)),l}return n=Be(n)||0,De(t)&&(f=!!t.leading,a=(d="maxWait"in t)?Ne(Be(t.maxWait)||0,n):a,e="trailing"in t?!!t.trailing:e),i.cancel=function(){void 0!==c&&clearTimeout(c),s=u=o=c=void(h=0)},i.flush=function(){return void 0===c?l:b(Ce())},i}function De(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function Be(t){if("number"==typeof t)return t;if("symbol"==typeof(e=t)||(i=e)&&"object"==typeof i&&je.call(e)==_e)return Oe;var e,i;if(De(t)){var r="function"==typeof t.valueOf?t.valueOf():t;t=De(r)?r+"":r}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(Se,"");var n=Le.test(t);return n||Me.test(t)?ke(t.slice(2),n?2:8):Ae.test(t)?Oe:+t}var Ie=function(t,e,i){var r=!0,n=!0;if("function"!=typeof t)throw new TypeError(we);return De(i)&&(r="leading"in i?!!i.leading:r,n="trailing"in i?!!i.trailing:n),Ve(t,e,{leading:r,maxWait:e,trailing:n})},Pe=NaN,He="[object Symbol]",Fe=/^\s+|\s+$/g,qe=/^[-+]0x[0-9a-f]+$/i,$e=/^0b[01]+$/i,Xe=/^0o[0-7]+$/i,Ye=parseInt,Ge="object"==typeof t&&t&&t.Object===Object&&t,Ke="object"==typeof self&&self&&self.Object===Object&&self,Ue=Ge||Ke||Function("return this")(),Je=Object.prototype.toString,Qe=Math.max,Ze=Math.min,ti=function(){return Ue.Date.now()};function ei(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function ii(t){if("number"==typeof t)return t;if("symbol"==typeof(e=t)||(i=e)&&"object"==typeof i&&Je.call(e)==He)return Pe;var e,i;if(ei(t)){var r="function"==typeof t.valueOf?t.valueOf():t;t=ei(r)?r+"":r}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(Fe,"");var n=$e.test(t);return n||Xe.test(t)?Ye(t.slice(2),n?2:8):qe.test(t)?Pe:+t}var ri=function(r,n,t){var s,o,a,l,c,u,h=0,f=!1,d=!1,e=!0;if("function"!=typeof r)throw new TypeError("Expected a function");function p(t){var e=s,i=o;return s=o=void 0,h=t,l=r.apply(i,e)}function v(t){var e=t-u;return void 0===u||n<=e||e<0||d&&a<=t-h}function g(){var t,e,i=ti();if(v(i))return b(i);c=setTimeout(g,(e=n-((t=i)-u),d?Ze(e,a-(t-h)):e))}function b(t){return c=void 0,e&&s?p(t):(s=o=void 0,l)}function i(){var t,e=ti(),i=v(e);if(s=arguments,o=this,u=e,i){if(void 0===c)return h=t=u,c=setTimeout(g,n),f?p(t):l;if(d)return c=setTimeout(g,n),p(u)}return void 0===c&&(c=setTimeout(g,n)),l}return n=ii(n)||0,ei(t)&&(f=!!t.leading,a=(d="maxWait"in t)?Qe(ii(t.maxWait)||0,n):a,e="trailing"in t?!!t.trailing:e),i.cancel=function(){void 0!==c&&clearTimeout(c),s=u=o=c=void(h=0)},i.flush=function(){return void 0===c?l:b(ti())},i},ni="Expected a function",si="__lodash_hash_undefined__",oi="[object Function]",ai="[object GeneratorFunction]",li=/^\[object .+?Constructor\]$/,ci="object"==typeof t&&t&&t.Object===Object&&t,ui="object"==typeof self&&self&&self.Object===Object&&self,hi=ci||ui||Function("return this")();var fi,di=Array.prototype,pi=Function.prototype,vi=Object.prototype,gi=hi["__core-js_shared__"],bi=(fi=/[^.]+$/.exec(gi&&gi.keys&&gi.keys.IE_PROTO||""))?"Symbol(src)_1."+fi:"",mi=pi.toString,yi=vi.hasOwnProperty,xi=vi.toString,Ei=RegExp("^"+mi.call(yi).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),wi=di.splice,Oi=Ti(hi,"Map"),_i=Ti(Object,"create");function Si(t){var e=-1,i=t?t.length:0;for(this.clear();++e<i;){var r=t[e];this.set(r[0],r[1])}}function Ai(t){var e=-1,i=t?t.length:0;for(this.clear();++e<i;){var r=t[e];this.set(r[0],r[1])}}function Li(t){var e=-1,i=t?t.length:0;for(this.clear();++e<i;){var r=t[e];this.set(r[0],r[1])}}function Mi(t,e){for(var i,r,n=t.length;n--;)if((i=t[n][0])===(r=e)||i!=i&&r!=r)return n;return-1}function ki(t){return!(!ji(t)||(e=t,bi&&bi in e))&&((r=ji(i=t)?xi.call(i):"")==oi||r==ai||function(t){var e=!1;if(null!=t&&"function"!=typeof t.toString)try{e=!!(t+"")}catch(t){}return e}(t)?Ei:li).test(function(t){if(null!=t){try{return mi.call(t)}catch(t){}try{return t+""}catch(t){}}return""}(t));var e,i,r}function Wi(t,e){var i,r,n=t.__data__;return("string"==(r=typeof(i=e))||"number"==r||"symbol"==r||"boolean"==r?"__proto__"!==i:null===i)?n["string"==typeof e?"string":"hash"]:n.map}function Ti(t,e){var i,r,n=(r=e,null==(i=t)?void 0:i[r]);return ki(n)?n:void 0}function Ri(n,s){if("function"!=typeof n||s&&"function"!=typeof s)throw new TypeError(ni);var o=function(){var t=arguments,e=s?s.apply(this,t):t[0],i=o.cache;if(i.has(e))return i.get(e);var r=n.apply(this,t);return o.cache=i.set(e,r),r};return o.cache=new(Ri.Cache||Li),o}function ji(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}Si.prototype.clear=function(){this.__data__=_i?_i(null):{}},Si.prototype.delete=function(t){return this.has(t)&&delete this.__data__[t]},Si.prototype.get=function(t){var e=this.__data__;if(_i){var i=e[t];return i===si?void 0:i}return yi.call(e,t)?e[t]:void 0},Si.prototype.has=function(t){var e=this.__data__;return _i?void 0!==e[t]:yi.call(e,t)},Si.prototype.set=function(t,e){return this.__data__[t]=_i&&void 0===e?si:e,this},Ai.prototype.clear=function(){this.__data__=[]},Ai.prototype.delete=function(t){var e=this.__data__,i=Mi(e,t);return!(i<0||(i==e.length-1?e.pop():wi.call(e,i,1),0))},Ai.prototype.get=function(t){var e=this.__data__,i=Mi(e,t);return i<0?void 0:e[i][1]},Ai.prototype.has=function(t){return-1<Mi(this.__data__,t)},Ai.prototype.set=function(t,e){var i=this.__data__,r=Mi(i,t);return r<0?i.push([t,e]):i[r][1]=e,this},Li.prototype.clear=function(){this.__data__={hash:new Si,map:new(Oi||Ai),string:new Si}},Li.prototype.delete=function(t){return Wi(this,t).delete(t)},Li.prototype.get=function(t){return Wi(this,t).get(t)},Li.prototype.has=function(t){return Wi(this,t).has(t)},Li.prototype.set=function(t,e){return Wi(this,t).set(t,e),this},Ri.Cache=Li;var Ni=Ri,zi=function(){if("undefined"!=typeof Map)return Map;function r(t,i){var r=-1;return t.some(function(t,e){return t[0]===i&&(r=e,!0)}),r}return function(){function t(){this.__entries__=[]}return Object.defineProperty(t.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),t.prototype.get=function(t){var e=r(this.__entries__,t),i=this.__entries__[e];return i&&i[1]},t.prototype.set=function(t,e){var i=r(this.__entries__,t);~i?this.__entries__[i][1]=e:this.__entries__.push([t,e])},t.prototype.delete=function(t){var e=this.__entries__,i=r(e,t);~i&&e.splice(i,1)},t.prototype.has=function(t){return!!~r(this.__entries__,t)},t.prototype.clear=function(){this.__entries__.splice(0)},t.prototype.forEach=function(t,e){void 0===e&&(e=null);for(var i=0,r=this.__entries__;i<r.length;i++){var n=r[i];t.call(e,n[1],n[0])}},t}()}(),Ci="undefined"!=typeof window&&"undefined"!=typeof document&&window.document===document,Vi="undefined"!=typeof global&&global.Math===Math?global:"undefined"!=typeof self&&self.Math===Math?self:"undefined"!=typeof window&&window.Math===Math?window:Function("return this")(),Di="function"==typeof requestAnimationFrame?requestAnimationFrame.bind(Vi):function(t){return setTimeout(function(){return t(Date.now())},1e3/60)},Bi=2;var Ii=["top","right","bottom","left","width","height","size","weight"],Pi="undefined"!=typeof MutationObserver,Hi=function(){function t(){this.connected_=!1,this.mutationEventsAdded_=!1,this.mutationsObserver_=null,this.observers_=[],this.onTransitionEnd_=this.onTransitionEnd_.bind(this),this.refresh=function(t,e){var i=!1,r=!1,n=0;function s(){i&&(i=!1,t()),r&&a()}function o(){Di(s)}function a(){var t=Date.now();if(i){if(t-n<Bi)return;r=!0}else r=!(i=!0),setTimeout(o,e);n=t}return a}(this.refresh.bind(this),20)}return t.prototype.addObserver=function(t){~this.observers_.indexOf(t)||this.observers_.push(t),this.connected_||this.connect_()},t.prototype.removeObserver=function(t){var e=this.observers_,i=e.indexOf(t);~i&&e.splice(i,1),!e.length&&this.connected_&&this.disconnect_()},t.prototype.refresh=function(){this.updateObservers_()&&this.refresh()},t.prototype.updateObservers_=function(){var t=this.observers_.filter(function(t){return t.gatherActive(),t.hasActive()});return t.forEach(function(t){return t.broadcastActive()}),0<t.length},t.prototype.connect_=function(){Ci&&!this.connected_&&(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),Pi?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},t.prototype.disconnect_=function(){Ci&&this.connected_&&(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},t.prototype.onTransitionEnd_=function(t){var e=t.propertyName,i=void 0===e?"":e;Ii.some(function(t){return!!~i.indexOf(t)})&&this.refresh()},t.getInstance=function(){return this.instance_||(this.instance_=new t),this.instance_},t.instance_=null,t}(),Fi=function(t,e){for(var i=0,r=Object.keys(e);i<r.length;i++){var n=r[i];Object.defineProperty(t,n,{value:e[n],enumerable:!1,writable:!1,configurable:!0})}return t},qi=function(t){return t&&t.ownerDocument&&t.ownerDocument.defaultView||Vi},$i=Ji(0,0,0,0);function Xi(t){return parseFloat(t)||0}function Yi(i){for(var t=[],e=1;e<arguments.length;e++)t[e-1]=arguments[e];return t.reduce(function(t,e){return t+Xi(i["border-"+e+"-width"])},0)}function Gi(t){var e=t.clientWidth,i=t.clientHeight;if(!e&&!i)return $i;var r,n=qi(t).getComputedStyle(t),s=function(t){for(var e={},i=0,r=["top","right","bottom","left"];i<r.length;i++){var n=r[i],s=t["padding-"+n];e[n]=Xi(s)}return e}(n),o=s.left+s.right,a=s.top+s.bottom,l=Xi(n.width),c=Xi(n.height);if("border-box"===n.boxSizing&&(Math.round(l+o)!==e&&(l-=Yi(n,"left","right")+o),Math.round(c+a)!==i&&(c-=Yi(n,"top","bottom")+a)),(r=t)!==qi(r).document.documentElement){var u=Math.round(l+o)-e,h=Math.round(c+a)-i;1!==Math.abs(u)&&(l-=u),1!==Math.abs(h)&&(c-=h)}return Ji(s.left,s.top,l,c)}var Ki="undefined"!=typeof SVGGraphicsElement?function(t){return t instanceof qi(t).SVGGraphicsElement}:function(t){return t instanceof qi(t).SVGElement&&"function"==typeof t.getBBox};function Ui(t){return Ci?Ki(t)?Ji(0,0,(e=t.getBBox()).width,e.height):Gi(t):$i;var e}function Ji(t,e,i,r){return{x:t,y:e,width:i,height:r}}var Qi=function(){function t(t){this.broadcastWidth=0,this.broadcastHeight=0,this.contentRect_=Ji(0,0,0,0),this.target=t}return t.prototype.isActive=function(){var t=Ui(this.target);return(this.contentRect_=t).width!==this.broadcastWidth||t.height!==this.broadcastHeight},t.prototype.broadcastRect=function(){var t=this.contentRect_;return this.broadcastWidth=t.width,this.broadcastHeight=t.height,t},t}(),Zi=function(t,e){var i,r,n,s,o,a,l,c=(r=(i=e).x,n=i.y,s=i.width,o=i.height,a="undefined"!=typeof DOMRectReadOnly?DOMRectReadOnly:Object,l=Object.create(a.prototype),Fi(l,{x:r,y:n,width:s,height:o,top:n,right:r+s,bottom:o+n,left:r}),l);Fi(this,{target:t,contentRect:c})},tr=function(){function t(t,e,i){if(this.activeObservations_=[],this.observations_=new zi,"function"!=typeof t)throw new TypeError("The callback provided as parameter 1 is not a function.");this.callback_=t,this.controller_=e,this.callbackCtx_=i}return t.prototype.observe=function(t){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if("undefined"!=typeof Element&&Element instanceof Object){if(!(t instanceof qi(t).Element))throw new TypeError('parameter 1 is not of type "Element".');var e=this.observations_;e.has(t)||(e.set(t,new Qi(t)),this.controller_.addObserver(this),this.controller_.refresh())}},t.prototype.unobserve=function(t){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if("undefined"!=typeof Element&&Element instanceof Object){if(!(t instanceof qi(t).Element))throw new TypeError('parameter 1 is not of type "Element".');var e=this.observations_;e.has(t)&&(e.delete(t),e.size||this.controller_.removeObserver(this))}},t.prototype.disconnect=function(){this.clearActive(),this.observations_.clear(),this.controller_.removeObserver(this)},t.prototype.gatherActive=function(){var e=this;this.clearActive(),this.observations_.forEach(function(t){t.isActive()&&e.activeObservations_.push(t)})},t.prototype.broadcastActive=function(){if(this.hasActive()){var t=this.callbackCtx_,e=this.activeObservations_.map(function(t){return new Zi(t.target,t.broadcastRect())});this.callback_.call(t,e,t),this.clearActive()}},t.prototype.clearActive=function(){this.activeObservations_.splice(0)},t.prototype.hasActive=function(){return 0<this.activeObservations_.length},t}(),er="undefined"!=typeof WeakMap?new WeakMap:new zi,ir=function t(e){if(!(this instanceof t))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var i=Hi.getInstance(),r=new tr(e,i,this);er.set(this,r)};["observe","unobserve","disconnect"].forEach(function(e){ir.prototype[e]=function(){var t;return(t=er.get(this))[e].apply(t,arguments)}});var rr=void 0!==Vi.ResizeObserver?Vi.ResizeObserver:ir,nr=!("undefined"==typeof window||!window.document||!window.document.createElement),sr=function(){function l(t,e){var s=this;this.onScroll=function(){s.scrollXTicking||(window.requestAnimationFrame(s.scrollX),s.scrollXTicking=!0),s.scrollYTicking||(window.requestAnimationFrame(s.scrollY),s.scrollYTicking=!0)},this.scrollX=function(){s.axis.x.isOverflowing&&(s.showScrollbar("x"),s.positionScrollbar("x")),s.scrollXTicking=!1},this.scrollY=function(){s.axis.y.isOverflowing&&(s.showScrollbar("y"),s.positionScrollbar("y")),s.scrollYTicking=!1},this.onMouseEnter=function(){s.showScrollbar("x"),s.showScrollbar("y")},this.onMouseMove=function(t){s.mouseX=t.clientX,s.mouseY=t.clientY,(s.axis.x.isOverflowing||s.axis.x.forceVisible)&&s.onMouseMoveForAxis("x"),(s.axis.y.isOverflowing||s.axis.y.forceVisible)&&s.onMouseMoveForAxis("y")},this.onMouseLeave=function(){s.onMouseMove.cancel(),(s.axis.x.isOverflowing||s.axis.x.forceVisible)&&s.onMouseLeaveForAxis("x"),(s.axis.y.isOverflowing||s.axis.y.forceVisible)&&s.onMouseLeaveForAxis("y"),s.mouseX=-1,s.mouseY=-1},this.onWindowResize=function(){s.scrollbarWidth=Ee(),s.hideNativeScrollbar()},this.hideScrollbars=function(){s.axis.x.track.rect=s.axis.x.track.el.getBoundingClientRect(),s.axis.y.track.rect=s.axis.y.track.el.getBoundingClientRect(),s.isWithinBounds(s.axis.y.track.rect)||(s.axis.y.scrollbar.el.classList.remove(s.classNames.visible),s.axis.y.isVisible=!1),s.isWithinBounds(s.axis.x.track.rect)||(s.axis.x.scrollbar.el.classList.remove(s.classNames.visible),s.axis.x.isVisible=!1)},this.onPointerEvent=function(t){var e,i;s.axis.x.scrollbar.rect=s.axis.x.scrollbar.el.getBoundingClientRect(),s.axis.y.scrollbar.rect=s.axis.y.scrollbar.el.getBoundingClientRect(),(s.axis.x.isOverflowing||s.axis.x.forceVisible)&&(i=s.isWithinBounds(s.axis.x.scrollbar.rect)),(s.axis.y.isOverflowing||s.axis.y.forceVisible)&&(e=s.isWithinBounds(s.axis.y.scrollbar.rect)),(e||i)&&(t.preventDefault(),t.stopPropagation(),"mousedown"===t.type&&(e&&s.onDragStart(t,"y"),i&&s.onDragStart(t,"x")))},this.drag=function(t){var e=s.axis[s.draggedAxis].track,i=e.rect[s.axis[s.draggedAxis].sizeAttr],r=s.axis[s.draggedAxis].scrollbar;t.preventDefault(),t.stopPropagation();var n=(("y"===s.draggedAxis?t.pageY:t.pageX)-e.rect[s.axis[s.draggedAxis].offsetAttr]-s.axis[s.draggedAxis].dragOffset)/e.rect[s.axis[s.draggedAxis].sizeAttr]*s.contentWrapperEl[s.axis[s.draggedAxis].scrollSizeAttr];"x"===s.draggedAxis&&(n=s.isRtl&&l.getRtlHelpers().isRtlScrollbarInverted?n-(i+r.size):n,n=s.isRtl&&l.getRtlHelpers().isRtlScrollingInverted?-n:n),s.contentWrapperEl[s.axis[s.draggedAxis].scrollOffsetAttr]=n},this.onEndDrag=function(t){t.preventDefault(),t.stopPropagation(),s.el.classList.remove(s.classNames.dragging),document.removeEventListener("mousemove",s.drag),document.removeEventListener("mouseup",s.onEndDrag)},this.el=t,this.flashTimeout,this.contentEl,this.contentWrapperEl,this.offsetEl,this.maskEl,this.globalObserver,this.mutationObserver,this.resizeObserver,this.scrollbarWidth,this.minScrollbarWidth=20,this.options=Object.assign({},l.defaultOptions,e),this.classNames=Object.assign({},l.defaultOptions.classNames,this.options.classNames),this.isRtl,this.axis={x:{scrollOffsetAttr:"scrollLeft",sizeAttr:"width",scrollSizeAttr:"scrollWidth",offsetAttr:"left",overflowAttr:"overflowX",dragOffset:0,isOverflowing:!0,isVisible:!1,forceVisible:!1,track:{},scrollbar:{}},y:{scrollOffsetAttr:"scrollTop",sizeAttr:"height",scrollSizeAttr:"scrollHeight",offsetAttr:"top",overflowAttr:"overflowY",dragOffset:0,isOverflowing:!0,isVisible:!1,forceVisible:!1,track:{},scrollbar:{}}},this.el.SimpleBar||(this.recalculate=Ie(this.recalculate.bind(this),64),this.onMouseMove=Ie(this.onMouseMove.bind(this),64),this.hideScrollbars=ri(this.hideScrollbars.bind(this),this.options.timeout),this.onWindowResize=ri(this.onWindowResize.bind(this),64,{leading:!0}),l.getRtlHelpers=Ni(l.getRtlHelpers),this.init())}l.getRtlHelpers=function(){var t=document.createElement("div");t.innerHTML='<div class="hs-dummy-scrollbar-size"><div style="height: 200%; width: 200%; margin: 10px 0;"></div></div>';var e=t.firstElementChild;document.body.appendChild(e);var i=e.firstElementChild;e.scrollLeft=0;var r=l.getOffset(e),n=l.getOffset(i);e.scrollLeft=999;var s=l.getOffset(i);return{isRtlScrollingInverted:r.left!==n.left&&n.left-s.left!=0,isRtlScrollbarInverted:r.left!==n.left}},l.initHtmlApi=function(){this.initDOMLoadedElements=this.initDOMLoadedElements.bind(this),"undefined"!=typeof MutationObserver&&(this.globalObserver=new MutationObserver(function(t){t.forEach(function(t){Array.prototype.forEach.call(t.addedNodes,function(t){1===t.nodeType&&(t.hasAttribute("data-simplebar")?!t.SimpleBar&&new l(t,l.getElOptions(t)):Array.prototype.forEach.call(t.querySelectorAll("[data-simplebar]"),function(t){!t.SimpleBar&&new l(t,l.getElOptions(t))}))}),Array.prototype.forEach.call(t.removedNodes,function(t){1===t.nodeType&&(t.hasAttribute("data-simplebar")?t.SimpleBar&&t.SimpleBar.unMount():Array.prototype.forEach.call(t.querySelectorAll("[data-simplebar]"),function(t){t.SimpleBar&&t.SimpleBar.unMount()}))})})}),this.globalObserver.observe(document,{childList:!0,subtree:!0})),"complete"===document.readyState||"loading"!==document.readyState&&!document.documentElement.doScroll?window.setTimeout(this.initDOMLoadedElements):(document.addEventListener("DOMContentLoaded",this.initDOMLoadedElements),window.addEventListener("load",this.initDOMLoadedElements))},l.getElOptions=function(t){return Array.prototype.reduce.call(t.attributes,function(t,e){var i=e.name.match(/data-simplebar-(.+)/);if(i){var r=i[1].replace(/\W+(.)/g,function(t,e){return e.toUpperCase()});switch(e.value){case"true":t[r]=!0;break;case"false":t[r]=!1;break;case void 0:t[r]=!0;break;default:t[r]=e.value}}return t},{})},l.removeObserver=function(){this.globalObserver.disconnect()},l.initDOMLoadedElements=function(){document.removeEventListener("DOMContentLoaded",this.initDOMLoadedElements),window.removeEventListener("load",this.initDOMLoadedElements),Array.prototype.forEach.call(document.querySelectorAll("[data-simplebar]"),function(t){t.SimpleBar||new l(t,l.getElOptions(t))})},l.getOffset=function(t){var e=t.getBoundingClientRect();return{top:e.top+(window.pageYOffset||document.documentElement.scrollTop),left:e.left+(window.pageXOffset||document.documentElement.scrollLeft)}};var t=l.prototype;return t.init=function(){this.el.SimpleBar=this,nr&&(this.initDOM(),this.scrollbarWidth=Ee(),this.recalculate(),this.initListeners())},t.initDOM=function(){var e=this;if(Array.prototype.filter.call(this.el.children,function(t){return t.classList.contains(e.classNames.wrapper)}).length)this.wrapperEl=this.el.querySelector("."+this.classNames.wrapper),this.contentWrapperEl=this.el.querySelector("."+this.classNames.contentWrapper),this.offsetEl=this.el.querySelector("."+this.classNames.offset),this.maskEl=this.el.querySelector("."+this.classNames.mask),this.contentEl=this.el.querySelector("."+this.classNames.contentEl),this.placeholderEl=this.el.querySelector("."+this.classNames.placeholder),this.heightAutoObserverWrapperEl=this.el.querySelector("."+this.classNames.heightAutoObserverWrapperEl),this.heightAutoObserverEl=this.el.querySelector("."+this.classNames.heightAutoObserverEl),this.axis.x.track.el=this.el.querySelector("."+this.classNames.track+"."+this.classNames.horizontal),this.axis.y.track.el=this.el.querySelector("."+this.classNames.track+"."+this.classNames.vertical);else{for(this.wrapperEl=document.createElement("div"),this.contentWrapperEl=document.createElement("div"),this.offsetEl=document.createElement("div"),this.maskEl=document.createElement("div"),this.contentEl=document.createElement("div"),this.placeholderEl=document.createElement("div"),this.heightAutoObserverWrapperEl=document.createElement("div"),this.heightAutoObserverEl=document.createElement("div"),this.wrapperEl.classList.add(this.classNames.wrapper),this.contentWrapperEl.classList.add(this.classNames.contentWrapper),this.offsetEl.classList.add(this.classNames.offset),this.maskEl.classList.add(this.classNames.mask),this.contentEl.classList.add(this.classNames.contentEl),this.placeholderEl.classList.add(this.classNames.placeholder),this.heightAutoObserverWrapperEl.classList.add(this.classNames.heightAutoObserverWrapperEl),this.heightAutoObserverEl.classList.add(this.classNames.heightAutoObserverEl);this.el.firstChild;)this.contentEl.appendChild(this.el.firstChild);this.contentWrapperEl.appendChild(this.contentEl),this.offsetEl.appendChild(this.contentWrapperEl),this.maskEl.appendChild(this.offsetEl),this.heightAutoObserverWrapperEl.appendChild(this.heightAutoObserverEl),this.wrapperEl.appendChild(this.heightAutoObserverWrapperEl),this.wrapperEl.appendChild(this.maskEl),this.wrapperEl.appendChild(this.placeholderEl),this.el.appendChild(this.wrapperEl)}if(!this.axis.x.track.el||!this.axis.y.track.el){var t=document.createElement("div"),i=document.createElement("div");t.classList.add(this.classNames.track),i.classList.add(this.classNames.scrollbar),t.appendChild(i),this.axis.x.track.el=t.cloneNode(!0),this.axis.x.track.el.classList.add(this.classNames.horizontal),this.axis.y.track.el=t.cloneNode(!0),this.axis.y.track.el.classList.add(this.classNames.vertical),this.el.appendChild(this.axis.x.track.el),this.el.appendChild(this.axis.y.track.el)}this.axis.x.scrollbar.el=this.axis.x.track.el.querySelector("."+this.classNames.scrollbar),this.axis.y.scrollbar.el=this.axis.y.track.el.querySelector("."+this.classNames.scrollbar),this.options.autoHide||(this.axis.x.scrollbar.el.classList.add(this.classNames.visible),this.axis.y.scrollbar.el.classList.add(this.classNames.visible)),this.el.setAttribute("data-simplebar","init")},t.initListeners=function(){var e=this;this.options.autoHide&&this.el.addEventListener("mouseenter",this.onMouseEnter),["mousedown","click","dblclick","touchstart","touchend","touchmove"].forEach(function(t){e.el.addEventListener(t,e.onPointerEvent,!0)}),this.el.addEventListener("mousemove",this.onMouseMove),this.el.addEventListener("mouseleave",this.onMouseLeave),this.contentWrapperEl.addEventListener("scroll",this.onScroll),window.addEventListener("resize",this.onWindowResize),this.resizeObserver=new rr(this.recalculate),this.resizeObserver.observe(this.el),this.resizeObserver.observe(this.contentEl)},t.recalculate=function(){var t=this.heightAutoObserverEl.offsetHeight<=1,e=this.heightAutoObserverEl.offsetWidth<=1;this.elStyles=window.getComputedStyle(this.el),this.isRtl="rtl"===this.elStyles.direction,this.contentEl.style.padding=this.elStyles.paddingTop+" "+this.elStyles.paddingRight+" "+this.elStyles.paddingBottom+" "+this.elStyles.paddingLeft,this.wrapperEl.style.margin="-"+this.elStyles.paddingTop+" -"+this.elStyles.paddingRight+" -"+this.elStyles.paddingBottom+" -"+this.elStyles.paddingLeft,this.contentWrapperEl.style.height=t?"auto":"100%",this.placeholderEl.style.width=e?this.contentEl.offsetWidth+"px":"auto",this.placeholderEl.style.height=this.contentEl.scrollHeight+"px",this.axis.x.isOverflowing=this.contentWrapperEl.scrollWidth>this.contentWrapperEl.offsetWidth,this.axis.y.isOverflowing=this.contentWrapperEl.scrollHeight>this.contentWrapperEl.offsetHeight,this.axis.x.isOverflowing="hidden"!==this.elStyles.overflowX&&this.axis.x.isOverflowing,this.axis.y.isOverflowing="hidden"!==this.elStyles.overflowY&&this.axis.y.isOverflowing,this.axis.x.forceVisible="x"===this.options.forceVisible||!0===this.options.forceVisible,this.axis.y.forceVisible="y"===this.options.forceVisible||!0===this.options.forceVisible,this.hideNativeScrollbar(),this.axis.x.track.rect=this.axis.x.track.el.getBoundingClientRect(),this.axis.y.track.rect=this.axis.y.track.el.getBoundingClientRect(),this.axis.x.scrollbar.size=this.getScrollbarSize("x"),this.axis.y.scrollbar.size=this.getScrollbarSize("y"),this.axis.x.scrollbar.el.style.width=this.axis.x.scrollbar.size+"px",this.axis.y.scrollbar.el.style.height=this.axis.y.scrollbar.size+"px",this.positionScrollbar("x"),this.positionScrollbar("y"),this.toggleTrackVisibility("x"),this.toggleTrackVisibility("y")},t.getScrollbarSize=function(t){void 0===t&&(t="y");var e,i=this.scrollbarWidth?this.contentWrapperEl[this.axis[t].scrollSizeAttr]:this.contentWrapperEl[this.axis[t].scrollSizeAttr]-this.minScrollbarWidth,r=this.axis[t].track.rect[this.axis[t].sizeAttr];if(this.axis[t].isOverflowing){var n=r/i;return e=Math.max(~~(n*r),this.options.scrollbarMinSize),this.options.scrollbarMaxSize&&(e=Math.min(e,this.options.scrollbarMaxSize)),e}},t.positionScrollbar=function(t){void 0===t&&(t="y");var e=this.contentWrapperEl[this.axis[t].scrollSizeAttr],i=this.axis[t].track.rect[this.axis[t].sizeAttr],r=parseInt(this.elStyles[this.axis[t].sizeAttr],10),n=this.axis[t].scrollbar,s=this.contentWrapperEl[this.axis[t].scrollOffsetAttr],o=(s="x"===t&&this.isRtl&&l.getRtlHelpers().isRtlScrollingInverted?-s:s)/(e-r),a=~~((i-n.size)*o);a="x"===t&&this.isRtl&&l.getRtlHelpers().isRtlScrollbarInverted?a+(i-n.size):a,n.el.style.transform="x"===t?"translate3d("+a+"px, 0, 0)":"translate3d(0, "+a+"px, 0)"},t.toggleTrackVisibility=function(t){void 0===t&&(t="y");var e=this.axis[t].track.el,i=this.axis[t].scrollbar.el;this.axis[t].isOverflowing||this.axis[t].forceVisible?(e.style.visibility="visible",this.contentWrapperEl.style[this.axis[t].overflowAttr]="scroll"):(e.style.visibility="hidden",this.contentWrapperEl.style[this.axis[t].overflowAttr]="hidden"),this.axis[t].isOverflowing?i.style.display="block":i.style.display="none"},t.hideNativeScrollbar=function(){if(this.offsetEl.style[this.isRtl?"left":"right"]=this.axis.y.isOverflowing||this.axis.y.forceVisible?"-"+(this.scrollbarWidth||this.minScrollbarWidth)+"px":0,this.offsetEl.style.bottom=this.axis.x.isOverflowing||this.axis.x.forceVisible?"-"+(this.scrollbarWidth||this.minScrollbarWidth)+"px":0,!this.scrollbarWidth){var t=[this.isRtl?"paddingLeft":"paddingRight"];this.contentWrapperEl.style[t]=this.axis.y.isOverflowing||this.axis.y.forceVisible?this.minScrollbarWidth+"px":0,this.contentWrapperEl.style.paddingBottom=this.axis.x.isOverflowing||this.axis.x.forceVisible?this.minScrollbarWidth+"px":0}},t.onMouseMoveForAxis=function(t){void 0===t&&(t="y"),this.axis[t].track.rect=this.axis[t].track.el.getBoundingClientRect(),this.axis[t].scrollbar.rect=this.axis[t].scrollbar.el.getBoundingClientRect(),this.isWithinBounds(this.axis[t].scrollbar.rect)?this.axis[t].scrollbar.el.classList.add(this.classNames.hover):this.axis[t].scrollbar.el.classList.remove(this.classNames.hover),this.isWithinBounds(this.axis[t].track.rect)?(this.showScrollbar(t),this.axis[t].track.el.classList.add(this.classNames.hover)):this.axis[t].track.el.classList.remove(this.classNames.hover)},t.onMouseLeaveForAxis=function(t){void 0===t&&(t="y"),this.axis[t].track.el.classList.remove(this.classNames.hover),this.axis[t].scrollbar.el.classList.remove(this.classNames.hover)},t.showScrollbar=function(t){void 0===t&&(t="y");var e=this.axis[t].scrollbar.el;this.axis[t].isVisible||(e.classList.add(this.classNames.visible),this.axis[t].isVisible=!0),this.options.autoHide&&this.hideScrollbars()},t.onDragStart=function(t,e){void 0===e&&(e="y");var i=this.axis[e].scrollbar.el,r="y"===e?t.pageY:t.pageX;this.axis[e].dragOffset=r-i.getBoundingClientRect()[this.axis[e].offsetAttr],this.draggedAxis=e,this.el.classList.add(this.classNames.dragging),document.addEventListener("mousemove",this.drag),document.addEventListener("mouseup",this.onEndDrag)},t.getContentElement=function(){return this.contentEl},t.getScrollElement=function(){return this.contentWrapperEl},t.removeListeners=function(){var e=this;this.options.autoHide&&this.el.removeEventListener("mouseenter",this.onMouseEnter),["mousedown","click","dblclick","touchstart","touchend","touchmove"].forEach(function(t){e.el.removeEventListener(t,e.onPointerEvent)}),this.el.removeEventListener("mousemove",this.onMouseMove),this.el.removeEventListener("mouseleave",this.onMouseLeave),this.contentWrapperEl.removeEventListener("scroll",this.onScroll),window.removeEventListener("resize",this.onWindowResize),this.mutationObserver&&this.mutationObserver.disconnect(),this.resizeObserver.disconnect(),this.recalculate.cancel(),this.onMouseMove.cancel(),this.hideScrollbars.cancel(),this.onWindowResize.cancel()},t.unMount=function(){this.removeListeners(),this.el.SimpleBar=null},t.isChildNode=function(t){return null!==t&&(t===this.el||this.isChildNode(t.parentNode))},t.isWithinBounds=function(t){return this.mouseX>=t.left&&this.mouseX<=t.left+t.width&&this.mouseY>=t.top&&this.mouseY<=t.top+t.height},l}();return sr.defaultOptions={autoHide:!0,forceVisible:!1,classNames:{contentEl:"simplebar-content",contentWrapper:"simplebar-content-wrapper",offset:"simplebar-offset",mask:"simplebar-mask",wrapper:"simplebar-wrapper",placeholder:"simplebar-placeholder",scrollbar:"simplebar-scrollbar",track:"simplebar-track",heightAutoObserverWrapperEl:"simplebar-height-auto-observer-wrapper",heightAutoObserverEl:"simplebar-height-auto-observer",visible:"simplebar-visible",horizontal:"simplebar-horizontal",vertical:"simplebar-vertical",hover:"simplebar-hover",dragging:"simplebar-dragging"},scrollbarMinSize:25,scrollbarMaxSize:0,timeout:1e3},nr&&sr.initHtmlApi(),sr});
assets/js/um-functions.js CHANGED
@@ -707,12 +707,6 @@ function remove_Modal() {
707
  if ( jQuery('.um-popup-overlay').length ) {
708
  jQuery( document ).trigger( 'um_before_modal_removed' );
709
 
710
- if ( jQuery('.um-popup-autogrow:visible').length ) {
711
- jQuery('.um-popup-autogrow:visible').mCustomScrollbar("destroy");
712
- } else if ( jQuery('.um-popup-autogrow2:visible').length ) {
713
- jQuery('.um-popup-autogrow2:visible').mCustomScrollbar("destroy");
714
- }
715
-
716
  jQuery('.tipsy').remove();
717
  jQuery('.um-popup').empty().remove();
718
  jQuery('.um-popup-overlay').empty().remove();
@@ -733,7 +727,7 @@ function show_Modal( contents ) {
733
  function responsive_Modal() {
734
  if ( jQuery('.um-popup-overlay').length ) {
735
 
736
- ag_height = jQuery(window).height() - jQuery('.um-popup um-popup-header').outerHeight() - jQuery('.um-popup .um-popup-footer').outerHeight() - 80;
737
  if ( ag_height > 350 ) {
738
  ag_height = 350;
739
  }
@@ -741,12 +735,10 @@ function responsive_Modal() {
741
  if ( jQuery('.um-popup-autogrow:visible').length ) {
742
 
743
  jQuery('.um-popup-autogrow:visible').css({'height': ag_height + 'px'});
744
- jQuery('.um-popup-autogrow:visible').mCustomScrollbar({ theme:"dark-3", mouseWheelPixels:500 }).mCustomScrollbar("scrollTo", "bottom",{ scrollInertia:0} );
745
 
746
  } else if ( jQuery('.um-popup-autogrow2:visible').length ) {
747
 
748
  jQuery('.um-popup-autogrow2:visible').css({'max-height': ag_height + 'px'});
749
- jQuery('.um-popup-autogrow2:visible').mCustomScrollbar({ theme:"dark-3", mouseWheelPixels:500 });
750
 
751
  }
752
  }
707
  if ( jQuery('.um-popup-overlay').length ) {
708
  jQuery( document ).trigger( 'um_before_modal_removed' );
709
 
 
 
 
 
 
 
710
  jQuery('.tipsy').remove();
711
  jQuery('.um-popup').empty().remove();
712
  jQuery('.um-popup-overlay').empty().remove();
727
  function responsive_Modal() {
728
  if ( jQuery('.um-popup-overlay').length ) {
729
 
730
+ ag_height = jQuery(window).height() - jQuery('.um-popup .um-popup-header').outerHeight() - jQuery('.um-popup .um-popup-footer').outerHeight() - 80;
731
  if ( ag_height > 350 ) {
732
  ag_height = 350;
733
  }
735
  if ( jQuery('.um-popup-autogrow:visible').length ) {
736
 
737
  jQuery('.um-popup-autogrow:visible').css({'height': ag_height + 'px'});
 
738
 
739
  } else if ( jQuery('.um-popup-autogrow2:visible').length ) {
740
 
741
  jQuery('.um-popup-autogrow2:visible').css({'max-height': ag_height + 'px'});
 
742
 
743
  }
744
  }
assets/js/um-functions.min.js CHANGED
@@ -1 +1 @@
1
- function UM_check_password_matched(){jQuery(document).on("keyup","input[data-key=user_password],input[data-key=confirm_user_password]",function(e){var t=jQuery("input[data-key=user_password]").val(),a=jQuery("input[data-key=confirm_user_password]").val(),o=jQuery("input[data-key=user_password],input[data-key=confirm_user_password]");t||a?t!==a?o.removeClass("um-validate-matched").addClass("um-validate-not-matched"):o.removeClass("um-validate-not-matched").addClass("um-validate-matched"):o.removeClass("um-validate-matched").removeClass("um-validate-not-matched")})}function UM_hide_menus(){menu=jQuery(".um-dropdown"),menu.parents("div").find("a").removeClass("active"),menu.hide()}function UM_domenus(){jQuery(".um-dropdown").each(function(){var e=jQuery(this),t=jQuery(this).attr("data-element"),a=jQuery(this).attr("data-position");jQuery(t).addClass("um-trigger-menu-on-"+e.attr("data-trigger")),jQuery(window).width()<=1200&&"div.um-profile-edit"==t&&(a="lc"),"lc"==a&&(jQuery(t).find("img").width()<200?left_p=(jQuery(t).width()-jQuery(t).find("img").width())/2+(jQuery(t).find("img").width()-200)/2:left_p=(jQuery(t).width()-jQuery(t).find("img").width())/2,top_=parseInt(jQuery(t).find("a").css("top")),top_?(top_p=jQuery(t).find("img").height()+4+top_,left_gap=4):(top_p=jQuery(t).find("img").height()+4,left_gap=0),4==top_p&&"div.um-cover"==t?top_p=jQuery(t).height()/2+e.height()/2:4==top_p&&(top_p=jQuery(t).height()+20),gap_right=jQuery(t).width()+17,e.css({top:0,width:200,left:"auto",right:gap_right+"px","text-align":"center"}),e.find(".um-dropdown-arr").find("i").removeClass().addClass("um-icon-arrow-right-b"),e.find(".um-dropdown-arr").css({top:"4px",left:"auto",right:"-17px"})),"bc"==a&&(jQuery(t).find("img").width()<200?left_p=(jQuery(t).width()-jQuery(t).find("img").width())/2+(jQuery(t).find("img").width()-200)/2:left_p=(jQuery(t).width()-jQuery(t).find("img").width())/2,top_=parseInt(jQuery(t).find("a").css("top")),top_?(top_p=jQuery(t).find("img").height()+4+top_,left_gap=4):(top_p=jQuery(t).find("img").height()+4,left_gap=0),4==top_p&&"div.um-cover"==t?top_p=jQuery(t).height()/2+e.height()/2:4==top_p&&(top_p=jQuery(t).height()+20),e.css({top:top_p,width:200,left:left_p+left_gap,right:"auto","text-align":"center"}),e.find(".um-dropdown-arr").find("i").removeClass().addClass("um-icon-arrow-up-b"),e.find(".um-dropdown-arr").css({top:"-17px",left:e.width()/2-12,right:"auto"}))})}function um_responsive(){jQuery(".um").each(function(){element_width=jQuery(this).width(),element_width<=340?(jQuery(this).removeClass("uimob340"),jQuery(this).removeClass("uimob500"),jQuery(this).removeClass("uimob800"),jQuery(this).removeClass("uimob960"),jQuery(this).addClass("uimob340")):element_width<=500?(jQuery(this).removeClass("uimob340"),jQuery(this).removeClass("uimob500"),jQuery(this).removeClass("uimob800"),jQuery(this).removeClass("uimob960"),jQuery(this).addClass("uimob500")):element_width<=800?(jQuery(this).removeClass("uimob340"),jQuery(this).removeClass("uimob500"),jQuery(this).removeClass("uimob800"),jQuery(this).removeClass("uimob960"),jQuery(this).addClass("uimob800")):element_width<=960?(jQuery(this).removeClass("uimob340"),jQuery(this).removeClass("uimob500"),jQuery(this).removeClass("uimob800"),jQuery(this).removeClass("uimob960"),jQuery(this).addClass("uimob960")):960<element_width&&(jQuery(this).removeClass("uimob340"),jQuery(this).removeClass("uimob500"),jQuery(this).removeClass("uimob800"),jQuery(this).removeClass("uimob960")),0<jQuery(".um-account-nav").length&&jQuery(".um-account-side").is(":visible")&&0==jQuery(".um-account-tab:visible").length&&jQuery(".um-account-side li a.current").trigger("click"),jQuery(this).css("opacity",1)}),jQuery(".um-cover, .um-member-cover, .um-cover-e").each(function(){var e=jQuery(this),t=e.data("ratio"),a=e.width(),o=t.split(":");calcHeight=Math.round(a/o[0])+"px",e.height(calcHeight),e.find(".um-cover-add").height(calcHeight)}),jQuery(".um-members").each(function(){UM_Member_Grid(jQuery(this))}),UM_domenus()}function UM_Member_Grid(e){e.masonry({itemSelector:".um-member",columnWidth:".um-member",gutter:".um-gutter-sizer"})}function initImageUpload_UM(r){r.data("upload_help_text")?upload_help_text='<span class="help">'+r.data("upload_help_text")+"</span>":upload_help_text="",r.data("icon")?icon='<span class="icon"><i class="'+r.data("icon")+'"></i></span>':icon="",r.data("upload_text")?upload_text='<span class="str">'+r.data("upload_text")+"</span>":upload_text="";var e=0;jQuery("#um_upload_single:visible").data("user_id")&&(e=jQuery("#um_upload_single:visible").data("user_id")),r.uploadFile({url:wp.ajax.settings.url,method:"POST",multiple:!1,formData:{action:"um_imageupload",key:r.data("key"),set_id:r.data("set_id"),set_mode:r.data("set_mode"),_wpnonce:r.data("nonce"),timestamp:r.data("timestamp"),user_id:e},fileName:r.data("key"),allowedTypes:r.data("allowed_types"),maxFileSize:r.data("max_size"),dragDropStr:icon+upload_text+upload_help_text,sizeErrorStr:r.data("max_size_error"),extErrorStr:r.data("extension_error"),maxFileCountErrorStr:r.data("max_files_error"),maxFileCount:1,showDelete:!1,showAbort:!1,showDone:!1,showFileCounter:!1,showStatusAfterSuccess:!0,returnType:"json",onSubmit:function(e){r.parents(".um-modal-body").find(".um-error-block").remove()},onSuccess:function(e,t,a){r.selectedFiles=0,t.success&&0==t.success||void 0!==t.data.error?(r.parents(".um-modal-body").append('<div class="um-error-block">'+t.data.error+"</div>"),r.parents(".um-modal-body").find(".upload-statusbar").hide(0),um_modal_responsive()):jQuery.each(t.data,function(e,t){var a=r.parents(".um-modal-body").find(".um-single-image-preview img"),o=r.parents(".um-modal-body").find(".um-single-image-preview"),i=new Date;a.attr("src",t.url+"?"+i.getTime()),a.data("file",t.file),a.load(function(){r.parents(".um-modal-body").find(".um-modal-btn.um-finish-upload.disabled").removeClass("disabled"),r.parents(".um-modal-body").find(".ajax-upload-dragdrop,.upload-statusbar").hide(0),o.show(0),um_modal_responsive()})})},onError:function(e){console.log(e)}})}function initFileUpload_UM(o){o.data("upload_help_text")?upload_help_text='<span class="help">'+o.data("upload_help_text")+"</span>":upload_help_text="",o.data("icon")?icon='<span class="icon"><i class="'+o.data("icon")+'"></i></span>':icon="",o.data("upload_text")?upload_text='<span class="str">'+o.data("upload_text")+"</span>":upload_text="",jQuery("#um_upload_single:visible").data("user_id")&&(user_id=jQuery("#um_upload_single:visible").data("user_id")),o.uploadFile({url:wp.ajax.settings.url,method:"POST",multiple:!1,formData:{action:"um_fileupload",key:o.data("key"),set_id:o.data("set_id"),user_id:o.data("user_id"),set_mode:o.data("set_mode"),_wpnonce:o.data("nonce"),timestamp:o.data("timestamp")},fileName:o.data("key"),allowedTypes:o.data("allowed_types"),maxFileSize:o.data("max_size"),dragDropStr:icon+upload_text+upload_help_text,sizeErrorStr:o.data("max_size_error"),extErrorStr:o.data("extension_error"),maxFileCountErrorStr:o.data("max_files_error"),maxFileCount:1,showDelete:!1,showAbort:!1,showDone:!1,showFileCounter:!1,showStatusAfterSuccess:!0,onSubmit:function(e){o.parents(".um-modal-body").find(".um-error-block").remove()},onSuccess:function(e,t,a){o.selectedFiles=0,t.success&&0==t.success||void 0!==t.data.error?(o.parents(".um-modal-body").append('<div class="um-error-block">'+t.data.error+"</div>"),o.parents(".um-modal-body").find(".upload-statusbar").hide(0)):jQuery.each(t.data,function(e,t){o.parents(".um-modal-body").find(".um-modal-btn.um-finish-upload.disabled").removeClass("disabled"),o.parents(".um-modal-body").find(".ajax-upload-dragdrop,.upload-statusbar").hide(0),o.parents(".um-modal-body").find(".um-single-file-preview").show(0),"icon"==e?o.parents(".um-modal-body").find(".um-single-fileinfo i").removeClass().addClass(t):"icon_bg"==e?o.parents(".um-modal-body").find(".um-single-fileinfo span.icon").css({"background-color":t}):"filename"==e?o.parents(".um-modal-body").find(".um-single-fileinfo a").attr("data-file",t):"original_name"==e?(o.parents(".um-modal-body").find(".um-single-fileinfo a").attr("data-orignal-name",t),o.parents(".um-modal-body").find(".um-single-fileinfo span.filename").html(t)):"url"==e&&o.parents(".um-modal-body").find(".um-single-fileinfo a").attr("href",t)}),setTimeout(function(){um_modal_responsive()},1e3)},onError:function(e){console.log(e)}})}function initCrop_UM(){var t=jQuery(".um-modal .um-single-image-preview img").first(),e=jQuery(".um-modal .um-single-image-preview"),a=t.parent().attr("data-crop"),o=t.parent().attr("data-min_width"),i=t.parent().attr("data-min_height"),r=t.parent().attr("data-ratio");if(jQuery(".um-modal").find("#um_upload_single").attr("data-ratio"))r=(r=jQuery(".um-modal").find("#um_upload_single").attr("data-ratio")).split(":")[0];if(t.length&&""!=t.attr("src")){var u=jQuery(window).height()-(jQuery(".um-modal-footer a").height()+20)-50-jQuery(".um-modal-header:visible").height();if(t.css({height:"auto"}),e.css({height:"auto"}),jQuery(window).height()<=400?(e.css({height:u+"px","max-height":u+"px"}),t.css({height:"auto"})):(t.css({height:"auto","max-height":u+"px"}),e.css({height:t.height(),"max-height":u+"px"})),"square"==a)var d={minWidth:o,minHeight:i,dragCrop:!1,aspectRatio:1,zoomable:!1,rotatable:!1,dashed:!1,done:function(e){t.parent().attr("data-coord",Math.round(e.x)+","+Math.round(e.y)+","+Math.round(e.width)+","+Math.round(e.height))}};else if("cover"==a){0<Math.round(o/r)&&(i=Math.round(o/r));d={minWidth:o,minHeight:i,dragCrop:!1,aspectRatio:r,zoomable:!1,rotatable:!1,dashed:!1,done:function(e){t.parent().attr("data-coord",Math.round(e.x)+","+Math.round(e.y)+","+Math.round(e.width)+","+Math.round(e.height))}}}else if("user"==a)d={minWidth:o,minHeight:i,dragCrop:!0,aspectRatio:"auto",zoomable:!1,rotatable:!1,dashed:!1,done:function(e){t.parent().attr("data-coord",Math.round(e.x)+","+Math.round(e.y)+","+Math.round(e.width)+","+Math.round(e.height))}};0!=a&&(t.cropper(d),jQuery(".um-single-image-preview img.cropper-hidden").cropper("destroy"),jQuery(".um-single-image-preview img.lazyloaded").addClass("cropper-hidden"),jQuery(".um-single-image-preview img.lazyloaded").removeClass("lazyloaded"),jQuery(".um-single-image-preview .cropper-container").append('<div class="um-clear"></div>'))}}function um_new_modal(e,t,a,o){if(0==jQuery("body").find(".um-modal-overlay").length)if(jQuery(".tipsy").hide(),UM_hide_menus(),jQuery("body,html,textarea").css("overflow","hidden"),jQuery(document).bind("touchmove",function(e){e.preventDefault()}),jQuery(".um-modal").on("touchmove",function(e){e.stopPropagation()}),a?jQuery("body").append('<div class="um-modal-overlay"></div><div class="um-modal is-photo"></div>'):jQuery("body").append('<div class="um-modal-overlay"></div><div class="um-modal no-photo"></div>'),jQuery("#"+e).prependTo(".um-modal"),a){jQuery(".um-modal").find(".um-modal-photo").html("<img />");var i=jQuery(".um-modal-photo img"),r=jQuery(window).width()-60,u=jQuery(window).height()-.25*jQuery(window).height();i.attr("src",o),i.load(function(){jQuery("#"+e).show(),jQuery(".um-modal").show(),i.css({opacity:0}),i.css({"max-width":r}),i.css({"max-height":u}),jQuery(".um-modal").css({width:i.width(),"margin-left":"-"+i.width()/2+"px"}),i.animate({opacity:1},1e3),um_modal_responsive()})}else jQuery("#"+e).show(),jQuery(".um-modal").show(),um_modal_size(t),initImageUpload_UM(jQuery(".um-modal:visible").find(".um-single-image-upload")),initFileUpload_UM(jQuery(".um-modal:visible").find(".um-single-file-upload")),um_modal_responsive()}function um_modal_responsive(){var e=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,t=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight,a=jQuery(".um-modal:visible");if(jQuery(".um-modal-body.photo:visible").length){a.removeClass("uimob340"),a.removeClass("uimob500");var o=jQuery(".um-modal-photo img"),i=e-60,r=t-.25*t;o.css({opacity:0}),o.css({"max-width":i}),o.css({"max-height":r}),jQuery(".um-modal").css({width:o.width(),"margin-left":"-"+o.width()/2+"px"}),o.animate({opacity:1},1e3);var u=(t-a.innerHeight())/2+"px";a.animate({bottom:u},300)}else if(a.length)if(a.removeClass("uimob340"),a.removeClass("uimob500"),e<=340)a.addClass("uimob340"),initCrop_UM(),a.animate({bottom:0},300);else if(e<=500)a.addClass("uimob500"),initCrop_UM(),a.animate({bottom:0},300);else if(e<=800){initCrop_UM();u=(t-a.innerHeight())/2+"px";a.animate({bottom:u},300)}else if(e<=960){initCrop_UM();u=(t-a.innerHeight())/2+"px";a.animate({bottom:u},300)}else if(960<e){initCrop_UM();u=(t-a.innerHeight())/2+"px";a.animate({bottom:u},300)}}function um_remove_modal(){jQuery("img.cropper-hidden").cropper("destroy"),jQuery("body,html,textarea").css("overflow","auto"),jQuery(document).unbind("touchmove"),jQuery('.um-modal div[id^="um_"]').hide().appendTo("body"),jQuery(".um-modal,.um-modal-overlay").remove()}function um_modal_size(e){jQuery(".um-modal:visible").addClass(e)}function um_modal_add_attr(e,t){jQuery(".um-modal:visible").data(e,t)}function prepare_Modal(){0==jQuery(".um-popup-overlay").length&&(jQuery("body").append('<div class="um-popup-overlay"></div>'),jQuery("body").append('<div class="um-popup"></div>'),jQuery(".um-popup").addClass("loading"),jQuery("body,html").css({overflow:"hidden"}))}function remove_Modal(){jQuery(".um-popup-overlay").length&&(jQuery(document).trigger("um_before_modal_removed"),jQuery(".um-popup-autogrow:visible").length?jQuery(".um-popup-autogrow:visible").mCustomScrollbar("destroy"):jQuery(".um-popup-autogrow2:visible").length&&jQuery(".um-popup-autogrow2:visible").mCustomScrollbar("destroy"),jQuery(".tipsy").remove(),jQuery(".um-popup").empty().remove(),jQuery(".um-popup-overlay").empty().remove(),jQuery("body,html").css({overflow:"auto"}))}function show_Modal(e){jQuery(".um-popup-overlay").length&&(jQuery(".um-popup").removeClass("loading").html(e),jQuery(".um-tip-n").tipsy({gravity:"n",opacity:1,offset:3}),jQuery(".um-tip-w").tipsy({gravity:"w",opacity:1,offset:3}),jQuery(".um-tip-e").tipsy({gravity:"e",opacity:1,offset:3}),jQuery(".um-tip-s").tipsy({gravity:"s",opacity:1,offset:3}))}function responsive_Modal(){jQuery(".um-popup-overlay").length&&(ag_height=jQuery(window).height()-jQuery(".um-popup um-popup-header").outerHeight()-jQuery(".um-popup .um-popup-footer").outerHeight()-80,350<ag_height&&(ag_height=350),jQuery(".um-popup-autogrow:visible").length?(jQuery(".um-popup-autogrow:visible").css({height:ag_height+"px"}),jQuery(".um-popup-autogrow:visible").mCustomScrollbar({theme:"dark-3",mouseWheelPixels:500}).mCustomScrollbar("scrollTo","bottom",{scrollInertia:0})):jQuery(".um-popup-autogrow2:visible").length&&(jQuery(".um-popup-autogrow2:visible").css({"max-height":ag_height+"px"}),jQuery(".um-popup-autogrow2:visible").mCustomScrollbar({theme:"dark-3",mouseWheelPixels:500})))}function um_reset_field(e){jQuery(e).find("div.um-field-area").find("input,textarea,select").not(":button, :submit, :reset, :hidden").val("").removeAttr("checked").removeAttr("selected")}function um_selected(e,t){if(e==t)return"selected='selected'"}jQuery(function(){jQuery(".um-search form *").keypress(function(e){if(13==e.which)return jQuery(".um-search form").submit(),!1}),2==jQuery("input[data-key=user_password],input[data-key=confirm_user_password]").length&&UM_check_password_matched()});
1
+ function UM_check_password_matched(){jQuery(document).on("keyup","input[data-key=user_password],input[data-key=confirm_user_password]",function(e){var t=jQuery("input[data-key=user_password]").val(),a=jQuery("input[data-key=confirm_user_password]").val(),i=jQuery("input[data-key=user_password],input[data-key=confirm_user_password]");t||a?t!==a?i.removeClass("um-validate-matched").addClass("um-validate-not-matched"):i.removeClass("um-validate-not-matched").addClass("um-validate-matched"):i.removeClass("um-validate-matched").removeClass("um-validate-not-matched")})}function UM_hide_menus(){menu=jQuery(".um-dropdown"),menu.parents("div").find("a").removeClass("active"),menu.hide()}function UM_domenus(){jQuery(".um-dropdown").each(function(){var e=jQuery(this),t=jQuery(this).attr("data-element"),a=jQuery(this).attr("data-position");jQuery(t).addClass("um-trigger-menu-on-"+e.attr("data-trigger")),jQuery(window).width()<=1200&&"div.um-profile-edit"==t&&(a="lc"),"lc"==a&&(jQuery(t).find("img").width()<200?left_p=(jQuery(t).width()-jQuery(t).find("img").width())/2+(jQuery(t).find("img").width()-200)/2:left_p=(jQuery(t).width()-jQuery(t).find("img").width())/2,top_=parseInt(jQuery(t).find("a").css("top")),top_?(top_p=jQuery(t).find("img").height()+4+top_,left_gap=4):(top_p=jQuery(t).find("img").height()+4,left_gap=0),4==top_p&&"div.um-cover"==t?top_p=jQuery(t).height()/2+e.height()/2:4==top_p&&(top_p=jQuery(t).height()+20),gap_right=jQuery(t).width()+17,e.css({top:0,width:200,left:"auto",right:gap_right+"px","text-align":"center"}),e.find(".um-dropdown-arr").find("i").removeClass().addClass("um-icon-arrow-right-b"),e.find(".um-dropdown-arr").css({top:"4px",left:"auto",right:"-17px"})),"bc"==a&&(jQuery(t).find("img").width()<200?left_p=(jQuery(t).width()-jQuery(t).find("img").width())/2+(jQuery(t).find("img").width()-200)/2:left_p=(jQuery(t).width()-jQuery(t).find("img").width())/2,top_=parseInt(jQuery(t).find("a").css("top")),top_?(top_p=jQuery(t).find("img").height()+4+top_,left_gap=4):(top_p=jQuery(t).find("img").height()+4,left_gap=0),4==top_p&&"div.um-cover"==t?top_p=jQuery(t).height()/2+e.height()/2:4==top_p&&(top_p=jQuery(t).height()+20),e.css({top:top_p,width:200,left:left_p+left_gap,right:"auto","text-align":"center"}),e.find(".um-dropdown-arr").find("i").removeClass().addClass("um-icon-arrow-up-b"),e.find(".um-dropdown-arr").css({top:"-17px",left:e.width()/2-12,right:"auto"}))})}function um_responsive(){jQuery(".um").each(function(){element_width=jQuery(this).width(),element_width<=340?(jQuery(this).removeClass("uimob340"),jQuery(this).removeClass("uimob500"),jQuery(this).removeClass("uimob800"),jQuery(this).removeClass("uimob960"),jQuery(this).addClass("uimob340")):element_width<=500?(jQuery(this).removeClass("uimob340"),jQuery(this).removeClass("uimob500"),jQuery(this).removeClass("uimob800"),jQuery(this).removeClass("uimob960"),jQuery(this).addClass("uimob500")):element_width<=800?(jQuery(this).removeClass("uimob340"),jQuery(this).removeClass("uimob500"),jQuery(this).removeClass("uimob800"),jQuery(this).removeClass("uimob960"),jQuery(this).addClass("uimob800")):element_width<=960?(jQuery(this).removeClass("uimob340"),jQuery(this).removeClass("uimob500"),jQuery(this).removeClass("uimob800"),jQuery(this).removeClass("uimob960"),jQuery(this).addClass("uimob960")):960<element_width&&(jQuery(this).removeClass("uimob340"),jQuery(this).removeClass("uimob500"),jQuery(this).removeClass("uimob800"),jQuery(this).removeClass("uimob960")),0<jQuery(".um-account-nav").length&&jQuery(".um-account-side").is(":visible")&&0==jQuery(".um-account-tab:visible").length&&jQuery(".um-account-side li a.current").trigger("click"),jQuery(this).css("opacity",1)}),jQuery(".um-cover, .um-member-cover, .um-cover-e").each(function(){var e=jQuery(this),t=e.data("ratio"),a=e.width(),i=t.split(":");calcHeight=Math.round(a/i[0])+"px",e.height(calcHeight),e.find(".um-cover-add").height(calcHeight)}),jQuery(".um-members").each(function(){UM_Member_Grid(jQuery(this))}),UM_domenus()}function UM_Member_Grid(e){e.masonry({itemSelector:".um-member",columnWidth:".um-member",gutter:".um-gutter-sizer"})}function initImageUpload_UM(r){r.data("upload_help_text")?upload_help_text='<span class="help">'+r.data("upload_help_text")+"</span>":upload_help_text="",r.data("icon")?icon='<span class="icon"><i class="'+r.data("icon")+'"></i></span>':icon="",r.data("upload_text")?upload_text='<span class="str">'+r.data("upload_text")+"</span>":upload_text="";var e=0;jQuery("#um_upload_single:visible").data("user_id")&&(e=jQuery("#um_upload_single:visible").data("user_id")),r.uploadFile({url:wp.ajax.settings.url,method:"POST",multiple:!1,formData:{action:"um_imageupload",key:r.data("key"),set_id:r.data("set_id"),set_mode:r.data("set_mode"),_wpnonce:r.data("nonce"),timestamp:r.data("timestamp"),user_id:e},fileName:r.data("key"),allowedTypes:r.data("allowed_types"),maxFileSize:r.data("max_size"),dragDropStr:icon+upload_text+upload_help_text,sizeErrorStr:r.data("max_size_error"),extErrorStr:r.data("extension_error"),maxFileCountErrorStr:r.data("max_files_error"),maxFileCount:1,showDelete:!1,showAbort:!1,showDone:!1,showFileCounter:!1,showStatusAfterSuccess:!0,returnType:"json",onSubmit:function(e){r.parents(".um-modal-body").find(".um-error-block").remove()},onSuccess:function(e,t,a){r.selectedFiles=0,t.success&&0==t.success||void 0!==t.data.error?(r.parents(".um-modal-body").append('<div class="um-error-block">'+t.data.error+"</div>"),r.parents(".um-modal-body").find(".upload-statusbar").hide(0),um_modal_responsive()):jQuery.each(t.data,function(e,t){var a=r.parents(".um-modal-body").find(".um-single-image-preview img"),i=r.parents(".um-modal-body").find(".um-single-image-preview"),o=new Date;a.attr("src",t.url+"?"+o.getTime()),a.data("file",t.file),a.load(function(){r.parents(".um-modal-body").find(".um-modal-btn.um-finish-upload.disabled").removeClass("disabled"),r.parents(".um-modal-body").find(".ajax-upload-dragdrop,.upload-statusbar").hide(0),i.show(0),um_modal_responsive()})})},onError:function(e){console.log(e)}})}function initFileUpload_UM(i){i.data("upload_help_text")?upload_help_text='<span class="help">'+i.data("upload_help_text")+"</span>":upload_help_text="",i.data("icon")?icon='<span class="icon"><i class="'+i.data("icon")+'"></i></span>':icon="",i.data("upload_text")?upload_text='<span class="str">'+i.data("upload_text")+"</span>":upload_text="",jQuery("#um_upload_single:visible").data("user_id")&&(user_id=jQuery("#um_upload_single:visible").data("user_id")),i.uploadFile({url:wp.ajax.settings.url,method:"POST",multiple:!1,formData:{action:"um_fileupload",key:i.data("key"),set_id:i.data("set_id"),user_id:i.data("user_id"),set_mode:i.data("set_mode"),_wpnonce:i.data("nonce"),timestamp:i.data("timestamp")},fileName:i.data("key"),allowedTypes:i.data("allowed_types"),maxFileSize:i.data("max_size"),dragDropStr:icon+upload_text+upload_help_text,sizeErrorStr:i.data("max_size_error"),extErrorStr:i.data("extension_error"),maxFileCountErrorStr:i.data("max_files_error"),maxFileCount:1,showDelete:!1,showAbort:!1,showDone:!1,showFileCounter:!1,showStatusAfterSuccess:!0,onSubmit:function(e){i.parents(".um-modal-body").find(".um-error-block").remove()},onSuccess:function(e,t,a){i.selectedFiles=0,t.success&&0==t.success||void 0!==t.data.error?(i.parents(".um-modal-body").append('<div class="um-error-block">'+t.data.error+"</div>"),i.parents(".um-modal-body").find(".upload-statusbar").hide(0)):jQuery.each(t.data,function(e,t){i.parents(".um-modal-body").find(".um-modal-btn.um-finish-upload.disabled").removeClass("disabled"),i.parents(".um-modal-body").find(".ajax-upload-dragdrop,.upload-statusbar").hide(0),i.parents(".um-modal-body").find(".um-single-file-preview").show(0),"icon"==e?i.parents(".um-modal-body").find(".um-single-fileinfo i").removeClass().addClass(t):"icon_bg"==e?i.parents(".um-modal-body").find(".um-single-fileinfo span.icon").css({"background-color":t}):"filename"==e?i.parents(".um-modal-body").find(".um-single-fileinfo a").attr("data-file",t):"original_name"==e?(i.parents(".um-modal-body").find(".um-single-fileinfo a").attr("data-orignal-name",t),i.parents(".um-modal-body").find(".um-single-fileinfo span.filename").html(t)):"url"==e&&i.parents(".um-modal-body").find(".um-single-fileinfo a").attr("href",t)}),setTimeout(function(){um_modal_responsive()},1e3)},onError:function(e){console.log(e)}})}function initCrop_UM(){var t=jQuery(".um-modal .um-single-image-preview img").first(),e=jQuery(".um-modal .um-single-image-preview"),a=t.parent().attr("data-crop"),i=t.parent().attr("data-min_width"),o=t.parent().attr("data-min_height"),r=t.parent().attr("data-ratio");if(jQuery(".um-modal").find("#um_upload_single").attr("data-ratio"))r=(r=jQuery(".um-modal").find("#um_upload_single").attr("data-ratio")).split(":")[0];if(t.length&&""!=t.attr("src")){var u=jQuery(window).height()-(jQuery(".um-modal-footer a").height()+20)-50-jQuery(".um-modal-header:visible").height();if(t.css({height:"auto"}),e.css({height:"auto"}),jQuery(window).height()<=400?(e.css({height:u+"px","max-height":u+"px"}),t.css({height:"auto"})):(t.css({height:"auto","max-height":u+"px"}),e.css({height:t.height(),"max-height":u+"px"})),"square"==a)var d={minWidth:i,minHeight:o,dragCrop:!1,aspectRatio:1,zoomable:!1,rotatable:!1,dashed:!1,done:function(e){t.parent().attr("data-coord",Math.round(e.x)+","+Math.round(e.y)+","+Math.round(e.width)+","+Math.round(e.height))}};else if("cover"==a){0<Math.round(i/r)&&(o=Math.round(i/r));d={minWidth:i,minHeight:o,dragCrop:!1,aspectRatio:r,zoomable:!1,rotatable:!1,dashed:!1,done:function(e){t.parent().attr("data-coord",Math.round(e.x)+","+Math.round(e.y)+","+Math.round(e.width)+","+Math.round(e.height))}}}else if("user"==a)d={minWidth:i,minHeight:o,dragCrop:!0,aspectRatio:"auto",zoomable:!1,rotatable:!1,dashed:!1,done:function(e){t.parent().attr("data-coord",Math.round(e.x)+","+Math.round(e.y)+","+Math.round(e.width)+","+Math.round(e.height))}};0!=a&&(t.cropper(d),jQuery(".um-single-image-preview img.cropper-hidden").cropper("destroy"),jQuery(".um-single-image-preview img.lazyloaded").addClass("cropper-hidden"),jQuery(".um-single-image-preview img.lazyloaded").removeClass("lazyloaded"),jQuery(".um-single-image-preview .cropper-container").append('<div class="um-clear"></div>'))}}function um_new_modal(e,t,a,i){if(0==jQuery("body").find(".um-modal-overlay").length)if(jQuery(".tipsy").hide(),UM_hide_menus(),jQuery("body,html,textarea").css("overflow","hidden"),jQuery(document).bind("touchmove",function(e){e.preventDefault()}),jQuery(".um-modal").on("touchmove",function(e){e.stopPropagation()}),a?jQuery("body").append('<div class="um-modal-overlay"></div><div class="um-modal is-photo"></div>'):jQuery("body").append('<div class="um-modal-overlay"></div><div class="um-modal no-photo"></div>'),jQuery("#"+e).prependTo(".um-modal"),a){jQuery(".um-modal").find(".um-modal-photo").html("<img />");var o=jQuery(".um-modal-photo img"),r=jQuery(window).width()-60,u=jQuery(window).height()-.25*jQuery(window).height();o.attr("src",i),o.load(function(){jQuery("#"+e).show(),jQuery(".um-modal").show(),o.css({opacity:0}),o.css({"max-width":r}),o.css({"max-height":u}),jQuery(".um-modal").css({width:o.width(),"margin-left":"-"+o.width()/2+"px"}),o.animate({opacity:1},1e3),um_modal_responsive()})}else jQuery("#"+e).show(),jQuery(".um-modal").show(),um_modal_size(t),initImageUpload_UM(jQuery(".um-modal:visible").find(".um-single-image-upload")),initFileUpload_UM(jQuery(".um-modal:visible").find(".um-single-file-upload")),um_modal_responsive()}function um_modal_responsive(){var e=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,t=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight,a=jQuery(".um-modal:visible");if(jQuery(".um-modal-body.photo:visible").length){a.removeClass("uimob340"),a.removeClass("uimob500");var i=jQuery(".um-modal-photo img"),o=e-60,r=t-.25*t;i.css({opacity:0}),i.css({"max-width":o}),i.css({"max-height":r}),jQuery(".um-modal").css({width:i.width(),"margin-left":"-"+i.width()/2+"px"}),i.animate({opacity:1},1e3);var u=(t-a.innerHeight())/2+"px";a.animate({bottom:u},300)}else if(a.length)if(a.removeClass("uimob340"),a.removeClass("uimob500"),e<=340)a.addClass("uimob340"),initCrop_UM(),a.animate({bottom:0},300);else if(e<=500)a.addClass("uimob500"),initCrop_UM(),a.animate({bottom:0},300);else if(e<=800){initCrop_UM();u=(t-a.innerHeight())/2+"px";a.animate({bottom:u},300)}else if(e<=960){initCrop_UM();u=(t-a.innerHeight())/2+"px";a.animate({bottom:u},300)}else if(960<e){initCrop_UM();u=(t-a.innerHeight())/2+"px";a.animate({bottom:u},300)}}function um_remove_modal(){jQuery("img.cropper-hidden").cropper("destroy"),jQuery("body,html,textarea").css("overflow","auto"),jQuery(document).unbind("touchmove"),jQuery('.um-modal div[id^="um_"]').hide().appendTo("body"),jQuery(".um-modal,.um-modal-overlay").remove()}function um_modal_size(e){jQuery(".um-modal:visible").addClass(e)}function um_modal_add_attr(e,t){jQuery(".um-modal:visible").data(e,t)}function prepare_Modal(){0==jQuery(".um-popup-overlay").length&&(jQuery("body").append('<div class="um-popup-overlay"></div>'),jQuery("body").append('<div class="um-popup"></div>'),jQuery(".um-popup").addClass("loading"),jQuery("body,html").css({overflow:"hidden"}))}function remove_Modal(){jQuery(".um-popup-overlay").length&&(jQuery(document).trigger("um_before_modal_removed"),jQuery(".tipsy").remove(),jQuery(".um-popup").empty().remove(),jQuery(".um-popup-overlay").empty().remove(),jQuery("body,html").css({overflow:"auto"}))}function show_Modal(e){jQuery(".um-popup-overlay").length&&(jQuery(".um-popup").removeClass("loading").html(e),jQuery(".um-tip-n").tipsy({gravity:"n",opacity:1,offset:3}),jQuery(".um-tip-w").tipsy({gravity:"w",opacity:1,offset:3}),jQuery(".um-tip-e").tipsy({gravity:"e",opacity:1,offset:3}),jQuery(".um-tip-s").tipsy({gravity:"s",opacity:1,offset:3}))}function responsive_Modal(){jQuery(".um-popup-overlay").length&&(ag_height=jQuery(window).height()-jQuery(".um-popup .um-popup-header").outerHeight()-jQuery(".um-popup .um-popup-footer").outerHeight()-80,350<ag_height&&(ag_height=350),jQuery(".um-popup-autogrow:visible").length?jQuery(".um-popup-autogrow:visible").css({height:ag_height+"px"}):jQuery(".um-popup-autogrow2:visible").length&&jQuery(".um-popup-autogrow2:visible").css({"max-height":ag_height+"px"}))}function um_reset_field(e){jQuery(e).find("div.um-field-area").find("input,textarea,select").not(":button, :submit, :reset, :hidden").val("").removeAttr("checked").removeAttr("selected")}function um_selected(e,t){if(e==t)return"selected='selected'"}jQuery(function(){jQuery(".um-search form *").keypress(function(e){if(13==e.which)return jQuery(".um-search form").submit(),!1}),2==jQuery("input[data-key=user_password],input[data-key=confirm_user_password]").length&&UM_check_password_matched()});
assets/js/um-scripts.js CHANGED
@@ -2,254 +2,279 @@
2
  if( jQuery(this).data('load-error') != undefined ) return;
3
  jQuery(this).data('load-error', '1').attr('src', jQuery(this).data('default'));
4
  });*/
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5
  jQuery(document).ready(function() {
6
 
7
- jQuery(document).on('click', '.um-dropdown a', function(e){
8
-
9
- return false;
10
- });
11
-
12
- jQuery(document).on('click', '.um-dropdown a.real_url', function(e){
13
-
14
- window.location = jQuery(this).attr('href');
15
- });
16
-
17
- jQuery(document).on('click', '.um-trigger-menu-on-click', function(e){
18
- jQuery('.um-dropdown').hide();
19
- menu = jQuery(this).find('.um-dropdown');
20
- menu.show();
21
- return false;
22
- });
23
-
24
- jQuery(document).on('click', '.um-dropdown-hide', function(e){
25
- UM_hide_menus();
26
- });
27
-
28
- jQuery(document).on('click', 'a.um-manual-trigger', function(){
29
- var child = jQuery(this).attr('data-child');
30
- var parent = jQuery(this).attr('data-parent');
31
- jQuery(this).parents( parent ).find( child ).trigger('click');
32
- });
33
-
34
- jQuery('.um-tip-n').tipsy({gravity: 'n', opacity: 1, live: 'a.live', offset: 3 });
35
- jQuery('.um-tip-w').tipsy({gravity: 'w', opacity: 1, live: 'a.live', offset: 3 });
36
- jQuery('.um-tip-e').tipsy({gravity: 'e', opacity: 1, live: 'a.live', offset: 3 });
37
- jQuery('.um-tip-s').tipsy({gravity: 's', opacity: 1, live: 'a.live', offset: 3 });
38
-
39
- jQuery(document).on('change', '.um-field-area input[type=radio]', function(){
40
- var field = jQuery(this).parents('.um-field-area');
41
- var this_field = jQuery(this).parents('label');
42
- field.find('.um-field-radio').removeClass('active');
43
- field.find('.um-field-radio').find('i').removeAttr('class').addClass('um-icon-android-radio-button-off');
44
- this_field.addClass('active');
45
- this_field.find('i').removeAttr('class').addClass('um-icon-android-radio-button-on');
46
- });
47
-
48
- jQuery(document).on('change', '.um-field-area input[type=checkbox]', function(){
49
-
50
- var field = jQuery(this).parents('.um-field-area');
51
- var this_field = jQuery(this).parents('label');
52
- if ( this_field.hasClass('active') ) {
53
- this_field.removeClass('active');
54
- this_field.find('i').removeAttr('class').addClass('um-icon-android-checkbox-outline-blank');
55
- } else {
56
- this_field.addClass('active');
57
- this_field.find('i').removeAttr('class').addClass('um-icon-android-checkbox-outline');
58
- }
59
- });
60
-
61
- jQuery('.um-datepicker').each(function(){
62
- elem = jQuery(this);
63
-
64
- if ( elem.attr('data-disabled_weekdays') != '' ) {
65
- var disable = JSON.parse( elem.attr('data-disabled_weekdays') );
66
- } else {
67
- var disable = false;
68
- }
69
-
70
- var years_n = elem.attr('data-years');
71
-
72
- var minRange = elem.attr('data-date_min');
73
- var maxRange = elem.attr('data-date_max');
74
-
75
- var minSplit = minRange.split(",");
76
- var maxSplit = maxRange.split(",");
77
-
78
- var min = minSplit.length ? new Date(minSplit) : null;
79
- var max = minSplit.length ? new Date(maxSplit) : null;
80
-
81
- // fix min date for safari
82
- if(min && min.toString() == 'Invalid Date' && minSplit.length == 3) {
83
- var minDateString = minSplit[1] + '/' + minSplit[2] + '/' + minSplit[0];
84
- min = new Date(Date.parse(minDateString));
85
- }
86
-
87
- // fix max date for safari
88
- if(max && max.toString() == 'Invalid Date' && maxSplit.length == 3) {
89
- var maxDateString = maxSplit[1] + '/' + maxSplit[2] + '/' + maxSplit[0];
90
- max = new Date(Date.parse(maxDateString));
91
- }
92
-
93
- elem.pickadate({
94
- selectYears: years_n,
95
- min: min,
96
- max: max,
97
- disable: disable,
98
- format: elem.attr('data-format'),
99
- formatSubmit: 'yyyy/mm/dd',
100
- hiddenName: true,
101
- onOpen: function() { elem.blur(); },
102
- onClose: function() { elem.blur(); }
103
- });
104
- });
105
-
106
- jQuery('.um-timepicker').each(function(){
107
- elem = jQuery(this);
108
-
109
- elem.pickatime({
110
- format: elem.attr('data-format'),
111
- interval: parseInt( elem.attr('data-intervals') ),
112
- formatSubmit: 'HH:i',
113
- hiddenName: true,
114
- onOpen: function() { elem.blur(); },
115
- onClose: function() { elem.blur(); }
116
- });
117
- });
118
-
119
- jQuery('.um-rating').um_raty({
120
- half: false,
121
- starType: 'i',
122
- number: function() {return jQuery(this).attr('data-number');},
123
- score: function() {return jQuery(this).attr('data-score');},
124
- scoreName: function(){return jQuery(this).attr('data-key');},
125
- hints: false,
126
- click: function( score, evt ) {
127
- live_field = this.id;
128
- live_value = score;
129
- um_apply_conditions( jQuery(this), false );
130
- }
131
- });
132
-
133
- jQuery('.um-rating-readonly').um_raty({
134
- half: false,
135
- starType: 'i',
136
- number: function() {return jQuery(this).attr('data-number');},
137
- score: function() {return jQuery(this).attr('data-score');},
138
- scoreName: function(){return jQuery(this).attr('data-key');},
139
- hints: false,
140
- readOnly: true
141
- });
142
-
143
- jQuery(document).on('click', '.um .um-single-image-preview a.cancel', function(e){
144
- e.preventDefault();
145
- var parent = jQuery(this).parents('.um-field');
146
- var src = jQuery(this).parents('.um-field').find('.um-single-image-preview img').attr('src');
147
- parent.find('.um-single-image-preview img').attr('src','');
148
- parent.find('.um-single-image-preview').hide();
149
- parent.find('.um-btn-auto-width').html('Upload');
150
- parent.find('input[type=hidden]').val('empty_file');
151
-
152
- jQuery.ajax({
153
- url: wp.ajax.settings.url,
154
- type: 'post',
155
- data: {
156
- action: 'um_remove_file',
157
- src: src,
158
- nonce: um_scripts.nonce
159
- }
160
- });
161
-
162
- return false;
163
- });
164
-
165
- jQuery(document).on('click', '.um .um-single-file-preview a.cancel', function(e){
166
- e.preventDefault();
167
- var parent = jQuery(this).parents('.um-field');
168
- var src = jQuery(this).parents('.um-field').find('.um-single-fileinfo a').attr('href');
169
- parent.find('.um-single-file-preview').hide();
170
- parent.find('.um-btn-auto-width').html('Upload');
171
- parent.find('input[type=hidden]').val('empty_file');
172
-
173
- jQuery.ajax({
174
- url: wp.ajax.settings.url,
175
- type: 'post',
176
- data: {
177
- action: 'um_remove_file',
178
- src: src,
179
- nonce: um_scripts.nonce
180
- }
181
- });
182
-
183
- return false;
184
- });
185
-
186
- jQuery('.um-s1,.um-s2').css({'display':'block'});
187
-
188
- if( jQuery(".um-s1").length > 0 ){
189
- jQuery(".um-s1").each(function () {
190
- var select = jQuery(this);
191
- if( select.val() === '' && select.attr('data-default') ) {
192
- select.val(select.attr('data-default'));
193
- }
194
- });
195
- }
196
-
197
- jQuery(".um-s1").select2({
198
-
199
- allowClear: true,
200
- });
201
-
202
- jQuery(".um-s2").select2({
203
- allowClear: false,
204
- minimumResultsForSearch: 10
205
- });
206
-
207
- jQuery(document).on('click', '.um-field-group-head:not(.disabled)', function(){
208
- var field = jQuery(this).parents('.um-field-group');
209
- var limit = field.data('max_entries');
210
-
211
- if ( field.find('.um-field-group-body').is(':hidden')){
212
- field.find('.um-field-group-body').show();
213
- } else {
214
- field.find('.um-field-group-body:first').clone().appendTo( field );
215
- }
216
-
217
- increase_id = 0;
218
- field.find('.um-field-group-body').each(function(){
219
- increase_id++;
220
- jQuery(this).find('input').each(function(){
221
- var input = jQuery(this);
222
- input.attr('id', input.data('key') + '-' + increase_id );
223
- input.attr('name', input.data('key') + '-' + increase_id );
224
- input.parent().parent().find('label').attr('for', input.data('key') + '-' + increase_id );
225
- });
226
- });
227
-
228
- if ( limit > 0 && field.find('.um-field-group-body').length == limit ) {
229
-
230
- jQuery(this).addClass('disabled');
231
-
232
- }
233
- });
234
-
235
- jQuery(document).on('click', '.um-field-group-cancel', function(e){
236
- e.preventDefault();
237
- var field = jQuery(this).parents('.um-field-group');
238
-
239
- var limit = field.data('max_entries');
240
-
241
- if ( field.find('.um-field-group-body').length > 1 ) {
242
- jQuery(this).parents('.um-field-group-body').remove();
243
- } else {
244
- jQuery(this).parents('.um-field-group-body').hide();
245
- }
246
-
247
- if ( limit > 0 && field.find('.um-field-group-body').length < limit ) {
248
- field.find('.um-field-group-head').removeClass('disabled');
249
- }
250
-
251
- return false;
252
- });
253
 
254
 
255
  jQuery( document.body ).on( 'click', '.um-ajax-paginate', function(e) {
@@ -310,166 +335,166 @@ jQuery(document).ready(function() {
310
  });
311
 
312
 
313
- jQuery(document).on('click', '.um-ajax-action', function(e){
314
- e.preventDefault();
315
- var hook = jQuery(this).data('hook');
316
- var user_id = jQuery(this).data('user_id');
317
- var arguments = jQuery(this).data('arguments');
318
-
319
- if ( jQuery(this).data('js-remove') ){
320
- jQuery(this).parents('.'+jQuery(this).data('js-remove')).fadeOut('fast');
321
- }
322
-
323
- jQuery.ajax({
324
- url: wp.ajax.settings.url,
325
- type: 'post',
326
- data: {
327
- action: 'um_muted_action',
328
- hook: hook,
329
- user_id: user_id,
330
- arguments: arguments,
331
- nonce: um_scripts.nonce
332
- },
333
- success: function(data){
334
-
335
- }
336
- });
337
- return false;
338
- });
339
-
340
- jQuery(document).on('click', '#um-search-button', function() {
341
-
342
- jQuery(this).parents('form').submit();
343
- });
344
-
345
- jQuery('.um-form input[class=um-button][type=submit]').removeAttr('disabled');
346
-
347
- jQuery(document).one('click', '.um:not(.um-account) .um-form input[class=um-button][type=submit]:not(.um-has-recaptcha)', function() {
348
- jQuery(this).attr('disabled','disabled');
349
- jQuery(this).parents('form').submit();
350
-
351
- });
352
-
353
-
354
- var um_select_options_cache = {};
355
-
356
- /**
357
- * Find all select fields with parent select fields
358
- */
359
- jQuery('select[data-um-parent]').each(function(){
360
-
361
- var me = jQuery(this);
362
- var parent_option = me.data('um-parent');
363
- var um_ajax_url = me.data('um-ajax-url');
364
- var um_ajax_source = me.data('um-ajax-source');
365
- var original_value = me.val();
366
-
367
- me.attr('data-um-init-field', true );
368
-
369
- jQuery(document).on('change','select[name="'+parent_option+'"]',function(){
370
- var parent = jQuery(this);
371
- var form_id = parent.closest('form').find('input[type=hidden][name=form_id]').val();
372
- var arr_key = parent.val();
373
-
374
- if( parent.val() != '' && typeof um_select_options_cache[ arr_key ] != 'object' ){
375
-
376
- jQuery.ajax({
377
- url: wp.ajax.settings.url,
378
- type: 'post',
379
- data: {
380
- action: 'um_select_options',
381
- parent_option_name: parent_option,
382
- parent_option: parent.val(),
383
- child_callback: um_ajax_source,
384
- child_name: me.attr('name'),
385
- members_directory: me.attr('data-mebers-directory'),
386
- form_id: form_id,
387
- nonce: um_scripts.nonce
388
- },
389
- success: function( data ){
390
- if( data.status == 'success' && parent.val() != '' ){
391
- um_field_populate_child_options( me, data, arr_key);
392
- }
393
-
394
- if( typeof data.debug !== 'undefined' ){
395
- console.log( data );
396
- }
397
- },
398
- error: function( e ){
399
- console.log( e );
400
- }
401
- });
402
-
403
-
404
- }
405
-
406
- if( parent.val() != '' && typeof um_select_options_cache[ arr_key ] == 'object' ) {
407
- var data = um_select_options_cache[ arr_key ];
408
- um_field_populate_child_options( me, data, arr_key );
409
- }
410
-
411
- if( parent.val() == '' ){
412
- me.find('option[value!=""]').remove();
413
- me.val('').trigger('change');
414
- }
415
-
416
- });
417
-
418
- jQuery('select[name="'+parent_option+'"]').trigger('change');
419
-
420
- });
421
-
422
- /**
423
- * Populates child options and cache ajax response
424
- * @param DOM me child option elem
425
- * @param array data
426
- * @param string key
427
- */
428
- function um_field_populate_child_options( me, data, arr_key, arr_items ){
429
-
430
-
431
- var parent_option = me.data('um-parent');
432
- var child_name = me.attr('name');
433
- var parent_dom = jQuery('select[name="'+parent_option+'"]');
434
- me.find('option[value!=""]').remove();
435
-
436
- if( ! me.hasClass('um-child-option-disabled') ){
437
- me.removeAttr('disabled');
438
- }
439
-
440
- var arr_items = [],
441
- search_get = '';
442
-
443
- if ( data.post.members_directory === 'yes' ) {
444
- var urlParams = new URLSearchParams(window.location.search);
445
- search_get = urlParams.get(data.post.child_name);
446
- }
447
- jQuery.each( data.items, function(k,v){
448
- arr_items.push({id: k, text: v, selected: (v === search_get) });
449
- });
450
-
451
- me.select2('destroy');
452
- me.select2({
453
- data: arr_items,
454
- allowClear: true,
455
- minimumResultsForSearch: 10
456
- });
457
-
458
- if ( data.post.members_directory !== 'yes' ) {
459
- if( typeof data.field.default !== 'undefined' && ! me.data('um-original-value') ){
460
- me.val( data.field.default ).trigger('change');
461
- }else if( me.data('um-original-value') != '' ){
462
- me.val( me.data('um-original-value') ).trigger('change');
463
- }
464
-
465
- if( data.field.editable == 0 ){
466
- me.addClass('um-child-option-disabled');
467
- me.attr('disabled','disabled');
468
- }
469
- }
470
- um_select_options_cache[ arr_key ] = data;
471
-
472
-
473
- }
474
 
475
  });
2
  if( jQuery(this).data('load-error') != undefined ) return;
3
  jQuery(this).data('load-error', '1').attr('src', jQuery(this).data('default'));
4
  });*/
5
+
6
+ function um_init_datetimepicker() {
7
+ jQuery('.um-datepicker:not(.picker__input)').each(function(){
8
+ elem = jQuery(this);
9
+
10
+ if ( typeof elem.attr('data-disabled_weekdays') != 'undefined' && elem.attr('data-disabled_weekdays') != '' ) {
11
+ var disable = JSON.parse( elem.attr('data-disabled_weekdays') );
12
+ } else {
13
+ var disable = false;
14
+ }
15
+
16
+ var years_n = null;
17
+ if ( typeof elem.attr('data-years') != 'undefined' ) {
18
+ years_n = elem.attr('data-years');
19
+ }
20
+
21
+ var minRange = elem.attr('data-date_min');
22
+ var maxRange = elem.attr('data-date_max');
23
+
24
+ var minSplit = [], maxSplit = [];
25
+ if ( typeof minRange != 'undefined' ) {
26
+ minSplit = minRange.split(",");
27
+ }
28
+ if ( typeof maxRange != 'undefined' ) {
29
+ maxSplit = maxRange.split(",");
30
+ }
31
+
32
+ var min = minSplit.length ? new Date(minSplit) : null;
33
+ var max = minSplit.length ? new Date(maxSplit) : null;
34
+
35
+ // fix min date for safari
36
+ if ( min && min.toString() == 'Invalid Date' && minSplit.length == 3 ) {
37
+ var minDateString = minSplit[1] + '/' + minSplit[2] + '/' + minSplit[0];
38
+ min = new Date(Date.parse(minDateString));
39
+ }
40
+
41
+ // fix max date for safari
42
+ if ( max && max.toString() == 'Invalid Date' && maxSplit.length == 3 ) {
43
+ var maxDateString = maxSplit[1] + '/' + maxSplit[2] + '/' + maxSplit[0];
44
+ max = new Date(Date.parse(maxDateString));
45
+ }
46
+
47
+ var data = {
48
+ disable: disable,
49
+ format: elem.attr( 'data-format' ),
50
+ formatSubmit: 'yyyy/mm/dd',
51
+ hiddenName: true,
52
+ onOpen: function() { elem.blur(); },
53
+ onClose: function() { elem.blur(); }
54
+ };
55
+
56
+ if ( years_n !== null ) {
57
+ data.selectYears = years_n;
58
+ }
59
+
60
+ if ( min !== null ) {
61
+ data.min = min;
62
+ }
63
+
64
+ if ( max !== null ) {
65
+ data.max = max;
66
+ }
67
+
68
+ elem.pickadate( data );
69
+ });
70
+
71
+ jQuery('.um-timepicker:not(.picker__input)').each(function(){
72
+ elem = jQuery(this);
73
+
74
+ elem.pickatime({
75
+ format: elem.attr('data-format'),
76
+ interval: parseInt( elem.attr('data-intervals') ),
77
+ formatSubmit: 'HH:i',
78
+ hiddenName: true,
79
+ onOpen: function() { elem.blur(); },
80
+ onClose: function() { elem.blur(); }
81
+ });
82
+ });
83
+ }
84
+
85
  jQuery(document).ready(function() {
86
 
87
+ jQuery(document).on('click', '.um-dropdown a', function(e){
88
+
89
+ return false;
90
+ });
91
+
92
+ jQuery(document).on('click', '.um-dropdown a.real_url', function(e){
93
+
94
+ window.location = jQuery(this).attr('href');
95
+ });
96
+
97
+ jQuery(document).on('click', '.um-trigger-menu-on-click', function(e){
98
+ jQuery('.um-dropdown').hide();
99
+ menu = jQuery(this).find('.um-dropdown');
100
+ menu.show();
101
+ return false;
102
+ });
103
+
104
+ jQuery(document).on('click', '.um-dropdown-hide', function(e){
105
+ UM_hide_menus();
106
+ });
107
+
108
+ jQuery(document).on('click', 'a.um-manual-trigger', function(){
109
+ var child = jQuery(this).attr('data-child');
110
+ var parent = jQuery(this).attr('data-parent');
111
+ jQuery(this).parents( parent ).find( child ).trigger('click');
112
+ });
113
+
114
+ jQuery('.um-tip-n').tipsy({gravity: 'n', opacity: 1, live: 'a.live', offset: 3 });
115
+ jQuery('.um-tip-w').tipsy({gravity: 'w', opacity: 1, live: 'a.live', offset: 3 });
116
+ jQuery('.um-tip-e').tipsy({gravity: 'e', opacity: 1, live: 'a.live', offset: 3 });
117
+ jQuery('.um-tip-s').tipsy({gravity: 's', opacity: 1, live: 'a.live', offset: 3 });
118
+
119
+ jQuery(document).on('change', '.um-field-area input[type=radio]', function(){
120
+ var field = jQuery(this).parents('.um-field-area');
121
+ var this_field = jQuery(this).parents('label');
122
+ field.find('.um-field-radio').removeClass('active');
123
+ field.find('.um-field-radio').find('i').removeAttr('class').addClass('um-icon-android-radio-button-off');
124
+ this_field.addClass('active');
125
+ this_field.find('i').removeAttr('class').addClass('um-icon-android-radio-button-on');
126
+ });
127
+
128
+ jQuery(document).on('change', '.um-field-area input[type=checkbox]', function(){
129
+
130
+ var field = jQuery(this).parents('.um-field-area');
131
+ var this_field = jQuery(this).parents('label');
132
+ if ( this_field.hasClass('active') ) {
133
+ this_field.removeClass('active');
134
+ this_field.find('i').removeAttr('class').addClass('um-icon-android-checkbox-outline-blank');
135
+ } else {
136
+ this_field.addClass('active');
137
+ this_field.find('i').removeAttr('class').addClass('um-icon-android-checkbox-outline');
138
+ }
139
+ });
140
+
141
+
142
+ um_init_datetimepicker();
143
+
144
+ jQuery('.um-rating').um_raty({
145
+ half: false,
146
+ starType: 'i',
147
+ number: function() {return jQuery(this).attr('data-number');},
148
+ score: function() {return jQuery(this).attr('data-score');},
149
+ scoreName: function(){return jQuery(this).attr('data-key');},
150
+ hints: false,
151
+ click: function( score, evt ) {
152
+ live_field = this.id;
153
+ live_value = score;
154
+ um_apply_conditions( jQuery(this), false );
155
+ }
156
+ });
157
+
158
+ jQuery('.um-rating-readonly').um_raty({
159
+ half: false,
160
+ starType: 'i',
161
+ number: function() {return jQuery(this).attr('data-number');},
162
+ score: function() {return jQuery(this).attr('data-score');},
163
+ scoreName: function(){return jQuery(this).attr('data-key');},
164
+ hints: false,
165
+ readOnly: true
166
+ });
167
+
168
+ jQuery(document).on('click', '.um .um-single-image-preview a.cancel', function(e){
169
+ e.preventDefault();
170
+ var parent = jQuery(this).parents('.um-field');
171
+ var src = jQuery(this).parents('.um-field').find('.um-single-image-preview img').attr('src');
172
+ parent.find('.um-single-image-preview img').attr('src','');
173
+ parent.find('.um-single-image-preview').hide();
174
+ parent.find('.um-btn-auto-width').html('Upload');
175
+ parent.find('input[type=hidden]').val('empty_file');
176
+
177
+ jQuery.ajax({
178
+ url: wp.ajax.settings.url,
179
+ type: 'post',
180
+ data: {
181
+ action: 'um_remove_file',
182
+ src: src,
183
+ nonce: um_scripts.nonce
184
+ }
185
+ });
186
+
187
+ return false;
188
+ });
189
+
190
+ jQuery(document).on('click', '.um .um-single-file-preview a.cancel', function(e){
191
+ e.preventDefault();
192
+ var parent = jQuery(this).parents('.um-field');
193
+ var src = jQuery(this).parents('.um-field').find('.um-single-fileinfo a').attr('href');
194
+ parent.find('.um-single-file-preview').hide();
195
+ parent.find('.um-btn-auto-width').html('Upload');
196
+ parent.find('input[type=hidden]').val('empty_file');
197
+
198
+ jQuery.ajax({
199
+ url: wp.ajax.settings.url,
200
+ type: 'post',
201
+ data: {
202
+ action: 'um_remove_file',
203
+ src: src,
204
+ nonce: um_scripts.nonce
205
+ }
206
+ });
207
+
208
+ return false;
209
+ });
210
+
211
+ jQuery('.um-s1,.um-s2').css({'display':'block'});
212
+
213
+ if( jQuery(".um-s1").length > 0 ){
214
+ jQuery(".um-s1").each(function () {
215
+ var select = jQuery(this);
216
+ if( select.val() === '' && select.attr('data-default') ) {
217
+ select.val(select.attr('data-default'));
218
+ }
219
+ });
220
+ }
221
+
222
+ jQuery(".um-s1").select2({
223
+
224
+ allowClear: true,
225
+ });
226
+
227
+ jQuery(".um-s2").select2({
228
+ allowClear: false,
229
+ minimumResultsForSearch: 10
230
+ });
231
+
232
+ jQuery(document).on('click', '.um-field-group-head:not(.disabled)', function(){
233
+ var field = jQuery(this).parents('.um-field-group');
234
+ var limit = field.data('max_entries');
235
+
236
+ if ( field.find('.um-field-group-body').is(':hidden')){
237
+ field.find('.um-field-group-body').show();
238
+ } else {
239
+ field.find('.um-field-group-body:first').clone().appendTo( field );
240
+ }
241
+
242
+ increase_id = 0;
243
+ field.find('.um-field-group-body').each(function(){
244
+ increase_id++;
245
+ jQuery(this).find('input').each(function(){
246
+ var input = jQuery(this);
247
+ input.attr('id', input.data('key') + '-' + increase_id );
248
+ input.attr('name', input.data('key') + '-' + increase_id );
249
+ input.parent().parent().find('label').attr('for', input.data('key') + '-' + increase_id );
250
+ });
251
+ });
252
+
253
+ if ( limit > 0 && field.find('.um-field-group-body').length == limit ) {
254
+
255
+ jQuery(this).addClass('disabled');
256
+
257
+ }
258
+ });
259
+
260
+ jQuery(document).on('click', '.um-field-group-cancel', function(e){
261
+ e.preventDefault();
262
+ var field = jQuery(this).parents('.um-field-group');
263
+
264
+ var limit = field.data('max_entries');
265
+
266
+ if ( field.find('.um-field-group-body').length > 1 ) {
267
+ jQuery(this).parents('.um-field-group-body').remove();
268
+ } else {
269
+ jQuery(this).parents('.um-field-group-body').hide();
270
+ }
271
+
272
+ if ( limit > 0 && field.find('.um-field-group-body').length < limit ) {
273
+ field.find('.um-field-group-head').removeClass('disabled');
274
+ }
275
+
276
+ return false;
277
+ });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
278
 
279
 
280
  jQuery( document.body ).on( 'click', '.um-ajax-paginate', function(e) {
335
  });
336
 
337
 
338
+ jQuery(document).on('click', '.um-ajax-action', function(e){
339
+ e.preventDefault();
340
+ var hook = jQuery(this).data('hook');
341
+ var user_id = jQuery(this).data('user_id');
342
+ var arguments = jQuery(this).data('arguments');
343
+
344
+ if ( jQuery(this).data('js-remove') ){
345
+ jQuery(this).parents('.'+jQuery(this).data('js-remove')).fadeOut('fast');
346
+ }
347
+
348
+ jQuery.ajax({
349
+ url: wp.ajax.settings.url,
350
+ type: 'post',
351
+ data: {
352
+ action: 'um_muted_action',
353
+ hook: hook,
354
+ user_id: user_id,
355
+ arguments: arguments,
356
+ nonce: um_scripts.nonce
357
+ },
358
+ success: function(data){
359
+
360
+ }
361
+ });
362
+ return false;
363
+ });
364
+
365
+ jQuery(document).on('click', '#um-search-button', function() {
366
+
367
+ jQuery(this).parents('form').submit();
368
+ });
369
+
370
+ jQuery('.um-form input[class=um-button][type=submit]').removeAttr('disabled');
371
+
372
+ jQuery(document).one('click', '.um:not(.um-account) .um-form input[class=um-button][type=submit]:not(.um-has-recaptcha)', function() {
373
+ jQuery(this).attr('disabled','disabled');
374
+ jQuery(this).parents('form').submit();
375
+
376
+ });
377
+
378
+
379
+ var um_select_options_cache = {};
380
+
381
+ /**
382
+ * Find all select fields with parent select fields
383
+ */
384
+ jQuery('select[data-um-parent]').each(function(){
385
+
386
+ var me = jQuery(this);
387
+ var parent_option = me.data('um-parent');
388
+ var um_ajax_url = me.data('um-ajax-url');
389
+ var um_ajax_source = me.data('um-ajax-source');
390
+ var original_value = me.val();
391
+
392
+ me.attr('data-um-init-field', true );
393
+
394
+ jQuery(document).on('change','select[name="'+parent_option+'"]',function(){
395
+ var parent = jQuery(this);
396
+ var form_id = parent.closest('form').find('input[type=hidden][name=form_id]').val();
397
+ var arr_key = parent.val();
398
+
399
+ if( parent.val() != '' && typeof um_select_options_cache[ arr_key ] != 'object' ){
400
+
401
+ jQuery.ajax({
402
+ url: wp.ajax.settings.url,
403
+ type: 'post',
404
+ data: {
405
+ action: 'um_select_options',
406
+ parent_option_name: parent_option,
407
+ parent_option: parent.val(),
408
+ child_callback: um_ajax_source,
409
+ child_name: me.attr('name'),
410
+ members_directory: me.attr('data-mebers-directory'),
411
+ form_id: form_id,
412
+ nonce: um_scripts.nonce
413
+ },
414
+ success: function( data ){
415
+ if( data.status == 'success' && parent.val() != '' ){
416
+ um_field_populate_child_options( me, data, arr_key);
417
+ }
418
+
419
+ if( typeof data.debug !== 'undefined' ){
420
+ console.log( data );
421
+ }
422
+ },
423
+ error: function( e ){
424
+ console.log( e );
425
+ }
426
+ });
427
+
428
+
429
+ }
430
+
431
+ if( parent.val() != '' && typeof um_select_options_cache[ arr_key ] == 'object' ) {
432
+ var data = um_select_options_cache[ arr_key ];
433
+ um_field_populate_child_options( me, data, arr_key );
434
+ }
435
+
436
+ if( parent.val() == '' ){
437
+ me.find('option[value!=""]').remove();
438
+ me.val('').trigger('change');
439
+ }
440
+
441
+ });
442
+
443
+ jQuery('select[name="'+parent_option+'"]').trigger('change');
444
+
445
+ });
446
+
447
+ /**
448
+ * Populates child options and cache ajax response
449
+ * @param DOM me child option elem
450
+ * @param array data
451
+ * @param string key
452
+ */
453
+ function um_field_populate_child_options( me, data, arr_key, arr_items ){
454
+
455
+
456
+ var parent_option = me.data('um-parent');
457
+ var child_name = me.attr('name');
458
+ var parent_dom = jQuery('select[name="'+parent_option+'"]');
459
+ me.find('option[value!=""]').remove();
460
+
461
+ if( ! me.hasClass('um-child-option-disabled') ){
462
+ me.removeAttr('disabled');
463
+ }
464
+
465
+ var arr_items = [],
466
+ search_get = '';
467
+
468
+ if ( data.post.members_directory === 'yes' ) {
469
+ var urlParams = new URLSearchParams(window.location.search);
470
+ search_get = urlParams.get(data.post.child_name);
471
+ }
472
+ jQuery.each( data.items, function(k,v){
473
+ arr_items.push({id: k, text: v, selected: (v === search_get) });
474
+ });
475
+
476
+ me.select2('destroy');
477
+ me.select2({
478
+ data: arr_items,
479
+ allowClear: true,
480
+ minimumResultsForSearch: 10
481
+ });
482
+
483
+ if ( data.post.members_directory !== 'yes' ) {
484
+ if( typeof data.field.default !== 'undefined' && ! me.data('um-original-value') ){
485
+ me.val( data.field.default ).trigger('change');
486
+ }else if( me.data('um-original-value') != '' ){
487
+ me.val( me.data('um-original-value') ).trigger('change');
488
+ }
489
+
490
+ if( data.field.editable == 0 ){
491
+ me.addClass('um-child-option-disabled');
492
+ me.attr('disabled','disabled');
493
+ }
494
+ }
495
+ um_select_options_cache[ arr_key ] = data;
496
+
497
+
498
+ }
499
 
500
  });
assets/js/um-scripts.min.js CHANGED
@@ -1 +1 @@
1
- jQuery(document).ready(function(){jQuery(document).on("click",".um-dropdown a",function(e){return!1}),jQuery(document).on("click",".um-dropdown a.real_url",function(e){window.location=jQuery(this).attr("href")}),jQuery(document).on("click",".um-trigger-menu-on-click",function(e){return jQuery(".um-dropdown").hide(),menu=jQuery(this).find(".um-dropdown"),menu.show(),!1}),jQuery(document).on("click",".um-dropdown-hide",function(e){UM_hide_menus()}),jQuery(document).on("click","a.um-manual-trigger",function(){var e=jQuery(this).attr("data-child"),t=jQuery(this).attr("data-parent");jQuery(this).parents(t).find(e).trigger("click")}),jQuery(".um-tip-n").tipsy({gravity:"n",opacity:1,live:"a.live",offset:3}),jQuery(".um-tip-w").tipsy({gravity:"w",opacity:1,live:"a.live",offset:3}),jQuery(".um-tip-e").tipsy({gravity:"e",opacity:1,live:"a.live",offset:3}),jQuery(".um-tip-s").tipsy({gravity:"s",opacity:1,live:"a.live",offset:3}),jQuery(document).on("change",".um-field-area input[type=radio]",function(){var e=jQuery(this).parents(".um-field-area"),t=jQuery(this).parents("label");e.find(".um-field-radio").removeClass("active"),e.find(".um-field-radio").find("i").removeAttr("class").addClass("um-icon-android-radio-button-off"),t.addClass("active"),t.find("i").removeAttr("class").addClass("um-icon-android-radio-button-on")}),jQuery(document).on("change",".um-field-area input[type=checkbox]",function(){jQuery(this).parents(".um-field-area");var e=jQuery(this).parents("label");e.hasClass("active")?(e.removeClass("active"),e.find("i").removeAttr("class").addClass("um-icon-android-checkbox-outline-blank")):(e.addClass("active"),e.find("i").removeAttr("class").addClass("um-icon-android-checkbox-outline"))}),jQuery(".um-datepicker").each(function(){if(elem=jQuery(this),""!=elem.attr("data-disabled_weekdays"))var e=JSON.parse(elem.attr("data-disabled_weekdays"));else e=!1;var t=elem.attr("data-years"),a=elem.attr("data-date_min"),i=elem.attr("data-date_max"),r=a.split(","),n=i.split(","),u=r.length?new Date(r):null,o=r.length?new Date(n):null;if(u&&"Invalid Date"==u.toString()&&3==r.length){var s=r[1]+"/"+r[2]+"/"+r[0];u=new Date(Date.parse(s))}if(o&&"Invalid Date"==o.toString()&&3==n.length){var d=n[1]+"/"+n[2]+"/"+n[0];o=new Date(Date.parse(d))}elem.pickadate({selectYears:t,min:u,max:o,disable:e,format:elem.attr("data-format"),formatSubmit:"yyyy/mm/dd",hiddenName:!0,onOpen:function(){elem.blur()},onClose:function(){elem.blur()}})}),jQuery(".um-timepicker").each(function(){elem=jQuery(this),elem.pickatime({format:elem.attr("data-format"),interval:parseInt(elem.attr("data-intervals")),formatSubmit:"HH:i",hiddenName:!0,onOpen:function(){elem.blur()},onClose:function(){elem.blur()}})}),jQuery(".um-rating").um_raty({half:!1,starType:"i",number:function(){return jQuery(this).attr("data-number")},score:function(){return jQuery(this).attr("data-score")},scoreName:function(){return jQuery(this).attr("data-key")},hints:!1,click:function(e,t){live_field=this.id,live_value=e,um_apply_conditions(jQuery(this),!1)}}),jQuery(".um-rating-readonly").um_raty({half:!1,starType:"i",number:function(){return jQuery(this).attr("data-number")},score:function(){return jQuery(this).attr("data-score")},scoreName:function(){return jQuery(this).attr("data-key")},hints:!1,readOnly:!0}),jQuery(document).on("click",".um .um-single-image-preview a.cancel",function(e){e.preventDefault();var t=jQuery(this).parents(".um-field"),a=jQuery(this).parents(".um-field").find(".um-single-image-preview img").attr("src");return t.find(".um-single-image-preview img").attr("src",""),t.find(".um-single-image-preview").hide(),t.find(".um-btn-auto-width").html("Upload"),t.find("input[type=hidden]").val("empty_file"),jQuery.ajax({url:wp.ajax.settings.url,type:"post",data:{action:"um_remove_file",src:a,nonce:um_scripts.nonce}}),!1}),jQuery(document).on("click",".um .um-single-file-preview a.cancel",function(e){e.preventDefault();var t=jQuery(this).parents(".um-field"),a=jQuery(this).parents(".um-field").find(".um-single-fileinfo a").attr("href");return t.find(".um-single-file-preview").hide(),t.find(".um-btn-auto-width").html("Upload"),t.find("input[type=hidden]").val("empty_file"),jQuery.ajax({url:wp.ajax.settings.url,type:"post",data:{action:"um_remove_file",src:a,nonce:um_scripts.nonce}}),!1}),jQuery(".um-s1,.um-s2").css({display:"block"}),0<jQuery(".um-s1").length&&jQuery(".um-s1").each(function(){var e=jQuery(this);""===e.val()&&e.attr("data-default")&&e.val(e.attr("data-default"))}),jQuery(".um-s1").select2({allowClear:!0}),jQuery(".um-s2").select2({allowClear:!1,minimumResultsForSearch:10}),jQuery(document).on("click",".um-field-group-head:not(.disabled)",function(){var e=jQuery(this).parents(".um-field-group"),t=e.data("max_entries");e.find(".um-field-group-body").is(":hidden")?e.find(".um-field-group-body").show():e.find(".um-field-group-body:first").clone().appendTo(e),increase_id=0,e.find(".um-field-group-body").each(function(){increase_id++,jQuery(this).find("input").each(function(){var e=jQuery(this);e.attr("id",e.data("key")+"-"+increase_id),e.attr("name",e.data("key")+"-"+increase_id),e.parent().parent().find("label").attr("for",e.data("key")+"-"+increase_id)})}),0<t&&e.find(".um-field-group-body").length==t&&jQuery(this).addClass("disabled")}),jQuery(document).on("click",".um-field-group-cancel",function(e){e.preventDefault();var t=jQuery(this).parents(".um-field-group"),a=t.data("max_entries");return 1<t.find(".um-field-group-body").length?jQuery(this).parents(".um-field-group-body").remove():jQuery(this).parents(".um-field-group-body").hide(),0<a&&t.find(".um-field-group-body").length<a&&t.find(".um-field-group-head").removeClass("disabled"),!1}),jQuery(document.body).on("click",".um-ajax-paginate",function(e){e.preventDefault();var t=jQuery(this),a=jQuery(this).parent();a.addClass("loading");var i=jQuery(this).data("hook");if("um_load_posts"===i){var r=1*jQuery(this).data("pages"),n=1*jQuery(this).data("page")+1;jQuery.ajax({url:wp.ajax.settings.url,type:"post",data:{action:"um_ajax_paginate_posts",author:jQuery(this).data("author"),page:n,nonce:um_scripts.nonce},complete:function(){a.removeClass("loading")},success:function(e){a.before(e),n===r?a.remove():t.data("page",n)}})}else{var u=jQuery(this).data("args"),o=jQuery(this).parents(".um").find(".um-ajax-items");jQuery.ajax({url:wp.ajax.settings.url,type:"post",data:{action:"um_ajax_paginate",hook:i,args:u,nonce:um_scripts.nonce},complete:function(){a.removeClass("loading")},success:function(e){a.remove(),o.append(e)}})}}),jQuery(document).on("click",".um-ajax-action",function(e){e.preventDefault();var t=jQuery(this).data("hook"),a=jQuery(this).data("user_id"),arguments=jQuery(this).data("arguments");return jQuery(this).data("js-remove")&&jQuery(this).parents("."+jQuery(this).data("js-remove")).fadeOut("fast"),jQuery.ajax({url:wp.ajax.settings.url,type:"post",data:{action:"um_muted_action",hook:t,user_id:a,arguments:arguments,nonce:um_scripts.nonce},success:function(e){}}),!1}),jQuery(document).on("click","#um-search-button",function(){jQuery(this).parents("form").submit()}),jQuery(".um-form input[class=um-button][type=submit]").removeAttr("disabled"),jQuery(document).one("click",".um:not(.um-account) .um-form input[class=um-button][type=submit]:not(.um-has-recaptcha)",function(){jQuery(this).attr("disabled","disabled"),jQuery(this).parents("form").submit()});var o={};function s(e,t,a,i){var r=e.data("um-parent");e.attr("name"),jQuery('select[name="'+r+'"]');e.find('option[value!=""]').remove(),e.hasClass("um-child-option-disabled")||e.removeAttr("disabled");i=[];var n="";if("yes"===t.post.members_directory){var u=new URLSearchParams(window.location.search);n=u.get(t.post.child_name)}jQuery.each(t.items,function(e,t){i.push({id:e,text:t,selected:t===n})}),e.select2("destroy"),e.select2({data:i,allowClear:!0,minimumResultsForSearch:10}),"yes"!==t.post.members_directory&&(void 0===t.field.default||e.data("um-original-value")?""!=e.data("um-original-value")&&e.val(e.data("um-original-value")).trigger("change"):e.val(t.field.default).trigger("change"),0==t.field.editable&&(e.addClass("um-child-option-disabled"),e.attr("disabled","disabled"))),o[a]=t}jQuery("select[data-um-parent]").each(function(){var r=jQuery(this),n=r.data("um-parent"),u=(r.data("um-ajax-url"),r.data("um-ajax-source"));r.val();r.attr("data-um-init-field",!0),jQuery(document).on("change",'select[name="'+n+'"]',function(){var t=jQuery(this),e=t.closest("form").find("input[type=hidden][name=form_id]").val(),a=t.val();if(""!=t.val()&&"object"!=typeof o[a]&&jQuery.ajax({url:wp.ajax.settings.url,type:"post",data:{action:"um_select_options",parent_option_name:n,parent_option:t.val(),child_callback:u,child_name:r.attr("name"),members_directory:r.attr("data-mebers-directory"),form_id:e,nonce:um_scripts.nonce},success:function(e){"success"==e.status&&""!=t.val()&&s(r,e,a),void 0!==e.debug&&console.log(e)},error:function(e){console.log(e)}}),""!=t.val()&&"object"==typeof o[a]){var i=o[a];s(r,i,a)}""==t.val()&&(r.find('option[value!=""]').remove(),r.val("").trigger("change"))}),jQuery('select[name="'+n+'"]').trigger("change")})});
1
+ function um_init_datetimepicker(){jQuery(".um-datepicker:not(.picker__input)").each(function(){if(elem=jQuery(this),void 0!==elem.attr("data-disabled_weekdays")&&""!=elem.attr("data-disabled_weekdays"))var e=JSON.parse(elem.attr("data-disabled_weekdays"));else e=!1;var t=null;void 0!==elem.attr("data-years")&&(t=elem.attr("data-years"));var a=elem.attr("data-date_min"),i=elem.attr("data-date_max"),r=[],n=[];void 0!==a&&(r=a.split(",")),void 0!==i&&(n=i.split(","));var u=r.length?new Date(r):null,o=r.length?new Date(n):null;if(u&&"Invalid Date"==u.toString()&&3==r.length){var s=r[1]+"/"+r[2]+"/"+r[0];u=new Date(Date.parse(s))}if(o&&"Invalid Date"==o.toString()&&3==n.length){var d=n[1]+"/"+n[2]+"/"+n[0];o=new Date(Date.parse(d))}var l={disable:e,format:elem.attr("data-format"),formatSubmit:"yyyy/mm/dd",hiddenName:!0,onOpen:function(){elem.blur()},onClose:function(){elem.blur()}};null!==t&&(l.selectYears=t),null!==u&&(l.min=u),null!==o&&(l.max=o),elem.pickadate(l)}),jQuery(".um-timepicker:not(.picker__input)").each(function(){elem=jQuery(this),elem.pickatime({format:elem.attr("data-format"),interval:parseInt(elem.attr("data-intervals")),formatSubmit:"HH:i",hiddenName:!0,onOpen:function(){elem.blur()},onClose:function(){elem.blur()}})})}jQuery(document).ready(function(){jQuery(document).on("click",".um-dropdown a",function(e){return!1}),jQuery(document).on("click",".um-dropdown a.real_url",function(e){window.location=jQuery(this).attr("href")}),jQuery(document).on("click",".um-trigger-menu-on-click",function(e){return jQuery(".um-dropdown").hide(),menu=jQuery(this).find(".um-dropdown"),menu.show(),!1}),jQuery(document).on("click",".um-dropdown-hide",function(e){UM_hide_menus()}),jQuery(document).on("click","a.um-manual-trigger",function(){var e=jQuery(this).attr("data-child"),t=jQuery(this).attr("data-parent");jQuery(this).parents(t).find(e).trigger("click")}),jQuery(".um-tip-n").tipsy({gravity:"n",opacity:1,live:"a.live",offset:3}),jQuery(".um-tip-w").tipsy({gravity:"w",opacity:1,live:"a.live",offset:3}),jQuery(".um-tip-e").tipsy({gravity:"e",opacity:1,live:"a.live",offset:3}),jQuery(".um-tip-s").tipsy({gravity:"s",opacity:1,live:"a.live",offset:3}),jQuery(document).on("change",".um-field-area input[type=radio]",function(){var e=jQuery(this).parents(".um-field-area"),t=jQuery(this).parents("label");e.find(".um-field-radio").removeClass("active"),e.find(".um-field-radio").find("i").removeAttr("class").addClass("um-icon-android-radio-button-off"),t.addClass("active"),t.find("i").removeAttr("class").addClass("um-icon-android-radio-button-on")}),jQuery(document).on("change",".um-field-area input[type=checkbox]",function(){jQuery(this).parents(".um-field-area");var e=jQuery(this).parents("label");e.hasClass("active")?(e.removeClass("active"),e.find("i").removeAttr("class").addClass("um-icon-android-checkbox-outline-blank")):(e.addClass("active"),e.find("i").removeAttr("class").addClass("um-icon-android-checkbox-outline"))}),um_init_datetimepicker(),jQuery(".um-rating").um_raty({half:!1,starType:"i",number:function(){return jQuery(this).attr("data-number")},score:function(){return jQuery(this).attr("data-score")},scoreName:function(){return jQuery(this).attr("data-key")},hints:!1,click:function(e,t){live_field=this.id,live_value=e,um_apply_conditions(jQuery(this),!1)}}),jQuery(".um-rating-readonly").um_raty({half:!1,starType:"i",number:function(){return jQuery(this).attr("data-number")},score:function(){return jQuery(this).attr("data-score")},scoreName:function(){return jQuery(this).attr("data-key")},hints:!1,readOnly:!0}),jQuery(document).on("click",".um .um-single-image-preview a.cancel",function(e){e.preventDefault();var t=jQuery(this).parents(".um-field"),a=jQuery(this).parents(".um-field").find(".um-single-image-preview img").attr("src");return t.find(".um-single-image-preview img").attr("src",""),t.find(".um-single-image-preview").hide(),t.find(".um-btn-auto-width").html("Upload"),t.find("input[type=hidden]").val("empty_file"),jQuery.ajax({url:wp.ajax.settings.url,type:"post",data:{action:"um_remove_file",src:a,nonce:um_scripts.nonce}}),!1}),jQuery(document).on("click",".um .um-single-file-preview a.cancel",function(e){e.preventDefault();var t=jQuery(this).parents(".um-field"),a=jQuery(this).parents(".um-field").find(".um-single-fileinfo a").attr("href");return t.find(".um-single-file-preview").hide(),t.find(".um-btn-auto-width").html("Upload"),t.find("input[type=hidden]").val("empty_file"),jQuery.ajax({url:wp.ajax.settings.url,type:"post",data:{action:"um_remove_file",src:a,nonce:um_scripts.nonce}}),!1}),jQuery(".um-s1,.um-s2").css({display:"block"}),0<jQuery(".um-s1").length&&jQuery(".um-s1").each(function(){var e=jQuery(this);""===e.val()&&e.attr("data-default")&&e.val(e.attr("data-default"))}),jQuery(".um-s1").select2({allowClear:!0}),jQuery(".um-s2").select2({allowClear:!1,minimumResultsForSearch:10}),jQuery(document).on("click",".um-field-group-head:not(.disabled)",function(){var e=jQuery(this).parents(".um-field-group"),t=e.data("max_entries");e.find(".um-field-group-body").is(":hidden")?e.find(".um-field-group-body").show():e.find(".um-field-group-body:first").clone().appendTo(e),increase_id=0,e.find(".um-field-group-body").each(function(){increase_id++,jQuery(this).find("input").each(function(){var e=jQuery(this);e.attr("id",e.data("key")+"-"+increase_id),e.attr("name",e.data("key")+"-"+increase_id),e.parent().parent().find("label").attr("for",e.data("key")+"-"+increase_id)})}),0<t&&e.find(".um-field-group-body").length==t&&jQuery(this).addClass("disabled")}),jQuery(document).on("click",".um-field-group-cancel",function(e){e.preventDefault();var t=jQuery(this).parents(".um-field-group"),a=t.data("max_entries");return 1<t.find(".um-field-group-body").length?jQuery(this).parents(".um-field-group-body").remove():jQuery(this).parents(".um-field-group-body").hide(),0<a&&t.find(".um-field-group-body").length<a&&t.find(".um-field-group-head").removeClass("disabled"),!1}),jQuery(document.body).on("click",".um-ajax-paginate",function(e){e.preventDefault();var t=jQuery(this),a=jQuery(this).parent();a.addClass("loading");var i=jQuery(this).data("hook");if("um_load_posts"===i){var r=1*jQuery(this).data("pages"),n=1*jQuery(this).data("page")+1;jQuery.ajax({url:wp.ajax.settings.url,type:"post",data:{action:"um_ajax_paginate_posts",author:jQuery(this).data("author"),page:n,nonce:um_scripts.nonce},complete:function(){a.removeClass("loading")},success:function(e){a.before(e),n===r?a.remove():t.data("page",n)}})}else{var u=jQuery(this).data("args"),o=jQuery(this).parents(".um").find(".um-ajax-items");jQuery.ajax({url:wp.ajax.settings.url,type:"post",data:{action:"um_ajax_paginate",hook:i,args:u,nonce:um_scripts.nonce},complete:function(){a.removeClass("loading")},success:function(e){a.remove(),o.append(e)}})}}),jQuery(document).on("click",".um-ajax-action",function(e){e.preventDefault();var t=jQuery(this).data("hook"),a=jQuery(this).data("user_id"),arguments=jQuery(this).data("arguments");return jQuery(this).data("js-remove")&&jQuery(this).parents("."+jQuery(this).data("js-remove")).fadeOut("fast"),jQuery.ajax({url:wp.ajax.settings.url,type:"post",data:{action:"um_muted_action",hook:t,user_id:a,arguments:arguments,nonce:um_scripts.nonce},success:function(e){}}),!1}),jQuery(document).on("click","#um-search-button",function(){jQuery(this).parents("form").submit()}),jQuery(".um-form input[class=um-button][type=submit]").removeAttr("disabled"),jQuery(document).one("click",".um:not(.um-account) .um-form input[class=um-button][type=submit]:not(.um-has-recaptcha)",function(){jQuery(this).attr("disabled","disabled"),jQuery(this).parents("form").submit()});var o={};function s(e,t,a,i){var r=e.data("um-parent");e.attr("name"),jQuery('select[name="'+r+'"]');e.find('option[value!=""]').remove(),e.hasClass("um-child-option-disabled")||e.removeAttr("disabled");i=[];var n="";if("yes"===t.post.members_directory){var u=new URLSearchParams(window.location.search);n=u.get(t.post.child_name)}jQuery.each(t.items,function(e,t){i.push({id:e,text:t,selected:t===n})}),e.select2("destroy"),e.select2({data:i,allowClear:!0,minimumResultsForSearch:10}),"yes"!==t.post.members_directory&&(void 0===t.field.default||e.data("um-original-value")?""!=e.data("um-original-value")&&e.val(e.data("um-original-value")).trigger("change"):e.val(t.field.default).trigger("change"),0==t.field.editable&&(e.addClass("um-child-option-disabled"),e.attr("disabled","disabled"))),o[a]=t}jQuery("select[data-um-parent]").each(function(){var r=jQuery(this),n=r.data("um-parent"),u=(r.data("um-ajax-url"),r.data("um-ajax-source"));r.val();r.attr("data-um-init-field",!0),jQuery(document).on("change",'select[name="'+n+'"]',function(){var t=jQuery(this),e=t.closest("form").find("input[type=hidden][name=form_id]").val(),a=t.val();if(""!=t.val()&&"object"!=typeof o[a]&&jQuery.ajax({url:wp.ajax.settings.url,type:"post",data:{action:"um_select_options",parent_option_name:n,parent_option:t.val(),child_callback:u,child_name:r.attr("name"),members_directory:r.attr("data-mebers-directory"),form_id:e,nonce:um_scripts.nonce},success:function(e){"success"==e.status&&""!=t.val()&&s(r,e,a),void 0!==e.debug&&console.log(e)},error:function(e){console.log(e)}}),""!=t.val()&&"object"==typeof o[a]){var i=o[a];s(r,i,a)}""==t.val()&&(r.find('option[value!=""]').remove(),r.val("").trigger("change"))}),jQuery('select[name="'+n+'"]').trigger("change")})});
assets/js/um-scrollbar.js DELETED
@@ -1,2683 +0,0 @@
1
- /*!
2
- * jQuery Mousewheel 3.1.13
3
- *
4
- * Copyright jQuery Foundation and other contributors
5
- * Released under the MIT license
6
- * http://jquery.org/license
7
- *
8
- * https://github.com/jquery/jquery-mousewheel/blob/master/jquery.mousewheel.js
9
- */
10
-
11
- (function (factory) {
12
- if ( typeof define === 'function' && define.amd ) {
13
- // AMD. Register as an anonymous module.
14
- define(['jquery'], factory);
15
- } else if (typeof exports === 'object') {
16
- // Node/CommonJS style for Browserify
17
- module.exports = factory;
18
- } else {
19
- // Browser globals
20
- factory(jQuery);
21
- }
22
- }(function ($) {
23
-
24
- var toFix = ['wheel', 'mousewheel', 'DOMMouseScroll', 'MozMousePixelScroll'],
25
- toBind = ( 'onwheel' in document || document.documentMode >= 9 ) ?
26
- ['wheel'] : ['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll'],
27
- slice = Array.prototype.slice,
28
- nullLowestDeltaTimeout, lowestDelta;
29
-
30
- if ( $.event.fixHooks ) {
31
- for ( var i = toFix.length; i; ) {
32
- $.event.fixHooks[ toFix[--i] ] = $.event.mouseHooks;
33
- }
34
- }
35
-
36
- var special = $.event.special.mousewheel = {
37
- version: '3.1.12',
38
-
39
- setup: function() {
40
- if ( this.addEventListener ) {
41
- for ( var i = toBind.length; i; ) {
42
- this.addEventListener( toBind[--i], handler, false );
43
- }
44
- } else {
45
- this.onmousewheel = handler;
46
- }
47
- // Store the line height and page height for this particular element
48
- $.data(this, 'mousewheel-line-height', special.getLineHeight(this));
49
- $.data(this, 'mousewheel-page-height', special.getPageHeight(this));
50
- },
51
-
52
- teardown: function() {
53
- if ( this.removeEventListener ) {
54
- for ( var i = toBind.length; i; ) {
55
- this.removeEventListener( toBind[--i], handler, false );
56
- }
57
- } else {
58
- this.onmousewheel = null;
59
- }
60
- // Clean up the data we added to the element
61
- $.removeData(this, 'mousewheel-line-height');
62
- $.removeData(this, 'mousewheel-page-height');
63
- },
64
-
65
- getLineHeight: function(elem) {
66
- var $elem = $(elem),
67
- $parent = $elem['offsetParent' in $.fn ? 'offsetParent' : 'parent']();
68
- if (!$parent.length) {
69
- $parent = $('body');
70
- }
71
- return parseInt($parent.css('fontSize'), 10) || parseInt($elem.css('fontSize'), 10) || 16;
72
- },
73
-
74
- getPageHeight: function(elem) {
75
- return $(elem).height();
76
- },
77
-
78
- settings: {
79
- adjustOldDeltas: true, // see shouldAdjustOldDeltas() below
80
- normalizeOffset: true // calls getBoundingClientRect for each event
81
- }
82
- };
83
-
84
- $.fn.extend({
85
- mousewheel: function(fn) {
86
- return fn ? this.bind('mousewheel', fn) : this.trigger('mousewheel');
87
- },
88
-
89
- unmousewheel: function(fn) {
90
- return this.unbind('mousewheel', fn);
91
- }
92
- });
93
-
94
-
95
- function handler(event) {
96
- var orgEvent = event || window.event,
97
- args = slice.call(arguments, 1),
98
- delta = 0,
99
- deltaX = 0,
100
- deltaY = 0,
101
- absDelta = 0,
102
- offsetX = 0,
103
- offsetY = 0;
104
- event = $.event.fix(orgEvent);
105
- event.type = 'mousewheel';
106
-
107
- // Old school scrollwheel delta
108
- if ( 'detail' in orgEvent ) { deltaY = orgEvent.detail * -1; }
109
- if ( 'wheelDelta' in orgEvent ) { deltaY = orgEvent.wheelDelta; }
110
- if ( 'wheelDeltaY' in orgEvent ) { deltaY = orgEvent.wheelDeltaY; }
111
- if ( 'wheelDeltaX' in orgEvent ) { deltaX = orgEvent.wheelDeltaX * -1; }
112
-
113
- // Firefox < 17 horizontal scrolling related to DOMMouseScroll event
114
- if ( 'axis' in orgEvent && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) {
115
- deltaX = deltaY * -1;
116
- deltaY = 0;
117
- }
118
-
119
- // Set delta to be deltaY or deltaX if deltaY is 0 for backwards compatabilitiy
120
- delta = deltaY === 0 ? deltaX : deltaY;
121
-
122
- // New school wheel delta (wheel event)
123
- if ( 'deltaY' in orgEvent ) {
124
- deltaY = orgEvent.deltaY * -1;
125
- delta = deltaY;
126
- }
127
- if ( 'deltaX' in orgEvent ) {
128
- deltaX = orgEvent.deltaX;
129
- if ( deltaY === 0 ) { delta = deltaX * -1; }
130
- }
131
-
132
- // No change actually happened, no reason to go any further
133
- if ( deltaY === 0 && deltaX === 0 ) { return; }
134
-
135
- // Need to convert lines and pages to pixels if we aren't already in pixels
136
- // There are three delta modes:
137
- // * deltaMode 0 is by pixels, nothing to do
138
- // * deltaMode 1 is by lines
139
- // * deltaMode 2 is by pages
140
- if ( orgEvent.deltaMode === 1 ) {
141
- var lineHeight = $.data(this, 'mousewheel-line-height');
142
- delta *= lineHeight;
143
- deltaY *= lineHeight;
144
- deltaX *= lineHeight;
145
- } else if ( orgEvent.deltaMode === 2 ) {
146
- var pageHeight = $.data(this, 'mousewheel-page-height');
147
- delta *= pageHeight;
148
- deltaY *= pageHeight;
149
- deltaX *= pageHeight;
150
- }
151
-
152
- // Store lowest absolute delta to normalize the delta values
153
- absDelta = Math.max( Math.abs(deltaY), Math.abs(deltaX) );
154
-
155
- if ( !lowestDelta || absDelta < lowestDelta ) {
156
- lowestDelta = absDelta;
157
-
158
- // Adjust older deltas if necessary
159
- if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {
160
- lowestDelta /= 40;
161
- }
162
- }
163
-
164
- // Adjust older deltas if necessary
165
- if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {
166
- // Divide all the things by 40!
167
- delta /= 40;
168
- deltaX /= 40;
169
- deltaY /= 40;
170
- }
171
-
172
- // Get a whole, normalized value for the deltas
173
- delta = Math[ delta >= 1 ? 'floor' : 'ceil' ](delta / lowestDelta);
174
- deltaX = Math[ deltaX >= 1 ? 'floor' : 'ceil' ](deltaX / lowestDelta);
175
- deltaY = Math[ deltaY >= 1 ? 'floor' : 'ceil' ](deltaY / lowestDelta);
176
-
177
- // Normalise offsetX and offsetY properties
178
- if ( special.settings.normalizeOffset && this.getBoundingClientRect ) {
179
- var boundingRect = this.getBoundingClientRect();
180
- offsetX = event.clientX - boundingRect.left;
181
- offsetY = event.clientY - boundingRect.top;
182
- }
183
-
184
- // Add information to the event object
185
- event.deltaX = deltaX;
186
- event.deltaY = deltaY;
187
- event.deltaFactor = lowestDelta;
188
- event.offsetX = offsetX;
189
- event.offsetY = offsetY;
190
- // Go ahead and set deltaMode to 0 since we converted to pixels
191
- // Although this is a little odd since we overwrite the deltaX/Y
192
- // properties with normalized deltas.
193
- event.deltaMode = 0;
194
-
195
- // Add event and delta to the front of the arguments
196
- args.unshift(event, delta, deltaX, deltaY);
197
-
198
- // Clearout lowestDelta after sometime to better
199
- // handle multiple device types that give different
200
- // a different lowestDelta
201
- // Ex: trackpad = 3 and mouse wheel = 120
202
- if (nullLowestDeltaTimeout) { clearTimeout(nullLowestDeltaTimeout); }
203
- nullLowestDeltaTimeout = setTimeout(nullLowestDelta, 200);
204
-
205
- return ($.event.dispatch || $.event.handle).apply(this, args);
206
- }
207
-
208
- function nullLowestDelta() {
209
- lowestDelta = null;
210
- }
211
-
212
- function shouldAdjustOldDeltas(orgEvent, absDelta) {
213
- // If this is an older event and the delta is divisable by 120,
214
- // then we are assuming that the browser is treating this as an
215
- // older mouse wheel event and that we should divide the deltas
216
- // by 40 to try and get a more usable deltaFactor.
217
- // Side note, this actually impacts the reported scroll distance
218
- // in older browsers and can cause scrolling to be slower than native.
219
- // Turn this off by setting $.event.special.mousewheel.settings.adjustOldDeltas to false.
220
- return special.settings.adjustOldDeltas && orgEvent.type === 'mousewheel' && absDelta % 120 === 0;
221
- }
222
-
223
- }));
224
-
225
- /*
226
- == malihu jquery custom scrollbar plugin ==
227
- Version: 3.1.5
228
- Plugin URI: http://manos.malihu.gr/jquery-custom-content-scroller
229
- Author: malihu
230
- Author URI: http://manos.malihu.gr
231
- License: MIT License (MIT)
232
- */
233
-
234
- /*
235
- Copyright Manos Malihutsakis (email: manos@malihu.gr)
236
-
237
- Permission is hereby granted, free of charge, to any person obtaining a copy
238
- of this software and associated documentation files (the "Software"), to deal
239
- in the Software without restriction, including without limitation the rights
240
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
241
- copies of the Software, and to permit persons to whom the Software is
242
- furnished to do so, subject to the following conditions:
243
-
244
- The above copyright notice and this permission notice shall be included in
245
- all copies or substantial portions of the Software.
246
-
247
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
248
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
249
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
250
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
251
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
252
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
253
- THE SOFTWARE.
254
- */
255
-
256
- /*
257
- The code below is fairly long, fully commented and should be normally used in development.
258
- For production, use either the minified jquery.mCustomScrollbar.min.js script or
259
- the production-ready jquery.mCustomScrollbar.concat.min.js which contains the plugin
260
- and dependencies (minified).
261
- */
262
-
263
- (function(factory){
264
- if(typeof define==="function" && define.amd){
265
- define(["jquery"],factory);
266
- }else if(typeof module!=="undefined" && module.exports){
267
- module.exports=factory;
268
- }else{
269
- factory(jQuery,window,document);
270
- }
271
- }(function($){
272
- (function(init){
273
- var _rjs=typeof define==="function" && define.amd, /* RequireJS */
274
- _njs=typeof module !== "undefined" && module.exports, /* NodeJS */
275
- _dlp=("https:"==document.location.protocol) ? "https:" : "http:", /* location protocol */
276
- _url="cdnjs.cloudflare.com/ajax/libs/jquery-mousewheel/3.1.13/jquery.mousewheel.min.js";
277
- if(!_rjs){
278
- if(_njs){
279
- require("jquery-mousewheel")($);
280
- }else{
281
- /* load jquery-mousewheel plugin (via CDN) if it's not present or not loaded via RequireJS
282
- (works when mCustomScrollbar fn is called on window load) */
283
- $.event.special.mousewheel || $("head").append(decodeURI("%3Cscript src="+_dlp+"//"+_url+"%3E%3C/script%3E"));
284
- }
285
- }
286
- init();
287
- }(function(){
288
-
289
- /*
290
- ----------------------------------------
291
- PLUGIN NAMESPACE, PREFIX, DEFAULT SELECTOR(S)
292
- ----------------------------------------
293
- */
294
-
295
- var pluginNS="mCustomScrollbar",
296
- pluginPfx="mCS",
297
- defaultSelector=".mCustomScrollbar",
298
-
299
-
300
-
301
-
302
-
303
- /*
304
- ----------------------------------------
305
- DEFAULT OPTIONS
306
- ----------------------------------------
307
- */
308
-
309
- defaults={
310
- /*
311
- set element/content width/height programmatically
312
- values: boolean, pixels, percentage
313
- option default
314
- -------------------------------------
315
- setWidth false
316
- setHeight false
317
- */
318
- /*
319
- set the initial css top property of content
320
- values: string (e.g. "-100px", "10%" etc.)
321
- */
322
- setTop:0,
323
- /*
324
- set the initial css left property of content
325
- values: string (e.g. "-100px", "10%" etc.)
326
- */
327
- setLeft:0,
328
- /*
329
- scrollbar axis (vertical and/or horizontal scrollbars)
330
- values (string): "y", "x", "yx"
331
- */
332
- axis:"y",
333
- /*
334
- position of scrollbar relative to content
335
- values (string): "inside", "outside" ("outside" requires elements with position:relative)
336
- */
337
- scrollbarPosition:"inside",
338
- /*
339
- scrolling inertia
340
- values: integer (milliseconds)
341
- */
342
- scrollInertia:950,
343
- /*
344
- auto-adjust scrollbar dragger length
345
- values: boolean
346
- */
347
- autoDraggerLength:true,
348
- /*
349
- auto-hide scrollbar when idle
350
- values: boolean
351
- option default
352
- -------------------------------------
353
- autoHideScrollbar false
354
- */
355
- /*
356
- auto-expands scrollbar on mouse-over and dragging
357
- values: boolean
358
- option default
359
- -------------------------------------
360
- autoExpandScrollbar false
361
- */
362
- /*
363
- always show scrollbar, even when there's nothing to scroll
364
- values: integer (0=disable, 1=always show dragger rail and buttons, 2=always show dragger rail, dragger and buttons), boolean
365
- */
366
- alwaysShowScrollbar:0,
367
- /*
368
- scrolling always snaps to a multiple of this number in pixels
369
- values: integer, array ([y,x])
370
- option default
371
- -------------------------------------
372
- snapAmount null
373
- */
374
- /*
375
- when snapping, snap with this number in pixels as an offset
376
- values: integer
377
- */
378
- snapOffset:0,
379
- /*
380
- mouse-wheel scrolling
381
- */
382
- mouseWheel:{
383
- /*
384
- enable mouse-wheel scrolling
385
- values: boolean
386
- */
387
- enable:true,
388
- /*
389
- scrolling amount in pixels
390
- values: "auto", integer
391
- */
392
- scrollAmount:"auto",
393
- /*
394
- mouse-wheel scrolling axis
395
- the default scrolling direction when both vertical and horizontal scrollbars are present
396
- values (string): "y", "x"
397
- */
398
- axis:"y",
399
- /*
400
- prevent the default behaviour which automatically scrolls the parent element(s) when end of scrolling is reached
401
- values: boolean
402
- option default
403
- -------------------------------------
404
- preventDefault null
405
- */
406
- /*
407
- the reported mouse-wheel delta value. The number of lines (translated to pixels) one wheel notch scrolls.
408
- values: "auto", integer
409
- "auto" uses the default OS/browser value
410
- */
411
- deltaFactor:"auto",
412
- /*
413
- normalize mouse-wheel delta to -1 or 1 (disables mouse-wheel acceleration)
414
- values: boolean
415
- option default
416
- -------------------------------------
417
- normalizeDelta null
418
- */
419
- /*
420
- invert mouse-wheel scrolling direction
421
- values: boolean
422
- option default
423
- -------------------------------------
424
- invert null
425
- */
426
- /*
427
- the tags that disable mouse-wheel when cursor is over them
428
- */
429
- disableOver:["select","option","keygen","datalist","textarea"]
430
- },
431
- /*
432
- scrollbar buttons
433
- */
434
- scrollButtons:{
435
- /*
436
- enable scrollbar buttons
437
- values: boolean
438
- option default
439
- -------------------------------------
440
- enable null
441
- */
442
- /*
443
- scrollbar buttons scrolling type
444
- values (string): "stepless", "stepped"
445
- */
446
- scrollType:"stepless",
447
- /*
448
- scrolling amount in pixels
449
- values: "auto", integer
450
- */
451
- scrollAmount:"auto"
452
- /*
453
- tabindex of the scrollbar buttons
454
- values: false, integer
455
- option default
456
- -------------------------------------
457
- tabindex null
458
- */
459
- },
460
- /*
461
- keyboard scrolling
462
- */
463
- keyboard:{
464
- /*
465
- enable scrolling via keyboard
466
- values: boolean
467
- */
468
- enable:true,
469
- /*
470
- keyboard scrolling type
471
- values (string): "stepless", "stepped"
472
- */
473
- scrollType:"stepless",
474
- /*
475
- scrolling amount in pixels
476
- values: "auto", integer
477
- */
478
- scrollAmount:"auto"
479
- },
480
- /*
481
- enable content touch-swipe scrolling
482
- values: boolean, integer, string (number)
483
- integer values define the axis-specific minimum amount required for scrolling momentum
484
- */
485
- contentTouchScroll:25,
486
- /*
487
- enable/disable document (default) touch-swipe scrolling
488
- */
489
- documentTouchScroll:true,
490
- /*
491
- advanced option parameters
492
- */
493
- advanced:{
494
- /*
495
- auto-expand content horizontally (for "x" or "yx" axis)
496
- values: boolean, integer (the value 2 forces the non scrollHeight/scrollWidth method, the value 3 forces the scrollHeight/scrollWidth method)
497
- option default
498
- -------------------------------------
499
- autoExpandHorizontalScroll null
500
- */
501
- /*
502
- auto-scroll to elements with focus
503
- */
504
- autoScrollOnFocus:"input,textarea,select,button,datalist,keygen,a[tabindex],area,object,[contenteditable='true']",
505
- /*
506
- auto-update scrollbars on content, element or viewport resize
507
- should be true for fluid layouts/elements, adding/removing content dynamically, hiding/showing elements, content with images etc.
508
- values: boolean
509
- */
510
- updateOnContentResize:true,
511
- /*
512
- auto-update scrollbars each time each image inside the element is fully loaded
513
- values: "auto", boolean
514
- */
515
- updateOnImageLoad:"auto",
516
- /*
517
- auto-update scrollbars based on the amount and size changes of specific selectors
518
- useful when you need to update the scrollbar(s) automatically, each time a type of element is added, removed or changes its size
519
- values: boolean, string (e.g. "ul li" will auto-update scrollbars each time list-items inside the element are changed)
520
- a value of true (boolean) will auto-update scrollbars each time any element is changed
521
- option default
522
- -------------------------------------
523
- updateOnSelectorChange null
524
- */
525
- /*
526
- extra selectors that'll allow scrollbar dragging upon mousemove/up, pointermove/up, touchend etc. (e.g. "selector-1, selector-2")
527
- option default
528
- -------------------------------------
529
- extraDraggableSelectors null
530
- */
531
- /*
532
- extra selectors that'll release scrollbar dragging upon mouseup, pointerup, touchend etc. (e.g. "selector-1, selector-2")
533
- option default
534
- -------------------------------------
535
- releaseDraggableSelectors null
536
- */
537
- /*
538
- auto-update timeout
539
- values: integer (milliseconds)
540
- */
541
- autoUpdateTimeout:60
542
- },
543
- /*
544
- scrollbar theme
545
- values: string (see CSS/plugin URI for a list of ready-to-use themes)
546
- */
547
- theme:"light",
548
- /*
549
- user defined callback functions
550
- */
551
- callbacks:{
552
- /*
553
- Available callbacks:
554
- callback default
555
- -------------------------------------
556
- onCreate null
557
- onInit null
558
- onScrollStart null
559
- onScroll null
560
- onTotalScroll null
561
- onTotalScrollBack null
562
- whileScrolling null
563
- onOverflowY null
564
- onOverflowX null
565
- onOverflowYNone null
566
- onOverflowXNone null
567
- onImageLoad null
568
- onSelectorChange null
569
- onBeforeUpdate null
570
- onUpdate null
571
- */
572
- onTotalScrollOffset:0,
573
- onTotalScrollBackOffset:0,
574
- alwaysTriggerOffsets:true
575
- }
576
- /*
577
- add scrollbar(s) on all elements matching the current selector, now and in the future
578
- values: boolean, string
579
- string values: "on" (enable), "once" (disable after first invocation), "off" (disable)
580
- liveSelector values: string (selector)
581
- option default
582
- -------------------------------------
583
- live false
584
- liveSelector null
585
- */
586
- },
587
-
588
-
589
-
590
-
591
-
592
- /*
593
- ----------------------------------------
594
- VARS, CONSTANTS
595
- ----------------------------------------
596
- */
597
-
598
- totalInstances=0, /* plugin instances amount */
599
- liveTimers={}, /* live option timers */
600
- oldIE=(window.attachEvent && !window.addEventListener) ? 1 : 0, /* detect IE < 9 */
601
- touchActive=false,touchable, /* global touch vars (for touch and pointer events) */
602
- /* general plugin classes */
603
- classes=[
604
- "mCSB_dragger_onDrag","mCSB_scrollTools_onDrag","mCS_img_loaded","mCS_disabled","mCS_destroyed","mCS_no_scrollbar",
605
- "mCS-autoHide","mCS-dir-rtl","mCS_no_scrollbar_y","mCS_no_scrollbar_x","mCS_y_hidden","mCS_x_hidden","mCSB_draggerContainer",
606
- "mCSB_buttonUp","mCSB_buttonDown","mCSB_buttonLeft","mCSB_buttonRight"
607
- ],
608
-
609
-
610
-
611
-
612
-
613
- /*
614
- ----------------------------------------
615
- METHODS
616
- ----------------------------------------
617
- */
618
-
619
- methods={
620
-
621
- /*
622
- plugin initialization method
623
- creates the scrollbar(s), plugin data object and options
624
- ----------------------------------------
625
- */
626
-
627
- init:function(options){
628
-
629
- var options=$.extend(true,{},defaults,options),
630
- selector=_selector.call(this); /* validate selector */
631
-
632
- /*
633
- if live option is enabled, monitor for elements matching the current selector and
634
- apply scrollbar(s) when found (now and in the future)
635
- */
636
- if(options.live){
637
- var liveSelector=options.liveSelector || this.selector || defaultSelector, /* live selector(s) */
638
- $liveSelector=$(liveSelector); /* live selector(s) as jquery object */
639
- if(options.live==="off"){
640
- /*
641
- disable live if requested
642
- usage: $(selector).mCustomScrollbar({live:"off"});
643
- */
644
- removeLiveTimers(liveSelector);
645
- return;
646
- }
647
- liveTimers[liveSelector]=setTimeout(function(){
648
- /* call mCustomScrollbar fn on live selector(s) every half-second */
649
- $liveSelector.mCustomScrollbar(options);
650
- if(options.live==="once" && $liveSelector.length){
651
- /* disable live after first invocation */
652
- removeLiveTimers(liveSelector);
653
- }
654
- },500);
655
- }else{
656
- removeLiveTimers(liveSelector);
657
- }
658
-
659
- /* options backward compatibility (for versions < 3.0.0) and normalization */
660
- options.setWidth=(options.set_width) ? options.set_width : options.setWidth;
661
- options.setHeight=(options.set_height) ? options.set_height : options.setHeight;
662
- options.axis=(options.horizontalScroll) ? "x" : _findAxis(options.axis);
663
- options.scrollInertia=options.scrollInertia>0 && options.scrollInertia<17 ? 17 : options.scrollInertia;
664
- if(typeof options.mouseWheel!=="object" && options.mouseWheel==true){ /* old school mouseWheel option (non-object) */
665
- options.mouseWheel={enable:true,scrollAmount:"auto",axis:"y",preventDefault:false,deltaFactor:"auto",normalizeDelta:false,invert:false}
666
- }
667
- options.mouseWheel.scrollAmount=!options.mouseWheelPixels ? options.mouseWheel.scrollAmount : options.mouseWheelPixels;
668
- options.mouseWheel.normalizeDelta=!options.advanced.normalizeMouseWheelDelta ? options.mouseWheel.normalizeDelta : options.advanced.normalizeMouseWheelDelta;
669
- options.scrollButtons.scrollType=_findScrollButtonsType(options.scrollButtons.scrollType);
670
-
671
- _theme(options); /* theme-specific options */
672
-
673
- /* plugin constructor */
674
- return $(selector).each(function(){
675
-
676
- var $this=$(this);
677
-
678
- if(!$this.data(pluginPfx)){ /* prevent multiple instantiations */
679
-
680
- /* store options and create objects in jquery data */
681
- $this.data(pluginPfx,{
682
- idx:++totalInstances, /* instance index */
683
- opt:options, /* options */
684
- scrollRatio:{y:null,x:null}, /* scrollbar to content ratio */
685
- overflowed:null, /* overflowed axis */
686
- contentReset:{y:null,x:null}, /* object to check when content resets */
687
- bindEvents:false, /* object to check if events are bound */
688
- tweenRunning:false, /* object to check if tween is running */
689
- sequential:{}, /* sequential scrolling object */
690
- langDir:$this.css("direction"), /* detect/store direction (ltr or rtl) */
691
- cbOffsets:null, /* object to check whether callback offsets always trigger */
692
- /*
693
- object to check how scrolling events where last triggered
694
- "internal" (default - triggered by this script), "external" (triggered by other scripts, e.g. via scrollTo method)
695
- usage: object.data("mCS").trigger
696
- */
697
- trigger:null,
698
- /*
699
- object to check for changes in elements in order to call the update method automatically
700
- */
701
- poll:{size:{o:0,n:0},img:{o:0,n:0},change:{o:0,n:0}}
702
- });
703
-
704
- var d=$this.data(pluginPfx),o=d.opt,
705
- /* HTML data attributes */
706
- htmlDataAxis=$this.data("mcs-axis"),htmlDataSbPos=$this.data("mcs-scrollbar-position"),htmlDataTheme=$this.data("mcs-theme");
707
-
708
- if(htmlDataAxis){o.axis=htmlDataAxis;} /* usage example: data-mcs-axis="y" */
709
- if(htmlDataSbPos){o.scrollbarPosition=htmlDataSbPos;} /* usage example: data-mcs-scrollbar-position="outside" */
710
- if(htmlDataTheme){ /* usage example: data-mcs-theme="minimal" */
711
- o.theme=htmlDataTheme;
712
- _theme(o); /* theme-specific options */
713
- }
714
-
715
- _pluginMarkup.call(this); /* add plugin markup */
716
-
717
- if(d && o.callbacks.onCreate && typeof o.callbacks.onCreate==="function"){o.callbacks.onCreate.call(this);} /* callbacks: onCreate */
718
-
719
- $("#mCSB_"+d.idx+"_container img:not(."+classes[2]+")").addClass(classes[2]); /* flag loaded images */
720
-
721
- methods.update.call(null,$this); /* call the update method */
722
-
723
- }
724
-
725
- });
726
-
727
- },
728
- /* ---------------------------------------- */
729
-
730
-
731
-
732
- /*
733
- plugin update method
734
- updates content and scrollbar(s) values, events and status
735
- ----------------------------------------
736
- usage: $(selector).mCustomScrollbar("update");
737
- */
738
-
739
- update:function(el,cb){
740
-
741
- var selector=el || _selector.call(this); /* validate selector */
742
-
743
- return $(selector).each(function(){
744
-
745
- var $this=$(this);
746
-
747
- if($this.data(pluginPfx)){ /* check if plugin has initialized */
748
-
749
- var d=$this.data(pluginPfx),o=d.opt,
750
- mCSB_container=$("#mCSB_"+d.idx+"_container"),
751
- mCustomScrollBox=$("#mCSB_"+d.idx),
752
- mCSB_dragger=[$("#mCSB_"+d.idx+"_dragger_vertical"),$("#mCSB_"+d.idx+"_dragger_horizontal")];
753
-
754
- if(!mCSB_container.length){return;}
755
-
756
- if(d.tweenRunning){_stop($this);} /* stop any running tweens while updating */
757
-
758
- if(cb && d && o.callbacks.onBeforeUpdate && typeof o.callbacks.onBeforeUpdate==="function"){o.callbacks.onBeforeUpdate.call(this);} /* callbacks: onBeforeUpdate */
759
-
760
- /* if element was disabled or destroyed, remove class(es) */
761
- if($this.hasClass(classes[3])){$this.removeClass(classes[3]);}
762
- if($this.hasClass(classes[4])){$this.removeClass(classes[4]);}
763
-
764
- /* css flexbox fix, detect/set max-height */
765
- mCustomScrollBox.css("max-height","none");
766
- if(mCustomScrollBox.height()!==$this.height()){mCustomScrollBox.css("max-height",$this.height());}
767
-
768
- _expandContentHorizontally.call(this); /* expand content horizontally */
769
-
770
- if(o.axis!=="y" && !o.advanced.autoExpandHorizontalScroll){
771
- mCSB_container.css("width",_contentWidth(mCSB_container));
772
- }
773
-
774
- d.overflowed=_overflowed.call(this); /* determine if scrolling is required */
775
-
776
- _scrollbarVisibility.call(this); /* show/hide scrollbar(s) */
777
-
778
- /* auto-adjust scrollbar dragger length analogous to content */
779
- if(o.autoDraggerLength){_setDraggerLength.call(this);}
780
-
781
- _scrollRatio.call(this); /* calculate and store scrollbar to content ratio */
782
-
783
- _bindEvents.call(this); /* bind scrollbar events */
784
-
785
- /* reset scrolling position and/or events */
786
- var to=[Math.abs(mCSB_container[0].offsetTop),Math.abs(mCSB_container[0].offsetLeft)];
787
- if(o.axis!=="x"){ /* y/yx axis */
788
- if(!d.overflowed[0]){ /* y scrolling is not required */
789
- _resetContentPosition.call(this); /* reset content position */
790
- if(o.axis==="y"){
791
- _unbindEvents.call(this);
792
- }else if(o.axis==="yx" && d.overflowed[1]){
793
- _scrollTo($this,to[1].toString(),{dir:"x",dur:0,overwrite:"none"});
794
- }
795
- }else if(mCSB_dragger[0].height()>mCSB_dragger[0].parent().height()){
796
- _resetContentPosition.call(this); /* reset content position */
797
- }else{ /* y scrolling is required */
798
- _scrollTo($this,to[0].toString(),{dir:"y",dur:0,overwrite:"none"});
799
- d.contentReset.y=null;
800
- }
801
- }
802
- if(o.axis!=="y"){ /* x/yx axis */
803
- if(!d.overflowed[1]){ /* x scrolling is not required */
804
- _resetContentPosition.call(this); /* reset content position */
805
- if(o.axis==="x"){
806
- _unbindEvents.call(this);
807
- }else if(o.axis==="yx" && d.overflowed[0]){
808
- _scrollTo($this,to[0].toString(),{dir:"y",dur:0,overwrite:"none"});
809
- }
810
- }else if(mCSB_dragger[1].width()>mCSB_dragger[1].parent().width()){
811
- _resetContentPosition.call(this); /* reset content position */
812
- }else{ /* x scrolling is required */
813
- _scrollTo($this,to[1].toString(),{dir:"x",dur:0,overwrite:"none"});
814
- d.contentReset.x=null;
815
- }
816
- }
817
-
818
- /* callbacks: onImageLoad, onSelectorChange, onUpdate */
819
- if(cb && d){
820
- if(cb===2 && o.callbacks.onImageLoad && typeof o.callbacks.onImageLoad==="function"){
821
- o.callbacks.onImageLoad.call(this);
822
- }else if(cb===3 && o.callbacks.onSelectorChange && typeof o.callbacks.onSelectorChange==="function"){
823
- o.callbacks.onSelectorChange.call(this);
824
- }else if(o.callbacks.onUpdate && typeof o.callbacks.onUpdate==="function"){
825
- o.callbacks.onUpdate.call(this);
826
- }
827
- }
828
-
829
- _autoUpdate.call(this); /* initialize automatic updating (for dynamic content, fluid layouts etc.) */
830
-
831
- }
832
-
833
- });
834
-
835
- },
836
- /* ---------------------------------------- */
837
-
838
-
839
-
840
- /*
841
- plugin scrollTo method
842
- triggers a scrolling event to a specific value
843
- ----------------------------------------
844
- usage: $(selector).mCustomScrollbar("scrollTo",value,options);
845
- */
846
-
847
- scrollTo:function(val,options){
848
-
849
- /* prevent silly things like $(selector).mCustomScrollbar("scrollTo",undefined); */
850
- if(typeof val=="undefined" || val==null){return;}
851
-
852
- var selector=_selector.call(this); /* validate selector */
853
-
854
- return $(selector).each(function(){
855
-
856
- var $this=$(this);
857
-
858
- if($this.data(pluginPfx)){ /* check if plugin has initialized */
859
-
860
- var d=$this.data(pluginPfx),o=d.opt,
861
- /* method default options */
862
- methodDefaults={
863
- trigger:"external", /* method is by default triggered externally (e.g. from other scripts) */
864
- scrollInertia:o.scrollInertia, /* scrolling inertia (animation duration) */
865
- scrollEasing:"mcsEaseInOut", /* animation easing */
866
- moveDragger:false, /* move dragger instead of content */
867
- timeout:60, /* scroll-to delay */
868
- callbacks:true, /* enable/disable callbacks */
869
- onStart:true,
870
- onUpdate:true,
871
- onComplete:true
872
- },
873
- methodOptions=$.extend(true,{},methodDefaults,options),
874
- to=_arr.call(this,val),dur=methodOptions.scrollInertia>0 && methodOptions.scrollInertia<17 ? 17 : methodOptions.scrollInertia;
875
-
876
- /* translate yx values to actual scroll-to positions */
877
- to[0]=_to.call(this,to[0],"y");
878
- to[1]=_to.call(this,to[1],"x");
879
-
880
- /*
881
- check if scroll-to value moves the dragger instead of content.
882
- Only pixel values apply on dragger (e.g. 100, "100px", "-=100" etc.)
883
- */
884
- if(methodOptions.moveDragger){
885
- to[0]*=d.scrollRatio.y;
886
- to[1]*=d.scrollRatio.x;
887
- }
888
-
889
- methodOptions.dur=_isTabHidden() ? 0 : dur; //skip animations if browser tab is hidden
890
-
891
- setTimeout(function(){
892
- /* do the scrolling */
893
- if(to[0]!==null && typeof to[0]!=="undefined" && o.axis!=="x" && d.overflowed[0]){ /* scroll y */
894
- methodOptions.dir="y";
895
- methodOptions.overwrite="all";
896
- _scrollTo($this,to[0].toString(),methodOptions);
897
- }
898
- if(to[1]!==null && typeof to[1]!=="undefined" && o.axis!=="y" && d.overflowed[1]){ /* scroll x */
899
- methodOptions.dir="x";
900
- methodOptions.overwrite="none";
901
- _scrollTo($this,to[1].toString(),methodOptions);
902
- }
903
- },methodOptions.timeout);
904
-
905
- }
906
-
907
- });
908
-
909
- },
910
- /* ---------------------------------------- */
911
-
912
-
913
-
914
- /*
915
- plugin stop method
916
- stops scrolling animation
917
- ----------------------------------------
918
- usage: $(selector).mCustomScrollbar("stop");
919
- */
920
- stop:function(){
921
-
922
- var selector=_selector.call(this); /* validate selector */
923
-
924
- return $(selector).each(function(){
925
-
926
- var $this=$(this);
927
-
928
- if($this.data(pluginPfx)){ /* check if plugin has initialized */
929
-
930
- _stop($this);
931
-
932
- }
933
-
934
- });
935
-
936
- },
937
- /* ---------------------------------------- */
938
-
939
-
940
-
941
- /*
942
- plugin disable method
943
- temporarily disables the scrollbar(s)
944
- ----------------------------------------
945
- usage: $(selector).mCustomScrollbar("disable",reset);
946
- reset (boolean): resets content position to 0
947
- */
948
- disable:function(r){
949
-
950
- var selector=_selector.call(this); /* validate selector */
951
-
952
- return $(selector).each(function(){
953
-
954
- var $this=$(this);
955
-
956
- if($this.data(pluginPfx)){ /* check if plugin has initialized */
957
-
958
- var d=$this.data(pluginPfx);
959
-
960
- _autoUpdate.call(this,"remove"); /* remove automatic updating */
961
-
962
- _unbindEvents.call(this); /* unbind events */
963
-
964
- if(r){_resetContentPosition.call(this);} /* reset content position */
965
-
966
- _scrollbarVisibility.call(this,true); /* show/hide scrollbar(s) */
967
-
968
- $this.addClass(classes[3]); /* add disable class */
969
-
970
- }
971
-
972
- });
973
-
974
- },
975
- /* ---------------------------------------- */
976
-
977
-
978
-
979
- /*
980
- plugin destroy method
981
- completely removes the scrollbar(s) and returns the element to its original state
982
- ----------------------------------------
983
- usage: $(selector).mCustomScrollbar("destroy");
984
- */
985
- destroy:function(){
986
-
987
- var selector=_selector.call(this); /* validate selector */
988
-
989
- return $(selector).each(function(){
990
-
991
- var $this=$(this);
992
-
993
- if($this.data(pluginPfx)){ /* check if plugin has initialized */
994
-
995
- var d=$this.data(pluginPfx),o=d.opt,
996
- mCustomScrollBox=$("#mCSB_"+d.idx),
997
- mCSB_container=$("#mCSB_"+d.idx+"_container"),
998
- scrollbar=$(".mCSB_"+d.idx+"_scrollbar");
999
-
1000
- if(o.live){removeLiveTimers(o.liveSelector || $(selector).selector);} /* remove live timers */
1001
-
1002
- _autoUpdate.call(this,"remove"); /* remove automatic updating */
1003
-
1004
- _unbindEvents.call(this); /* unbind events */
1005
-
1006
- _resetContentPosition.call(this); /* reset content position */
1007
-
1008
- $this.removeData(pluginPfx); /* remove plugin data object */
1009
-
1010
- _delete(this,"mcs"); /* delete callbacks object */
1011
-
1012
- /* remove plugin markup */
1013
- scrollbar.remove(); /* remove scrollbar(s) first (those can be either inside or outside plugin's inner wrapper) */
1014
- mCSB_container.find("img."+classes[2]).removeClass(classes[2]); /* remove loaded images flag */
1015
- mCustomScrollBox.replaceWith(mCSB_container.contents()); /* replace plugin's inner wrapper with the original content */
1016
- /* remove plugin classes from the element and add destroy class */
1017
- $this.removeClass(pluginNS+" _"+pluginPfx+"_"+d.idx+" "+classes[6]+" "+classes[7]+" "+classes[5]+" "+classes[3]).addClass(classes[4]);
1018
-
1019
- }
1020
-
1021
- });
1022
-
1023
- }
1024
- /* ---------------------------------------- */
1025
-
1026
- },
1027
-
1028
-
1029
-
1030
-
1031
-
1032
- /*
1033
- ----------------------------------------
1034
- FUNCTIONS
1035
- ----------------------------------------
1036
- */
1037
-
1038
- /* validates selector (if selector is invalid or undefined uses the default one) */
1039
- _selector=function(){
1040
- return (typeof $(this)!=="object" || $(this).length<1) ? defaultSelector : this;
1041
- },
1042
- /* -------------------- */
1043
-
1044
-
1045
- /* changes options according to theme */
1046
- _theme=function(obj){
1047
- var fixedSizeScrollbarThemes=["rounded","rounded-dark","rounded-dots","rounded-dots-dark"],
1048
- nonExpandedScrollbarThemes=["rounded-dots","rounded-dots-dark","3d","3d-dark","3d-thick","3d-thick-dark","inset","inset-dark","inset-2","inset-2-dark","inset-3","inset-3-dark"],
1049
- disabledScrollButtonsThemes=["minimal","minimal-dark"],
1050
- enabledAutoHideScrollbarThemes=["minimal","minimal-dark"],
1051
- scrollbarPositionOutsideThemes=["minimal","minimal-dark"];
1052
- obj.autoDraggerLength=$.inArray(obj.theme,fixedSizeScrollbarThemes) > -1 ? false : obj.autoDraggerLength;
1053
- obj.autoExpandScrollbar=$.inArray(obj.theme,nonExpandedScrollbarThemes) > -1 ? false : obj.autoExpandScrollbar;
1054
- obj.scrollButtons.enable=$.inArray(obj.theme,disabledScrollButtonsThemes) > -1 ? false : obj.scrollButtons.enable;
1055
- obj.autoHideScrollbar=$.inArray(obj.theme,enabledAutoHideScrollbarThemes) > -1 ? true : obj.autoHideScrollbar;
1056
- obj.scrollbarPosition=$.inArray(obj.theme,scrollbarPositionOutsideThemes) > -1 ? "outside" : obj.scrollbarPosition;
1057
- },
1058
- /* -------------------- */
1059
-
1060
-
1061
- /* live option timers removal */
1062
- removeLiveTimers=function(selector){
1063
- if(liveTimers[selector]){
1064
- clearTimeout(liveTimers[selector]);
1065
- _delete(liveTimers,selector);
1066
- }
1067
- },
1068
- /* -------------------- */
1069
-
1070
-
1071
- /* normalizes axis option to valid values: "y", "x", "yx" */
1072
- _findAxis=function(val){
1073
- return (val==="yx" || val==="xy" || val==="auto") ? "yx" : (val==="x" || val==="horizontal") ? "x" : "y";
1074
- },
1075
- /* -------------------- */
1076
-
1077
-
1078
- /* normalizes scrollButtons.scrollType option to valid values: "stepless", "stepped" */
1079
- _findScrollButtonsType=function(val){
1080
- return (val==="stepped" || val==="pixels" || val==="step" || val==="click") ? "stepped" : "stepless";
1081
- },
1082
- /* -------------------- */
1083
-
1084
-
1085
- /* generates plugin markup */
1086
- _pluginMarkup=function(){
1087
- var $this=$(this),d=$this.data(pluginPfx),o=d.opt,
1088
- expandClass=o.autoExpandScrollbar ? " "+classes[1]+"_expand" : "",
1089
- scrollbar=["<div id='mCSB_"+d.idx+"_scrollbar_vertical' class='mCSB_scrollTools mCSB_"+d.idx+"_scrollbar mCS-"+o.theme+" mCSB_scrollTools_vertical"+expandClass+"'><div class='"+classes[12]+"'><div id='mCSB_"+d.idx+"_dragger_vertical' class='mCSB_dragger' style='position:absolute;'><div class='mCSB_dragger_bar' /></div><div class='mCSB_draggerRail' /></div></div>","<div id='mCSB_"+d.idx+"_scrollbar_horizontal' class='mCSB_scrollTools mCSB_"+d.idx+"_scrollbar mCS-"+o.theme+" mCSB_scrollTools_horizontal"+expandClass+"'><div class='"+classes[12]+"'><div id='mCSB_"+d.idx+"_dragger_horizontal' class='mCSB_dragger' style='position:absolute;'><div class='mCSB_dragger_bar' /></div><div class='mCSB_draggerRail' /></div></div>"],
1090
- wrapperClass=o.axis==="yx" ? "mCSB_vertical_horizontal" : o.axis==="x" ? "mCSB_horizontal" : "mCSB_vertical",
1091
- scrollbars=o.axis==="yx" ? scrollbar[0]+scrollbar[1] : o.axis==="x" ? scrollbar[1] : scrollbar[0],
1092
- contentWrapper=o.axis==="yx" ? "<div id='mCSB_"+d.idx+"_container_wrapper' class='mCSB_container_wrapper' />" : "",
1093
- autoHideClass=o.autoHideScrollbar ? " "+classes[6] : "",
1094
- scrollbarDirClass=(o.axis!=="x" && d.langDir==="rtl") ? " "+classes[7] : "";
1095
- if(o.setWidth){$this.css("width",o.setWidth);} /* set element width */
1096
- if(o.setHeight){$this.css("height",o.setHeight);} /* set element height */
1097
- o.setLeft=(o.axis!=="y" && d.langDir==="rtl") ? "989999px" : o.setLeft; /* adjust left position for rtl direction */
1098
- $this.addClass(pluginNS+" _"+pluginPfx+"_"+d.idx+autoHideClass+scrollbarDirClass).wrapInner("<div id='mCSB_"+d.idx+"' class='mCustomScrollBox mCS-"+o.theme+" "+wrapperClass+"'><div id='mCSB_"+d.idx+"_container' class='mCSB_container' style='position:relative; top:"+o.setTop+"; left:"+o.setLeft+";' dir='"+d.langDir+"' /></div>");
1099
- var mCustomScrollBox=$("#mCSB_"+d.idx),
1100
- mCSB_container=$("#mCSB_"+d.idx+"_container");
1101
- if(o.axis!=="y" && !o.advanced.autoExpandHorizontalScroll){
1102
- mCSB_container.css("width",_contentWidth(mCSB_container));
1103
- }
1104
- if(o.scrollbarPosition==="outside"){
1105
- if($this.css("position")==="static"){ /* requires elements with non-static position */
1106
- $this.css("position","relative");
1107
- }
1108
- $this.css("overflow","visible");
1109
- mCustomScrollBox.addClass("mCSB_outside").after(scrollbars);
1110
- }else{
1111
- mCustomScrollBox.addClass("mCSB_inside").append(scrollbars);
1112
- mCSB_container.wrap(contentWrapper);
1113
- }
1114
- _scrollButtons.call(this); /* add scrollbar buttons */
1115
- /* minimum dragger length */
1116
- var mCSB_dragger=[$("#mCSB_"+d.idx+"_dragger_vertical"),$("#mCSB_"+d.idx+"_dragger_horizontal")];
1117
- mCSB_dragger[0].css("min-height",mCSB_dragger[0].height());
1118
- mCSB_dragger[1].css("min-width",mCSB_dragger[1].width());
1119
- },
1120
- /* -------------------- */
1121
-
1122
-
1123
- /* calculates content width */
1124
- _contentWidth=function(el){
1125
- var val=[el[0].scrollWidth,Math.max.apply(Math,el.children().map(function(){return $(this).outerWidth(true);}).get())],w=el.parent().width();
1126
- return val[0]>w ? val[0] : val[1]>w ? val[1] : "100%";
1127
- },
1128
- /* -------------------- */
1129
-
1130
-
1131
- /* expands content horizontally */
1132
- _expandContentHorizontally=function(){
1133
- var $this=$(this),d=$this.data(pluginPfx),o=d.opt,
1134
- mCSB_container=$("#mCSB_"+d.idx+"_container");
1135
- if(o.advanced.autoExpandHorizontalScroll && o.axis!=="y"){
1136
- /* calculate scrollWidth */
1137
- mCSB_container.css({"width":"auto","min-width":0,"overflow-x":"scroll"});
1138
- var w=Math.ceil(mCSB_container[0].scrollWidth);
1139
- if(o.advanced.autoExpandHorizontalScroll===3 || (o.advanced.autoExpandHorizontalScroll!==2 && w>mCSB_container.parent().width())){
1140
- mCSB_container.css({"width":w,"min-width":"100%","overflow-x":"inherit"});
1141
- }else{
1142
- /*
1143
- wrap content with an infinite width div and set its position to absolute and width to auto.
1144
- Setting width to auto before calculating the actual width is important!
1145
- We must let the browser set the width as browser zoom values are impossible to calculate.
1146
- */
1147
- mCSB_container.css({"overflow-x":"inherit","position":"absolute"})
1148
- .wrap("<div class='mCSB_h_wrapper' style='position:relative; left:0; width:999999px;' />")
1149
- .css({ /* set actual width, original position and un-wrap */
1150
- /*
1151
- get the exact width (with decimals) and then round-up.
1152
- Using jquery outerWidth() will round the width value which will mess up with inner elements that have non-integer width
1153
- */
1154
- "width":(Math.ceil(mCSB_container[0].getBoundingClientRect().right+0.4)-Math.floor(mCSB_container[0].getBoundingClientRect().left)),
1155
- "min-width":"100%",
1156
- "position":"relative"
1157
- }).unwrap();
1158
- }
1159
- }
1160
- },
1161
- /* -------------------- */
1162
-
1163
-
1164
- /* adds scrollbar buttons */
1165
- _scrollButtons=function(){
1166
- var $this=$(this),d=$this.data(pluginPfx),o=d.opt,
1167
- mCSB_scrollTools=$(".mCSB_"+d.idx+"_scrollbar:first"),
1168
- tabindex=!_isNumeric(o.scrollButtons.tabindex) ? "" : "tabindex='"+o.scrollButtons.tabindex+"'",
1169
- btnHTML=[
1170
- "<a href='#' class='"+classes[13]+"' "+tabindex+" />",
1171
- "<a href='#' class='"+classes[14]+"' "+tabindex+" />",
1172
- "<a href='#' class='"+classes[15]+"' "+tabindex+" />",
1173
- "<a href='#' class='"+classes[16]+"' "+tabindex+" />"
1174
- ],
1175
- btn=[(o.axis==="x" ? btnHTML[2] : btnHTML[0]),(o.axis==="x" ? btnHTML[3] : btnHTML[1]),btnHTML[2],btnHTML[3]];
1176
- if(o.scrollButtons.enable){
1177
- mCSB_scrollTools.prepend(btn[0]).append(btn[1]).next(".mCSB_scrollTools").prepend(btn[2]).append(btn[3]);
1178
- }
1179
- },
1180
- /* -------------------- */
1181
-
1182
-
1183
- /* auto-adjusts scrollbar dragger length */
1184
- _setDraggerLength=function(){
1185
- var $this=$(this),d=$this.data(pluginPfx),
1186
- mCustomScrollBox=$("#mCSB_"+d.idx),
1187
- mCSB_container=$("#mCSB_"+d.idx+"_container"),
1188
- mCSB_dragger=[$("#mCSB_"+d.idx+"_dragger_vertical"),$("#mCSB_"+d.idx+"_dragger_horizontal")],
1189
- ratio=[mCustomScrollBox.height()/mCSB_container.outerHeight(false),mCustomScrollBox.width()/mCSB_container.outerWidth(false)],
1190
- l=[
1191
- parseInt(mCSB_dragger[0].css("min-height")),Math.round(ratio[0]*mCSB_dragger[0].parent().height()),
1192
- parseInt(mCSB_dragger[1].css("min-width")),Math.round(ratio[1]*mCSB_dragger[1].parent().width())
1193
- ],
1194
- h=oldIE && (l[1]<l[0]) ? l[0] : l[1],w=oldIE && (l[3]<l[2]) ? l[2] : l[3];
1195
- mCSB_dragger[0].css({
1196
- "height":h,"max-height":(mCSB_dragger[0].parent().height()-10)
1197
- }).find(".mCSB_dragger_bar").css({"line-height":l[0]+"px"});
1198
- mCSB_dragger[1].css({
1199
- "width":w,"max-width":(mCSB_dragger[1].parent().width()-10)
1200
- });
1201
- },
1202
- /* -------------------- */
1203
-
1204
-
1205
- /* calculates scrollbar to content ratio */
1206
- _scrollRatio=function(){
1207
- var $this=$(this),d=$this.data(pluginPfx),
1208
- mCustomScrollBox=$("#mCSB_"+d.idx),
1209
- mCSB_container=$("#mCSB_"+d.idx+"_container"),
1210
- mCSB_dragger=[$("#mCSB_"+d.idx+"_dragger_vertical"),$("#mCSB_"+d.idx+"_dragger_horizontal")],
1211
- scrollAmount=[mCSB_container.outerHeight(false)-mCustomScrollBox.height(),mCSB_container.outerWidth(false)-mCustomScrollBox.width()],
1212
- ratio=[
1213
- scrollAmount[0]/(mCSB_dragger[0].parent().height()-mCSB_dragger[0].height()),
1214
- scrollAmount[1]/(mCSB_dragger[1].parent().width()-mCSB_dragger[1].width())
1215
- ];
1216
- d.scrollRatio={y:ratio[0],x:ratio[1]};
1217
- },
1218
- /* -------------------- */
1219
-
1220
-
1221
- /* toggles scrolling classes */
1222
- _onDragClasses=function(el,action,xpnd){
1223
- var expandClass=xpnd ? classes[0]+"_expanded" : "",
1224
- scrollbar=el.closest(".mCSB_scrollTools");
1225
- if(action==="active"){
1226
-