| 
1 | 1 | /*  | 
2 |  | - * jQuery FlexSlider v2.2.2  | 
 | 2 | + * jQuery FlexSlider v2.3.0  | 
3 | 3 |  * Copyright 2012 WooThemes  | 
4 | 4 |  * Contributing Author: Tyler Smith  | 
5 | 5 |  */  | 
 | 
18 | 18 |         touch = (( "ontouchstart" in window ) || msGesture || window.DocumentTouch && document instanceof DocumentTouch) && slider.vars.touch,  | 
19 | 19 |         // depricating this idea, as devices are being released with both of these events  | 
20 | 20 |         //eventType = (touch) ? "touchend" : "click",  | 
21 |  | -        eventType = "click touchend MSPointerUp",  | 
 | 21 | +        eventType = "click touchend MSPointerUp keyup",  | 
22 | 22 |         watchedEvent = "",  | 
23 | 23 |         watchedEventClearTimer,  | 
24 | 24 |         vertical = slider.vars.direction === "vertical",  | 
 | 
70 | 70 |           }  | 
71 | 71 |           return false;  | 
72 | 72 |         }());  | 
 | 73 | +        slider.ensureAnimationEnd = '';  | 
73 | 74 |         // CONTROLSCONTAINER:  | 
74 | 75 |         if (slider.vars.controlsContainer !== "") slider.controlsContainer = $(slider.vars.controlsContainer).length > 0 && $(slider.vars.controlsContainer);  | 
75 | 76 |         // MANUAL:  | 
 | 
