materialize-sass 1.0.0.alpha3 → 1.0.0.alpha4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (32) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -3
  3. data/assets/javascripts/materialize.js +289 -184
  4. data/assets/javascripts/materialize/autocomplete.js +7 -0
  5. data/assets/javascripts/materialize/buttons.js +1 -1
  6. data/assets/javascripts/materialize/chips.js +1 -1
  7. data/assets/javascripts/materialize/component.js +1 -1
  8. data/assets/javascripts/materialize/datepicker.js +30 -7
  9. data/assets/javascripts/materialize/dropdown.js +27 -16
  10. data/assets/javascripts/materialize/extras/nouislider.js +1 -1
  11. data/assets/javascripts/materialize/extras/nouislider.min.js +1 -1
  12. data/assets/javascripts/materialize/forms.js +8 -3
  13. data/assets/javascripts/materialize/global.js +12 -9
  14. data/assets/javascripts/materialize/materialbox.js +34 -13
  15. data/assets/javascripts/materialize/modal.js +16 -10
  16. data/assets/javascripts/materialize/parallax.js +6 -5
  17. data/assets/javascripts/materialize/select.js +26 -19
  18. data/assets/javascripts/materialize/sidenav.js +17 -3
  19. data/assets/javascripts/materialize/timepicker.js +19 -12
  20. data/assets/stylesheets/materialize/components/_badges.scss +8 -0
  21. data/assets/stylesheets/materialize/components/_buttons.scss +35 -37
  22. data/assets/stylesheets/materialize/components/_datepicker.scss +2 -2
  23. data/assets/stylesheets/materialize/components/_dropdown.scss +3 -1
  24. data/assets/stylesheets/materialize/components/_global.scss +11 -1
  25. data/assets/stylesheets/materialize/components/_sidenav.scss +1 -1
  26. data/assets/stylesheets/materialize/components/_timepicker.scss +2 -2
  27. data/assets/stylesheets/materialize/components/_variables.scss +11 -3
  28. data/assets/stylesheets/materialize/components/forms/_input-fields.scss +4 -3
  29. data/assets/stylesheets/materialize/components/forms/_select.scss +3 -2
  30. data/assets/stylesheets/materialize/extras/nouislider.css +1 -1
  31. data/lib/materialize-sass/version.rb +1 -1
  32. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4f6c369b19e9161d604d6daf26eca2f5889c83e251223d9976dd85292aa2999d
4
- data.tar.gz: 6dc1c5151989d6e01bb69d57e4d4ba8754bc1c2735a0a6c41dbd5ae8323ce81b
3
+ metadata.gz: d663fb262bda28a9d3a301ff8b967e730b79d54befd25c33ee449c914a5209c5
4
+ data.tar.gz: 46a85c9259899296f1d0a55ee55cce924ebe3488b467b61e1ba677abbc481cde
5
5
  SHA512:
6
- metadata.gz: 29dc42ff9939f11ebd2e24b32e913683c78ff9ddfdf3590f1444b457697c5e3e18ee1ac16c33f4aad2bc9bcfcfc1e33f893ad0b4fda79b676d873639fc412023
7
- data.tar.gz: '09f3cdb07c45e98e273059e1371577e4c85680ca7e4fdedebba5dccd0514af2bbfbcb24a3af45c02f2d4a08dff12c6e9a46ef69d0a777b617d463fdde36d4211'
6
+ metadata.gz: 5f9201a2252c0d1be8a9c886f64219ea53594a9c26c03bc542bb979c4108c9775794c6a8a4280d052faea073ff7c1c9d5a9a9a5a352afa5f183213dc3386e7ed
7
+ data.tar.gz: 661af14ace10a0779f7acdc0ed2c85e47e90d4713092aeaa837c80d9a9b9c5c37242940fab83234609b6a2277423c4c1f01f34031eee9c0ade6e2c745e32b643
data/README.md CHANGED
@@ -7,7 +7,7 @@ example: http://materialize.labs.my/
7
7
  source: https://github.com/mkhairi/materialize-rails
8
8
 
9
9
  # Notices
10
- This master branch now v1.0.0.alpha1
10
+ This master branch now v1.0.0.alpha4
11
11
 
