PageSourceSearch

https://ascecubadatabase.org/wp-content/plugins/genesis-responsive…/assets/js/jquery.flexslider.js?ver=1.0.1

js ascecubadatabase.org collected 2026-09-24 18:15:04 UTC 27,245 bytes, 581 lines download raw bytes

1/*
2 * jQuery FlexSlider v1.8
3 * http://flex.madebymufffin.com
4 *
5 * Copyright 2011, Tyler Smith
6 * Free to use under the MIT license.
7 * http://www.opensource.org/licenses/mit-license.php
8 *
9 * Contrib: Darin Richardson
10 */
11
12;(function ($) {
13  
14  //FlexSlider: Object Instance
15  $.flexslider = function(el, options) {
16    var slider = el;
17
18    slider.init = function() {
19      slider.vars = $.extend({}, $.flexslider.defaults, options);
20      slider.data('flexslider', true);
21      slider.container = $('.slides', slider);
22      slider.slides = $('.slides > li', slider);
23      slider.count = slider.slides.length;
24      slider.animating = false;
25      slider.currentSlide = slider.vars.slideToStart;
26      slider.animatingTo = slider.currentSlide;
27      slider.atEnd = (slider.currentSlide == 0) ? true : false;
28      slider.eventType = ('ontouchstart' in document.documentElement) ? 'touchstart' : 'click';
29      slider.cloneCount = 0;
30      slider.cloneOffset = 0;
31      slider.manualPause = false;
32      slider.vertical = (slider.vars.slideDirection == "vertical");
33      slider.prop = (slider.vertical) ? "top" : "marginLeft";
34      slider.args = {};
35      
36      //Test for webbkit CSS3 Animations
37      slider.transitions = "webkitTransition" in document.body.style;
38      if (slider.transitions) slider.prop = "-webkit-transform";
39      
40      //Test for controlsContainer
41      if (slider.vars.controlsContainer != "") {
42        slider.controlsContainer = $(slider.vars.controlsContainer).eq($('.slides').index(slider.container));
43        slider.containerExists = slider.controlsContainer.length > 0;
44      }
45      //Test for manualControls
46      if (slider.vars.manualControls != "") {
47        slider.manualControls = $(slider.vars.manualControls, ((slider.containerExists) ? slider.controlsContainer : slider));
48        slider.manualExists = slider.manualControls.length > 0;
49      }
50      
51      ///////////////////////////////////////////////////////////////////
52      // FlexSlider: Randomize Slides
53      if (slider.vars.randomize) {
54        slider.slides.sort(function() { return (Math.round(Math.random())-0.5); });
55        slider.container.empty().append(slider.slides);
56      }
57      ///////////////////////////////////////////////////////////////////
58      
59      ///////////////////////////////////////////////////////////////////
60      // FlexSlider: Slider Animation Initialize
61      if (slider.vars.animation.toLowerCase() == "slide") {
62        if (slider.transitions) {
63          slider.setTransition(0);
64        }
65        slider.css({"overflow": "hidden"});
66        if (slider.vars.animationLoop) {
67          slider.cloneCount = 2;
68          slider.cloneOffset = 1;
69          slider.container.append(slider.slides.filter(':first').clone().addClass('clone')).prepend(slider.slides.filter(':last').clone().addClass('clone'));
70        }
71        //create newSlides to capture possible clones
72        slider.newSlides = $('.slides > li', slider);
73        var sliderOffset = (-1 * (slider.currentSlide + slider.cloneOffset));
74        if (slider.vertical) {
75          slider.newSlides.css({"display": "block", "width": "100%", "float": "left"});
76          slider.container.height((slider.count + slider.cloneCount) * 200 + "%").css("position", "absolute").width("100%");
77          //Timeout function to give browser enough time to get proper height initially
78          setTimeout(function() {
79            slider.css({"position": "relative"}).height(slider.slides.filter(':first').height());
80            slider.args[slider.prop] = (slider.transitions) ? "translate3d(0," + sliderOffset * slider.height() + "px,0)" : sliderOffset * slider.height() + "px";
81            slider.container.css(slider.args);
82          }, 100);
83
84        } else {
85          slider.args[slider.prop] = (slider.transitions) ? "translate3d(" + sliderOffset * slider.width() + "px,0,0)" : sliderOffset * slider.width() + "px";
86          slider.container.width((slider.count + slider.cloneCount) * 200 + "%").css(slider.args);
87          //Timeout function to give browser enough time to get proper width initially
88          setTimeout(function() {
89            slider.newSlides.width(slider.width()).css({"float": "left", "display": "block"});
90          }, 100);
91        }
92        
93      } else { //Default to fade
94        //Not supporting fade CSS3 transitions right now
95        slider.transitions = false;
96        slider.slides.css({"width": "100%", "float": "left", "marginRight": "-100%"}).eq(slider.currentSlide).fadeIn(slider.vars.animationDuration); 
97      }
98      ///////////////////////////////////////////////////////////////////
99      
100      ///////////////////////////////////////////////////////////////////
101      // FlexSlider: Control Nav
102      if (slider.vars.controlNav) {
103        if (slider.manualExists) {
104          slider.controlNav = slider.manualControls;
105        } else {
106          var controlNavScaffold = $('<ol class="flex-control-nav"></ol>');
107          var j = 1;
108          for (var i = 0; i < slider.count; i++) {
109            controlNavScaffold.append('<li><a>' + j + '</a></li>');
110            j++;
111          }
112
113          if (slider.containerExists) {
114            $(slider.controlsContainer).append(controlNavScaffold);
115            slider.controlNav = $('.flex-control-nav li a', slider.controlsContainer);
116          } else {
117            slider.append(controlNavScaffold);
118            slider.controlNav = $('.flex-control-nav li a', slider);
119          }
120        }
121
122        slider.controlNav.eq(slider.currentSlide).addClass('active');
123
124        slider.controlNav.bind(slider.eventType, function(event) {
125          event.preventDefault();
126          if (!$(this).hasClass('active')) {
127            (slider.controlNav.index($(this)) > slider.currentSlide) ? slider.direction = "next" : slider.direction = "prev";
128            slider.flexAnimate(slider.controlNav.index($(this)), slider.vars.pauseOnAction);
129          }
130        });
131      }
132      ///////////////////////////////////////////////////////////////////
133      
134      //////////////////////////////////////////////////////////////////
135      //FlexSlider: Direction Nav
136      if (slider.vars.directionNav) {
137        var directionNavScaffold = $('<ul class="flex-direction-nav"><li><a class="prev" href="#">' + slider.vars.prevText + '</a></li><li><a class="next" href="#">' + slider.vars.nextText + '</a></li></ul>');
138        
139        if (slider.containerExists) {
140          $(slider.controlsContainer).append(directionNavScaffold);
141          slider.directionNav = $('.flex-direction-nav li a', slider.controlsContainer);
142        } else {
143          slider.append(directionNavScaffold);
144          slider.directionNav = $('.flex-direction-nav li a', slider);
145        }
146        
147        //Set initial disable styles if necessary
148        if (!slider.vars.animationLoop) {
149          if (slider.currentSlide == 0) {
150            slider.directionNav.filter('.prev').addClass('disabled');
151          } else if (slider.currentSlide == slider.count - 1) {
152            slider.directionNav.filter('.next').addClass('disabled');
153          }
154        }
155        
156        slider.directionNav.bind(slider.eventType, function(event) {
157          event.preventDefault();
158          var target = ($(this).hasClass('next')) ? slider.getTarget('next') : slider.getTarget('prev');
159          
160          if (slider.canAdvance(target)) {
161            slider.flexAnimate(target, slider.vars.pauseOnAction);
162          }
163        });
164      }
165      //////////////////////////////////////////////////////////////////
166      
167      //////////////////////////////////////////////////////////////////
168      //FlexSlider: Keyboard Nav
169      if (slider.vars.keyboardNav && $('ul.slides').length == 1) {
170        function keyboardMove(event) {
171          if (slider.animating) {
172            return;
173          } else if (event.keyCode != 39 && event.keyCode != 37){
174            return;
175          } else {
176            if (event.keyCode == 39) {
177              var target = slider.getTarget('next');
178            } else if (event.keyCode == 37){
179              var target = slider.getTarget('prev');
180            }
181        
182            if (slider.canAdvance(target)) {
183              slider.flexAnimate(target, slider.vars.pauseOnAction);
184            }
185          }
186        }
187        $(document).bind('keyup', keyboardMove);
188      }
189      //////////////////////////////////////////////////////////////////
190      
191      ///////////////////////////////////////////////////////////////////
192      // FlexSlider: Mousewheel interaction
193      if (slider.vars.mousewheel) {
194        slider.mousewheelEvent = (/Firefox/i.test(navigator.userAgent)) ? "DOMMouseScroll" : "mousewheel";
195        slider.bind(slider.mousewheelEvent, function(e) {
196          e.preventDefault();
197          e = e ? e : window.event;
198          var wheelData = e.detail ? e.detail * -1 : e.wheelDelta / 40,
199              target = (wheelData < 0) ? slider.getTarget('next') : slider.getTarget('prev');
200          
201          if (slider.canAdvance(target)) {
202            slider.flexAnimate(target, slider.vars.pauseOnAction);
203          }
204        });
205      }
206      ///////////////////////////////////////////////////////////////////
207      
208      //////////////////////////////////////////////////////////////////
209      //FlexSlider: Slideshow Setup
210      if (slider.vars.slideshow) {
211        //pauseOnHover
212        if (slider.vars.pauseOnHover && slider.vars.slideshow) {
213          slider.hover(function() {
214            slider.pause();
215          }, function() {
216            if (!slider.manualPause) {
217              slider.resume();
218            }
219          });
220        }
221
222        //Initialize animation
223        slider.animatedSlides = setInterval(slider.animateSlides, slider.vars.slideshowSpeed);
224      }
225      //////////////////////////////////////////////////////////////////
226      
227      //////////////////////////////////////////////////////////////////
228      //FlexSlider: Pause/Play
229      if (slider.vars.pausePlay) {
230        var pausePlayScaffold = $('<div class="flex-pauseplay"><span></span></div>');
231      
232        if (slider.containerExists) {
233          slider.controlsContainer.append(pausePlayScaffold);
234          slider.pausePlay = $('.flex-pauseplay span', slider.controlsContainer);
235        } else {
236          slider.append(pausePlayScaffold);
237          slider.pausePlay = $('.flex-pauseplay span', slider);
238        }
239        
240        var pausePlayState = (slider.vars.slideshow) ? 'pause' : 'play';
241        slider.pausePlay.addClass(pausePlayState).text((pausePlayState == 'pause') ? slider.vars.pauseText : slider.vars.playText);
242        
243        slider.pausePlay.bind(slider.eventType, function(event) {
244          event.preventDefault();
245          if ($(this).hasClass('pause')) {
246            slider.pause();
247            slider.manualPause = true;
248          } else {
249            slider.resume();
250            slider.manualPause = false;
251          }
252        });
253      }
254      //////////////////////////////////////////////////////////////////
255      
256      //////////////////////////////////////////////////////////////////
257      //FlexSlider:Touch Swip Gestures
258      //Some brilliant concepts adapted from the following sources
259      //Source: TouchSwipe - http://www.netcu.de/jquery-touchwipe-iphone-ipad-library
260      //Source: SwipeJS - http://swipejs.com
261      if ('ontouchstart' in document.documentElement) {
262        //For brevity, variables are named for x-axis scrolling
263        //The variables are then swapped if vertical sliding is applied
264        //This reduces redundant code...I think :)
265        //If debugging, recognize variables are named for horizontal scrolling
266        var startX,
267          startY,
268          offset,
269          cwidth,
270          dx,
271          startT,
272          scrolling = false;
273              
274        slider.each(function() {
275          if ('ontouchstart' in document.documentElement) {
276            this.addEventListener('touchstart', onTouchStart, false);
277          }
278        });
279        
280        function onTouchStart(e) {
281          if (slider.animating) {
282            e.preventDefault();
283          } else if (e.touches.length == 1) {
284            slider.pause();
285            cwidth = (slider.vertical) ? slider.height() : slider.width();
286            startT = Number(new Date());
287            offset = (slider.vertical) ? (slider.currentSlide + slider.cloneOffset) * slider.height() : (slider.currentSlide + slider.cloneOffset) * slider.width();
288            startX = (slider.vertical) ? e.touches[0].pageY : e.touches[0].pageX;
289            startY = (slider.vertical) ? e.touches[0].pageX : e.touches[0].pageY;
290            slider.setTransition(0);
291
292            this.addEventListener('touchmove', onTouchMove, false);
293            this.addEventListener('touchend', onTouchEnd, false);
294          }
295        }
296
297        function onTouchMove(e) {
298          dx = (slider.vertical) ? startX - e.touches[0].pageY : startX - e.touches[0].pageX;
299          scrolling = (slider.vertical) ? (Math.abs(dx) < Math.abs(e.touches[0].pageX - startY)) : (Math.abs(dx) < Math.abs(e.touches[0].pageY - startY));
300
301          if (!scrolling) {
302            e.preventDefault();
303            if (slider.vars.animation == "slide" && slider.transitions) {
304              if (!slider.vars.animationLoop) {
305                dx = dx/((slider.currentSlide == 0 && dx < 0 || slider.currentSlide == slider.count - 1 && dx > 0) ? (Math.abs(dx)/cwidth+2) : 1);
306              }
307              slider.args[slider.prop] = (slider.vertical) ? "translate3d(0," + (-offset - dx) + "px,0)": "translate3d(" + (-offset - dx) + "px,0,0)";
308              slider.container.css(slider.args);
309            }
310          }
311        }
312        
313        function onTouchEnd(e) {
314          slider.animating = false;
315          if (slider.animatingTo == slider.currentSlide && !scrolling && !(dx == null)) {
316            var target = (dx > 0) ? slider.getTarget('next') : slider.getTarget('prev');
317            if (slider.canAdvance(target) && Number(new Date()) - startT < 550 && Math.abs(dx) > 20 || Math.abs(dx) > cwidth/2) {
318              slider.flexAnimate(target, slider.vars.pauseOnAction);
319            } else {
320              slider.flexAnimate(slider.currentSlide, slider.vars.pauseOnAction);
321            }
322          }
323          
324          //Finish the touch by undoing the touch session
325          this.removeEventListener('touchmove', onTouchMove, false);
326          this.removeEventListener('touchend', onTouchEnd, false);
327          startX = null;
328          startY = null;
329          dx = null;
330          offset = null;
331        }
332      }
333      //////////////////////////////////////////////////////////////////
334      
335      //////////////////////////////////////////////////////////////////
336      //FlexSlider: Resize Functions (If necessary)
337      if (slider.vars.animation.toLowerCase() == "slide") {
338        $(window).resize(function(){
339          if (!slider.animating) {
340            if (slider.vertical) {
341              slider.height(slider.slides.filter(':first').height());
342              slider.args[slider.prop] = (-1 * (slider.currentSlide + slider.cloneOffset))* slider.slides.filter(':first').height() + "px";
343              if (slider.transitions) {
344                slider.setTransition(0);
345                slider.args[slider.prop] = (slider.vertical) ? "translate3d(0," + slider.args[slider.prop] + ",0)" : "translate3d(" + slider.args[slider.prop] + ",0,0)";
346              }
347              slider.container.css(slider.args);
348            } else {
349              slider.newSlides.width(slider.width());
350              slider.args[slider.prop] = (-1 * (slider.currentSlide + slider.cloneOffset))* slider.width() + "px";
351              if (slider.transitions) {
352                slider.setTransition(0);
353                slider.args[slider.prop] = (slider.vertical) ? "translate3d(0," + slider.args[slider.prop] + ",0)" : "translate3d(" + slider.args[slider.prop] + ",0,0)";
354              }
355              slider.container.css(slider.args);
356            }
357          }
358        });
359      }
360      //////////////////////////////////////////////////////////////////
361      
362      //////////////////////////////////////////////////////////////////
363      //FlexSlider: Destroy the slider entity
364      //Destory is not included in the minified version right now, but this is a working function for anyone who wants to include it.
365      //Simply bind the actions you need from this function into a function in the start() callback to the event of your chosing
366      /*
367      slider.destroy = function() {
368        slider.pause();
369        if (slider.controlNav && slider.vars.manualControls == "") slider.controlNav.closest('.flex-control-nav').remove();
370        if (slider.directionNav) slider.directionNav.closest('.flex-direction-nav').remove();
371        if (slider.vars.pausePlay) slider.pausePlay.closest('.flex-pauseplay').remove();
372        if (slider.vars.keyboardNav && $('ul.slides').length == 1) $(document).unbind('keyup', keyboardMove);
373        if (slider.vars.mousewheel) slider.unbind(slider.mousewheelEvent);
374        if (slider.transitions) slider.each(function(){this.removeEventListener('touchstart', onTouchStart, false);});
375        if (slider.vars.animation == "slide" && slider.vars.animationLoop) slider.newSlides.filter('.clone').remove();
376        if (slider.vertical) slider.height("auto");
377        slider.slides.hide();
378        slider.removeData('flexslider');
379      }
380      */
381      //////////////////////////////////////////////////////////////////
382      
383      //FlexSlider: start() Callback
384      slider.vars.start(slider);
385    }
386    
387    //FlexSlider: Animation Actions
388    slider.flexAnimate = function(target, pause) {
389      if (!slider.animating) {
390        //Animating flag
391        slider.animating = true;
392        
393        //FlexSlider: before() animation Callback
394        slider.animatingTo = target;
395        slider.vars.before(slider);
396        
397        //Optional paramter to pause slider when making an anmiation call
398        if (pause) {
399          slider.pause();
400        }
401        
402        //Update controlNav   
403        if (slider.vars.controlNav) {
404          slider.controlNav.removeClass('active').eq(target).addClass('active');
405        }
406        
407        //Is the slider at either end
408        slider.atEnd = (target == 0 || target == slider.count - 1) ? true : false;
409        if (!slider.vars.animationLoop && slider.vars.directionNav) {
410          if (target == 0) {
411            slider.directionNav.removeClass('disabled').filter('.prev').addClass('disabled');
412          } else if (target == slider.count - 1) {
413            slider.directionNav.removeClass('disabled').filter('.next').addClass('disabled');
414          } else {
415            slider.directionNav.removeClass('disabled');
416          }
417        }
418        
419        if (!slider.vars.animationLoop && target == slider.count - 1) {
420          slider.pause();
421          //FlexSlider: end() of cycle Callback
422          slider.vars.end(slider);
423        }
424        
425        if (slider.vars.animation.toLowerCase() == "slide") {
426          var dimension = (slider.vertical) ? slider.slides.filter(':first').height() : slider.slides.filter(':first').width();
427          
428          if (slider.currentSlide == 0 && target == slider.count - 1 && slider.vars.animationLoop && slider.direction != "next") {
429            slider.slideString = "0px";
430          } else if (slider.currentSlide == slider.count - 1 && target == 0 && slider.vars.animationLoop && slider.direction != "prev") {
431            slider.slideString = (-1 * (slider.count + 1)) * dimension + "px";
432          } else {
433            slider.slideString = (-1 * (target + slider.cloneOffset)) * dimension + "px";
434          }
435          slider.args[slider.prop] = slider.slideString;
436
437          if (slider.transitions) {
438              slider.setTransition(slider.vars.animationDuration); 
439              slider.args[slider.prop] = (slider.vertical) ? "translate3d(0," + slider.slideString + ",0)" : "translate3d(" + slider.slideString + ",0,0)";
440              slider.container.css(slider.args).one("webkitTransitionEnd transitionend", function(){
441                slider.wrapup(dimension);
442              });   
443          } else {
444            slider.container.animate(slider.args, slider.vars.animationDuration, function(){
445              slider.wrapup(dimension);
446            });
447          }
448        } else { //Default to Fade
449          slider.slides.eq(slider.currentSlide).fadeOut(slider.vars.animationDuration);
450          slider.slides.eq(target).fadeIn(slider.vars.animationDuration, function() {
451            slider.wrapup();
452          });
453        }
454      }
455    }
456    
457    //FlexSlider: Function to minify redundant animation actions
458    slider.wrapup = function(dimension) {
459      if (slider.vars.animation == "slide") {
460        //Jump the slider if necessary
461        if (slider.currentSlide == 0 && slider.animatingTo == slider.count - 1 && slider.vars.animationLoop) {
462          slider.args[slider.prop] = (-1 * slider.count) * dimension + "px";
463          if (slider.transitions) {
464            slider.setTransition(0);
465            slider.args[slider.prop] = (slider.vertical) ? "translate3d(0," + slider.args[slider.prop] + ",0)" : "translate3d(" + slider.args[slider.prop] + ",0,0)";
466          }
467          slider.container.css(slider.args);
468        } else if (slider.currentSlide == slider.count - 1 && slider.animatingTo == 0 && slider.vars.animationLoop) {
469          slider.args[slider.prop] = -1 * dimension + "px";
470          if (slider.transitions) {
471            slider.setTransition(0);
472            slider.args[slider.prop] = (slider.vertical) ? "translate3d(0," + slider.args[slider.prop] + ",0)" : "translate3d(" + slider.args[slider.prop] + ",0,0)";
473          }
474          slider.container.css(slider.args);
475        }
476      }
477      slider.animating = false;
478      slider.currentSlide = slider.animatingTo;
479      //FlexSlider: after() animation Callback
480      slider.vars.after(slider);
481    }
482    
483    //FlexSlider: Automatic Slideshow
484    slider.animateSlides = function() {
485      if (!slider.animating) {
486        slider.flexAnimate(slider.getTarget("next"));
487      }
488    }
489    
490    //FlexSlider: Automatic Slideshow Pause
491    slider.pause = function() {
492      clearInterval(slider.animatedSlides);
493      if (slider.vars.pausePlay) {
494        slider.pausePlay.removeClass('pause').addClass('play').text(slider.vars.playText);
495      }
496    }
497    
498    //FlexSlider: Automatic Slideshow Start/Resume
499    slider.resume = function() {
500      slider.animatedSlides = setInterval(slider.animateSlides, slider.vars.slideshowSpeed);
501      if (slider.vars.pausePlay) {
502        slider.pausePlay.removeClass('play').addClass('pause').text(slider.vars.pauseText);
503      }
504    }
505    
506    //FlexSlider: Helper function for non-looping sliders
507    slider.canAdvance = function(target) {
508      if (!slider.vars.animationLoop && slider.atEnd) {
509        if (slider.currentSlide == 0 && target == slider.count - 1 && slider.direction != "next") {
510          return false;
511        } else if (slider.currentSlide == slider.count - 1 && target == 0 && slider.direction == "next") {
512          return false;
513        } else {
514          return true;
515        }
516      } else {
517        return true;
518      }  
519    }
520    
521    //FlexSlider: Helper function to determine animation target
522    slider.getTarget = function(dir) {
523      slider.direction = dir;
524      if (dir == "next") {
525        return (slider.currentSlide == slider.count - 1) ? 0 : slider.currentSlide + 1;
526      } else {
527        return (slider.currentSlide == 0) ? slider.count - 1 : slider.currentSlide - 1;
528      }
529    }
530    
531    //FlexSlider: Helper function to set CSS3 transitions
532    slider.setTransition = function(dur) {
533      slider.container.css({'-webkit-transition-duration': (dur/1000) + "s"});
534    }
535
536    //FlexSlider: Initialize
537    slider.init();
538  }
539  
540  //FlexSlider: Default Settings
541  $.flexslider.defaults = {
542    animation: "fade",              //String: Select your animation type, "fade" or "slide"
543    slideDirection: "horizontal",   //String: Select the sliding direction, "horizontal" or "vertical"
544    slideshow: true,                //Boolean: Animate slider automatically
545    slideshowSpeed: 7000,           //Integer: Set the speed of the slideshow cycling, in milliseconds
546    animationDuration: 600,         //Integer: Set the speed of animations, in milliseconds
547    directionNav: true,             //Boolean: Create navigation for previous/next navigation? (true/false)
548    controlNav: true,               //Boolean: Create navigation for paging control of each clide? Note: Leave true for manualControls usage
549    keyboardNav: true,              //Boolean: Allow slider navigating via keyboard left/right keys
550    mousewheel: false,              //Boolean: Allow slider navigating via mousewheel
551    prevText: "Previous",           //String: Set the text for the "previous" directionNav item
552    nextText: "Next",               //String: Set the text for the "next" directionNav item
553    pausePlay: false,               //Boolean: Create pause/play dynamic element
554    pauseText: 'Pause',             //String: Set the text for the "pause" pausePlay item
555    playText: 'Play',               //String: Set the text for the "play" pausePlay item
556    randomize: false,               //Boolean: Randomize slide order
557    slideToStart: 0,                //Integer: The slide that the slider should start on. Array notation (0 = first slide)
558    animationLoop: true,            //Boolean: Should the animation loop? If false, directionNav will received "disable" classes at either end
559    pauseOnAction: true,            //Boolean: Pause the slideshow when interacting with control elements, highly recommended.
560    pauseOnHover: false,            //Boolean: Pause the slideshow when hovering over slider, then resume when no longer hovering
561    controlsContainer: "",          //Selector: Declare which container the navigation elements should be appended too. Default container is the flexSlider element. Example use would be ".flexslider-container", "#container", etc. If the given element is not found, the default action will be taken.
562    manualControls: "",             //Selector: Declare custom control navigation. Example would be ".flex-control-nav li" or "#tabs-nav li img", etc. The number of elements in your controlNav should match the number of slides/tabs.
563    start: function(){},            //Callback: function(slider) - Fires when the slider loads the first slide
564    before: function(){},           //Callback: function(slider) - Fires asynchronously with each slider animation
565    after: function(){},            //Callback: function(slider) - Fires after each slider animation completes
566    end: function(){}               //Callback: function(slider) - Fires when the slider reaches the last slide (asynchronous)
567  }
568  
569  //FlexSlider: Plugin Function
570  $.fn.flexslider = function(options) {
571    return this.each(function() {
572      if ($(this).find('.slides li').length == 1) {
573        $(this).find('.slides li').fadeIn(400);
574      }
575      else if ($(this).data('flexslider') != true) {
576        new $.flexslider($(this), options);
577      }
578    });
579  }  
580
581})(jQuery);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.