materialize-sass 0.97.6 → 0.97.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/app/assets/javascripts/materialize-sprockets.js +1 -4
  4. data/app/assets/javascripts/materialize.js +887 -338
  5. data/app/assets/javascripts/materialize.min.js +5 -5
  6. data/app/assets/javascripts/materialize/animation.js +0 -0
  7. data/app/assets/javascripts/materialize/buttons.js +0 -0
  8. data/app/assets/javascripts/materialize/cards.js +0 -3
  9. data/app/assets/javascripts/materialize/carousel.js +150 -46
  10. data/app/assets/javascripts/materialize/character_counter.js +0 -0
  11. data/app/assets/javascripts/materialize/chips.js +262 -4
  12. data/app/assets/javascripts/materialize/collapsible.js +0 -0
  13. data/app/assets/javascripts/materialize/date_picker/picker.date.js +0 -0
  14. data/app/assets/javascripts/materialize/date_picker/picker.js +0 -0
  15. data/app/assets/javascripts/materialize/dropdown.js +206 -178
  16. data/app/assets/javascripts/materialize/extras/nouislider.js +0 -0
  17. data/app/assets/javascripts/materialize/extras/nouislider.min.js +0 -0
  18. data/app/assets/javascripts/materialize/forms.js +94 -9
  19. data/app/assets/javascripts/materialize/global.js +0 -0
  20. data/app/assets/javascripts/materialize/hammer.min.js +0 -0
  21. data/app/assets/javascripts/materialize/init.js +21 -3
  22. data/app/assets/javascripts/materialize/initial.js +0 -0
  23. data/app/assets/javascripts/materialize/jquery.easing.1.3.js +0 -0
  24. data/app/assets/javascripts/materialize/jquery.timeago.min.js +0 -0
  25. data/app/assets/javascripts/materialize/leanModal.js +11 -10
  26. data/app/assets/javascripts/materialize/materialbox.js +0 -0
  27. data/app/assets/javascripts/materialize/parallax.js +0 -0
  28. data/app/assets/javascripts/materialize/prism.js +0 -0
  29. data/app/assets/javascripts/materialize/pushpin.js +15 -1
  30. data/app/assets/javascripts/materialize/scrollFire.js +2 -2
  31. data/app/assets/javascripts/materialize/scrollspy.js +7 -8
  32. data/app/assets/javascripts/materialize/sideNav.js +15 -7
  33. data/app/assets/javascripts/materialize/slider.js +1 -1
  34. data/app/assets/javascripts/materialize/tabs.js +15 -2
  35. data/app/assets/javascripts/materialize/toasts.js +0 -0
  36. data/app/assets/javascripts/materialize/tooltip.js +86 -59
  37. data/app/assets/javascripts/materialize/transitions.js +20 -5
  38. data/app/assets/javascripts/materialize/velocity.min.js +0 -0
  39. data/app/assets/javascripts/materialize/waves.js +0 -0
  40. data/app/assets/stylesheets/materialize/components/_buttons.scss +15 -1
  41. data/app/assets/stylesheets/materialize/components/_cards.scss +54 -7
  42. data/app/assets/stylesheets/materialize/components/_carousel.scss +60 -9
  43. data/app/assets/stylesheets/materialize/components/_chips.scss +49 -2
  44. data/app/assets/stylesheets/materialize/components/_collapsible.scss +3 -3
  45. data/app/assets/stylesheets/materialize/components/_color.scss +1 -1
  46. data/app/assets/stylesheets/materialize/components/_global.scss +7 -8
  47. data/app/assets/stylesheets/materialize/components/_grid.scss +1 -0
  48. data/app/assets/stylesheets/materialize/components/_navbar.scss +15 -4
  49. data/app/assets/stylesheets/materialize/components/_sideNav.scss +93 -8
  50. data/app/assets/stylesheets/materialize/components/_tooltip.scss +20 -22
  51. data/app/assets/stylesheets/materialize/components/_variables.scss +11 -7
  52. data/app/assets/stylesheets/materialize/components/_waves.scss +5 -1
  53. data/app/assets/stylesheets/materialize/components/forms/_checkboxes.scss +0 -0
  54. data/app/assets/stylesheets/materialize/components/forms/_file-input.scss +0 -0
  55. data/app/assets/stylesheets/materialize/components/forms/_forms.scss +0 -0
  56. data/app/assets/stylesheets/materialize/components/forms/_input-fields.scss +23 -4
  57. data/app/assets/stylesheets/materialize/components/forms/_radio-buttons.scss +0 -0
  58. data/app/assets/stylesheets/materialize/components/forms/_range.scss +0 -0
  59. data/app/assets/stylesheets/materialize/components/forms/_select.scss +0 -0
  60. data/app/assets/stylesheets/materialize/components/forms/_switches.scss +0 -0
  61. data/app/assets/stylesheets/materialize/extras/nouislider.css +0 -0
  62. data/lib/materialize-sass/version.rb +1 -1
  63. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 828befde9288f6ec72f3bcf59ba99e1ba59c6065
4
- data.tar.gz: 5a274e29634e4ada065bccd340d44385e8701ef2
3
+ metadata.gz: 774a4666b7adb674d01fd664b5972f969da1c736
4
+ data.tar.gz: 49ca467c5f0c2795e7bdd480570e48720ceb00ae
5
5
  SHA512:
6
- metadata.gz: 694b627deb7d36430a3efc535c122228263797eb4e68c5908bfca860e5059bfe7b9b8ecf04141e20a1e7fa0bf56e0c3e6683d511c5158d81c83263facff8c5f6
7
- data.tar.gz: aca2468e981e8a175599c1c3f8de09e37a2f1f2d6399b503347f3bb0ad1e6b6700e474244e589f24a4326ec4cd6745ef186f8b57106c28ce4152c88e398e375b
6
+ metadata.gz: 18d7389377de8c092eafc089eda8619fe6f67f1bd33511fd552df2e83a3f89139a4ac2ca6d909a37d2ffcd09f3f40faae446e0186999a294eecb64a1aece4167
7
+ data.tar.gz: 6e92260588897363d28ece9a8f55e84f3480e353fafa76b41e1ce071401b912c82a8ee81656d30f6427a9d037a29ff76f75495bdd5cec40005010d2667ca8fd5
data/.gitignore CHANGED
@@ -13,3 +13,4 @@
13
13
  *.a
14
14
  mkmf.log
15
15
  *.gem
16
+ .DS_Store
@@ -27,7 +27,4 @@
27
27
  //= require ./materialize/date_picker/picker
28
28
  //= require ./materialize/date_picker/picker.date
29
29
  //= require ./materialize/character_counter