593 | 594 |         }  | 
594 | 595 |       },  | 
595 | 596 |       uniqueID: function($clone) {  | 
596 |  | -        $clone.find( '[id]' ).each(function() {  | 
 | 597 | +        // Append _clone to current level and children elements with id attributes  | 
 | 598 | +        $clone.filter( '[id]' ).add($clone.find( '[id]' )).each(function() {  | 
597 | 599 |           var $this = $(this);  | 
598 | 600 |           $this.attr( 'id', $this.attr( 'id' ) + '_clone' );  | 
599 | 601 |         });  | 
 | 
602 | 604 |       pauseInvisible: {  | 
603 | 605 |         visProp: null,  | 
604 | 606 |         init: function() {  | 
605 |  | -          var prefixes = ['webkit','moz','ms','o'];  | 
606 |  | - | 
607 |  | -          if ('hidden' in document) return 'hidden';  | 
608 |  | -          for (var i = 0; i < prefixes.length; i++) {  | 
609 |  | -            if ((prefixes[i] + 'Hidden') in document)  | 
610 |  | -            methods.pauseInvisible.visProp = prefixes[i] + 'Hidden';  | 
611 |  | -          }  | 
612 |  | -          if (methods.pauseInvisible.visProp) {  | 
613 |  | -            var evtname = methods.pauseInvisible.visProp.replace(/[H|h]idden/,'') + 'visibilitychange';  | 
 | 607 | +          var visProp = methods.pauseInvisible.getHiddenProp();  | 
 | 608 | +          if (visProp) {  | 
 | 609 | +            var evtname = visProp.replace(/[H|h]idden/,'') + 'visibilitychange';  | 
614 | 610 |             document.addEventListener(evtname, function() {  | 
615 | 611 |               if (methods.pauseInvisible.isHidden()) {  | 
616 |  | -                if(slider.startTimeout) clearTimeout(slider.startTimeout); //If clock is ticking, stop timer and prevent from starting while invisible  | 
617 |  | -                else slider.pause(); //Or just pause  | 
 | 612 | +                if(slider.startTimeout) {  | 
 | 613 | +                  clearTimeout(slider.startTimeout); //If clock is ticking, stop timer and prevent from starting while invisible  | 
 | 614 | +                } else {   | 
 | 615 | +                  slider.pause(); //Or just pause  | 
 | 616 | +                }  | 
618 | 617 |               }  | 
619 | 618 |               else {  | 
620 |  | -                if(slider.started) slider.play(); //Initiated before, just play  | 
621 |  | -                else (slider.vars.initDelay > 0) ? setTimeout(slider.play, slider.vars.initDelay) : slider.play(); //Didn't init before: simply init or wait for it  | 
 | 619 | +                if(slider.started) {  | 
 | 620 | +                  slider.play(); //Initiated before, just play  | 
 | 621 | +                } else {   | 
 | 622 | +                  if (slider.vars.initDelay > 0) {   | 
 | 623 | +                    setTimeout(slider.play, slider.vars.initDelay);  | 
 | 624 | +                  } else {  | 
 | 625 | +                    slider.play(); //Didn't init before: simply init or wait for it  | 
 | 626 | +                  }   | 
 | 627 | +                }  | 
622 | 628 |               }  | 
623 | 629 |             });  | 
624 | 630 |           }  | 
625 | 631 |         },  | 
626 | 632 |         isHidden: function() {  | 
627 |  | -          return document[methods.pauseInvisible.visProp] || false;  | 
 | 633 | +          var prop = methods.pauseInvisible.getHiddenProp();  | 
 | 634 | +          if (!prop) {  | 
 | 635 | +            return false;  | 
 | 636 | +          }  | 
 | 637 | +          return document[prop];  | 
 | 638 | +        },  | 
 | 639 | +        getHiddenProp: function() {  | 
 | 640 | +          var prefixes = ['webkit','moz','ms','o'];  | 
 | 641 | +          // if 'hidden' is natively supported just return it  | 
 | 642 | +          if ('hidden' in document) {  | 
 | 643 | +            return 'hidden';  | 
 | 644 | +          }  | 
 | 645 | +          // otherwise loop over all the known prefixes until we find one  | 
 | 646 | +          for ( var i = 0; i < prefixes.length; i++ ) {  | 
 | 647 | +              if ((prefixes[i] + 'Hidden') in document) {  | 
 | 648 | +                return prefixes[i] + 'Hidden';  | 
 | 649 | +              }  | 
 | 650 | +          }  | 
 | 651 | +          // otherwise it's not supported  | 
 | 652 | +          return null;  | 
628 | 653 |         }  | 
629 | 654 |       },  | 
630 | 655 |       setToClearWatchedEvent: function() {  | 
 | 
719 | 744 |               slider.animating = false;  | 
720 | 745 |               slider.currentSlide = slider.animatingTo;  | 
721 | 746 |             }  | 
 | 747 | +              | 
 | 748 | +            // Unbind previous transitionEnd events and re-bind new transitionEnd event  | 
722 | 749 |             slider.container.unbind("webkitTransitionEnd transitionend");  | 
723 | 750 |             slider.container.bind("webkitTransitionEnd transitionend", function() {  | 
 | 751 | +              clearTimeout(slider.ensureAnimationEnd);  | 
724 | 752 |               slider.wrapup(dimension);  | 
725 | 753 |             });  | 
 | 754 | + | 
 | 755 | +            // Insurance for the ever-so-fickle transitionEnd event  | 
 | 756 | +            clearTimeout(slider.ensureAnimationEnd);  | 
 | 757 | +            slider.ensureAnimationEnd = setTimeout(function() {  | 
 | 758 | +              slider.wrapup(dimension);  | 
 | 759 | +            }, slider.vars.animationSpeed + 100);  | 
 | 760 | + | 
726 | 761 |           } else {  | 
727 | 762 |             slider.container.animate(slider.args, slider.vars.animationSpeed, slider.vars.easing, function(){  | 
728 | 763 |               slider.wrapup(dimension);  | 
 | 
871 | 906 |           slider.cloneOffset = 1;  | 
872 | 907 |           // clear out old clones  | 
873 | 908 |           if (type !== "init") slider.container.find('.clone').remove();  | 
874 |  | -          slider.container.append(slider.slides.first().clone().addClass('clone').attr('aria-hidden', 'true')).prepend(slider.slides.last().clone().addClass('clone').attr('aria-hidden', 'true'));  | 
875 |  | -		      methods.uniqueID( slider.slides.first().clone().addClass('clone') ).appendTo( slider.container );  | 
876 |  | -		      methods.uniqueID( slider.slides.last().clone().addClass('clone') ).prependTo( slider.container );  | 
 | 909 | +          slider.container.append(methods.uniqueID(slider.slides.first().clone().addClass('clone')).attr('aria-hidden', 'true'))  | 
 | 910 | +                          .prepend(methods.uniqueID(slider.slides.last().clone().addClass('clone')).attr('aria-hidden', 'true'));  | 
877 | 911 |         }  | 
878 | 912 |         slider.newSlides = $(slider.vars.selector, slider);  | 
879 | 913 | 
 
  | 
 | 
902 | 936 |         if (type === "init") {  | 
903 | 937 |           if (!touch) {  | 
904 | 938 |             //slider.slides.eq(slider.currentSlide).fadeIn(slider.vars.animationSpeed, slider.vars.easing);  | 
905 |  | -            slider.slides.css({ "opacity": 0, "display": "block", "zIndex": 1 }).eq(slider.currentSlide).css({"zIndex": 2}).animate({"opacity": 1},slider.vars.animationSpeed,slider.vars.easing);  | 
 | 939 | +            if (slider.vars.fadeFirstSlide == false) {  | 
 | 940 | +              slider.slides.css({ "opacity": 0, "display": "block", "zIndex": 1 }).eq(slider.currentSlide).css({"zIndex": 2}).css({"opacity": 1});  | 
 | 941 | +            } else {  | 
 | 942 | +              slider.slides.css({ "opacity": 0, "display": "block", "zIndex": 1 }).eq(slider.currentSlide).css({"zIndex": 2}).animate({"opacity": 1},slider.vars.animationSpeed,slider.vars.easing);  | 
 | 943 | +            }  | 
906 | 944 |           } else {  | 
907 | 945 |             slider.slides.css({ "opacity": 0, "display": "block", "webkitTransition": "opacity " + slider.vars.animationSpeed / 1000 + "s ease", "zIndex": 1 }).eq(slider.currentSlide).css({ "opacity": 1, "zIndex": 2});  | 
908 | 946 |           }  | 
 | 
1059 | 1097 |     animationSpeed: 600,            //Integer: Set the speed of animations, in milliseconds  | 
1060 | 1098 |     initDelay: 0,                   //{NEW} Integer: Set an initialization delay, in milliseconds  | 
1061 | 1099 |     randomize: false,               //Boolean: Randomize slide order  | 
 | 1100 | +    fadeFirstSlide: true,           //Boolean: Fade in the first slide when animation type is "fade"  | 
1062 | 1101 |     thumbCaptions: false,           //Boolean: Whether or not to put captions on thumbnails when using the "thumbnails" controlNav.  | 
1063 | 1102 | 
 
  | 
1064 | 1103 |     // Usability features  | 
 | 
1070 | 1109 |     video: false,                   //{NEW} Boolean: If using video in the slider, will prevent CSS3 3D Transforms to avoid graphical glitches  | 
1071 | 1110 | 
 
  | 
1072 | 1111 |     // Primary Controls  | 
1073 |  | -    controlNav: true,               //Boolean: Create navigation for paging control of each clide? Note: Leave true for manualControls usage  | 
 | 1112 | +    controlNav: true,               //Boolean: Create navigation for paging control of each slide? Note: Leave true for manualControls usage  | 
1074 | 1113 |     directionNav: true,             //Boolean: Create navigation for previous/next navigation? (true/false)  | 
1075 | 1114 |     prevText: "Previous",           //String: Set the text for the "previous" directionNav item  | 
1076 | 1115 |     nextText: "Next",               //String: Set the text for the "next" directionNav item  | 
 | 
0 commit comments