12
12
  Documentation for previous releases (v0.100.*) are available [this branch.](https://github.com/mkhairi/materialize-sass/tree/v0.100)
13
13
 
@@ -16,7 +16,7 @@ Documentation for previous releases (v0.100.*) are available [this branch.](http
16
16
  In your Gemfile you need to add the `materialize-sass` gem:
17
17
 
18
18
  ```ruby
19
- gem 'materialize-sass'
19
+ gem 'materialize-sass', '~> 1.0.0.alpha4'
20
20
  ```
21
21
 
22
22
 
@@ -74,7 +74,7 @@ Require Materialize javascripts in `app/assets/javascripts/application.js`:
74
74
 
75
75
  or
76
76
 
77
- Require materialize-sprockets to provides individual Materialize components for ease of debugging
77
+ Require materialize-sprockets to provide individual Materialize components for ease of debugging
78
78
 
79
79
  ```js
80
80
  //= require materialize-sprockets
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Materialize v1.0.0-alpha.3 (http://materializecss.com)
2
+ * Materialize v1.0.0-alpha.4 (http://materializecss.com)
3
3
  * Copyright 2014-2017 Materialize
4
4
  * MIT License (https://raw.githubusercontent.com/Dogfalo/materialize/master/LICENSE)
5
5
  */
@@ -1043,7 +1043,7 @@ var Component = function () {
1043
1043
  var instances = null;
1044
1044
  if (els instanceof Element) {
1045
1045
  instances = new classDef(els, options);
1046
- } else if (!!els.jquery || els instanceof NodeList) {
1046
+ } else if (!!els && (els.jquery || els.cash || els instanceof NodeList)) {
1047
1047
  var instancesArr = [];
1048
1048
  for (var i = 0; i < els.length; i++) {
1049
1049
  instancesArr.push(new classDef(els[i], options));
@@ -1172,7 +1172,7 @@ M.guid = function () {
1172
1172
  * @returns {string}
1173
1173
  */
1174
1174
  M.escapeHash = function (hash) {
1175
- return hash.replace(/(:|\.|\[|\]|,|=)/g, "\\$1");
1175
+ return hash.replace(/(:|\.|\[|\]|,|=|\/)/g, "\\$1");
1176
1176
  };
1177
1177
 
1178
1178
  M.elementOrParentIsFixed = function (element) {
@@ -1261,35 +1261,38 @@ M.checkPossibleAlignments = function (el, container, bounding, offset) {
1261
1261
 
1262
1262
  var containerAllowsOverflow = getComputedStyle(container).overflow === 'visible';
1263
1263
  var containerRect = container.getBoundingClientRect();
1264
+ var containerHeight = Math.min(containerRect.height, window.innerHeight);
1265
+ var containerWidth = Math.min(containerRect.width, window.innerWidth);
1264
1266
  var elOffsetRect = el.getBoundingClientRect();
1265
1267
 
1266
1268
  var scrollLeft = container.scrollLeft;
1267
1269
  var scrollTop = container.scrollTop;
1268
1270
 
1269
1271
  var scrolledX = bounding.left - scrollLeft;
1270
- var scrolledY = bounding.top - scrollTop;
1272
+ var scrolledYTopEdge = bounding.top - scrollTop;
1273
+ var scrolledYBottomEdge = bounding.top + elOffsetRect.height - scrollTop;
1271
1274
 
1272
1275
  // Check for container and viewport for left
1273
- canAlign.spaceOnRight = !containerAllowsOverflow ? container.offsetWidth - (scrolledX + bounding.width) : window.innerWidth - (elOffsetRect.left + bounding.width);
1274
- if (!containerAllowsOverflow && scrolledX + bounding.width > container.offsetWidth || containerAllowsOverflow && elOffsetRect.left + bounding.width > window.innerWidth) {
1276
+ canAlign.spaceOnRight = !containerAllowsOverflow ? containerWidth - (scrolledX + bounding.width) : window.innerWidth - (elOffsetRect.left + bounding.width);
1277
+ if (canAlign.spaceOnRight < 0) {
1275
1278
  canAlign.left = false;
1276
1279
  }
1277
1280
 
1278
1281
  // Check for container and viewport for Right
1279
1282
  canAlign.spaceOnLeft = !containerAllowsOverflow ? scrolledX - bounding.width + elOffsetRect.width : elOffsetRect.right - bounding.width;
1280
- if (!containerAllowsOverflow && scrolledX - bounding.width + elOffsetRect.width < 0 || containerAllowsOverflow && elOffsetRect.right - bounding.width < 0) {
1283
+ if (canAlign.spaceOnLeft < 0) {
1281
1284
  canAlign.right = false;
1282
1285
  }
1283
1286
 
1284
1287
  // Check for container and viewport for Top
1285
- canAlign.spaceOnBottom = !containerAllowsOverflow ? containerRect.height - (scrolledY + bounding.height + offset) : window.innerHeight - (elOffsetRect.top + bounding.height + offset);
1286
- if (!containerAllowsOverflow && scrolledY + bounding.height + offset > containerRect.height || containerAllowsOverflow && elOffsetRect.top + bounding.height + offset > window.innerHeight) {
1288
+ canAlign.spaceOnBottom = !containerAllowsOverflow ? containerHeight - (scrolledYTopEdge + bounding.height + offset) : window.innerHeight - (elOffsetRect.top + bounding.height + offset);
1289
+ if (canAlign.spaceOnBottom < 0) {
1287
1290
  canAlign.top = false;
1288
1291
  }
1289
1292
 
1290
1293
  // Check for container and viewport for Bottom
1291
- canAlign.spaceOnTop = !containerAllowsOverflow ? scrolledY - (bounding.height + offset) : elOffsetRect.bottom - (bounding.height + offset);
1292
- if (!containerAllowsOverflow && scrolledY - bounding.height - offset < 0 || containerAllowsOverflow && elOffsetRect.bottom - bounding.height - offset < 0) {
1294
+ canAlign.spaceOnTop = !containerAllowsOverflow ? scrolledYBottomEdge - (bounding.height - offset) : elOffsetRect.bottom - (bounding.height + offset);
1295
+ if (canAlign.spaceOnTop < 0) {
1293
1296
  canAlign.bottom = false;
1294
1297
  }
1295
1298
 
@@ -2135,6 +2138,7 @@ $jscomp.polyfill = function (e, r, p, m) {
2135
2138
  var _defaults = {
2136
2139
  alignment: 'left',
2137
2140
  constrainWidth: true,
2141
+ container: null,
2138
2142
  coverTrigger: true,
2139
2143
  closeOnClick: true,
2140
2144
  hover: false,
@@ -2168,10 +2172,18 @@ $jscomp.polyfill = function (e, r, p, m) {
2168
2172
  /**
2169
2173
  * Options for the dropdown
2170
2174
  * @member Dropdown#options
2171
- * @prop {Function} onOpenStart - Function called when sidenav starts entering
2172
- * @prop {Function} onOpenEnd - Function called when sidenav finishes entering
2173
- * @prop {Function} onCloseStart - Function called when sidenav starts exiting
2174
- * @prop {Function} onCloseEnd - Function called when sidenav finishes exiting
2175
+ * @prop {String} [alignment='left'] - Edge which the dropdown is aligned to
2176
+ * @prop {Boolean} [constrainWidth=true] - Constrain width to width of the button
2177
+ * @prop {Element} container - Container element to attach dropdown to (optional)
2178
+ * @prop {Boolean} [coverTrigger=true] - Place dropdown over trigger
2179
+ * @prop {Boolean} [closeOnClick=true] - Close on click of dropdown item
2180
+ * @prop {Boolean} [hover=false] - Open dropdown on hover
2181
+ * @prop {Number} [inDuration=150] - Duration of open animation in ms
2182
+ * @prop {Number} [outDuration=250] - Duration of close animation in ms
2183
+ * @prop {Function} onOpenStart - Function called when dropdown starts opening
2184
+ * @prop {Function} onOpenEnd - Function called when dropdown finishes opening
2185
+ * @prop {Function} onCloseStart - Function called when dropdown starts closing
2186
+ * @prop {Function} onCloseEnd - Function called when dropdown finishes closing
2175
2187
  */
2176
2188
  _this7.options = $.extend({}, Dropdown.defaults, options);
2177
2189
 
@@ -2185,7 +2197,11 @@ $jscomp.polyfill = function (e, r, p, m) {
2185
2197
  _this7.filterQuery = [];
2186
2198
 
2187
2199
  // Move dropdown-content after dropdown-trigger
2188
- _this7.$el.after(_this7.dropdownEl);
2200
+ if (!!_this7.options.container) {
2201
+ $(_this7.options.container).append(_this7.dropdownEl);
2202
+ } else {
2203
+ _this7.$el.after(_this7.dropdownEl);
2204
+ }
2189
2205
 
2190
2206
  _this7._makeDropdownFocusable();
2191
2207
  _this7._resetFilterQueryBound = _this7._resetFilterQuery.bind(_this7);
@@ -2258,6 +2274,7 @@ $jscomp.polyfill = function (e, r, p, m) {
2258
2274
  value: function _setupTemporaryEventHandlers() {
2259
2275
  // Use capture phase event handler to prevent click
2260
2276
  document.body.addEventListener('click', this._handleDocumentClickBound, true);
2277
+ document.body.addEventListener('touchend', this._handleDocumentClickBound);
2261
2278
  this.dropdownEl.addEventListener('keydown', this._handleDropdownKeydownBound);
2262
2279
  }
2263
2280
  }, {
@@ -2265,6 +2282,7 @@ $jscomp.polyfill = function (e, r, p, m) {
2265
2282
  value: function _removeTemporaryEventHandlers() {
2266
2283
  // Use capture phase event handler to prevent click
2267
2284
  document.body.removeEventListener('click', this._handleDocumentClickBound, true);
2285
+ document.body.removeEventListener('touchend', this._handleDocumentClickBound);
2268
2286
  this.dropdownEl.removeEventListener('keydown', this._handleDropdownKeydownBound);
2269
2287
  }
2270
2288
  }, {
@@ -2305,11 +2323,7 @@ $jscomp.polyfill = function (e, r, p, m) {
2305
2323
  setTimeout(function () {
2306
2324
  _this8.close();
2307
2325
  }, 0);
2308
- } else if ($target.closest('.dropdown-trigger').length) {
2309
- setTimeout(function () {
2310
- _this8.close();
2311
- }, 0);
2312
- } else if (!$target.closest('.dropdown-content').length) {
2326
+ } else if ($target.closest('.dropdown-trigger').length || !$target.closest('.dropdown-content').length) {
2313
2327
  setTimeout(function () {
2314
2328
  _this8.close();
2315
2329
  }, 0);
@@ -2422,15 +2436,13 @@ $jscomp.polyfill = function (e, r, p, m) {
2422
2436
  key: "_getDropdownPosition",
2423
2437
  value: function _getDropdownPosition() {
2424
2438
  var offsetParentBRect = this.el.offsetParent.getBoundingClientRect();
2425
- var triggerOffset = { left: this.el.offsetLeft, top: this.el.offsetTop, width: this.el.offsetWidth, height: this.el.offsetHeight };
2426
- var dropdownOffset = { left: this.dropdownEl.offsetLeft, top: this.dropdownEl.offsetTop, width: this.dropdownEl.offsetWidth, height: this.dropdownEl.offsetHeight };
2427
2439
  var triggerBRect = this.el.getBoundingClientRect();
2428
2440
  var dropdownBRect = this.dropdownEl.getBoundingClientRect();
2429
2441
 
2430
2442
  var idealHeight = dropdownBRect.height;
2431
2443
  var idealWidth = dropdownBRect.width;
2432
- var idealXPos = triggerOffset.left;
2433
- var idealYPos = triggerOffset.top;
2444
+ var idealXPos = triggerBRect.left - dropdownBRect.left;
2445
+ var idealYPos = triggerBRect.top - dropdownBRect.top;
2434
2446
 
2435
2447
  var dropdownBounds = {
2436
2448
  left: idealXPos,
@@ -2485,12 +2497,14 @@ $jscomp.polyfill = function (e, r, p, m) {
2485
2497
  if (horizontalAlignment === 'right') {
2486
2498
  idealXPos = idealXPos - dropdownBRect.width + triggerBRect.width;
2487
2499
  }
2488
- return { x: idealXPos,
2500
+ return {
2501
+ x: idealXPos,
2489
2502
  y: idealYPos,
2490
2503
  verticalAlignment: verticalAlignment,
2491
2504
  horizontalAlignment: horizontalAlignment,
2492
2505
  height: idealHeight,
2493
- width: idealWidth };
2506
+ width: idealWidth
2507
+ };
2494
2508
  }
2495
2509
 
2496
2510
  /**
@@ -2719,10 +2733,7 @@ $jscomp.polyfill = function (e, r, p, m) {
2719
2733
  _this11._openingTrigger = undefined;
2720
2734
  _this11.$overlay = $('<div class="modal-overlay"></div>');
2721
2735
 
2722
- Modal._increment++;
2723
2736
  Modal._count++;
2724
- _this11.$overlay[0].style.zIndex = 1000 + Modal._increment * 2;
2725
- _this11.el.style.zIndex = 1000 + Modal._increment * 2 + 1;
2726
2737
  _this11._setupEventHandlers();
2727
2738
  return _this11;
2728
2739
  }
@@ -2959,20 +2970,24 @@ $jscomp.polyfill = function (e, r, p, m) {
2959
2970
  }
2960
2971
 
2961
2972
  this.isOpen = true;
2973
+ Modal._modalsOpen++;
2974
+
2975
+ // Set Z-Index based on number of currently open modals
2976
+ this.$overlay[0].style.zIndex = 1000 + Modal._modalsOpen * 2;
2977
+ this.el.style.zIndex = 1000 + Modal._modalsOpen * 2 + 1;
2978
+
2979
+ // Set opening trigger, undefined indicates modal was opened by javascript
2980
+ this._openingTrigger = !!$trigger ? $trigger[0] : undefined;
2962
2981
 
2963
2982
  // onOpenStart callback
2964
2983
  if (typeof this.options.onOpenStart === 'function') {
2965
2984
  this.options.onOpenStart.call(this, this.el, this._openingTrigger);
2966
2985
  }
2967
2986
 
2968
- var body = document.body;
2969
- body.style.overflow = 'hidden';
2987
+ document.body.style.overflow = 'hidden';
2970
2988
  this.el.classList.add('open');
2971
2989
  this.el.insertAdjacentElement('afterend', this.$overlay[0]);
2972
2990
 
2973
- // Set opening trigger, undefined indicates modal was opened by javascript
2974
- this._openingTrigger = !!$trigger ? $trigger[0] : undefined;
2975
-
2976
2991
  if (this.options.dismissible) {
2977
2992
  this._handleKeydownBound = this._handleKeydown.bind(this);
2978
2993
  document.addEventListener('keydown', this._handleKeydownBound);
@@ -2996,6 +3011,7 @@ $jscomp.polyfill = function (e, r, p, m) {
2996
3011
  }
2997
3012
 
2998
3013
  this.isOpen = false;
3014
+ Modal._modalsOpen--;
2999
3015
 
3000
3016
  // Call onCloseStart callback
3001
3017
  if (typeof this.options.onCloseStart === 'function') {
@@ -3003,7 +3019,11 @@ $jscomp.polyfill = function (e, r, p, m) {
3003
3019
  }
3004
3020
 
3005
3021
  this.el.classList.remove('open');
3006
- document.body.style.overflow = '';
3022
+
3023
+ // Enable body scrolling only if there are no more modals open.
3024
+ if (Modal._modalsOpen === 0) {
3025
+ document.body.style.overflow = '';
3026
+ }
3007
3027
 
3008
3028
  if (this.options.dismissible) {
3009
3029
  document.removeEventListener('keydown', this._handleKeydownBound);
@@ -3046,7 +3066,7 @@ $jscomp.polyfill = function (e, r, p, m) {
3046
3066
  */
3047
3067
 
3048
3068
 
3049
- Modal._increment = 0;
3069
+ Modal._modalsOpen = 0;
3050
3070
 
3051
3071
  /**
3052
3072
  * @static
@@ -3149,8 +3169,8 @@ $jscomp.polyfill = function (e, r, p, m) {
3149
3169
  */
3150
3170
 
3151
3171
  }, {
3152
- key: "removeEventHandlers",
3153
- value: function removeEventHandlers() {
3172
+ key: "_removeEventHandlers",
3173
+ value: function _removeEventHandlers() {
3154
3174
  this.el.removeEventListener('click', this._handleMaterialboxClickBound);
3155
3175
  }
3156
3176
 
@@ -3242,8 +3262,8 @@ $jscomp.polyfill = function (e, r, p, m) {
3242
3262
 
3243
3263
  var animOptions = {
3244
3264
  targets: this.el,
3245
- height: this.newHeight,
3246
- width: this.newWidth,
3265
+ height: [this.originalHeight, this.newHeight],
3266
+ width: [this.originalWidth, this.newWidth],
3247
3267
  left: M.getDocumentScrollLeft() + this.windowWidth / 2 - this.placeholder.offset().left - this.newWidth / 2,
3248
3268
  top: M.getDocumentScrollTop() + this.windowHeight / 2 - this.placeholder.offset().top - this.newHeight / 2,
3249
3269
  duration: this.options.inDuration,
@@ -3258,12 +3278,14 @@ $jscomp.polyfill = function (e, r, p, m) {
3258
3278
  }
3259
3279
  };
3260
3280
 
3261
- if (this.$el.hasClass('responsive-img')) {
3281
+ // Override max-width or max-height if needed
3282
+ this.maxWidth = this.$el.css('max-width');
3283
+ this.maxHeight = this.$el.css('max-height');
3284
+ if (this.maxWidth !== 'none') {
3262
3285
  animOptions.maxWidth = this.newWidth;
3263
- animOptions.width = [this.originalWidth, animOptions.width];
3264
- } else {
3265
- animOptions.left = [animOptions.left, 0];
3266
- animOptions.top = [animOptions.top, 0];
3286
+ }
3287
+ if (this.maxHeight !== 'none') {
3288
+ animOptions.maxHeight = this.newHeight;
3267
3289
  }
3268
3290
 
3269
3291
  anim(animOptions);
@@ -3295,6 +3317,14 @@ $jscomp.polyfill = function (e, r, p, m) {
3295
3317
  left: ''
3296
3318
  });
3297
3319
 
3320
+ // Revert to width or height attribute
3321
+ if (_this16.attrWidth) {
3322
+ _this16.$el.attr('width', _this16.attrWidth);
3323
+ }
3324
+ if (_this16.attrHeight) {
3325
+ _this16.$el.attr('height', _this16.attrHeight);
3326
+ }
3327
+
3298
3328
  _this16.$el.removeAttr('style');
3299
3329
  _this16.$el.attr('style', _this16.originInlineStyles);
3300
3330
 
@@ -3370,6 +3400,18 @@ $jscomp.polyfill = function (e, r, p, m) {
3370
3400
  'will-change': 'left, top, width, height'
3371
3401
  });
3372
3402
 
3403
+ // Change from width or height attribute to css
3404
+ this.attrWidth = this.$el.attr('width');
3405
+ this.attrHeight = this.$el.attr('height');
3406
+ if (this.attrWidth) {
3407
+ this.$el.css('width', this.attrWidth + 'px');
3408
+ this.$el.removeAttr('width');
3409
+ }
3410
+ if (this.attrHeight) {
3411
+ this.$el.css('width', this.attrHeight + 'px');
3412
+ this.$el.removeAttr('height');
3413
+ }
3414
+
3373
3415
  // Add overlay
3374
3416
  this.$overlay = $('<div id="materialbox-overlay"></div>').css({
3375
3417
  opacity: 0
@@ -3394,10 +3436,6 @@ $jscomp.polyfill = function (e, r, p, m) {
3394
3436
  anim.remove(this.el);
3395
3437
  anim.remove(this.$overlay[0]);
3396
3438
 
3397
- if (this.caption !== "") {
3398
- anim.remove(this.$photoCaption[0]);
3399
- }
3400
-
3401
3439
  // Animate Overlay
3402
3440
  anim({
3403
3441
  targets: this.$overlay[0],
@@ -3408,6 +3446,9 @@ $jscomp.polyfill = function (e, r, p, m) {
3408
3446
 
3409
3447
  // Add and animate caption if it exists
3410
3448
  if (this.caption !== "") {
3449
+ if (this.$photocaption) {
3450
+ anim.remove(this.$photoCaption[0]);
3451
+ }
3411
3452
  this.$photoCaption = $('<div class="materialbox-caption"></div>');
3412
3453
  this.$photoCaption.text(this.caption);
3413
3454
  $('body').append(this.$photoCaption);
@@ -3560,9 +3601,14 @@ $jscomp.polyfill = function (e, r, p, m) {
3560
3601
  * @prop {Number} responsiveThreshold
3561
3602
  */
3562
3603
  _this19.options = $.extend({}, Parallax.defaults, options);
3604
+ _this19._enabled = window.innerWidth > _this19.options.responsiveThreshold;
3563
3605
 
3564
3606
  _this19.$img = _this19.$el.find('img').first();
3565
- _this19._enabled = window.innerWidth > _this19.options.responsiveThreshold;
3607
+ _this19.$img.each(function () {
3608
+ var el = this;
3609
+ if (el.complete) $(el).trigger("load");
3610
+ });
3611
+
3566
3612
  _this19._updateParallax();
3567
3613
  _this19._setupEventHandlers();
3568
3614
  _this19._setupStyles();
@@ -3618,10 +3664,6 @@ $jscomp.polyfill = function (e, r, p, m) {
3618
3664
  key: "_handleImageLoad",
3619
3665
  value: function _handleImageLoad() {
3620
3666
  this._updateParallax();
3621
- this.$img.each(function () {
3622
- var el = this;
3623
- if (el.complete) $(el).trigger("load");
3624
- });
3625
3667
  }
3626
3668
  }, {
3627
3669
  key: "_updateParallax",
@@ -5371,6 +5413,11 @@ $jscomp.polyfill = function (e, r, p, m) {
5371
5413
  }, {
5372
5414
  key: "_handleDragTargetDrag",
5373
5415
  value: function _handleDragTargetDrag(e) {
5416
+ // Check if draggable
5417
+ if (!this.options.draggable || this._isCurrentlyFixed()) {
5418
+ return;
5419
+ }
5420
+
5374
5421
  // If not being dragged, set initial drag start variables
5375
5422
  if (!this.isDragged) {
5376
5423
  this._startDrag(e);
@@ -5438,6 +5485,10 @@ $jscomp.polyfill = function (e, r, p, m) {
5438
5485
  key: "_handleCloseDrag",
5439
5486
  value: function _handleCloseDrag(e) {
5440
5487
  if (this.isOpen) {
5488
+ // Check if draggable
5489
+ if (!this.options.draggable || this._isCurrentlyFixed()) {
5490
+ return;
5491
+ }
5441
5492
 
5442
5493
  // If not being dragged, set initial drag start variables
5443
5494
  if (!this.isDragged) {
@@ -5534,10 +5585,15 @@ $jscomp.polyfill = function (e, r, p, m) {
5534
5585
  }, {
5535
5586
  key: "_setupFixed",
5536
5587
  value: function _setupFixed() {
5537
- if (this.isFixed && window.innerWidth > 992) {
5588
+ if (this._isCurrentlyFixed()) {
5538
5589
  this.open();
5539
5590
  }
5540
5591
  }
5592
+ }, {
5593
+ key: "_isCurrentlyFixed",
5594
+ value: function _isCurrentlyFixed() {
5595
+ return this.isFixed && window.innerWidth > 992;
5596
+ }
5541
5597
  }, {
5542
5598
  key: "_createDragTarget",
5543
5599
  value: function _createDragTarget() {
@@ -5573,7 +5629,7 @@ $jscomp.polyfill = function (e, r, p, m) {
5573
5629
  }
5574
5630
 
5575
5631
  // Handle fixed Sidenav
5576
- if (this.isFixed && window.innerWidth > 992) {
5632
+ if (this._isCurrentlyFixed()) {
5577
5633
  anim.remove(this.el);
5578
5634
  anim({
5579
5635
  targets: this.el,
@@ -5608,7 +5664,7 @@ $jscomp.polyfill = function (e, r, p, m) {
5608
5664
  }
5609
5665
 
5610
5666
  // Handle fixed Sidenav
5611
- if (this.isFixed && window.innerWidth > 992) {
5667
+ if (this._isCurrentlyFixed()) {
5612
5668
  var transformX = this.options.edge === 'left' ? '-105%' : '105%';
5613
5669
  this.el.style.transform = "translateX(" + transformX + ")";
5614
5670
 
@@ -6358,6 +6414,9 @@ $jscomp.polyfill = function (e, r, p, m) {
6358
6414
  $(this.container).empty();
6359
6415
  this._resetCurrentElement();
6360
6416
  this.oldVal = null;
6417
+ $(this.container).css({
6418
+ display: ''
6419
+ });
6361
6420
  this.isOpen = false;
6362
6421
  }
6363
6422
 
@@ -6419,6 +6478,10 @@ $jscomp.polyfill = function (e, r, p, m) {
6419
6478
  };
6420
6479
  matchingData.sort(sortFunctionBound);
6421
6480
 
6481
+ $(this.container).css({
6482
+ display: 'block'
6483
+ });
6484
+
6422
6485
  // Render
6423
6486
  for (var i = 0; i < matchingData.length; i++) {
6424
6487
  var _entry = matchingData[i];
@@ -6535,6 +6598,11 @@ $jscomp.polyfill = function (e, r, p, m) {
6535
6598
  $textarea = $($textarea);
6536
6599
  }
6537
6600
 
6601
+ if (!$textarea.length) {
6602
+ console.error("No textarea element found");
6603
+ return;
6604
+ }
6605
+
6538
6606
  // Textarea Auto Resize
6539
6607
  var hiddenDiv = $('.hiddendiv').first();
6540
6608
  if (!hiddenDiv.length) {
@@ -6591,10 +6659,10 @@ $jscomp.polyfill = function (e, r, p, m) {
6591
6659
  // When textarea is hidden, width goes crazy.
6592
6660
  // Approximate with half of window size
6593
6661
 
6594
- if ($textarea.css('display') !== 'hidden') {
6662
+ if ($textarea[0].offsetWidth > 0 && $textarea[0].offsetHeight > 0) {
6595
6663
  hiddenDiv.css('width', $textarea.width() + 'px');
6596
6664
  } else {
6597
- hiddenDiv.css('width', $(window).width() / 2 + 'px');
6665
+ hiddenDiv.css('width', window.innerWidth / 2 + 'px');
6598
6666
  }
6599
6667
 
6600
6668
  /**
@@ -6646,7 +6714,7 @@ $jscomp.polyfill = function (e, r, p, m) {
6646
6714
  setTimeout(function () {
6647
6715
  formReset.find('select').each(function () {
6648
6716
  // check if initialized
6649
- if (this.M_Select) {
6717
+ if (this.M_FormSelect) {
6650
6718
  var reset_text = $(this).find('option[selected]').text();
6651
6719
  $(this).siblings('input.select-dropdown')[0].value = reset_text;
6652
6720
  }
@@ -7463,7 +7531,7 @@ $jscomp.polyfill = function (e, r, p, m) {
7463
7531
  _this43.$input[0].focus();
7464
7532
  };
7465
7533
 
7466
- this.autocomplete = M.Autocomplete.init(this.$input, this.options.autocompleteOptions)[0];
7534
+ this.autocomplete = M.Autocomplete.init(this.$input[0], this.options.autocompleteOptions);
7467
7535
  }
7468
7536
 
7469
7537
  /**
@@ -8207,7 +8275,7 @@ $jscomp.polyfill = function (e, r, p, m) {
8207
8275
  var windowWidth = window.innerWidth;
8208
8276
  var windowHeight = window.innerHeight;
8209
8277
  var backdrop = this.$el.find('.fab-backdrop');
8210
- var fabColor = anchor.css('background-color');
8278
+ var fabColor = this.$anchor.css('background-color');
8211
8279
 
8212
8280
  this.offsetX = this.btnLeft - windowWidth / 2 + this.btnWidth / 2;
8213
8281
  this.offsetY = windowHeight - this.btnBottom;
@@ -8352,8 +8420,8 @@ $jscomp.polyfill = function (e, r, p, m) {
8352
8420
  nextMonth: '›',
8353
8421
  months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
8354
8422
  monthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
8355
- weekdaysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
8356
8423
  weekdays: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
8424
+ weekdaysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
8357
8425
  weekdaysAbbrev: ['S', 'M', 'T', 'W', 'T', 'F', 'S']
8358
8426
  },
8359
8427
 
@@ -8390,6 +8458,11 @@ $jscomp.polyfill = function (e, r, p, m) {
8390
8458
 
8391
8459
  _this50.options = $.extend({}, Datepicker.defaults, options);
8392
8460
 
8461
+ // make sure i18n defaults are not lost when only few i18n option properties are passed
8462
+ if (!!options && options.hasOwnProperty('i18n') && typeof options.i18n === 'object') {
8463
+ _this50.options.i18n = $.extend({}, Datepicker.defaults.i18n, options.i18n);
8464
+ }
8465
+
8393
8466
  // Remove time component from minDate and maxDate options
8394
8467
  if (_this50.options.minDate) _this50.options.minDate.setHours(0, 0, 0, 0);
8395
8468
  if (_this50.options.maxDate) _this50.options.maxDate.setHours(0, 0, 0, 0);
@@ -8857,13 +8930,23 @@ $jscomp.polyfill = function (e, r, p, m) {
8857
8930
  html += this.renderTitle(this, c, this.calendars[c].year, this.calendars[c].month, this.calendars[0].year, randId) + this.render(this.calendars[c].year, this.calendars[c].month, randId);
8858
8931
  }
8859
8932
 
8933
+ // Destroy Materialize Select
8934
+ var oldYearSelect = this.calendarEl.querySelector('.pika-select-year');
8935
+ if (oldYearSelect) {
8936
+ M.FormSelect.getInstance(oldYearSelect).destroy();
8937
+ }
8938
+ var oldMonthSelect = this.calendarEl.querySelector('.pika-select-month');
8939
+ if (oldMonthSelect) {
8940
+ M.FormSelect.getInstance(oldMonthSelect).destroy();
8941
+ }
8942
+
8860
8943
  this.calendarEl.innerHTML = html;
8861
8944
 
8862
8945
  // Init Materialize Select
8863
8946
  var yearSelect = this.calendarEl.querySelector('.pika-select-year');
8864
8947
  var monthSelect = this.calendarEl.querySelector('.pika-select-month');
8865
- M.Select.init(yearSelect, { classes: 'select-year' });
8866
- M.Select.init(monthSelect, { classes: 'select-month' });
8948
+ M.FormSelect.init(yearSelect, { classes: 'select-year', dropdownOptions: { container: document.body, constrainWidth: false } });
8949
+ M.FormSelect.init(monthSelect, { classes: 'select-month', dropdownOptions: { container: document.body, constrainWidth: false } });
8867
8950
 
8868
8951
  // Add change handlers for select
8869
8952
  yearSelect.addEventListener('change', this._handleYearChange.bind(this));
@@ -8916,26 +8999,34 @@ $jscomp.polyfill = function (e, r, p, m) {
8916
8999
 
8917
9000
  this.formats = {
8918
9001
 
8919
- dd: function () {
9002
+ d: function () {
8920
9003
  return _this53.date.getDate();
8921
9004
  },
9005
+ dd: function () {
9006
+ var d = _this53.date.getDate();
9007
+ return (d < 10 ? '0' : '') + d;
9008
+ },
8922
9009
  ddd: function () {
8923
9010
  return _this53.options.i18n.weekdaysShort[_this53.date.getDay()];
8924
9011
  },
8925
9012
  dddd: function () {
8926
9013
  return _this53.options.i18n.weekdays[_this53.date.getDay()];
8927
9014
  },
8928
- mm: function () {
9015
+ m: function () {
8929
9016
  return _this53.date.getMonth() + 1;
8930
9017
  },
9018
+ mm: function () {
9019
+ var m = _this53.date.getMonth() + 1;
9020
+ return (m < 10 ? '0' : '') + m;
9021
+ },
8931
9022
  mmm: function () {
8932
9023
  return _this53.options.i18n.monthsShort[_this53.date.getMonth()];
8933
9024
  },
8934
9025
  mmmm: function () {
8935
- return _this53.options.i18n.monthsShort[_this53.date.getMonth()];
9026
+ return _this53.options.i18n.months[_this53.date.getMonth()];
8936
9027
  },
8937
9028
  yy: function () {
8938
- return _this53.date.getFullYear().slice(2);
9029
+ return ('' + _this53.date.getFullYear()).slice(2);
8939
9030
  },
8940
9031
  yyyy: function () {
8941
9032
  return _this53.date.getFullYear();
@@ -9213,9 +9304,14 @@ $jscomp.polyfill = function (e, r, p, m) {
9213
9304
  container: null,
9214
9305
  defaultTime: 'now', // default time, 'now' or '13:14' e.g.
9215
9306
  fromnow: 0, // Millisecond offset from the defaultTime
9216
- doneText: 'Ok', // done button text
9217
- clearText: 'Clear',
9218
- cancelText: 'Cancel',
9307
+
9308
+ // internationalization
9309
+ i18n: {
9310
+ done: 'Ok',
9311
+ clear: 'Clear',
9312
+ cancel: 'Cancel'
9313
+ },
9314
+
9219
9315
  autoClose: false, // auto close when minute is selected
9220
9316
  twelveHour: true, // change to 12 hour AM/PM clock from 24 hour
9221
9317
  vibrate: true // vibrate the device when dragging clock hand
@@ -9341,6 +9437,8 @@ $jscomp.polyfill = function (e, r, p, m) {
9341
9437
  }, {
9342
9438
  key: "_handleDocumentClickEnd",
9343
9439
  value: function _handleDocumentClickEnd(e) {
9440
+ var _this55 = this;
9441
+
9344
9442
  e.preventDefault();
9345
9443
  document.removeEventListener('mouseup', this._handleDocumentClickEndBound);
9346
9444
  document.removeEventListener('touchend', this._handleDocumentClickEndBound);
@@ -9354,9 +9452,9 @@ $jscomp.polyfill = function (e, r, p, m) {
9354
9452
  if (this.currentView === 'hours') {
9355
9453
  this.showView('minutes', this.options.duration / 2);
9356
9454
  } else if (this.options.autoClose) {
9357
- this.minutesView.addClass('timepicker-dial-out');
9455
+ $(this.minutesView).addClass('timepicker-dial-out');
9358
9456
  setTimeout(function () {
9359
- this.done();
9457
+ _this55.done();
9360
9458
  }, this.options.duration / 2);
9361
9459
  }
9362
9460
 
@@ -9382,11 +9480,11 @@ $jscomp.polyfill = function (e, r, p, m) {
9382
9480
  }, {
9383
9481
  key: "_setupModal",
9384
9482
  value: function _setupModal() {
9385
- var _this55 = this;
9483
+ var _this56 = this;
9386
9484
 
9387
9485
  this.modal = M.Modal.init(this.modalEl, {
9388
9486
  onCloseEnd: function () {
9389
- _this55.isOpen = false;
9487
+ _this56.isOpen = false;
9390
9488
  }
9391
9489
  });
9392
9490
  }
@@ -9410,11 +9508,11 @@ $jscomp.polyfill = function (e, r, p, m) {
9410
9508
  }, {
9411
9509
  key: "_pickerSetup",
9412
9510
  value: function _pickerSetup() {
9413
- $('<button class="btn-flat timepicker-clear waves-effect" type="button" tabindex="' + (this.options.twelveHour ? '3' : '1') + '">' + this.options.clearText + '</button>').appendTo(this.footer).on('click', this.clear.bind(this));
9511
+ $('<button class="btn-flat timepicker-clear waves-effect" type="button" tabindex="' + (this.options.twelveHour ? '3' : '1') + '">' + this.options.i18n.clear + '</button>').appendTo(this.footer).on('click', this.clear.bind(this));
9414
9512
 
9415
9513
  var confirmationBtnsContainer = $('<div class="confirmation-btns"></div>');
9416
- $('<button class="btn-flat timepicker-close waves-effect" type="button" tabindex="' + (this.options.twelveHour ? '3' : '1') + '">' + this.options.cancelText + '</button>').appendTo(confirmationBtnsContainer).on('click', this.close.bind(this));
9417
- $('<button class="btn-flat timepicker-close waves-effect" type="button" tabindex="' + (this.options.twelveHour ? '3' : '1') + '">' + this.options.doneText + '</button>').appendTo(confirmationBtnsContainer).on('click', this.done.bind(this));
9514
+ $('<button class="btn-flat timepicker-close waves-effect" type="button" tabindex="' + (this.options.twelveHour ? '3' : '1') + '">' + this.options.i18n.cancel + '</button>').appendTo(confirmationBtnsContainer).on('click', this.close.bind(this));
9515
+ $('<button class="btn-flat timepicker-close waves-effect" type="button" tabindex="' + (this.options.twelveHour ? '3' : '1') + '">' + this.options.i18n.done + '</button>').appendTo(confirmationBtnsContainer).on('click', this.done.bind(this));
9418
9516
  confirmationBtnsContainer.appendTo(this.footer);
9419
9517
  }
9420
9518
  }, {
@@ -9612,7 +9710,7 @@ $jscomp.polyfill = function (e, r, p, m) {
9612
9710
  }, {
9613
9711
  key: "setHand",
9614
9712
  value: function setHand(x, y, roundBy5) {
9615
- var _this56 = this;
9713
+ var _this57 = this;
9616
9714
 
9617
9715
  var radian = Math.atan2(x, -y),
9618
9716
  isHours = this.currentView === 'hours',
@@ -9667,7 +9765,7 @@ $jscomp.polyfill = function (e, r, p, m) {
9667
9765
  if (!this.vibrateTimer) {
9668
9766
  navigator[this.vibrate](10);
9669
9767
  this.vibrateTimer = setTimeout(function () {
9670
- _this56.vibrateTimer = null;
9768
+ _this57.vibrateTimer = null;
9671
9769
  }, 100);
9672
9770
  }
9673
9771
  }
@@ -9831,20 +9929,20 @@ $jscomp.polyfill = function (e, r, p, m) {
9831
9929
  function CharacterCounter(el, options) {
9832
9930
  _classCallCheck(this, CharacterCounter);
9833
9931
 
9834
- var _this57 = _possibleConstructorReturn(this, (CharacterCounter.__proto__ || Object.getPrototypeOf(CharacterCounter)).call(this, CharacterCounter, el, options));
9932
+ var _this58 = _possibleConstructorReturn(this, (CharacterCounter.__proto__ || Object.getPrototypeOf(CharacterCounter)).call(this, CharacterCounter, el, options));
9835
9933
 
9836
- _this57.el.M_CharacterCounter = _this57;
9934
+ _this58.el.M_CharacterCounter = _this58;
9837
9935
 
9838
9936
  /**
9839
9937
  * Options for the character counter
9840
9938
  */
9841
- _this57.options = $.extend({}, CharacterCounter.defaults, options);
9939
+ _this58.options = $.extend({}, CharacterCounter.defaults, options);
9842
9940
 
9843
- _this57.isInvalid = false;
9844
- _this57.isValidLength = false;
9845
- _this57._setupCounter();
9846
- _this57._setupEventHandlers();
9847
- return _this57;
9941
+ _this58.isInvalid = false;
9942
+ _this58.isValidLength = false;
9943
+ _this58._setupCounter();
9944
+ _this58._setupEventHandlers();
9945
+ return _this58;
9848
9946
  }
9849
9947
 
9850
9948
  _createClass(CharacterCounter, [{
@@ -10010,9 +10108,9 @@ $jscomp.polyfill = function (e, r, p, m) {
10010
10108
  function Carousel(el, options) {
10011
10109
  _classCallCheck(this, Carousel);
10012
10110
 
10013
- var _this58 = _possibleConstructorReturn(this, (Carousel.__proto__ || Object.getPrototypeOf(Carousel)).call(this, Carousel, el, options));
10111
+ var _this59 = _possibleConstructorReturn(this, (Carousel.__proto__ || Object.getPrototypeOf(Carousel)).call(this, Carousel, el, options));
10014
10112
 
10015
- _this58.el.M_Carousel = _this58;
10113
+ _this59.el.M_Carousel = _this59;
10016
10114
 
10017
10115
  /**
10018
10116
  * Options for the carousel
@@ -10026,38 +10124,38 @@ $jscomp.polyfill = function (e, r, p, m) {
10026
10124
  * @prop {Boolean} noWrap
10027
10125
  * @prop {Function} onCycleTo
10028
10126
  */
10029
- _this58.options = $.extend({}, Carousel.defaults, options);
10127
+ _this59.options = $.extend({}, Carousel.defaults, options);
10030
10128
 
10031
10129
  // Setup
10032
- _this58.hasMultipleSlides = _this58.$el.find('.carousel-item').length > 1;
10033
- _this58.showIndicators = _this58.options.indicators && _this58.hasMultipleSlides;
10034
- _this58.noWrap = _this58.options.noWrap || !_this58.hasMultipleSlides;
10035
- _this58.pressed = false;
10036
- _this58.dragged = false;
10037
- _this58.offset = _this58.target = 0;
10038
- _this58.images = [];
10039
- _this58.itemWidth = _this58.$el.find('.carousel-item').first().innerWidth();
10040
- _this58.itemHeight = _this58.$el.find('.carousel-item').first().innerHeight();
10041
- _this58.dim = _this58.itemWidth * 2 + _this58.options.padding || 1; // Make sure dim is non zero for divisions.
10042
- _this58._autoScrollBound = _this58._autoScroll.bind(_this58);
10043
- _this58._trackBound = _this58._track.bind(_this58);
10130
+ _this59.hasMultipleSlides = _this59.$el.find('.carousel-item').length > 1;
10131
+ _this59.showIndicators = _this59.options.indicators && _this59.hasMultipleSlides;
10132
+ _this59.noWrap = _this59.options.noWrap || !_this59.hasMultipleSlides;
10133
+ _this59.pressed = false;
10134
+ _this59.dragged = false;
10135
+ _this59.offset = _this59.target = 0;
10136
+ _this59.images = [];
10137
+ _this59.itemWidth = _this59.$el.find('.carousel-item').first().innerWidth();
10138
+ _this59.itemHeight = _this59.$el.find('.carousel-item').first().innerHeight();
10139
+ _this59.dim = _this59.itemWidth * 2 + _this59.options.padding || 1; // Make sure dim is non zero for divisions.
10140
+ _this59._autoScrollBound = _this59._autoScroll.bind(_this59);
10141
+ _this59._trackBound = _this59._track.bind(_this59);
10044
10142
 
10045
10143
  // Full Width carousel setup
10046
- if (_this58.options.fullWidth) {
10047
- _this58.options.dist = 0;
10048
- _this58._setCarouselHeight();
10144
+ if (_this59.options.fullWidth) {
10145
+ _this59.options.dist = 0;
10146
+ _this59._setCarouselHeight();
10049
10147
 
10050
10148
  // Offset fixed items when indicators.
10051
- if (_this58.showIndicators) {
10052
- _this58.$el.find('.carousel-fixed-item').addClass('with-indicators');
10149
+ if (_this59.showIndicators) {
10150
+ _this59.$el.find('.carousel-fixed-item').addClass('with-indicators');
10053
10151
  }
10054
10152
  }
10055
10153
 
10056
10154
  // Iterate through slides
10057
- _this58.$indicators = $('<ul class="indicators"></ul>');
10058
- _this58.$el.find('.carousel-item').each(function (el, i) {
10059
- _this58.images.push(el);
10060
- if (_this58.showIndicators) {
10155
+ _this59.$indicators = $('<ul class="indicators"></ul>');
10156
+ _this59.$el.find('.carousel-item').each(function (el, i) {
10157
+ _this59.images.push(el);
10158
+ if (_this59.showIndicators) {
10061
10159
  var $indicator = $('<li class="indicator-item"></li>');
10062
10160
 
10063
10161
  // Add active to first by default.
@@ -10065,28 +10163,28 @@ $jscomp.polyfill = function (e, r, p, m) {
10065
10163
  $indicator[0].classList.add('active');
10066
10164
  }
10067
10165
 
10068
- _this58.$indicators.append($indicator);
10166
+ _this59.$indicators.append($indicator);
10069
10167
  }
10070
10168
  });
10071
- if (_this58.showIndicators) {
10072
- _this58.$el.append(_this58.$indicators);
10169
+ if (_this59.showIndicators) {
10170
+ _this59.$el.append(_this59.$indicators);
10073
10171
  }
10074
- _this58.count = _this58.images.length;
10172
+ _this59.count = _this59.images.length;
10075
10173
 
10076
10174
  // Setup cross browser string
10077
- _this58.xform = 'transform';
10175
+ _this59.xform = 'transform';
10078
10176
  ['webkit', 'Moz', 'O', 'ms'].every(function (prefix) {
10079
10177
  var e = prefix + 'Transform';
10080
10178
  if (typeof document.body.style[e] !== 'undefined') {
10081
- _this58.xform = e;
10179
+ _this59.xform = e;
10082
10180
  return false;
10083
10181
  }
10084
10182
  return true;
10085
10183
  });
10086
10184
 
10087
- _this58._setupEventHandlers();
10088
- _this58._scroll(_this58.offset);
10089
- return _this58;
10185
+ _this59._setupEventHandlers();
10186
+ _this59._scroll(_this59.offset);
10187
+ return _this59;
10090
10188
  }
10091
10189
 
10092
10190
  _createClass(Carousel, [{
@@ -10108,7 +10206,7 @@ $jscomp.polyfill = function (e, r, p, m) {
10108
10206
  }, {
10109
10207
  key: "_setupEventHandlers",
10110
10208
  value: function _setupEventHandlers() {
10111
- var _this59 = this;
10209
+ var _this60 = this;
10112
10210
 
10113
10211
  this._handleCarouselTapBound = this._handleCarouselTap.bind(this);
10114
10212
  this._handleCarouselDragBound = this._handleCarouselDrag.bind(this);
@@ -10130,7 +10228,7 @@ $jscomp.polyfill = function (e, r, p, m) {
10130
10228
  if (this.showIndicators && this.$indicators) {
10131
10229
  this._handleIndicatorClickBound = this._handleIndicatorClick.bind(this);
10132
10230
  this.$indicators.find('.indicator-item').each(function (el, i) {
10133
- el.addEventListener('click', _this59._handleIndicatorClickBound);
10231
+ el.addEventListener('click', _this60._handleIndicatorClickBound);
10134
10232
  });
10135
10233
  }
10136
10234
 
@@ -10148,7 +10246,7 @@ $jscomp.polyfill = function (e, r, p, m) {
10148
10246
  }, {
10149
10247
  key: "_removeEventHandlers",
10150
10248
  value: function _removeEventHandlers() {
10151
- var _this60 = this;
10249
+ var _this61 = this;
10152
10250
 
10153
10251
  if (typeof window.ontouchstart !== 'undefined') {
10154
10252
  this.el.removeEventListener('touchstart', this._handleCarouselTapBound);
@@ -10163,7 +10261,7 @@ $jscomp.polyfill = function (e, r, p, m) {
10163
10261
 
10164
10262
  if (this.showIndicators && this.$indicators) {
10165
10263
  this.$indicators.find('.indicator-item').each(function (el, i) {
10166
- el.removeEventListener('click', _this60._handleIndicatorClickBound);
10264
+ el.removeEventListener('click', _this61._handleIndicatorClickBound);
10167
10265
  });
10168
10266
  }
10169
10267
 
@@ -10349,7 +10447,7 @@ $jscomp.polyfill = function (e, r, p, m) {
10349
10447
  }, {
10350
10448
  key: "_setCarouselHeight",
10351
10449
  value: function _setCarouselHeight(imageOnly) {
10352
- var _this61 = this;
10450
+ var _this62 = this;
10353
10451
 
10354
10452
  var firstSlide = this.$el.find('.carousel-item.active').length ? this.$el.find('.carousel-item.active').first() : this.$el.find('.carousel-item').first();
10355
10453
  var firstImage = firstSlide.find('img').first();
@@ -10369,7 +10467,7 @@ $jscomp.polyfill = function (e, r, p, m) {
10369
10467
  } else {
10370
10468
  // Get height when image is loaded normally
10371
10469
  firstImage.one('load', function (el, i) {
10372
- _this61.$el.css('height', el.offsetHeight + 'px');
10470
+ _this62.$el.css('height', el.offsetHeight + 'px');
10373
10471
  });
10374
10472
  }
10375
10473
  } else if (!imageOnly) {
@@ -10475,7 +10573,7 @@ $jscomp.polyfill = function (e, r, p, m) {
10475
10573
  }, {
10476
10574
  key: "_scroll",
10477
10575
  value: function _scroll(x) {
10478
- var _this62 = this;
10576
+ var _this63 = this;
10479
10577
 
10480
10578
  // Track scrolling state
10481
10579
  if (!this.$el.hasClass('scrolling')) {
@@ -10485,7 +10583,7 @@ $jscomp.polyfill = function (e, r, p, m) {
10485
10583
  window.clearTimeout(this.scrollingTimeout);
10486
10584
  }
10487
10585
  this.scrollingTimeout = window.setTimeout(function () {
10488
- _this62.$el.removeClass('scrolling');
10586
+ _this63.$el.removeClass('scrolling');
10489
10587
  }, this.options.duration);
10490
10588
 
10491
10589
  // Start actual scroll
@@ -10783,9 +10881,9 @@ $jscomp.polyfill = function (e, r, p, m) {
10783
10881
  function FeatureDiscovery(el, options) {
10784
10882
  _classCallCheck(this, FeatureDiscovery);
10785
10883
 
10786
- var _this63 = _possibleConstructorReturn(this, (FeatureDiscovery.__proto__ || Object.getPrototypeOf(FeatureDiscovery)).call(this, FeatureDiscovery, el, options));
10884
+ var _this64 = _possibleConstructorReturn(this, (FeatureDiscovery.__proto__ || Object.getPrototypeOf(FeatureDiscovery)).call(this, FeatureDiscovery, el, options));
10787
10885
 
10788
- _this63.el.M_FeatureDiscovery = _this63;
10886
+ _this64.el.M_FeatureDiscovery = _this64;
10789
10887
 
10790
10888
  /**
10791
10889
  * Options for the select
@@ -10793,17 +10891,17 @@ $jscomp.polyfill = function (e, r, p, m) {
10793
10891
  * @prop {Function} onOpen - Callback function called when feature discovery is opened
10794
10892
  * @prop {Function} onClose - Callback function called when feature discovery is closed
10795
10893
  */
10796
- _this63.options = $.extend({}, FeatureDiscovery.defaults, options);
10894
+ _this64.options = $.extend({}, FeatureDiscovery.defaults, options);
10797
10895
 
10798
- _this63.isOpen = false;
10896
+ _this64.isOpen = false;
10799
10897
 
10800
10898
  // setup
10801
- _this63.$origin = $('#' + _this63.$el.attr('data-target'));
10802
- _this63._setup();
10899
+ _this64.$origin = $('#' + _this64.$el.attr('data-target'));
10900
+ _this64._setup();
10803
10901
 
10804
- _this63._calculatePositioning();
10805
- _this63._setupEventHandlers();
10806
- return _this63;
10902
+ _this64._calculatePositioning();
10903
+ _this64._setupEventHandlers();
10904
+ return _this64;
10807
10905
  }
10808
10906
 
10809
10907
  _createClass(FeatureDiscovery, [{
@@ -11116,7 +11214,8 @@ $jscomp.polyfill = function (e, r, p, m) {
11116
11214
  'use strict';
11117
11215
 
11118
11216
  var _defaults = {
11119
- classes: ''
11217
+ classes: '',
11218
+ dropdownOptions: {}
11120
11219
  };
11121
11220
 
11122
11221
  /**
@@ -11124,40 +11223,46 @@ $jscomp.polyfill = function (e, r, p, m) {
11124
11223
  *
11125
11224
  */
11126
11225
 
11127
- var Select = function (_Component20) {
11128
- _inherits(Select, _Component20);
11226
+ var FormSelect = function (_Component20) {
11227
+ _inherits(FormSelect, _Component20);
11129
11228
 
11130
11229
  /**
11131
- * Construct Select instance
11230
+ * Construct FormSelect instance
11132
11231
  * @constructor
11133
11232
  * @param {Element} el
11134
11233
  * @param {Object} options
11135
11234
  */
11136
- function Select(el, options) {
11137
- _classCallCheck(this, Select);
11235
+ function FormSelect(el, options) {
11236
+ _classCallCheck(this, FormSelect);
11138
11237
 
11139
- var _this64 = _possibleConstructorReturn(this, (Select.__proto__ || Object.getPrototypeOf(Select)).call(this, Select, el, options));
11238
+ // Don't init if browser default version
11239
+ var _this65 = _possibleConstructorReturn(this, (FormSelect.__proto__ || Object.getPrototypeOf(FormSelect)).call(this, FormSelect, el, options));
11140
11240
 
11141
- _this64.el.M_Select = _this64;
11241
+ if (_this65.$el.hasClass('browser-default')) {
11242
+ return _possibleConstructorReturn(_this65);
11243
+ }
11244
+
11245
+ _this65.el.M_FormSelect = _this65;
11142
11246
 
11143
11247
  /**
11144
11248
  * Options for the select
11145
- * @member Select#options
11249
+ * @member FormSelect#options
11146
11250
  */
11147
- _this64.options = $.extend({}, Select.defaults, options);
11251
+ _this65.options = $.extend({}, FormSelect.defaults, options);
11148
11252
 
11149
- _this64.isMultiple = _this64.$el.prop('multiple');
11253
+ _this65.isMultiple = _this65.$el.prop('multiple');
11150
11254
 
11151
11255
  // Setup
11152
- _this64._keysSelected = {};
11153
- _this64._valueDict = {}; // Maps key to original and generated option element.
11154
- _this64._setupDropdown();
11256
+ _this65.el.tabIndex = -1;
11257
+ _this65._keysSelected = {};
11258
+ _this65._valueDict = {}; // Maps key to original and generated option element.
11259
+ _this65._setupDropdown();
11155
11260
 
11156
- _this64._setupEventHandlers();
11157
- return _this64;
11261
+ _this65._setupEventHandlers();
11262
+ return _this65;
11158
11263
  }
11159
11264
 
11160
- _createClass(Select, [{
11265
+ _createClass(FormSelect, [{
11161
11266
  key: "destroy",
11162
11267
 
11163
11268
 
@@ -11167,7 +11272,7 @@ $jscomp.polyfill = function (e, r, p, m) {
11167
11272
  value: function destroy() {
11168
11273
  this._removeEventHandlers();
11169
11274
  this._removeDropdown();
11170
- this.el.M_Select = undefined;
11275
+ this.el.M_FormSelect = undefined;
11171
11276
  }
11172
11277
 
11173
11278
  /**
@@ -11177,14 +11282,14 @@ $jscomp.polyfill = function (e, r, p, m) {
11177
11282
  }, {
11178
11283
  key: "_setupEventHandlers",
11179
11284
  value: function _setupEventHandlers() {
11180
- var _this65 = this;
11285
+ var _this66 = this;
11181
11286
 
11182
11287
  this._handleSelectChangeBound = this._handleSelectChange.bind(this);
11183
11288
  this._handleOptionClickBound = this._handleOptionClick.bind(this);
11184
11289
  this._handleInputClickBound = this._handleInputClick.bind(this);
11185
11290
 
11186
11291
  $(this.dropdownOptions).find('li:not(.optgroup)').each(function (el) {
11187
- el.addEventListener('click', _this65._handleOptionClickBound);
11292
+ el.addEventListener('click', _this66._handleOptionClickBound);
11188
11293
  });
11189
11294
  this.el.addEventListener('change', this._handleSelectChangeBound);
11190
11295
  this.input.addEventListener('click', this._handleInputClickBound);
@@ -11197,14 +11302,13 @@ $jscomp.polyfill = function (e, r, p, m) {
11197
11302
  }, {
11198
11303
  key: "_removeEventHandlers",
11199
11304
  value: function _removeEventHandlers() {
11200
- var _this66 = this;
11305
+ var _this67 = this;
11201
11306
 
11202
11307
  $(this.dropdownOptions).find('li:not(.optgroup)').each(function (el) {
11203
- el.removeEventListener('click', _this66._handleOptionClickBound);
11308
+ el.removeEventListener('click', _this67._handleOptionClickBound);
11204
11309
  });
11205
11310
  this.el.removeEventListener('change', this._handleSelectChangeBound);
11206
11311
  this.input.removeEventListener('click', this._handleInputClickBound);
11207
- this.input.removeEventListener('focus', this._handleInputFocusBound);
11208
11312
  }
11209
11313
 
11210
11314
  /**
@@ -11278,7 +11382,7 @@ $jscomp.polyfill = function (e, r, p, m) {
11278
11382
  }, {
11279
11383
  key: "_setupDropdown",
11280
11384
  value: function _setupDropdown() {
11281
- var _this67 = this;
11385
+ var _this68 = this;
11282
11386
 
11283
11387
  this.wrapper = document.createElement('div');
11284
11388
  $(this.wrapper).addClass('select-wrapper' + ' ' + this.options.classes);
@@ -11301,21 +11405,21 @@ $jscomp.polyfill = function (e, r, p, m) {
11301
11405
  if ($(el).is('option')) {
11302
11406
  // Direct descendant option.
11303
11407
  var optionEl = void 0;
11304
- if (_this67.isMultiple) {
11305
- optionEl = _this67._appendOptionWithIcon(_this67.$el, el, 'multiple');
11408
+ if (_this68.isMultiple) {
11409
+ optionEl = _this68._appendOptionWithIcon(_this68.$el, el, 'multiple');
11306
11410
  } else {
11307
- optionEl = _this67._appendOptionWithIcon(_this67.$el, el);
11411
+ optionEl = _this68._appendOptionWithIcon(_this68.$el, el);
11308
11412
  }
11309
11413
 
11310
- _this67._addOptionToValueDict(el, optionEl);
11414
+ _this68._addOptionToValueDict(el, optionEl);
11311
11415
  } else if ($(el).is('optgroup')) {
11312
11416
  // Optgroup.
11313
11417
  var selectOptions = $(el).children('option');
11314
- $(_this67.dropdownOptions).append($('<li class="optgroup"><span>' + el.getAttribute('label') + '</span></li>')[0]);
11418
+ $(_this68.dropdownOptions).append($('<li class="optgroup"><span>' + el.getAttribute('label') + '</span></li>')[0]);
11315
11419
 
11316
11420
  selectOptions.each(function (el) {
11317
- var optionEl = _this67._appendOptionWithIcon(_this67.$el, el, 'optgroup-option');
11318
- _this67._addOptionToValueDict(el, optionEl);
11421
+ var optionEl = _this68._appendOptionWithIcon(_this68.$el, el, 'optgroup-option');
11422
+ _this68._addOptionToValueDict(el, optionEl);
11319
11423
  });
11320
11424
  }
11321
11425
  });
@@ -11342,7 +11446,8 @@ $jscomp.polyfill = function (e, r, p, m) {
11342
11446
 
11343
11447
  // Initialize dropdown
11344
11448
  if (!this.el.disabled) {
11345
- var dropdownOptions = {};
11449
+ var dropdownOptions = $.extend({}, this.options.dropdownOptions);
11450
+
11346
11451
  if (this.isMultiple) {
11347
11452
  dropdownOptions.closeOnClick = false;
11348
11453
  }
@@ -11529,7 +11634,7 @@ $jscomp.polyfill = function (e, r, p, m) {
11529
11634
  }], [{
11530
11635
  key: "init",
11531
11636
  value: function init(els, options) {
11532
- return _get(Select.__proto__ || Object.getPrototypeOf(Select), "init", this).call(this, this, els, options);
11637
+ return _get(FormSelect.__proto__ || Object.getPrototypeOf(FormSelect), "init", this).call(this, this, els, options);
11533
11638
  }
11534
11639
 
11535
11640
  /**
@@ -11540,7 +11645,7 @@ $jscomp.polyfill = function (e, r, p, m) {
11540
11645
  key: "getInstance",
11541
11646
  value: function getInstance(el) {
11542
11647
  var domElem = !!el.jquery ? el[0] : el;
11543
- return domElem.M_Select;
11648
+ return domElem.M_FormSelect;
11544
11649
  }
11545
11650
  }, {
11546
11651
  key: "defaults",
@@ -11549,13 +11654,13 @@ $jscomp.polyfill = function (e, r, p, m) {
11549
11654
  }
11550
11655
  }]);
11551
11656
 
11552
- return Select;
11657
+ return FormSelect;
11553
11658
  }(Component);
11554
11659
 
11555
- M.Select = Select;
11660
+ M.FormSelect = FormSelect;
11556
11661
 
11557
11662
  if (M.jQueryLoaded) {
11558
- M.initializeJqueryWrapper(Select, 'select', 'M_Select');
11663
+ M.initializeJqueryWrapper(FormSelect, 'formSelect', 'M_FormSelect');
11559
11664
  }
11560
11665
  })(cash);
11561
11666
  ;(function ($, anim) {
@@ -11580,23 +11685,23 @@ $jscomp.polyfill = function (e, r, p, m) {
11580
11685
  function Range(el, options) {
11581
11686
  _classCallCheck(this, Range);
11582
11687
 
11583
- var _this68 = _possibleConstructorReturn(this, (Range.__proto__ || Object.getPrototypeOf(Range)).call(this, Range, el, options));
11688
+ var _this69 = _possibleConstructorReturn(this, (Range.__proto__ || Object.getPrototypeOf(Range)).call(this, Range, el, options));
11584
11689
 
11585
- _this68.el.M_Range = _this68;
11690
+ _this69.el.M_Range = _this69;
11586
11691
 
11587
11692
  /**
11588
11693
  * Options for the range
11589
11694
  * @member Range#options
11590
11695
  */
11591
- _this68.options = $.extend({}, Range.defaults, options);
11696
+ _this69.options = $.extend({}, Range.defaults, options);
11592
11697
 
11593
- _this68._mousedown = false;
11698
+ _this69._mousedown = false;
11594
11699
 
11595
11700
  // Setup
11596
- _this68._setupThumb();
11701
+ _this69._setupThumb();
11597
11702
 
11598
- _this68._setupEventHandlers();
11599
- return _this68;
11703
+ _this69._setupEventHandlers();
11704
+ return _this69;
11600
11705
  }
11601
11706
 
11602
11707
  _createClass(Range, [{