30
- //= require ./materialize/carousel.js
31
-
32
-
33
-
30
+ //= require ./materialize/carousel.js
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Materialize v0.97.6 (http://materializecss.com)
2
+ * Materialize v0.97.7 (http://materializecss.com)
3
3
  * Copyright 2014-2015 Materialize
4
4
  * MIT License (https://raw.githubusercontent.com/Dogfalo/materialize/master/LICENSE)
5
5
  */
@@ -455,7 +455,7 @@ if ($) {
455
455
  return this;
456
456
  };
457
457
 
458
- $.fn.dropdown = function (option) {
458
+ $.fn.dropdown = function (options) {
459
459
  var defaults = {
460
460
  inDuration: 300,
461
461
  outDuration: 225,
@@ -463,220 +463,248 @@ if ($) {
463
463
  hover: false,
464
464
  gutter: 0, // Spacing from edge
465
465
  belowOrigin: false,
466
- alignment: 'left'
466
+ alignment: 'left',
467
+ stopPropagation: false
467
468
  };
468
469
 
469
- this.each(function(){
470
- var origin = $(this);
471
- var options = $.extend({}, defaults, option);
472
- var isFocused = false;
473
-
474
- // Dropdown menu
475
- var activates = $("#"+ origin.attr('data-activates'));
476
-
477
- function updateOptions() {
478
- if (origin.data('induration') !== undefined)
479
- options.inDuration = origin.data('inDuration');
480
- if (origin.data('outduration') !== undefined)
481
- options.outDuration = origin.data('outDuration');
482
- if (origin.data('constrainwidth') !== undefined)
483
- options.constrain_width = origin.data('constrainwidth');
484
- if (origin.data('hover') !== undefined)
485
- options.hover = origin.data('hover');
486
- if (origin.data('gutter') !== undefined)
487
- options.gutter = origin.data('gutter');
488
- if (origin.data('beloworigin') !== undefined)
489
- options.belowOrigin = origin.data('beloworigin');
490
- if (origin.data('alignment') !== undefined)
491
- options.alignment = origin.data('alignment');
470
+ // Open dropdown.
471
+ if (options === "open") {
472
+ this.each(function() {
473
+ $(this).trigger('open');
474
+ });
475
+ return false;
492
476
  }
493
477
 
494
- updateOptions();
495
-
496
- // Attach dropdown to its activator
497
- origin.after(activates);
478
+ // Close dropdown.
479
+ if (options === "close") {
480
+ this.each(function() {
481
+ $(this).trigger('close');
482
+ });
483
+ return false;
484
+ }
498
485
 
499
- /*
500
- Helper function to position and resize dropdown.
501
- Used in hover and click handler.
502
- */
503
- function placeDropdown(eventType) {
504
- // Check for simultaneous focus and click events.
505
- if (eventType === 'focus') {
506
- isFocused = true;
486
+ this.each(function(){
487
+ var origin = $(this);
488
+ var options = $.extend({}, defaults, options);
489
+ var isFocused = false;
490
+
491
+ // Dropdown menu
492
+ var activates = $("#"+ origin.attr('data-activates'));
493
+
494
+ function updateOptions() {
495
+ if (origin.data('induration') !== undefined)
496
+ options.inDuration = origin.data('induration');
497
+ if (origin.data('outduration') !== undefined)
498
+ options.outDuration = origin.data('outduration');
499
+ if (origin.data('constrainwidth') !== undefined)
500
+ options.constrain_width = origin.data('constrainwidth');
501
+ if (origin.data('hover') !== undefined)
502
+ options.hover = origin.data('hover');
503
+ if (origin.data('gutter') !== undefined)
504
+ options.gutter = origin.data('gutter');
505
+ if (origin.data('beloworigin') !== undefined)
506
+ options.belowOrigin = origin.data('beloworigin');
507
+ if (origin.data('alignment') !== undefined)
508
+ options.alignment = origin.data('alignment');
509
+ if (origin.data('stoppropagation') !== undefined)
510
+ options.stopPropagation = origin.data('stoppropagation');
507
511
  }
508
512
 
509
- // Check html data attributes
510
513
  updateOptions();
511
514
 
512
- // Set Dropdown state
513
- activates.addClass('active');
514
- origin.addClass('active');
515
-
516
- // Constrain width
517
- if (options.constrain_width === true) {
518
- activates.css('width', origin.outerWidth());
519
-
520
- } else {
521
- activates.css('white-space', 'nowrap');
522
- }
515
+ // Attach dropdown to its activator
516
+ origin.after(activates);
523
517
 
524
- // Offscreen detection
525
- var windowHeight = window.innerHeight;
526
- var originHeight = origin.innerHeight();
527
- var offsetLeft = origin.offset().left;
528
- var offsetTop = origin.offset().top - $(window).scrollTop();
529
- var currAlignment = options.alignment;
530
- var gutterSpacing = 0;
531
- var leftPosition = 0;
532
-
533
- // Below Origin
534
- var verticalOffset = 0;
535
- if (options.belowOrigin === true) {
536
- verticalOffset = originHeight;
537
- }
518
+ /*
519
+ Helper function to position and resize dropdown.
520
+ Used in hover and click handler.
521
+ */
522
+ function placeDropdown(eventType) {
523
+ // Check for simultaneous focus and click events.
524
+ if (eventType === 'focus') {
525
+ isFocused = true;
526
+ }
538
527
 
539
- // Check for scrolling positioned container.
540
- var scrollOffset = 0;
541
- var wrapper = origin.parent();
542
- if (!wrapper.is('body') && wrapper[0].scrollHeight > wrapper[0].clientHeight) {
543
- scrollOffset = wrapper[0].scrollTop;
544
- }
528
+ // Check html data attributes
529
+ updateOptions();
545
530
 
531
+ // Set Dropdown state
532
+ activates.addClass('active');
533
+ origin.addClass('active');
546
534
 
547
- if (offsetLeft + activates.innerWidth() > $(window).width()) {
548
- // Dropdown goes past screen on right, force right alignment
549
- currAlignment = 'right';
535
+ // Constrain width
536
+ if (options.constrain_width === true) {
537
+ activates.css('width', origin.outerWidth());
550
538
 
551
- } else if (offsetLeft - activates.innerWidth() + origin.innerWidth() < 0) {
552
- // Dropdown goes past screen on left, force left alignment
553
- currAlignment = 'left';
554
- }
555
- // Vertical bottom offscreen detection
556
- if (offsetTop + activates.innerHeight() > windowHeight) {
557
- // If going upwards still goes offscreen, just crop height of dropdown.
558
- if (offsetTop + originHeight - activates.innerHeight() < 0) {
559
- var adjustedHeight = windowHeight - offsetTop - verticalOffset;
560
- activates.css('max-height', adjustedHeight);
561
539
  } else {
562
- // Flow upwards.
563
- if (!verticalOffset) {
564
- verticalOffset += originHeight;
565
- }
566
- verticalOffset -= activates.innerHeight();
540
+ activates.css('white-space', 'nowrap');
567
541
  }
568
- }
569
542
 
570
- // Handle edge alignment
571
- if (currAlignment === 'left') {
572
- gutterSpacing = options.gutter;
573
- leftPosition = origin.position().left + gutterSpacing;
574
- }
575
- else if (currAlignment === 'right') {
576
- var offsetRight = origin.position().left + origin.outerWidth() - activates.outerWidth();
577
- gutterSpacing = -options.gutter;
578
- leftPosition = offsetRight + gutterSpacing;
579
- }
543
+ // Offscreen detection
544
+ var windowHeight = window.innerHeight;
545
+ var originHeight = origin.innerHeight();
546
+ var offsetLeft = origin.offset().left;
547
+ var offsetTop = origin.offset().top - $(window).scrollTop();
548
+ var currAlignment = options.alignment;
549
+ var gutterSpacing = 0;
550
+ var leftPosition = 0;
551
+
552
+ // Below Origin
553
+ var verticalOffset = 0;
554
+ if (options.belowOrigin === true) {
555
+ verticalOffset = originHeight;
556
+ }
557
+
558
+ // Check for scrolling positioned container.
559
+ var scrollYOffset = 0;
560
+ var scrollXOffset = 0;
561
+ var wrapper = origin.parent();
562
+ if (!wrapper.is('body')) {
563
+ if (wrapper[0].scrollHeight > wrapper[0].clientHeight) {
564
+ scrollYOffset = wrapper[0].scrollTop;
565
+ }
566
+ if (wrapper[0].scrollWidth > wrapper[0].clientWidth) {
567
+ scrollXOffset = wrapper[0].scrollLeft;
568
+ }
569
+ }
580
570
 
581
- // Position dropdown
582
- activates.css({
583
- position: 'absolute',
584
- top: origin.position().top + verticalOffset + scrollOffset,
585
- left: leftPosition
586
- });
587
571
 
572
+ if (offsetLeft + activates.innerWidth() > $(window).width()) {
573
+ // Dropdown goes past screen on right, force right alignment
574
+ currAlignment = 'right';
588
575
 
589
- // Show dropdown
590
- activates.stop(true, true).css('opacity', 0)
591
- .slideDown({
592
- queue: false,
593
- duration: options.inDuration,
594
- easing: 'easeOutCubic',
595
- complete: function() {
596
- $(this).css('height', '');
576
+ } else if (offsetLeft - activates.innerWidth() + origin.innerWidth() < 0) {
577
+ // Dropdown goes past screen on left, force left alignment
578
+ currAlignment = 'left';
579
+ }
580
+ // Vertical bottom offscreen detection
581
+ if (offsetTop + activates.innerHeight() > windowHeight) {
582
+ // If going upwards still goes offscreen, just crop height of dropdown.
583
+ if (offsetTop + originHeight - activates.innerHeight() < 0) {
584
+ var adjustedHeight = windowHeight - offsetTop - verticalOffset;
585
+ activates.css('max-height', adjustedHeight);
586
+ } else {
587
+ // Flow upwards.
588
+ if (!verticalOffset) {
589
+ verticalOffset += originHeight;
590
+ }
591
+ verticalOffset -= activates.innerHeight();
592
+ }
597
593
  }
598
- })
599
- .animate( {opacity: 1}, {queue: false, duration: options.inDuration, easing: 'easeOutSine'});
600
- }
601
-
602
- function hideDropdown() {
603
- // Check for simultaneous focus and click events.
604
- isFocused = false;
605
- activates.fadeOut(options.outDuration);
606
- activates.removeClass('active');
607
- origin.removeClass('active');
608
- setTimeout(function() { activates.css('max-height', ''); }, options.outDuration);
609
- }
610
594
 
611
- // Hover
612
- if (options.hover) {
613
- var open = false;
614
- origin.unbind('click.' + origin.attr('id'));
615
- // Hover handler to show dropdown
616
- origin.on('mouseenter', function(e){ // Mouse over
617
- if (open === false) {
618
- placeDropdown();
619
- open = true;
595
+ // Handle edge alignment
596
+ if (currAlignment === 'left') {
597
+ gutterSpacing = options.gutter;
598
+ leftPosition = origin.position().left + gutterSpacing;
620
599
  }
621
- });
622
- origin.on('mouseleave', function(e){
623
- // If hover on origin then to something other than dropdown content, then close
624
- var toEl = e.toElement || e.relatedTarget; // added browser compatibility for target element
625
- if(!$(toEl).closest('.dropdown-content').is(activates)) {
626
- activates.stop(true, true);
627
- hideDropdown();
628
- open = false;
600
+ else if (currAlignment === 'right') {
601
+ var offsetRight = origin.position().left + origin.outerWidth() - activates.outerWidth();
602
+ gutterSpacing = -options.gutter;
603
+ leftPosition = offsetRight + gutterSpacing;
629
604
  }
630
- });
631
605
 
632
- activates.on('mouseleave', function(e){ // Mouse out
633
- var toEl = e.toElement || e.relatedTarget;
634
- if(!$(toEl).closest('.dropdown-button').is(origin)) {
635
- activates.stop(true, true);
636
- hideDropdown();
637
- open = false;
638
- }
639
- });
606
+ // Position dropdown
607
+ activates.css({
608
+ position: 'absolute',
609
+ top: origin.position().top + verticalOffset + scrollYOffset,
610
+ left: leftPosition + scrollXOffset
611
+ });
640
612
 
641
- // Click
642
- } else {
643
- // Click handler to show dropdown
644
- origin.unbind('click.' + origin.attr('id'));
645
- origin.bind('click.'+origin.attr('id'), function(e){
646
- if (!isFocused) {
647
- if ( origin[0] == e.currentTarget &&
648
- !origin.hasClass('active') &&
649
- ($(e.target).closest('.dropdown-content').length === 0)) {
650
- e.preventDefault(); // Prevents button click from moving window
651
- placeDropdown('click');
613
+
614
+ // Show dropdown
615
+ activates.stop(true, true).css('opacity', 0)
616
+ .slideDown({
617
+ queue: false,
618
+ duration: options.inDuration,
619
+ easing: 'easeOutCubic',
620
+ complete: function() {
621
+ $(this).css('height', '');
622
+ }
623
+ })
624
+ .animate( {opacity: 1}, {queue: false, duration: options.inDuration, easing: 'easeOutSine'});
625
+ }
626
+
627
+ function hideDropdown() {
628
+ // Check for simultaneous focus and click events.
629
+ isFocused = false;
630
+ activates.fadeOut(options.outDuration);
631
+ activates.removeClass('active');
632
+ origin.removeClass('active');
633
+ setTimeout(function() { activates.css('max-height', ''); }, options.outDuration);
634
+ }
635
+
636
+ // Hover
637
+ if (options.hover) {
638
+ var open = false;
639
+ origin.unbind('click.' + origin.attr('id'));
640
+ // Hover handler to show dropdown
641
+ origin.on('mouseenter', function(e){ // Mouse over
642
+ if (open === false) {
643
+ placeDropdown();
644
+ open = true;
645
+ }
646
+ });
647
+ origin.on('mouseleave', function(e){
648
+ // If hover on origin then to something other than dropdown content, then close
649
+ var toEl = e.toElement || e.relatedTarget; // added browser compatibility for target element
650
+ if(!$(toEl).closest('.dropdown-content').is(activates)) {
651
+ activates.stop(true, true);
652
+ hideDropdown();
653
+ open = false;
652
654
  }
653
- // If origin is clicked and menu is open, close menu
654
- else if (origin.hasClass('active')) {
655
+ });
656
+
657
+ activates.on('mouseleave', function(e){ // Mouse out
658
+ var toEl = e.toElement || e.relatedTarget;
659
+ if(!$(toEl).closest('.dropdown-button').is(origin)) {
660
+ activates.stop(true, true);
655
661
  hideDropdown();
656
- $(document).unbind('click.'+ activates.attr('id') + ' touchstart.' + activates.attr('id'));
662
+ open = false;
657
663
  }
658
- // If menu open, add click close handler to document
659
- if (activates.hasClass('active')) {
660
- $(document).bind('click.'+ activates.attr('id') + ' touchstart.' + activates.attr('id'), function (e) {
661
- if (!activates.is(e.target) && !origin.is(e.target) && (!origin.find(e.target).length) ) {
662
- hideDropdown();
663
- $(document).unbind('click.'+ activates.attr('id') + ' touchstart.' + activates.attr('id'));
664
+ });
665
+
666
+ // Click
667
+ } else {
668
+ // Click handler to show dropdown
669
+ origin.unbind('click.' + origin.attr('id'));
670
+ origin.bind('click.'+origin.attr('id'), function(e){
671
+ if (!isFocused) {
672
+ if ( origin[0] == e.currentTarget &&
673
+ !origin.hasClass('active') &&
674
+ ($(e.target).closest('.dropdown-content').length === 0)) {
675
+ e.preventDefault(); // Prevents button click from moving window
676
+ if (options.stopPropagation) {
677
+ e.stopPropagation();
664
678
  }
665
- });
679
+ placeDropdown('click');
680
+ }
681
+ // If origin is clicked and menu is open, close menu
682
+ else if (origin.hasClass('active')) {
683
+ hideDropdown();
684
+ $(document).unbind('click.'+ activates.attr('id') + ' touchstart.' + activates.attr('id'));
685
+ }
686
+ // If menu open, add click close handler to document
687
+ if (activates.hasClass('active')) {
688
+ $(document).bind('click.'+ activates.attr('id') + ' touchstart.' + activates.attr('id'), function (e) {
689
+ if (!activates.is(e.target) && !origin.is(e.target) && (!origin.find(e.target).length) ) {
690
+ hideDropdown();
691
+ $(document).unbind('click.'+ activates.attr('id') + ' touchstart.' + activates.attr('id'));
692
+ }
693
+ });
694
+ }
666
695
  }
667
- }
668
- });
696
+ });
669
697
 
670
- } // End else
698
+ } // End else
671
699
 
672
- // Listen to open and close event - useful for select component
673
- origin.on('open', function(e, eventType) {
674
- placeDropdown(eventType);
675
- });
676
- origin.on('close', hideDropdown);
700
+ // Listen to open and close event - useful for select component
701
+ origin.on('open', function(e, eventType) {
702
+ placeDropdown(eventType);
703
+ });
704
+ origin.on('close', hideDropdown);
677
705
 
678
706
 
679
- });
707
+ });
680
708
  }; // End dropdown plugin
681
709
 
682
710
  $(document).ready(function(){
@@ -706,16 +734,17 @@ if ($) {
706
734
  ready: undefined,
707
735
  complete: undefined,
708
736
  dismissible: true,
709
- starting_top: '4%'
710
- },
711
- $modal = $(this);
737
+ starting_top: '4%',
738
+ ending_top: '10%'
739
+ };
740
+ var $modal = $(this);
712
741
 
713
742
  if ($modal.hasClass('open')) {
714
743
  return;
715
744
  }
716
745
 
717
- overlayID = _generateID();
718
- $overlay = $('<div class="lean-overlay"></div>');
746
+ var overlayID = _generateID();
747
+ var $overlay = $('<div class="lean-overlay"></div>');
719
748
  lStack = (++_stack);
720
749
 
721
750
  // Store a reference of the overlay
@@ -771,7 +800,7 @@ if ($) {
771
800
  else {
772
801
  $.Velocity.hook($modal, "scaleX", 0.7);
773
802
  $modal.css({ top: options.starting_top });
774
- $modal.velocity({top: "10%", opacity: 1, scaleX: '1'}, {
803
+ $modal.velocity({top: options.ending_top, opacity: 1, scaleX: '1'}, {
775
804
  duration: options.in_duration,
776
805
  queue: false,
777
806
  ease: "easeOutCubic",
@@ -793,10 +822,10 @@ if ($) {
793
822
  var defaults = {
794
823
  out_duration: 250,
795
824
  complete: undefined
796
- },
797
- $modal = $(this),
798
- overlayID = $modal.data('overlay-id'),
799
- $overlay = $('#' + overlayID);
825
+ };
826
+ var $modal = $(this);
827
+ var overlayID = $modal.data('overlay-id');
828
+ var $overlay = $('#' + overlayID);
800
829
  $modal.removeClass('open');
801
830
 
802
831
  options = $.extend(defaults, options);
@@ -1203,7 +1232,12 @@ $(document).ready(function(){
1203
1232
  }( jQuery ));;(function ($) {
1204
1233
 
1205
1234
  var methods = {
1206
- init : function() {
1235
+ init : function(options) {
1236
+ var defaults = {
1237
+ onShow: null
1238
+ };
1239
+ options = $.extend(defaults, options);
1240
+
1207
1241
  return this.each(function() {
1208
1242
 
1209
1243
  // For each set of tabs, we want to keep track of
@@ -1222,7 +1256,7 @@ $(document).ready(function(){
1222
1256
 
1223
1257
  // If no match is found, use the first link or any with class 'active' as the initial active tab.
1224
1258
  if ($active.length === 0) {
1225
- $active = $(this).find('li.tab a.active').first();
1259
+ $active = $(this).find('li.tab a.active').first();
1226
1260
  }
1227
1261
  if ($active.length === 0) {
1228
1262
  $active = $(this).find('li.tab a').first();
@@ -1270,6 +1304,11 @@ $(document).ready(function(){
1270
1304
  return;
1271
1305
  }
1272
1306
 
1307
+ // Act as regular link if target attribute is specified.
1308
+ if (!!$(this).attr("target")) {
1309
+ return;
1310
+ }
1311
+
1273
1312
  $tabs_width = $this.width();
1274
1313
  $tab_width = Math.max($tabs_width, $this[0].scrollWidth) / $links.length;
1275
1314
 
@@ -1296,6 +1335,9 @@ $(document).ready(function(){
1296
1335
 
1297
1336
  if ($content !== undefined) {
1298
1337
  $content.show();
1338
+ if (typeof(options.onShow) === "function") {
1339
+ options.onShow.call(this, $content);
1340
+ }
1299
1341
  }
1300
1342
 
1301
1343
  // Update indicator
@@ -1337,17 +1379,20 @@ $(document).ready(function(){
1337
1379
  }( jQuery ));
1338
1380
  ;(function ($) {
1339
1381
  $.fn.tooltip = function (options) {
1340
- var timeout = null,
1341
- margin = 5;
1382
+ var timeout = null,
1383
+ margin = 5;
1342
1384
 
1343
1385
  // Defaults
1344
1386
  var defaults = {
1345
- delay: 350
1387
+ delay: 350,
1388
+ tooltip: '',
1389
+ position: 'bottom',
1390
+ html: false
1346
1391
  };
1347
1392
 
1348
1393
  // Remove tooltip from the activator
1349
1394
  if (options === "remove") {
1350
- this.each(function(){
1395
+ this.each(function() {
1351
1396
  $('#' + $(this).attr('data-tooltip-id')).remove();
1352
1397
  $(this).off('mouseenter.tooltip mouseleave.tooltip');
1353
1398
  });
@@ -1356,53 +1401,76 @@ $(document).ready(function(){
1356
1401
 
1357
1402
  options = $.extend(defaults, options);
1358
1403
 
1359
-
1360
- return this.each(function(){
1404
+ return this.each(function() {
1361
1405
  var tooltipId = Materialize.guid();
1362
1406
  var origin = $(this);
1363
1407
  origin.attr('data-tooltip-id', tooltipId);
1364
1408
 
1365
- // Create Text span
1366
- var tooltip_text = $('<span></span>').text(origin.attr('data-tooltip'));
1367
-
1368
- // Create tooltip
1369
- var newTooltip = $('<div></div>');
1370
- newTooltip.addClass('material-tooltip').append(tooltip_text)
1371
- .appendTo($('body'))
1372
- .attr('id', tooltipId);
1373
-
1374
- var backdrop = $('<div></div>').addClass('backdrop');
1375
- backdrop.appendTo(newTooltip);
1376
- backdrop.css({ top: 0, left:0 });
1377
-
1378
-
1379
- //Destroy previously binded events
1380
- origin.off('mouseenter.tooltip mouseleave.tooltip');
1381
- // Mouse In
1382
- var started = false, timeoutRef;
1383
- origin.on({
1384
- 'mouseenter.tooltip': function(e) {
1385
- var tooltip_delay = origin.attr('data-delay');
1386
- tooltip_delay = (tooltip_delay === undefined || tooltip_delay === '') ?
1387
- options.delay : tooltip_delay;
1388
- timeoutRef = setTimeout(function(){
1409
+ // Get attributes.
1410
+ var allowHtml,
1411
+ tooltipDelay,
1412
+ tooltipPosition,
1413
+ tooltipText,
1414
+ tooltipEl,
1415
+ backdrop;
1416
+ var setAttributes = function() {
1417
+ allowHtml = origin.attr('data-html') ? origin.attr('data-html') === 'true' : options.html;
1418
+ tooltipDelay = origin.attr('data-delay');
1419
+ tooltipDelay = (tooltipDelay === undefined || tooltipDelay === '') ?
1420
+ options.delay : tooltipDelay;
1421
+ tooltipPosition = origin.attr('data-position');
1422
+ tooltipPosition = (tooltipPosition === undefined || tooltipPosition === '') ?
1423
+ options.position : tooltipPosition;
1424
+ tooltipText = origin.attr('data-tooltip');
1425
+ tooltipText = (tooltipText === undefined || tooltipText === '') ?
1426
+ options.tooltip : tooltipText;
1427
+ };
1428
+ setAttributes();
1429
+
1430
+ var renderTooltipEl = function() {
1431
+ var tooltip = $('<div class="material-tooltip"></div>');
1432
+
1433
+ // Create Text span
1434
+ if (allowHtml) {
1435
+ tooltipText = $('<span></span>').html(tooltipText);
1436
+ } else{
1437
+ tooltipText = $('<span></span>').text(tooltipText);
1438
+ }
1439
+
1440
+ // Create tooltip
1441
+ tooltip.append(tooltipText)
1442
+ .appendTo($('body'))
1443
+ .attr('id', tooltipId);
1444
+
1445
+ // Create backdrop
1446
+ backdrop = $('<div class="backdrop"></div>');
1447
+ backdrop.appendTo(tooltip);
1448
+ return tooltip;
1449
+ };
1450
+ tooltipEl = renderTooltipEl();
1451
+
1452
+ // Destroy previously binded events
1453
+ origin.off('mouseenter.tooltip mouseleave.tooltip');
1454
+ // Mouse In
1455
+ var started = false, timeoutRef;
1456
+ origin.on({'mouseenter.tooltip': function(e) {
1457
+ var showTooltip = function() {
1458
+ setAttributes();
1389
1459
  started = true;
1390
- newTooltip.velocity('stop');
1460
+ tooltipEl.velocity('stop');
1391
1461
  backdrop.velocity('stop');
1392
- newTooltip.css({ display: 'block', left: '0px', top: '0px' });
1393
-
1394
- // Set Tooltip text
1395
- newTooltip.children('span').text(origin.attr('data-tooltip'));
1462
+ tooltipEl.css({ display: 'block', left: '0px', top: '0px' });
1396
1463
 
1397
1464
  // Tooltip positioning
1398
1465
  var originWidth = origin.outerWidth();
1399
1466
  var originHeight = origin.outerHeight();
1400
- var tooltipPosition = origin.attr('data-position');
1401
- var tooltipHeight = newTooltip.outerHeight();
1402
- var tooltipWidth = newTooltip.outerWidth();
1467
+
1468
+ var tooltipHeight = tooltipEl.outerHeight();
1469
+ var tooltipWidth = tooltipEl.outerWidth();
1403
1470
  var tooltipVerticalMovement = '0px';
1404
1471
  var tooltipHorizontalMovement = '0px';
1405
- var scale_factor = 8;
1472
+ var scaleXFactor = 8;
1473
+ var scaleYFactor = 8;
1406
1474
  var targetTop, targetLeft, newCoordinates;
1407
1475
 
1408
1476
  if (tooltipPosition === "top") {
@@ -1413,8 +1481,10 @@ $(document).ready(function(){
1413
1481
 
1414
1482
  tooltipVerticalMovement = '-10px';
1415
1483
  backdrop.css({
1484
+ bottom: 0,
1485
+ left: 0,
1416
1486
  borderRadius: '14px 14px 0 0',
1417
- transformOrigin: '50% 90%',
1487
+ transformOrigin: '50% 100%',
1418
1488
  marginTop: tooltipHeight,
1419
1489
  marginLeft: (tooltipWidth/2) - (backdrop.width()/2)
1420
1490
  });
@@ -1427,6 +1497,8 @@ $(document).ready(function(){
1427
1497
 
1428
1498
  tooltipHorizontalMovement = '-10px';
1429
1499
  backdrop.css({
1500
+ top: '-7px',
1501
+ right: 0,
1430
1502
  width: '14px',
1431
1503
  height: '14px',
1432
1504
  borderRadius: '14px 0 0 14px',
@@ -1443,6 +1515,8 @@ $(document).ready(function(){
1443
1515
 
1444
1516
  tooltipHorizontalMovement = '+10px';
1445
1517
  backdrop.css({
1518
+ top: '-7px',
1519
+ left: 0,
1446
1520
  width: '14px',
1447
1521
  height: '14px',
1448
1522
  borderRadius: '0 14px 14px 0',
@@ -1458,35 +1532,30 @@ $(document).ready(function(){
1458
1532
  newCoordinates = repositionWithinScreen(targetLeft, targetTop, tooltipWidth, tooltipHeight);
1459
1533
  tooltipVerticalMovement = '+10px';
1460
1534
  backdrop.css({
1535
+ top: 0,
1536
+ left: 0,
1461
1537
  marginLeft: (tooltipWidth/2) - (backdrop.width()/2)
1462
1538
  });
1463
1539
  }
1464
1540
 
1465
1541
  // Set tooptip css placement
1466
- newTooltip.css({
1542
+ tooltipEl.css({
1467
1543
  top: newCoordinates.y,
1468
1544
  left: newCoordinates.x
1469
1545
  });
1470
1546
 
1471
1547
  // Calculate Scale to fill
1472
- scale_factor = tooltipWidth / 8;
1473
- if (scale_factor < 8) {
1474
- scale_factor = 8;
1475
- }
1476
- if (tooltipPosition === "right" || tooltipPosition === "left") {
1477
- scale_factor = tooltipWidth / 10;
1478
- if (scale_factor < 6)
1479
- scale_factor = 6;
1480
- }
1548
+ scaleXFactor = Math.SQRT2 * tooltipWidth / parseInt(backdrop.css('width'));
1549
+ scaleYFactor = Math.SQRT2 * tooltipHeight / parseInt(backdrop.css('height'));
1481
1550
 
1482
- newTooltip.velocity({ marginTop: tooltipVerticalMovement, marginLeft: tooltipHorizontalMovement}, { duration: 350, queue: false })
1551
+ tooltipEl.velocity({ marginTop: tooltipVerticalMovement, marginLeft: tooltipHorizontalMovement}, { duration: 350, queue: false })
1483
1552
  .velocity({opacity: 1}, {duration: 300, delay: 50, queue: false});
1484
1553
  backdrop.css({ display: 'block' })
1485
1554
  .velocity({opacity:1},{duration: 55, delay: 0, queue: false})
1486
- .velocity({scale: scale_factor}, {duration: 300, delay: 0, queue: false, easing: 'easeInOutQuad'});
1487
-
1555
+ .velocity({scaleX: scaleXFactor, scaleY: scaleYFactor}, {duration: 300, delay: 0, queue: false, easing: 'easeInOutQuad'});
1556
+ };
1488
1557
 
1489
- }, tooltip_delay); // End Interval
1558
+ timeoutRef = setTimeout(showTooltip, tooltipDelay); // End Interval
1490
1559
 
1491
1560
  // Mouse Out
1492
1561
  },
@@ -1497,15 +1566,15 @@ $(document).ready(function(){
1497
1566
 
1498
1567
  // Animate back
1499
1568
  setTimeout(function() {
1500
- if (started != true) {
1501
- newTooltip.velocity({
1569
+ if (started !== true) {
1570
+ tooltipEl.velocity({
1502
1571
  opacity: 0, marginTop: 0, marginLeft: 0}, { duration: 225, queue: false});
1503
- backdrop.velocity({opacity: 0, scale: 1}, {
1572
+ backdrop.velocity({opacity: 0, scaleX: 1, scaleY: 1}, {
1504
1573
  duration:225,
1505
1574
  queue: false,
1506
1575
  complete: function(){
1507
1576
  backdrop.css('display', 'none');
1508
- newTooltip.css('display', 'none');
1577
+ tooltipEl.css('display', 'none');
1509
1578
  started = false;}
1510
1579
  });
1511
1580
  }
@@ -1516,7 +1585,7 @@ $(document).ready(function(){
1516
1585
  };
1517
1586
 
1518
1587
  var repositionWithinScreen = function(x, y, width, height) {
1519
- var newX = x
1588
+ var newX = x;
1520
1589
  var newY = y;
1521
1590
 
1522
1591
  if (newX < 0) {
@@ -2017,7 +2086,7 @@ $(document).ready(function(){
2017
2086
  var methods = {
2018
2087
  init : function(options) {
2019
2088
  var defaults = {
2020
- menuWidth: 240,
2089
+ menuWidth: 300,
2021
2090
  edge: 'left',
2022
2091
  closeOnClick: false
2023
2092
  };
@@ -2028,7 +2097,7 @@ $(document).ready(function(){
2028
2097
  var menu_id = $("#"+ $this.attr('data-activates'));
2029
2098
 
2030
2099
  // Set to width
2031
- if (options.menuWidth != 240) {
2100
+ if (options.menuWidth != 300) {
2032
2101
  menu_id.css('width', options.menuWidth);
2033
2102
  }
2034
2103
 
@@ -2058,7 +2127,7 @@ $(document).ready(function(){
2058
2127
  $(window).resize( function() {
2059
2128
  if (window.innerWidth > 992) {
2060
2129
  // Close menu if window is resized bigger than 992 and user has fixed sidenav
2061
- if ($('#sidenav-overlay').length != 0 && menuOut) {
2130
+ if ($('#sidenav-overlay').length !== 0 && menuOut) {
2062
2131
  removeMenu(true);
2063
2132
  }
2064
2133
  else {
@@ -2144,7 +2213,9 @@ $(document).ready(function(){
2144
2213
  var menuOut = false;
2145
2214
 
2146
2215
  dragTarget.on('click', function(){
2147
- removeMenu();
2216
+ if (menuOut) {
2217
+ removeMenu();
2218
+ }
2148
2219
  });
2149
2220
 
2150
2221
  dragTarget.hammer({
@@ -2234,13 +2305,14 @@ $(document).ready(function(){
2234
2305
  if (options.edge === 'left') {
2235
2306
  // If velocityX <= 0.3 then the user is flinging the menu closed so ignore menuOut
2236
2307
  if ((menuOut && velocityX <= 0.3) || velocityX < -0.5) {
2237
- if (leftPos != 0) {
2308
+ // Return menu to open
2309
+ if (leftPos !== 0) {
2238
2310
  menu_id.velocity({'translateX': [0, leftPos]}, {duration: 300, queue: false, easing: 'easeOutQuad'});
2239
2311
  }
2240
2312
 
2241
- // menu_id.css({'translateX': 0});
2242
2313
  $('#sidenav-overlay').velocity({opacity: 1 }, {duration: 50, queue: false, easing: 'easeOutQuad'});
2243
2314
  dragTarget.css({width: '50%', right: 0, left: ''});
2315
+ menuOut = true;
2244
2316
  }
2245
2317
  else if (!menuOut || velocityX > 0.3) {
2246
2318
  // Enable Scrolling
@@ -2259,9 +2331,14 @@ $(document).ready(function(){
2259
2331
  }
2260
2332
  else {
2261
2333
  if ((menuOut && velocityX >= -0.3) || velocityX > 0.5) {
2262
- menu_id.velocity({'translateX': [0, rightPos]}, {duration: 300, queue: false, easing: 'easeOutQuad'});
2334
+ // Return menu to open
2335
+ if (rightPos !== 0) {
2336
+ menu_id.velocity({'translateX': [0, rightPos]}, {duration: 300, queue: false, easing: 'easeOutQuad'});
2337
+ }
2338
+
2263
2339
  $('#sidenav-overlay').velocity({opacity: 1 }, {duration: 50, queue: false, easing: 'easeOutQuad'});
2264
2340
  dragTarget.css({width: '50%', right: '', left: 0});
2341
+ menuOut = true;
2265
2342
  }
2266
2343
  else if (!menuOut || velocityX < -0.3) {
2267
2344
  // Enable Scrolling
@@ -2528,6 +2605,12 @@ $(document).ready(function(){
2528
2605
  * @returns {jQuery}
2529
2606
  */
2530
2607
  $.scrollSpy = function(selector, options) {
2608
+ var defaults = {
2609
+ throttle: 100,
2610
+ scrollOffset: 200 // offset - 200 allows elements near bottom of page to scroll
2611
+ };
2612
+ options = $.extend(defaults, options);
2613
+
2531
2614
  var visible = [];
2532
2615
  selector = $(selector);
2533
2616
  selector.each(function(i, element) {
@@ -2537,16 +2620,9 @@ $(document).ready(function(){
2537
2620
  $('a[href="#' + $(element).attr('id') + '"]').click(function(e) {
2538
2621
  e.preventDefault();
2539
2622
  var offset = $(this.hash).offset().top + 1;
2540
-
2541
- // offset - 200 allows elements near bottom of page to scroll
2542
-
2543
- $('html, body').animate({ scrollTop: offset - 200 }, {duration: 400, queue: false, easing: 'easeOutCubic'});
2544
-
2623
+ $('html, body').animate({ scrollTop: offset - options.scrollOffset }, {duration: 400, queue: false, easing: 'easeOutCubic'});
2545
2624
  });
2546
2625
  });
2547
- options = options || {
2548
- throttle: 100
2549
- };
2550
2626
 
2551
2627
  offset.top = options.offsetTop || 0;
2552
2628
  offset.right = options.offsetRight || 0;
@@ -2648,10 +2724,10 @@ $(document).ready(function(){
2648
2724
  var input_selector = 'input[type=text], input[type=password], input[type=email], input[type=url], input[type=tel], input[type=number], input[type=search], textarea';
2649
2725
  $(input_selector).each(function(index, element) {
2650
2726
  if ($(element).val().length > 0 || element.autofocus ||$(this).attr('placeholder') !== undefined || $(element)[0].validity.badInput === true) {
2651
- $(this).siblings('label, i').addClass('active');
2727
+ $(this).siblings('label').addClass('active');
2652
2728
  }
2653
2729
  else {
2654
- $(this).siblings('label, i').removeClass('active');
2730
+ $(this).siblings('label').removeClass('active');
2655
2731
  }
2656
2732
  });
2657
2733
  };
@@ -2679,7 +2755,7 @@ $(document).ready(function(){
2679
2755
  formReset.find(input_selector).removeClass('valid').removeClass('invalid');
2680
2756
  formReset.find(input_selector).each(function () {
2681
2757
  if ($(this).attr('value') === '') {
2682
- $(this).siblings('label, i').removeClass('active');
2758
+ $(this).siblings('label').removeClass('active');
2683
2759
  }
2684
2760
  });
2685
2761
 
@@ -2693,18 +2769,19 @@ $(document).ready(function(){
2693
2769
 
2694
2770
  // Add active when element has focus
2695
2771
  $(document).on('focus', input_selector, function () {
2696
- $(this).siblings('label, i').addClass('active');
2772
+ $(this).siblings('label, .prefix').addClass('active');
2697
2773
  });
2698
2774
 
2699
2775
  $(document).on('blur', input_selector, function () {
2700
2776
  var $inputElement = $(this);
2777
+ var selector = ".prefix";
2778
+
2701
2779
  if ($inputElement.val().length === 0 && $inputElement[0].validity.badInput !== true && $inputElement.attr('placeholder') === undefined) {
2702
- $inputElement.siblings('label, i').removeClass('active');
2780
+ selector += ", label";
2703
2781
  }
2704
2782
 
2705
- if ($inputElement.val().length === 0 && $inputElement[0].validity.badInput !== true && $inputElement.attr('placeholder') !== undefined) {
2706
- $inputElement.siblings('i').removeClass('active');
2707
- }
2783
+ $inputElement.siblings(selector).removeClass('active');
2784
+
2708
2785
  validate_field($inputElement);
2709
2786
  });
2710
2787
 
@@ -2742,7 +2819,7 @@ $(document).ready(function(){
2742
2819
  $(this).addClass('tabbed');
2743
2820
  var $this = $(this);
2744
2821
  $this.one('blur', function(e) {
2745
-
2822
+
2746
2823
  $(this).removeClass('tabbed');
2747
2824
  });
2748
2825
  return;
@@ -2762,9 +2839,11 @@ $(document).ready(function(){
2762
2839
 
2763
2840
  var fontFamily = $textarea.css('font-family');
2764
2841
  var fontSize = $textarea.css('font-size');
2842
+ var lineHeight = $textarea.css('line-height');
2765
2843
 
2766
2844
  if (fontSize) { hiddenDiv.css('font-size', fontSize); }
2767
2845
  if (fontFamily) { hiddenDiv.css('font-family', fontFamily); }
2846
+ if (lineHeight) { hiddenDiv.css('line-height', lineHeight); }
2768
2847
 
2769
2848
  if ($textarea.attr('wrap') === "off") {
2770
2849
  hiddenDiv.css('overflow-wrap', "normal")
@@ -2913,6 +2992,88 @@ $(document).ready(function(){
2913
2992
  thumb.removeClass('active');
2914
2993
  }
2915
2994
  });
2995
+
2996
+ /**************************
2997
+ * Auto complete plugin *
2998
+ *************************/
2999
+ $.fn.autocomplete = function (options) {
3000
+ // Defaults
3001
+ var defaults = {
3002
+ data: {}
3003
+ };
3004
+
3005
+ options = $.extend(defaults, options);
3006
+
3007
+ return this.each(function() {
3008
+ var $input = $(this);
3009
+ var data = options.data,
3010
+ $inputDiv = $input.closest('.input-field'); // Div to append on
3011
+
3012
+ // Check if data isn't empty
3013
+ if (!$.isEmptyObject(data)) {
3014
+ // Create autocomplete element
3015
+ var $autocomplete = $('<ul class="autocomplete-content dropdown-content"></ul>');
3016
+
3017
+ // Append autocomplete element
3018
+ if ($inputDiv.length) {
3019
+ $inputDiv.append($autocomplete); // Set ul in body
3020
+ } else {
3021
+ $input.after($autocomplete);
3022
+ }
3023
+
3024
+ var highlight = function(string, $el) {
3025
+ var img = $el.find('img');
3026
+ var matchStart = $el.text().toLowerCase().indexOf("" + string.toLowerCase() + ""),
3027
+ matchEnd = matchStart + string.length - 1,
3028
+ beforeMatch = $el.text().slice(0, matchStart),
3029
+ matchText = $el.text().slice(matchStart, matchEnd + 1),
3030
+ afterMatch = $el.text().slice(matchEnd + 1);
3031
+ $el.html("<span>" + beforeMatch + "<span class='highlight'>" + matchText + "</span>" + afterMatch + "</span>");
3032
+ if (img.length) {
3033
+ $el.prepend(img);
3034
+ }
3035
+ };
3036
+
3037
+ // Perform search
3038
+ $input.on('keyup', function (e) {
3039
+ // Capture Enter
3040
+ if (e.which === 13) {
3041
+ $autocomplete.find('li').first().click();
3042
+ return;
3043
+ }
3044
+
3045
+ var val = $input.val().toLowerCase();
3046
+ $autocomplete.empty();
3047
+
3048
+ // Check if the input isn't empty
3049
+ if (val !== '') {
3050
+ for(var key in data) {
3051
+ if (data.hasOwnProperty(key) &&
3052
+ key.toLowerCase().indexOf(val) !== -1 &&
3053
+ key.toLowerCase() !== val) {
3054
+ var autocompleteOption = $('<li></li>');
3055
+ if(!!data[key]) {
3056
+ autocompleteOption.append('<img src="'+ data[key] +'" class="right circle"><span>'+ key +'</span>');
3057
+ } else {
3058
+ autocompleteOption.append('<span>'+ key +'</span>');
3059
+ }
3060
+ $autocomplete.append(autocompleteOption);
3061
+
3062
+ highlight(val, autocompleteOption);
3063
+ }
3064
+ }
3065
+ }
3066
+ });
3067
+
3068
+ // Set input value
3069
+ $autocomplete.on('click', 'li', function () {
3070
+ $input.val($(this).text().trim());
3071
+ $autocomplete.empty();
3072
+ });
3073
+ }
3074
+ });
3075
+ };
3076
+
2916
3077
  }); // End of $(document).ready
2917
3078
 
2918
3079
  /*******************
@@ -3255,7 +3416,7 @@ $(document).ready(function(){
3255
3416
  // which slide is active and its associated content
3256
3417
  var $this = $(this);
3257
3418
  var $slider = $this.find('ul.slides').first();
3258
- var $slides = $slider.find('li');
3419
+ var $slides = $slider.find('> li');
3259
3420
  var $active_index = $slider.find('.active').index();
3260
3421
  var $active, $indicators, $interval;
3261
3422
  if ($active_index != -1) { $active = $slides.eq($active_index); }
@@ -3579,30 +3740,298 @@ $(document).ready(function(){
3579
3740
  $(this).find('.card-reveal').css({ display: 'block'}).velocity("stop", false).velocity({translateY: '-100%'}, {duration: 300, queue: false, easing: 'easeInOutQuad'});
3580
3741
  }
3581
3742
  }
3582
-
3583
- $('.card-reveal').closest('.card').css('overflow', 'hidden');
3584
-
3585
3743
  });
3586
3744
 
3587
3745
  });
3588
3746
  }( jQuery ));;(function ($) {
3589
- $(document).ready(function() {
3747
+ var chipsHandleEvents = false;
3748
+ var materialChipsDefaults = {
3749
+ data: [],
3750
+ placeholder: '',
3751
+ secondaryPlaceholder: '',
3752
+ };
3590
3753
 
3591
- $(document).on('click.chip', '.chip .material-icons', function (e) {
3592
- $(this).parent().remove();
3754
+ $(document).ready(function(){
3755
+ // Handle removal of static chips.
3756
+ $(document).on('click', '.chip .close', function(e){
3757
+ var $chips = $(this).closest('.chips');
3758
+ if ($chips.data('initialized')) {
3759
+ return;
3760
+ }
3761
+ $(this).closest('.chip').remove();
3593
3762
  });
3594
-
3595
3763
  });
3764
+
3765
+ $.fn.material_chip = function (options) {
3766
+ var self = this;
3767
+ this.$el = $(this);
3768
+ this.$document = $(document);
3769
+ this.SELS = {
3770
+ CHIPS: '.chips',
3771
+ CHIP: '.chip',
3772
+ INPUT: 'input',
3773
+ DELETE: '.material-icons',
3774
+ SELECTED_CHIP: '.selected',
3775
+ };
3776
+
3777
+ if ('data' === options) {
3778
+ return this.$el.data('chips');
3779
+ }
3780
+
3781
+ if ('options' === options) {
3782
+ return this.$el.data('options');
3783
+ }
3784
+
3785
+ this.$el.data('options', $.extend({}, materialChipsDefaults, options));
3786
+
3787
+ // Initialize
3788
+ this.init = function() {
3789
+ var i = 0;
3790
+ var chips;
3791
+ self.$el.each(function(){
3792
+ var $chips = $(this);
3793
+ if ($chips.data('initialized')) {
3794
+ // Prevent double initialization.
3795
+ return;
3796
+ }
3797
+ var options = $chips.data('options');
3798
+ if (!options.data || !options.data instanceof Array) {
3799
+ options.data = [];
3800
+ }
3801
+ $chips.data('chips', options.data);
3802
+ $chips.data('index', i);
3803
+ $chips.data('initialized', true);
3804
+
3805
+ if (!$chips.hasClass(self.SELS.CHIPS)) {
3806
+ $chips.addClass('chips');
3807
+ }
3808
+
3809
+ self.chips($chips);
3810
+ i++;
3811
+ });
3812
+ };
3813
+
3814
+ this.handleEvents = function(){
3815
+ var SELS = self.SELS;
3816
+
3817
+ self.$document.on('click', SELS.CHIPS, function(e){
3818
+ $(e.target).find(SELS.INPUT).focus();
3819
+ });
3820
+
3821
+ self.$document.on('click', SELS.CHIP, function(e){
3822
+ $(SELS.CHIP).removeClass('selected');
3823
+ $(this).toggleClass('selected');
3824
+ });
3825
+
3826
+ self.$document.on('keydown', function(e){
3827
+ if ($(e.target).is('input, textarea')) {
3828
+ return;
3829
+ }
3830
+
3831
+ // delete
3832
+ var $chip = self.$document.find(SELS.CHIP + SELS.SELECTED_CHIP);
3833
+ var $chips = $chip.closest(SELS.CHIPS);
3834
+ var length = $chip.siblings(SELS.CHIP).length;
3835
+ var index;
3836
+
3837
+ if (!$chip.length) {
3838
+ return;
3839
+ }
3840
+
3841
+ if (e.which === 8 || e.which === 46) {
3842
+ e.preventDefault();
3843
+ var chipsIndex = $chips.data('index');
3844
+
3845
+ index = $chip.index();
3846
+ self.deleteChip(chipsIndex, index, $chips);
3847
+
3848
+ var selectIndex = null;
3849
+ if ((index + 1) < length) {
3850
+ selectIndex = index;
3851
+ } else if (index === length || (index + 1) === length) {
3852
+ selectIndex = length - 1;
3853
+ }
3854
+
3855
+ if (selectIndex < 0) selectIndex = null;
3856
+
3857
+ if (null !== selectIndex) {
3858
+ self.selectChip(chipsIndex, selectIndex, $chips);
3859
+ }
3860
+ if (!length) $chips.find('input').focus();
3861
+
3862
+ // left
3863
+ } else if (e.which === 37) {
3864
+ index = $chip.index() - 1;
3865
+ if (index < 0) {
3866
+ return;
3867
+ }
3868
+ $(SELS.CHIP).removeClass('selected');
3869
+ self.selectChip($chips.data('index'), index, $chips);
3870
+
3871
+ // right
3872
+ } else if (e.which === 39) {
3873
+ index = $chip.index() + 1;
3874
+ $(SELS.CHIP).removeClass('selected');
3875
+ if (index > length) {
3876
+ $chips.find('input').focus();
3877
+ return;
3878
+ }
3879
+ self.selectChip($chips.data('index'), index, $chips);
3880
+ }
3881
+ });
3882
+
3883
+ self.$document.on('focusin', SELS.CHIPS + ' ' + SELS.INPUT, function(e){
3884
+ $(e.target).closest(SELS.CHIPS).addClass('focus');
3885
+ $(SELS.CHIP).removeClass('selected');
3886
+ });
3887
+
3888
+ self.$document.on('focusout', SELS.CHIPS + ' ' + SELS.INPUT, function(e){
3889
+ $(e.target).closest(SELS.CHIPS).removeClass('focus');
3890
+ });
3891
+
3892
+ self.$document.on('keydown', SELS.CHIPS + ' ' + SELS.INPUT, function(e){
3893
+ var $target = $(e.target);
3894
+ var $chips = $target.closest(SELS.CHIPS);
3895
+ var chipsIndex = $chips.data('index');
3896
+ var chipsLength = $chips.children(SELS.CHIP).length;
3897
+
3898
+ // enter
3899
+ if (13 === e.which) {
3900
+ e.preventDefault();
3901
+ self.addChip(chipsIndex, {tag: $target.val()}, $chips);
3902
+ $target.val('');
3903
+ return;
3904
+ }
3905
+
3906
+ // delete or left
3907
+ if ((8 === e.keyCode || 37 === e.keyCode) && '' === $target.val() && chipsLength) {
3908
+ self.selectChip(chipsIndex, chipsLength - 1, $chips);
3909
+ $target.blur();
3910
+ return;
3911
+ }
3912
+ });
3913
+
3914
+ self.$document.on('click', SELS.CHIPS + ' ' + SELS.DELETE, function(e) {
3915
+ var $target = $(e.target);
3916
+ var $chips = $target.closest(SELS.CHIPS);
3917
+ var $chip = $target.closest(SELS.CHIP);
3918
+ e.stopPropagation();
3919
+ self.deleteChip(
3920
+ $chips.data('index'),
3921
+ $chip.index(),
3922
+ $chips
3923
+ );
3924
+ $chips.find('input').focus();
3925
+ });
3926
+ };
3927
+
3928
+ this.chips = function($chips) {
3929
+ var html = '';
3930
+ var options = $chips.data('options');
3931
+ $chips.data('chips').forEach(function(elem){
3932
+ html += self.renderChip(elem);
3933
+ });
3934
+ html += '<input class="input" placeholder="">';
3935
+ $chips.html(html);
3936
+ self.setPlaceholder($chips);
3937
+ };
3938
+
3939
+ this.renderChip = function(elem) {
3940
+ if (!elem.tag) return;
3941
+
3942
+ var html = '<div class="chip">' + elem.tag;
3943
+ if (elem.image) {
3944
+ html += ' <img src="' + elem.image + '"> ';
3945
+ }
3946
+ html += '<i class="material-icons close">close</i>';
3947
+ html += '</div>';
3948
+ return html;
3949
+ };
3950
+
3951
+ this.setPlaceholder = function($chips) {
3952
+ var options = $chips.data('options');
3953
+ if ($chips.data('chips').length && options.placeholder) {
3954
+ $chips.find('input').prop('placeholder', options.placeholder);
3955
+ } else if (!$chips.data('chips').length && options.secondaryPlaceholder) {
3956
+ $chips.find('input').prop('placeholder', options.secondaryPlaceholder);
3957
+ }
3958
+ };
3959
+
3960
+ this.isValid = function($chips, elem) {
3961
+ var chips = $chips.data('chips');
3962
+ var exists = false;
3963
+ for (var i=0; i < chips.length; i++) {
3964
+ if (chips[i].tag === elem.tag) {
3965
+ exists = true;
3966
+ return;
3967
+ }
3968
+ }
3969
+ return '' !== elem.tag && !exists;
3970
+ };
3971
+
3972
+ this.addChip = function(chipsIndex, elem, $chips) {
3973
+ if (!self.isValid($chips, elem)) {
3974
+ return;
3975
+ }
3976
+ var options = $chips.data('options');
3977
+ var chipHtml = self.renderChip(elem);
3978
+ $chips.data('chips').push(elem);
3979
+ $(chipHtml).insertBefore($chips.find('input'));
3980
+ $chips.trigger('chip.add', elem);
3981
+ self.setPlaceholder($chips);
3982
+ };
3983
+
3984
+ this.deleteChip = function(chipsIndex, chipIndex, $chips) {
3985
+ var chip = $chips.data('chips')[chipIndex];
3986
+ $chips.find('.chip').eq(chipIndex).remove();
3987
+ $chips.data('chips').splice(chipIndex, 1);
3988
+ $chips.trigger('chip.delete', chip);
3989
+ self.setPlaceholder($chips);
3990
+ };
3991
+
3992
+ this.selectChip = function(chipsIndex, chipIndex, $chips) {
3993
+ var $chip = $chips.find('.chip').eq(chipIndex);
3994
+ if ($chip && false === $chip.hasClass('selected')) {
3995
+ $chip.addClass('selected');
3996
+ $chips.trigger('chip.select', $chips.data('chips')[chipIndex]);
3997
+ }
3998
+ };
3999
+
4000
+ this.getChipsElement = function(index, $chips) {
4001
+ return $chips.eq(index);
4002
+ };
4003
+
4004
+ // init
4005
+ this.init();
4006
+
4007
+ if (!chipsHandleEvents) {
4008
+ this.handleEvents();
4009
+ chipsHandleEvents = true;
4010
+ }
4011
+ };
3596
4012
  }( jQuery ));;(function ($) {
3597
4013
  $.fn.pushpin = function (options) {
3598
-
4014
+ // Defaults
3599
4015
  var defaults = {
3600
4016
  top: 0,
3601
4017
  bottom: Infinity,
3602
4018
  offset: 0
3603
4019
  };
4020
+
4021
+ // Remove pushpin event and classes
4022
+ if (options === "remove") {
4023
+ this.each(function () {
4024
+ if (id = $(this).data('pushpin-id')) {
4025
+ $(window).off('scroll.' + id);
4026
+ $(this).removeData('pushpin-id').removeClass('pin-top pinned pin-bottom').removeAttr('style');
4027
+ }
4028
+ });
4029
+ return false;
4030
+ }
4031
+
3604
4032
  options = $.extend(defaults, options);
3605
4033
 
4034
+
3606
4035
  $index = 0;
3607
4036
  return this.each(function() {
3608
4037
  var $uniqueId = Materialize.guid(),
@@ -3640,6 +4069,7 @@ $(document).ready(function(){
3640
4069
  });
3641
4070
  }
3642
4071
 
4072
+ $(this).data('pushpin-id', $uniqueId);
3643
4073
  updateElements($this, $(window).scrollTop());
3644
4074
  $(window).on('scroll.' + $uniqueId, function () {
3645
4075
  var $scrolled = $(window).scrollTop() + options.offset;
@@ -3742,8 +4172,15 @@ $(document).ready(function(){
3742
4172
  }( jQuery ));
3743
4173
  ;(function ($) {
3744
4174
  // Image transition function
3745
- Materialize.fadeInImage = function(selector){
3746
- var element = $(selector);
4175
+ Materialize.fadeInImage = function(selectorOrEl) {
4176
+ var element;
4177
+ if (typeof(selectorOrEl) === 'string') {
4178
+ element = $(selectorOrEl);
4179
+ } else if (typeof(selectorOrEl) === 'object') {
4180
+ element = selectorOrEl;
4181
+ } else {
4182
+ return;
4183
+ }
3747
4184
  element.css({opacity: 0});
3748
4185
  $(element).velocity({opacity: 1}, {
3749
4186
  duration: 650,
@@ -3773,13 +4210,21 @@ $(document).ready(function(){
3773
4210
  };
3774
4211
 
3775
4212
  // Horizontal staggered list
3776
- Materialize.showStaggeredList = function(selector) {
4213
+ Materialize.showStaggeredList = function(selectorOrEl) {
4214
+ var element;
4215
+ if (typeof(selectorOrEl) === 'string') {
4216
+ element = $(selectorOrEl);
4217
+ } else if (typeof(selectorOrEl) === 'object') {
4218
+ element = selectorOrEl;
4219
+ } else {
4220
+ return;
4221
+ }
3777
4222
  var time = 0;
3778
- $(selector).find('li').velocity(
4223
+ element.find('li').velocity(
3779
4224
  { translateX: "-100px"},
3780
4225
  { duration: 0 });
3781
4226
 
3782
- $(selector).find('li').each(function() {
4227
+ element.find('li').each(function() {
3783
4228
  $(this).velocity(
3784
4229
  { opacity: "1", translateX: "0"},
3785
4230
  { duration: 800, delay: time, easing: [60, 10] });
@@ -3927,10 +4372,10 @@ $(document).ready(function(){
3927
4372
  if (windowScroll > (elementOffset + offset)) {
3928
4373
  if (value.done !== true) {
3929
4374
  if (typeof(callback) === 'function') {
3930
- callback.call(this);
4375
+ callback.call(this, currentElement);
3931
4376
  } else if (typeof(callback) === 'string') {
3932
4377
  var callbackFunc = new Function(callback);
3933
- callbackFunc();
4378
+ callbackFunc(currentElement);
3934
4379
  }
3935
4380
  value.done = true;
3936
4381
  }
@@ -6577,7 +7022,9 @@ Picker.extend( 'pickadate', DatePicker )
6577
7022
  dist: -100, // zoom scale TODO: make this more intuitive as an option
6578
7023
  shift: 0, // spacing for center image
6579
7024
  padding: 0, // Padding between non center items
6580
- full_width: false // Change to full width styles
7025
+ full_width: false, // Change to full width styles
7026
+ indicators: false, // Toggle indicators
7027
+ no_wrap: false // Don't wrap around and cycle through items.
6581
7028
  };
6582
7029
  options = $.extend(defaults, options);
6583
7030
 
@@ -6586,22 +7033,41 @@ Picker.extend( 'pickadate', DatePicker )
6586
7033
  var images, offset, center, pressed, dim, count,
6587
7034
  reference, referenceY, amplitude, target, velocity,
6588
7035
  xform, frame, timestamp, ticker, dragged, vertical_dragged;
7036
+ var $indicators = $('<ul class="indicators"></ul>');
7037
+
6589
7038
 
6590
7039
  // Initialize
6591
7040
  var view = $(this);
7041
+ var showIndicators = view.attr('data-indicators') || options.indicators;
7042
+
6592
7043
  // Don't double initialize.
6593
7044
  if (view.hasClass('initialized')) {
7045
+ // Redraw carousel.
7046
+ $(this).trigger('carouselNext', [0.000001]);
6594
7047
  return true;
6595
7048
  }
6596
7049
 
7050
+
6597
7051
  // Options
6598
7052
  if (options.full_width) {
6599
7053
  options.dist = 0;
6600
- imageHeight = view.find('.carousel-item img').first().load(function(){
6601
- view.css('height', $(this).height());
6602
- });
7054
+ var firstImage = view.find('.carousel-item img').first();
7055
+ if (firstImage.length) {
7056
+ imageHeight = firstImage.load(function(){
7057
+ view.css('height', $(this).height());
7058
+ });
7059
+ } else {
7060
+ imageHeight = view.find('.carousel-item').first().height();
7061
+ view.css('height', imageHeight);
7062
+ }
7063
+
7064
+ // Offset fixed items when indicators.
7065
+ if (showIndicators) {
7066
+ view.find('.carousel-fixed-item').addClass('with-indicators');
7067
+ }
6603
7068
  }
6604
7069
 
7070
+
6605
7071
  view.addClass('initialized');
6606
7072
  pressed = false;
6607
7073
  offset = target = 0;
@@ -6609,10 +7075,28 @@ Picker.extend( 'pickadate', DatePicker )
6609
7075
  item_width = view.find('.carousel-item').first().innerWidth();
6610
7076
  dim = item_width * 2 + options.padding;
6611
7077
 
6612
- view.find('.carousel-item').each(function () {
7078
+ view.find('.carousel-item').each(function (i) {
6613
7079
  images.push($(this)[0]);
7080
+ if (showIndicators) {
7081
+ var $indicator = $('<li class="indicator-item"></li>');
7082
+
7083
+ // Add active to first by default.
7084
+ if (i === 0) {
7085
+ $indicator.addClass('active');
7086
+ }
7087
+
7088
+ // Handle clicks on indicators.
7089
+ $indicator.click(function () {
7090
+ var index = $(this).index();
7091
+ cycleTo(index);
7092
+ });
7093
+ $indicators.append($indicator);
7094
+ }
6614
7095
  });
6615
7096
 
7097
+ if (showIndicators) {
7098
+ view.append($indicators);
7099
+ }
6616
7100
  count = images.length;
6617
7101
 
6618
7102
 
@@ -6625,6 +7109,7 @@ Picker.extend( 'pickadate', DatePicker )
6625
7109
  view[0].addEventListener('mousedown', tap);
6626
7110
  view[0].addEventListener('mousemove', drag);
6627
7111
  view[0].addEventListener('mouseup', release);
7112
+ view[0].addEventListener('mouseleave', release);
6628
7113
  view[0].addEventListener('click', click);
6629
7114
  }
6630
7115
 
@@ -6660,6 +7145,7 @@ Picker.extend( 'pickadate', DatePicker )
6660
7145
  delta = offset - center * dim;
6661
7146
  dir = (delta < 0) ? 1 : -1;
6662
7147
  tween = -dir * delta * 2 / dim;
7148
+ half = count >> 1;
6663
7149
 
6664
7150
  if (!options.full_width) {
6665
7151
  alignment = 'translateX(' + (view[0].clientWidth - item_width) / 2 + 'px) ';
@@ -6668,17 +7154,30 @@ Picker.extend( 'pickadate', DatePicker )
6668
7154
  alignment = 'translateX(0)';
6669
7155
  }
6670
7156
 
7157
+ // Set indicator active
7158
+ if (showIndicators) {
7159
+ var diff = (center % count);
7160
+ var activeIndicator = $indicators.find('.indicator-item.active');
7161
+ if (activeIndicator.index() !== diff) {
7162
+ activeIndicator.removeClass('active');
7163
+ $indicators.find('.indicator-item').eq(diff).addClass('active');
7164
+ }
7165
+ }
7166
+
6671
7167
  // center
6672
- el = images[wrap(center)];
6673
- el.style[xform] = alignment +
6674
- ' translateX(' + (-delta / 2) + 'px)' +
6675
- ' translateX(' + (dir * options.shift * tween * i) + 'px)' +
6676
- ' translateZ(' + (options.dist * tween) + 'px)';
6677
- el.style.zIndex = 0;
6678
- if (options.full_width) { tweenedOpacity = 1; }
6679
- else { tweenedOpacity = 1 - 0.2 * tween; }
6680
- el.style.opacity = tweenedOpacity;
6681
- half = count >> 1;
7168
+ // Don't show wrapped items.
7169
+ if (!options.no_wrap || (center >= 0 && center < count)) {
7170
+ el = images[wrap(center)];
7171
+ el.style[xform] = alignment +
7172
+ ' translateX(' + (-delta / 2) + 'px)' +
7173
+ ' translateX(' + (dir * options.shift * tween * i) + 'px)' +
7174
+ ' translateZ(' + (options.dist * tween) + 'px)';
7175
+ el.style.zIndex = 0;
7176
+ if (options.full_width) { tweenedOpacity = 1; }
7177
+ else { tweenedOpacity = 1 - 0.2 * tween; }
7178
+ el.style.opacity = tweenedOpacity;
7179
+ el.style.display = 'block';
7180
+ }
6682
7181
 
6683
7182
  for (i = 1; i <= half; ++i) {
6684
7183
  // right side
@@ -6689,12 +7188,16 @@ Picker.extend( 'pickadate', DatePicker )
6689
7188
  zTranslation = options.dist * (i * 2 + tween * dir);
6690
7189
  tweenedOpacity = 1 - 0.2 * (i * 2 + tween * dir);
6691
7190
  }
6692
- el = images[wrap(center + i)];
6693
- el.style[xform] = alignment +
6694
- ' translateX(' + (options.shift + (dim * i - delta) / 2) + 'px)' +
6695
- ' translateZ(' + zTranslation + 'px)';
6696
- el.style.zIndex = -i;
6697
- el.style.opacity = tweenedOpacity;
7191
+ // Don't show wrapped items.
7192
+ if (!options.no_wrap || center + i < count) {
7193
+ el = images[wrap(center + i)];
7194
+ el.style[xform] = alignment +
7195
+ ' translateX(' + (options.shift + (dim * i - delta) / 2) + 'px)' +
7196
+ ' translateZ(' + zTranslation + 'px)';
7197
+ el.style.zIndex = -i;
7198
+ el.style.opacity = tweenedOpacity;
7199
+ el.style.display = 'block';
7200
+ }
6698
7201
 
6699
7202
 
6700
7203
  // left side
@@ -6705,24 +7208,32 @@ Picker.extend( 'pickadate', DatePicker )
6705
7208
  zTranslation = options.dist * (i * 2 - tween * dir);
6706
7209
  tweenedOpacity = 1 - 0.2 * (i * 2 - tween * dir);
6707
7210
  }
6708
- el = images[wrap(center - i)];
6709
- el.style[xform] = alignment +
6710
- ' translateX(' + (-options.shift + (-dim * i - delta) / 2) + 'px)' +
6711
- ' translateZ(' + zTranslation + 'px)';
6712
- el.style.zIndex = -i;
6713
- el.style.opacity = tweenedOpacity;
7211
+ // Don't show wrapped items.
7212
+ if (!options.no_wrap || center - i >= 0) {
7213
+ el = images[wrap(center - i)];
7214
+ el.style[xform] = alignment +
7215
+ ' translateX(' + (-options.shift + (-dim * i - delta) / 2) + 'px)' +
7216
+ ' translateZ(' + zTranslation + 'px)';
7217
+ el.style.zIndex = -i;
7218
+ el.style.opacity = tweenedOpacity;
7219
+ el.style.display = 'block';
7220
+ }
6714
7221
  }
6715
7222
 
6716
7223
  // center
6717
- el = images[wrap(center)];
6718
- el.style[xform] = alignment +
6719
- ' translateX(' + (-delta / 2) + 'px)' +
6720
- ' translateX(' + (dir * options.shift * tween) + 'px)' +
6721
- ' translateZ(' + (options.dist * tween) + 'px)';
6722
- el.style.zIndex = 0;
6723
- if (options.full_width) { tweenedOpacity = 1; }
6724
- else { tweenedOpacity = 1 - 0.2 * tween; }
6725
- el.style.opacity = tweenedOpacity;
7224
+ // Don't show wrapped items.
7225
+ if (!options.no_wrap || (center >= 0 && center < count)) {
7226
+ el = images[wrap(center)];
7227
+ el.style[xform] = alignment +
7228
+ ' translateX(' + (-delta / 2) + 'px)' +
7229
+ ' translateX(' + (dir * options.shift * tween) + 'px)' +
7230
+ ' translateZ(' + (options.dist * tween) + 'px)';
7231
+ el.style.zIndex = 0;
7232
+ if (options.full_width) { tweenedOpacity = 1; }
7233
+ else { tweenedOpacity = 1 - 0.2 * tween; }
7234
+ el.style.opacity = tweenedOpacity;
7235
+ el.style.display = 'block';
7236
+ }
6726
7237
  }
6727
7238
 
6728
7239
  function track() {
@@ -6764,21 +7275,34 @@ Picker.extend( 'pickadate', DatePicker )
6764
7275
  var clickedIndex = $(e.target).closest('.carousel-item').index();
6765
7276
  var diff = (center % count) - clickedIndex;
6766
7277
 
6767
- // Account for wraparound.
7278
+ // Disable clicks if carousel was shifted by click
7279
+ if (diff !== 0) {
7280
+ e.preventDefault();
7281
+ e.stopPropagation();
7282
+ }
7283
+ cycleTo(clickedIndex);
7284
+ }
7285
+ }
7286
+
7287
+ function cycleTo(n) {
7288
+ var diff = (center % count) - n;
7289
+
7290
+ // Account for wraparound.
7291
+ if (!options.no_wrap) {
6768
7292
  if (diff < 0) {
6769
7293
  if (Math.abs(diff + count) < Math.abs(diff)) { diff += count; }
6770
7294
 
6771
7295
  } else if (diff > 0) {
6772
7296
  if (Math.abs(diff - count) < diff) { diff -= count; }
6773
7297
  }
7298
+ }
6774
7299
 
6775
- // Call prev or next accordingly.
6776
- if (diff < 0) {
6777
- $(this).trigger('carouselNext', [Math.abs(diff)]);
7300
+ // Call prev or next accordingly.
7301
+ if (diff < 0) {
7302
+ view.trigger('carouselNext', [Math.abs(diff)]);
6778
7303
 
6779
- } else if (diff > 0) {
6780
- $(this).trigger('carouselPrev', [diff]);
6781
- }
7304
+ } else if (diff > 0) {
7305
+ view.trigger('carouselPrev', [diff]);
6782
7306
  }
6783
7307
  }
6784
7308
 
@@ -6833,7 +7357,11 @@ Picker.extend( 'pickadate', DatePicker )
6833
7357
  }
6834
7358
 
6835
7359
  function release(e) {
6836
- pressed = false;
7360
+ if (pressed) {
7361
+ pressed = false;
7362
+ } else {
7363
+ return;
7364
+ }
6837
7365
 
6838
7366
  clearInterval(ticker);
6839
7367
  target = offset;
@@ -6842,12 +7370,23 @@ Picker.extend( 'pickadate', DatePicker )
6842
7370
  target = offset + amplitude;
6843
7371
  }
6844
7372
  target = Math.round(target / dim) * dim;
7373
+
7374
+ // No wrap of items.
7375
+ if (options.no_wrap) {
7376
+ if (target >= dim * (count - 1)) {
7377
+ target = dim * (count - 1);
7378
+ } else if (target < 0) {
7379
+ target = 0;
7380
+ }
7381
+ }
6845
7382
  amplitude = target - offset;
6846
7383
  timestamp = Date.now();
6847
7384
  requestAnimationFrame(autoScroll);
6848
7385
 
6849
- e.preventDefault();
6850
- e.stopPropagation();
7386
+ if (dragged) {
7387
+ e.preventDefault();
7388
+ e.stopPropagation();
7389
+ }
6851
7390
  return false;
6852
7391
  }
6853
7392
 
@@ -6892,6 +7431,13 @@ Picker.extend( 'pickadate', DatePicker )
6892
7431
  }
6893
7432
  });
6894
7433
 
7434
+ $(this).on('carouselSet', function(e, n) {
7435
+ if (n === undefined) {
7436
+ n = 0;
7437
+ }
7438
+ cycleTo(n);
7439
+ });
7440
+
6895
7441
  });
6896
7442
 
6897
7443
 
@@ -6903,6 +7449,9 @@ Picker.extend( 'pickadate', DatePicker )
6903
7449
  prev : function(n) {
6904
7450
  $(this).trigger('carouselPrev', [n]);
6905
7451
  },
7452
+ set : function(n) {
7453
+ $(this).trigger('carouselSet', [n]);
7454
+ }
6906
7455
  };
6907
7456
 
6908
7457