PageSourceSearch

https://blueeyes.tw/assets/plugins/owl-carousel/owl-carousel/owl.carousel.js

js blueeyes.tw collected 2026-09-24 11:49:25 UTC 39,378 bytes, 1,470 lines download raw bytes

1/*
2 *	jQuery OwlCarousel v1.31
3 *
4 *	Copyright (c) 2013 Bartosz Wojciechowski
5 *	http://www.owlgraphic.com/owlcarousel/
6 *
7 *	Licensed under MIT
8 *
9 */
10
11if ( typeof Object.create !== "function" ) {
12	Object.create = function( obj ) {
13		function F() {};
14		F.prototype = obj;
15		return new F();
16	};
17}
18(function( $, window, document, undefined ) {
19
20	var Carousel = {
21		init :function(options, el){
22			var base = this;
23
24			base.$elem = $(el);
25
26			// options passed via js override options passed via data attributes
27			base.options = $.extend({}, $.fn.owlCarousel.options, base.$elem.data(), options);
28
29			base.userOptions = options;
30			base.loadContent();
31		},
32
33		loadContent : function(){
34			var base = this;
35
36			if (typeof base.options.beforeInit === "function") {
37				base.options.beforeInit.apply(this,[base.$elem]);
38			}
39
40			if (typeof base.options.jsonPath === "string") {
41				var url = base.options.jsonPath;
42
43				function getData(data) {
44					if (typeof base.options.jsonSuccess === "function") {
45						base.options.jsonSuccess.apply(this,[data]);
46					} else {
47						var content = "";
48						for(var i in data["owl"]){
49							content += data["owl"][i]["item"];
50						}
51						base.$elem.html(content);
52					}
53					base.logIn();
54				}
55				$.getJSON(url,getData);
56			} else {
57				base.logIn();
58			}
59		},
60
61		logIn : function(action){
62			var base = this;
63
64			base.$elem.data("owl-originalStyles", base.$elem.attr("style"))
65					  .data("owl-originalClasses", base.$elem.attr("class"));
66
67			base.$elem.css({opacity: 0});
68			base.orignalItems = base.options.items;
69			base.checkBrowser();
70			base.wrapperWidth = 0;
71			base.checkVisible;
72			base.setVars();
73		},
74
75		setVars : function(){
76			var base = this;
77			if(base.$elem.children().length === 0){return false}
78			base.baseClass();
79			base.eventTypes();
80			base.$userItems = base.$elem.children();
81			base.itemsAmount = base.$userItems.length;
82			base.wrapItems();
83			base.$owlItems = base.$elem.find(".owl-item");
84			base.$owlWrapper = base.$elem.find(".owl-wrapper");
85			base.playDirection = "next";
86			base.prevItem = 0;
87			base.prevArr = [0];
88			base.currentItem = 0;
89			base.customEvents();
90			base.onStartup();
91		},
92
93		onStartup : function(){
94			var base = this;
95			base.updateItems();
96			base.calculateAll();
97			base.buildControls();
98			base.updateControls();
99			base.response();
100			base.moveEvents();
101			base.stopOnHover();
102			base.owlStatus();
103
104			if(base.options.transitionStyle !== false){
105				base.transitionTypes(base.options.transitionStyle);
106			}
107			if(base.options.autoPlay === true){
108				base.options.autoPlay = 5000;
109			}
110			base.play();
111
112			base.$elem.find(".owl-wrapper").css("display","block")
113
114			if(!base.$elem.is(":visible")){
115				base.watchVisibility();
116			} else {
117				base.$elem.css("opacity",1);
118			}
119			base.onstartup = false;
120			base.eachMoveUpdate();
121			if (typeof base.options.afterInit === "function") {
122				base.options.afterInit.apply(this,[base.$elem]);
123			}
124		},
125
126		eachMoveUpdate : function(){
127			var base = this;
128
129			if(base.options.lazyLoad === true){
130				base.lazyLoad();
131			}
132			if(base.options.autoHeight === true){
133				base.autoHeight();
134			}
135			base.onVisibleItems();
136
137			if (typeof base.options.afterAction === "function") {
138				base.options.afterAction.apply(this,[base.$elem]);
139			}
140		},
141
142		updateVars : function(){
143			var base = this;
144			if(typeof base.options.beforeUpdate === "function") {
145				base.options.beforeUpdate.apply(this,[base.$elem]);
146			}
147			base.watchVisibility();
148			base.updateItems();
149			base.calculateAll();
150			base.updatePosition();
151			base.updateControls();
152			base.eachMoveUpdate();
153			if(typeof base.options.afterUpdate === "function") {
154				base.options.afterUpdate.apply(this,[base.$elem]);
155			}
156		},
157
158		reload : function(elements){
159			var base = this;
160			setTimeout(function(){
161				base.updateVars();
162			},0)
163		},
164
165		watchVisibility : function(){
166			var base = this;
167
168			if(base.$elem.is(":visible") === false){
169				base.$elem.css({opacity: 0});
170				clearInterval(base.autoPlayInterval);
171				clearInterval(base.checkVisible);
172			} else {
173				return false;
174			}
175			base.checkVisible = setInterval(function(){
176				if (base.$elem.is(":visible")) {
177					base.reload();
178					base.$elem.animate({opacity: 1},200);
179					clearInterval(base.checkVisible);
180				}
181			}, 500);
182		},
183
184		wrapItems : function(){
185			var base = this;
186			base.$userItems.wrapAll("<div class=\"owl-wrapper\">").wrap("<div class=\"owl-item\"></div>");
187			base.$elem.find(".owl-wrapper").wrap("<div class=\"owl-wrapper-outer\">");
188			base.wrapperOuter = base.$elem.find(".owl-wrapper-outer");
189			base.$elem.css("display","block");
190		},
191
192		baseClass : function(){
193			var base = this;
194			var hasBaseClass = base.$elem.hasClass(base.options.baseClass);
195			var hasThemeClass = base.$elem.hasClass(base.options.theme);
196
197			if(!hasBaseClass){
198				base.$elem.addClass(base.options.baseClass);
199			}
200
201			if(!hasThemeClass){
202				base.$elem.addClass(base.options.theme);
203			}
204		},
205
206		updateItems : function(){
207			var base = this;
208
209			if(base.options.responsive === false){
210				return false;
211			}
212			if(base.options.singleItem === true){
213				base.options.items = base.orignalItems = 1;
214				base.options.itemsCustom = false;
215				base.options.itemsDesktop = false;
216				base.options.itemsDesktopSmall = false;
217				base.options.itemsTablet = false;
218				base.options.itemsTabletSmall = false;
219				base.options.itemsMobile = false;
220				return false;
221			}
222
223			var width = $(base.options.responsiveBaseWidth).width();
224
225			if(width > (base.options.itemsDesktop[0] || base.orignalItems) ){
226				base.options.items = base.orignalItems;
227			}
228
229			if(typeof(base.options.itemsCustom) !== 'undefined' && base.options.itemsCustom !== false){
230				//Reorder array by screen size
231				base.options.itemsCustom.sort(function(a,b){return a[0]-b[0];});
232				for(var i in base.options.itemsCustom){
233					if(typeof(base.options.itemsCustom[i]) !== 'undefined' && base.options.itemsCustom[i][0] <= width){
234						base.options.items = base.options.itemsCustom[i][1];
235					}
236				}
237			} else {
238
239				if(width <= base.options.itemsDesktop[0] && base.options.itemsDesktop !== false){
240					base.options.items = base.options.itemsDesktop[1];
241				}
242
243				if(width <= base.options.itemsDesktopSmall[0] && base.options.itemsDesktopSmall !== false){
244					base.options.items = base.options.itemsDesktopSmall[1];
245				}
246
247				if(width <= base.options.itemsTablet[0]  && base.options.itemsTablet !== false){
248					base.options.items = base.options.itemsTablet[1];
249				}
250
251				if(width <= base.options.itemsTabletSmall[0]  && base.options.itemsTabletSmall !== false){
252					base.options.items = base.options.itemsTabletSmall[1];
253				}
254
255				if(width <= base.options.itemsMobile[0] && base.options.itemsMobile !== false){
256					base.options.items = base.options.itemsMobile[1];
257				}
258			}
259
260			//if number of items is less than declared
261			if(base.options.items > base.itemsAmount && base.options.itemsScaleUp === true){
262				base.options.items = base.itemsAmount;
263			}
264		},
265
266		response : function(){
267			var base = this,
268				smallDelay;
269			if(base.options.responsive !== true){
270				return false
271			}
272			var lastWindowWidth = $(window).width();
273
274			base.resizer = function(){
275				if($(window).width() !== lastWindowWidth){
276					if(base.options.autoPlay !== false){
277						clearInterval(base.autoPlayInterval);
278					}
279					clearTimeout(smallDelay);
280					smallDelay = setTimeout(function(){
281						lastWindowWidth = $(window).width();
282						base.updateVars();
283					},base.options.responsiveRefreshRate);
284				}
285			}
286			$(window).resize(base.resizer)
287		},
288
289		updatePosition : function(){
290			var base = this;
291			base.jumpTo(base.currentItem);
292			if(base.options.autoPlay !== false){
293				base.checkAp();
294			}
295		},
296
297		appendItemsSizes : function(){
298			var base = this;
299
300			var roundPages = 0;
301			var lastItem = base.itemsAmount - base.options.items;
302
303			base.$owlItems.each(function(index){
304				var $this = $(this);
305				$this
306					.css({"width": base.itemWidth})
307					.data("owl-item",Number(index));
308
309				if(index % base.options.items === 0 || index === lastItem){
310					if(!(index > lastItem)){
311						roundPages +=1;
312					}
313				}
314				$this.data("owl-roundPages",roundPages)
315			});
316		},
317
318		appendWrapperSizes : function(){
319			var base = this;
320			var width = 0;
321
322			var width = base.$owlItems.length * base.itemWidth;
323
324			base.$owlWrapper.css({
325				"width": width*2,
326				"left": 0
327			});
328			base.appendItemsSizes();
329		},
330
331		calculateAll : function(){
332			var base = this;
333			base.calculateWidth();
334			base.appendWrapperSizes();
335			base.loops();
336			base.max();
337		},
338
339		calculateWidth : function(){
340			var base = this;
341			base.itemWidth = Math.round(base.$elem.width()/base.options.items)
342		},
343
344		max : function(){
345			var base = this;
346			var maximum = ((base.itemsAmount * base.itemWidth) - base.options.items * base.itemWidth) * -1;
347			if(base.options.items > base.itemsAmount){
348				base.maximumItem = 0;
349				maximum = 0
350				base.maximumPixels = 0;
351			} else {
352				base.maximumItem = base.itemsAmount - base.options.items;
353				base.maximumPixels = maximum;
354			}
355			return maximum;
356		},
357
358		min : function(){
359			return 0;
360		},
361
362		loops : function(){
363			var base = this;
364
365			base.positionsInArray = [0];
366			base.pagesInArray = [];
367			var prev = 0;
368			var elWidth = 0;
369
370			for(var i = 0; i<base.itemsAmount; i++){
371				elWidth += base.itemWidth;
372				base.positionsInArray.push(-elWidth);
373
374				if(base.options.scrollPerPage === true){
375					var item = $(base.$owlItems[i]);
376					var roundPageNum = item.data("owl-roundPages");
377					if(roundPageNum !== prev){
378						base.pagesInArray[prev] = base.positionsInArray[i];
379						prev = roundPageNum;
380					}
381				}
382			}
383		},
384
385		buildControls : function(){
386			var base = this;
387			if(base.options.navigation === true || base.options.pagination === true){
388				base.owlControls = $("<div class=\"owl-controls\"/>").toggleClass("clickable", !base.browser.isTouch).appendTo(base.$elem);
389			}
390			if(base.options.pagination === true){
391				base.buildPagination();
392			}
393			if(base.options.navigation === true){
394				base.buildButtons();
395			}
396		},
397
398		buildButtons : function(){
399			var base = this;
400			var buttonsWrapper = $("<div class=\"owl-buttons\"/>")
401			base.owlControls.append(buttonsWrapper);
402
403			base.buttonPrev = $("<div/>",{
404				"class" : "owl-prev",
405				"html" : base.options.navigationText[0] || ""
406				});
407
408			base.buttonNext = $("<div/>",{
409				"class" : "owl-next",
410				"html" : base.options.navigationText[1] || ""
411				});
412
413			buttonsWrapper
414			.append(base.buttonPrev)
415			.append(base.buttonNext);
416
417			buttonsWrapper.on("touchstart.owlControls mousedown.owlControls", "div[class^=\"owl\"]", function(event){
418				event.preventDefault();
419			})
420
421			buttonsWrapper.on("touchend.owlControls mouseup.owlControls", "div[class^=\"owl\"]", function(event){
422				event.preventDefault();
423				if($(this).hasClass("owl-next")){
424					base.next();
425				} else{
426					base.prev();
427				}
428			})
429		},
430
431		buildPagination : function(){
432			var base = this;
433
434			base.paginationWrapper = $("<div class=\"owl-pagination\"/>");
435			base.owlControls.append(base.paginationWrapper);
436
437			base.paginationWrapper.on("touchend.owlControls mouseup.owlControls", ".owl-page", function(event){
438				event.preventDefault();
439				if(Number($(this).data("owl-page")) !== base.currentItem){
440					base.goTo( Number($(this).data("owl-page")), true);
441				}
442			});
443		},
444
445		updatePagination : function(){
446			var base = this;
447			if(base.options.pagination === false){
448				return false;
449			}
450
451			base.paginationWrapper.html("");
452
453			var counter = 0;
454			var lastPage = base.itemsAmount - base.itemsAmount % base.options.items;
455
456			for(var i = 0; i<base.itemsAmount; i++){
457				if(i % base.options.items === 0){
458					counter +=1;
459					if(lastPage === i){
460						var lastItem = base.itemsAmount - base.options.items;
461					}
462					var paginationButton = $("<div/>",{
463						"class" : "owl-page"
464						});
465					var paginationButtonInner = $("<span></span>",{
466						"text": base.options.paginationNumbers === true ? counter : "",
467						"class": base.options.paginationNumbers === true ? "owl-numbers" : ""
468					});
469					paginationButton.append(paginationButtonInner);
470
471					paginationButton.data("owl-page",lastPage === i ? lastItem : i);
472					paginationButton.data("owl-roundPages",counter);
473
474					base.paginationWrapper.append(paginationButton);
475				}
476			}
477			base.checkPagination();
478		},
479		checkPagination : function(){
480			var base = this;
481			if(base.options.pagination === false){
482				return false;
483			}
484			base.paginationWrapper.find(".owl-page").each(function(i,v){
485				if($(this).data("owl-roundPages") === $(base.$owlItems[base.currentItem]).data("owl-roundPages") ){
486					base.paginationWrapper
487						.find(".owl-page")
488						.removeClass("active");
489					$(this).addClass("active");
490				}
491			});
492		},
493
494		checkNavigation : function(){
495			var base = this;
496
497			if(base.options.navigation === false){
498				return false;
499			}
500			if(base.options.rewindNav === false){
501				if(base.currentItem === 0 && base.maximumItem === 0){
502					base.buttonPrev.addClass("disabled");
503					base.buttonNext.addClass("disabled");
504				} else if(base.currentItem === 0 && base.maximumItem !== 0){
505					base.buttonPrev.addClass("disabled");
506					base.buttonNext.removeClass("disabled");
507				} else if (base.currentItem === base.maximumItem){
508					base.buttonPrev.removeClass("disabled");
509					base.buttonNext.addClass("disabled");
510				} else if(base.currentItem !== 0 && base.currentItem !== base.maximumItem){
511					base.buttonPrev.removeClass("disabled");
512					base.buttonNext.removeClass("disabled");
513				}
514			}
515		},
516
517		updateControls : function(){
518			var base = this;
519			base.updatePagination();
520			base.checkNavigation();
521			if(base.owlControls){
522				if(base.options.items >= base.itemsAmount){
523					base.owlControls.hide();
524				} else {
525					base.owlControls.show();
526				}
527			}
528		},
529
530		destroyControls : function(){
531			var base = this;
532			if(base.owlControls){
533				base.owlControls.remove();
534			}
535		},
536
537		next : function(speed){
538			var base = this;
539
540			if(base.isTransition){
541				return false;
542			}
543
544			base.currentItem += base.options.scrollPerPage === true ? base.options.items : 1;
545			if(base.currentItem > base.maximumItem + (base.options.scrollPerPage == true ? (base.options.items - 1) : 0)){
546				if(base.options.rewindNav === true){
547					base.currentItem = 0;
548					speed = "rewind";
549				} else {
550					base.currentItem = base.maximumItem;
551					return false;
552				}
553			}
554			base.goTo(base.currentItem,speed);
555		},
556
557		prev : function(speed){
558			var base = this;
559
560			if(base.isTransition){
561				return false;
562			}
563
564			if(base.options.scrollPerPage === true && base.currentItem > 0 && base.currentItem < base.options.items){
565				base.currentItem = 0
566			} else {
567				base.currentItem -= base.options.scrollPerPage === true ? base.options.items : 1;
568			}
569			if(base.currentItem < 0){
570				if(base.options.rewindNav === true){
571					base.currentItem = base.maximumItem;
572					speed = "rewind"
573				} else {
574					base.currentItem =0;
575					return false;
576				}
577			}
578			base.goTo(base.currentItem,speed);
579		},
580
581		goTo : function(position,speed,drag){
582			var base = this;
583
584			if(base.isTransition){
585				return false;
586			}
587			if(typeof base.options.beforeMove === "function") {
588				base.options.beforeMove.apply(this,[base.$elem]);
589			}
590			if(position >= base.maximumItem){
591				position = base.maximumItem;
592			}
593			else if( position <= 0 ){
594				position = 0;
595			}
596
597			base.currentItem = base.owl.currentItem = position;
598			if( base.options.transitionStyle !== false && drag !== "drag" && base.options.items === 1 && base.browser.support3d === true){
599				base.swapSpeed(0)
600				if(base.browser.support3d === true){
601					base.transition3d(base.positionsInArray[position]);
602				} else {
603					base.css2slide(base.positionsInArray[position],1);
604				}
605				base.afterGo();
606				base.singleItemTransition();
607				
608				return false;
609			}
610			var goToPixel = base.positionsInArray[position];
611
612			if(base.browser.support3d === true){
613				base.isCss3Finish = false;
614
615				if(speed === true){
616					base.swapSpeed("paginationSpeed");
617					setTimeout(function() {
618						base.isCss3Finish = true;
619					}, base.options.paginationSpeed);
620
621				} else if(speed === "rewind" ){
622					base.swapSpeed(base.options.rewindSpeed);
623					setTimeout(function() {
624						base.isCss3Finish = true;
625					}, base.options.rewindSpeed);
626
627				} else {
628					base.swapSpeed("slideSpeed");
629					setTimeout(function() {
630						base.isCss3Finish = true;
631					}, base.options.slideSpeed);
632				}
633				base.transition3d(goToPixel);
634			} else {
635				if(speed === true){
636					base.css2slide(goToPixel, base.options.paginationSpeed);
637				} else if(speed === "rewind" ){
638					base.css2slide(goToPixel, base.options.rewindSpeed);
639				} else {
640					base.css2slide(goToPixel, base.options.slideSpeed);
641				}
642			}
643			base.afterGo();
644		},
645
646		jumpTo : function(position){
647			var base = this;
648			if(typeof base.options.beforeMove === "function") {
649				base.options.beforeMove.apply(this,[base.$elem]);
650			}
651			if(position >= base.maximumItem || position === -1){
652				position = base.maximumItem;
653			}
654			else if( position <= 0 ){
655				position = 0;
656			}
657			base.swapSpeed(0)
658			if(base.browser.support3d === true){
659				base.transition3d(base.positionsInArray[position]);
660			} else {
661				base.css2slide(base.positionsInArray[position],1);
662			}
663			base.currentItem = base.owl.currentItem = position;
664			base.afterGo();
665		},
666
667		afterGo : function(){
668			var base = this;
669
670			base.prevArr.push(base.currentItem);
671			base.prevItem = base.owl.prevItem = base.prevArr[base.prevArr.length -2];
672			base.prevArr.shift(0)
673
674			if(base.prevItem !== base.currentItem){
675				base.checkPagination();
676				base.checkNavigation();
677				base.eachMoveUpdate();
678
679				if(base.options.autoPlay !== false){
680					base.checkAp();
681				}
682			}
683			if(typeof base.options.afterMove === "function" && base.prevItem !== base.currentItem) {
684				base.options.afterMove.apply(this,[base.$elem]);
685			}
686		},
687
688		stop : function(){
689			var base = this;
690			base.apStatus = "stop";
691			clearInterval(base.autoPlayInterval);
692		},
693
694		checkAp : function(){
695			var base = this;
696			if(base.apStatus !== "stop"){
697				base.play();
698			}
699		},
700
701		play : function(){
702			var base = this;
703			base.apStatus = "play";
704			if(base.options.autoPlay === false){
705				return false;
706			}
707			clearInterval(base.autoPlayInterval);
708			base.autoPlayInterval = setInterval(function(){
709				base.next(true);
710			},base.options.autoPlay);
711		},
712
713		swapSpeed : function(action){
714			var base = this;
715			if(action === "slideSpeed"){
716				base.$owlWrapper.css(base.addCssSpeed(base.options.slideSpeed));
717			} else if(action === "paginationSpeed" ){
718				base.$owlWrapper.css(base.addCssSpeed(base.options.paginationSpeed));
719			} else if(typeof action !== "string"){
720				base.$owlWrapper.css(base.addCssSpeed(action));
721			}
722		},
723
724		addCssSpeed : function(speed){
725			var base = this;
726			return {
727				"-webkit-transition": "all "+ speed +"ms ease",
728				"-moz-transition": "all "+ speed +"ms ease",
729				"-o-transition": "all "+ speed +"ms ease",
730				"transition": "all "+ speed +"ms ease"
731			};
732		},
733
734		removeTransition : function(){
735			return {
736				"-webkit-transition": "",
737				"-moz-transition": "",
738				"-o-transition": "",
739				"transition": ""
740			};
741		},
742
743		doTranslate : function(pixels){
744			return {
745				"-webkit-transform": "translate3d("+pixels+"px, 0px, 0px)",
746				"-moz-transform": "translate3d("+pixels+"px, 0px, 0px)",
747				"-o-transform": "translate3d("+pixels+"px, 0px, 0px)",
748				"-ms-transform": "translate3d("+pixels+"px, 0px, 0px)",
749				"transform": "translate3d("+pixels+"px, 0px,0px)"
750			};
751		},
752
753		transition3d : function(value){
754			var base = this;
755			base.$owlWrapper.css(base.doTranslate(value));
756		},
757
758		css2move : function(value){
759			var base = this;
760			base.$owlWrapper.css({"left" : value})
761		},
762
763		css2slide : function(value,speed){
764			var base = this;
765
766			base.isCssFinish = false;
767			base.$owlWrapper.stop(true,true).animate({
768				"left" : value
769			}, {
770				duration : speed || base.options.slideSpeed ,
771				complete : function(){
772					base.isCssFinish = true;
773				}
774			});
775		},
776
777		checkBrowser : function(){
778			var base = this;
779
780			//Check 3d support
781			var	translate3D = "translate3d(0px, 0px, 0px)",
782				tempElem = document.createElement("div");
783
784			tempElem.style.cssText= "  -moz-transform:"    + translate3D +
785								  "; -ms-transform:"     + translate3D +
786								  "; -o-transform:"      + translate3D +
787								  "; -webkit-transform:" + translate3D +
788								  "; transform:"         + translate3D;
789			var	regex = /translate3d\(0px, 0px, 0px\)/g,
790				asSupport = tempElem.style.cssText.match(regex),
791				support3d = (asSupport !== null && asSupport.length === 1);
792
793			var isTouch = "ontouchstart" in window || navigator.msMaxTouchPoints;
794
795			base.browser = {
796				"support3d" : support3d,
797				"isTouch" : isTouch
798			}
799		},
800
801		moveEvents : function(){
802			var base = this;
803			if(base.options.mouseDrag !== false || base.options.touchDrag !== false){
804				base.gestures();
805				base.disabledEvents();
806			}
807		},
808
809		eventTypes : function(){
810			var base = this;
811			var types = ["s","e","x"];
812
813			base.ev_types = {};
814
815			if(base.options.mouseDrag === true && base.options.touchDrag === true){
816				types = [
817					"touchstart.owl mousedown.owl",
818					"touchmove.owl mousemove.owl",
819					"touchend.owl touchcancel.owl mouseup.owl"
820				];
821			} else if(base.options.mouseDrag === false && base.options.touchDrag === true){
822				types = [
823					"touchstart.owl",
824					"touchmove.owl",
825					"touchend.owl touchcancel.owl"
826				];
827			} else if(base.options.mouseDrag === true && base.options.touchDrag === false){
828				types = [
829					"mousedown.owl",
830					"mousemove.owl",
831					"mouseup.owl"
832				];
833			}
834
835			base.ev_types["start"] = types[0];
836			base.ev_types["move"] = types[1];
837			base.ev_types["end"] = types[2];
838		},
839
840		disabledEvents :  function(){
841			var base = this;
842			base.$elem.on("dragstart.owl", function(event) { event.preventDefault();});
843			base.$elem.on("mousedown.disableTextSelect", function(e) {
844				return $(e.target).is('input, textarea, select, option');
845			});
846		},
847
848		gestures : function(){
849			var base = this;
850
851			var locals = {
852				offsetX : 0,
853				offsetY : 0,
854				baseElWidth : 0,
855				relativePos : 0,
856				position: null,
857				minSwipe : null,
858				maxSwipe: null,
859				sliding : null,
860				dargging: null,
861				targetElement : null
862			}
863
864			base.isCssFinish = true;
865
866			function getTouches(event){
867				if(event.touches){
868					return {
869						x : event.touches[0].pageX,
870						y : event.touches[0].pageY
871					}
872				} else {
873					if(event.pageX !== undefined){
874						return {
875							x : event.pageX,
876							y : event.pageY
877						}
878					} else {
879						return {
880							x : event.clientX,
881							y : event.clientY
882						}
883					}
884				}
885			}
886
887			function swapEvents(type){
888				if(type === "on"){
889					$(document).on(base.ev_types["move"], dragMove);
890					$(document).on(base.ev_types["end"], dragEnd);
891				} else if(type === "off"){
892					$(document).off(base.ev_types["move"]);
893					$(document).off(base.ev_types["end"]);
894				}
895			}
896
897			function dragStart(event) {
898				var event = event.originalEvent || event || window.event;
899
900				if (event.which === 3) {
901					return false;
902				}
903				if(base.itemsAmount <= base.options.items){
904					return;
905				}
906				if(base.isCssFinish === false && !base.options.dragBeforeAnimFinish ){
907					return false;
908				}
909				if(base.isCss3Finish === false && !base.options.dragBeforeAnimFinish ){
910					return false;
911				}
912
913				if(base.options.autoPlay !== false){
914					clearInterval(base.autoPlayInterval);
915				}
916
917				if(base.browser.isTouch !== true && !base.$owlWrapper.hasClass("grabbing")){
918					base.$owlWrapper.addClass("grabbing")
919				}
920
921				base.newPosX = 0;
922				base.newRelativeX = 0;
923
924				$(this).css(base.removeTransition());
925
926				var position = $(this).position();
927				locals.relativePos = position.left;
928				
929				locals.offsetX = getTouches(event).x - position.left;
930				locals.offsetY = getTouches(event).y - position.top;
931
932				swapEvents("on");
933
934				locals.sliding = false;
935				locals.targetElement = event.target || event.srcElement;
936			}
937
938			function dragMove(event){
939				var event = event.originalEvent || event || window.event;
940
941				base.newPosX = getTouches(event).x- locals.offsetX;
942				base.newPosY = getTouches(event).y - locals.offsetY;
943				base.newRelativeX = base.newPosX - locals.relativePos;	
944
945				if (typeof base.options.startDragging === "function" && locals.dragging !== true && base.newRelativeX !== 0) {
946					locals.dragging = true;
947					base.options.startDragging.apply(base,[base.$elem]);
948				}
949
950				if(base.newRelativeX > 8 || base.newRelativeX < -8 && base.browser.isTouch === true){
951					event.preventDefault ? event.preventDefault() : event.returnValue = false;
952					locals.sliding = true;
953				}
954
955				if((base.newPosY > 10 || base.newPosY < -10) && locals.sliding === false){
956					$(document).off("touchmove.owl");
957				}
958
959				var minSwipe = function(){
960					return  base.newRelativeX / 5;
961				}
962				var maxSwipe = function(){
963					return  base.maximumPixels + base.newRelativeX / 5;
964				}
965
966				base.newPosX = Math.max(Math.min( base.newPosX, minSwipe() ), maxSwipe() );
967				if(base.browser.support3d === true){
968					base.transition3d(base.newPosX);
969				} else {
970					base.css2move(base.newPosX);
971				}
972			}
973
974			function dragEnd(event){
975				var event = event.originalEvent || event || window.event;
976				event.target = event.target || event.srcElement;
977
978				locals.dragging = false;
979
980				if(base.browser.isTouch !== true){
981					base.$owlWrapper.removeClass("grabbing");
982				}
983
984				if(base.newRelativeX<0){
985					base.dragDirection = base.owl.dragDirection = "left"
986				} else {
987					base.dragDirection = base.owl.dragDirection = "right"
988				}
989
990				if(base.newRelativeX !== 0){
991					var newPosition = base.getNewPosition();
992					base.goTo(newPosition,false,"drag");
993					if(locals.targetElement === event.target && base.browser.isTouch !== true){
994						$(event.target).on("click.disable", function(ev){
995							ev.stopImmediatePropagation();
996							ev.stopPropagation();
997							ev.preventDefault();
998							$(event.target).off("click.disable");
999						});
1000						var handlers = $._data(event.target, "events")["click"];
1001						var owlStopEvent = handlers.pop();
1002						handlers.splice(0, 0, owlStopEvent);
1003					}
1004				}
1005				swapEvents("off");
1006			}
1007			base.$elem.on(base.ev_types["start"], ".owl-wrapper", dragStart); 
1008		},
1009
1010		getNewPosition : function(){
1011			var base = this,
1012				newPosition;
1013			
1014			newPosition = base.closestItem();
1015
1016			if(newPosition>base.maximumItem){
1017				base.currentItem = base.maximumItem;
1018				newPosition  = base.maximumItem;
1019			} else if( base.newPosX >=0 ){
1020				newPosition = 0;
1021				base.currentItem = 0;
1022			}
1023			return newPosition;
1024		},
1025		closestItem : function(){
1026			var base = this,
1027				array = base.options.scrollPerPage === true ? base.pagesInArray : base.positionsInArray,
1028				goal = base.newPosX,
1029				closest = null;
1030
1031			$.each(array, function(i,v){
1032				if( goal - (base.itemWidth/20) > array[i+1] && goal - (base.itemWidth/20)< v && base.moveDirection() === "left") {
1033					closest = v;
1034					if(base.options.scrollPerPage === true){
1035						base.currentItem = $.inArray(closest, base.positionsInArray);
1036					} else {
1037						base.currentItem = i;
1038					}
1039				} 
1040				else if (goal + (base.itemWidth/20) < v && goal + (base.itemWidth/20) > (array[i+1] || array[i]-base.itemWidth) && base.moveDirection() === "right"){
1041					if(base.options.scrollPerPage === true){
1042						closest = array[i+1] || array[array.length-1];
1043						base.currentItem = $.inArray(closest, base.positionsInArray);
1044					} else {
1045						closest = array[i+1];
1046						base.currentItem = i+1;
1047					}
1048				}
1049			});
1050			return base.currentItem;
1051		},
1052
1053		moveDirection : function(){
1054			var base = this,
1055				direction;
1056			if(base.newRelativeX < 0 ){
1057				direction = "right"
1058				base.playDirection = "next"
1059			} else {
1060				direction = "left"
1061				base.playDirection = "prev"
1062			}
1063			return direction
1064		},
1065
1066		customEvents : function(){
1067			var base = this;
1068			base.$elem.on("owl.next",function(){
1069				base.next();
1070			});
1071			base.$elem.on("owl.prev",function(){
1072				base.prev();
1073			});
1074			base.$elem.on("owl.play",function(event,speed){
1075				base.options.autoPlay = speed;
1076				base.play();
1077				base.hoverStatus = "play";
1078			});
1079			base.$elem.on("owl.stop",function(){
1080				base.stop();
1081				base.hoverStatus = "stop";
1082			});
1083			base.$elem.on("owl.goTo",function(event,item){
1084				base.goTo(item)
1085			});
1086			base.$elem.on("owl.jumpTo",function(event,item){
1087				base.jumpTo(item)
1088			});
1089		},
1090		
1091		stopOnHover : function(){
1092			var base = this;
1093			if(base.options.stopOnHover === true && base.browser.isTouch !== true && base.options.autoPlay !== false){
1094				base.$elem.on("mouseover", function(){
1095					base.stop();
1096				});
1097				base.$elem.on("mouseout", function(){
1098					if(base.hoverStatus !== "stop"){
1099						base.play();
1100					}
1101				});
1102			}
1103		},
1104
1105		lazyLoad : function(){
1106			var base = this;
1107
1108			if(base.options.lazyLoad === false){
1109				return false;
1110			}
1111			for(var i=0; i<base.itemsAmount; i++){
1112				var $item = $(base.$owlItems[i]);
1113
1114				if($item.data("owl-loaded") === "loaded"){
1115					continue;
1116				}
1117
1118				var	itemNumber = $item.data("owl-item"),
1119					$lazyImg = $item.find(".lazyOwl"),
1120					follow;
1121
1122				if( typeof $lazyImg.data("src") !== "string"){
1123					$item.data("owl-loaded","loaded");
1124					continue;
1125				}				
1126				if($item.data("owl-loaded") === undefined){
1127					$lazyImg.hide();
1128					$item.addClass("loading").data("owl-loaded","checked");
1129				}
1130				if(base.options.lazyFollow === true){
1131					follow = itemNumber >= base.currentItem;
1132				} else {
1133					follow = true;
1134				}
1135				if(follow && itemNumber < base.currentItem + base.options.items && $lazyImg.length){
1136					base.lazyPreload($item,$lazyImg);
1137				}
1138			}
1139		},
1140
1141		lazyPreload : function($item,$lazyImg){
1142			var base = this,
1143				iterations = 0;
1144				if ($lazyImg.prop("tagName") === "DIV") {
1145					$lazyImg.css("background-image", "url(" + $lazyImg.data("src")+ ")" );
1146					var isBackgroundImg=true;
1147				} else {
1148					$lazyImg[0].src = $lazyImg.data("src");
1149				}
1150				checkLazyImage();
1151
1152			function checkLazyImage(){
1153				iterations += 1;
1154				if (base.completeImg($lazyImg.get(0)) || isBackgroundImg === true) {
1155					showImage();
1156				} else if(iterations <= 100){//if image loads in less than 10 seconds 
1157					setTimeout(checkLazyImage,100);
1158				} else {
1159					showImage();
1160				}
1161			}
1162			function showImage(){
1163				$item.data("owl-loaded", "loaded").removeClass("loading");
1164				$lazyImg.removeAttr("data-src");
1165				base.options.lazyEffect === "fade" ? $lazyImg.fadeIn(400) : $lazyImg.show();
1166				if(typeof base.options.afterLazyLoad === "function") {
1167					base.options.afterLazyLoad.apply(this,[base.$elem]);
1168				}
1169			}
1170		},
1171
1172		autoHeight : function(){
1173			var base = this;
1174			var $currentimg = $(base.$owlItems[base.currentItem]).find("img");
1175
1176			if($currentimg.get(0) !== undefined ){
1177				var iterations = 0;
1178				checkImage();
1179			} else {
1180				addHeight();
1181			}
1182			function checkImage(){
1183				iterations += 1;
1184				if ( base.completeImg($currentimg.get(0)) ) {
1185					addHeight();
1186				} else if(iterations <= 100){ //if image loads in less than 10 seconds 
1187					setTimeout(checkImage,100);
1188				} else {
1189					base.wrapperOuter.css("height", ""); //Else remove height attribute
1190				}
1191			}
1192
1193			function addHeight(){
1194				var $currentItem = $(base.$owlItems[base.currentItem]).height();
1195				base.wrapperOuter.css("height",$currentItem+"px");
1196				if(!base.wrapperOuter.hasClass("autoHeight")){
1197					setTimeout(function(){
1198						base.wrapperOuter.addClass("autoHeight");
1199					},0);
1200				}
1201			}
1202		},
1203
1204		completeImg : function(img) {
1205		    if (!img.complete) {
1206		        return false;
1207		    }
1208		    if (typeof img.naturalWidth !== "undefined" && img.naturalWidth == 0) {
1209		        return false;
1210		    }
1211		    return true;
1212		},
1213
1214		onVisibleItems : function(){
1215			var base = this;
1216
1217			if(base.options.addClassActive === true){
1218				base.$owlItems.removeClass("active");
1219			}
1220			base.visibleItems = [];
1221			for(var i=base.currentItem; i<base.currentItem + base.options.items; i++){
1222				base.visibleItems.push(i);
1223
1224				if(base.options.addClassActive === true){
1225					$(base.$owlItems[i]).addClass("active");
1226				}
1227			}
1228			base.owl.visibleItems = base.visibleItems;
1229		},
1230
1231		transitionTypes : function(className){
1232			var base = this;
1233			//Currently available: "fade","backSlide","goDown","fadeUp"
1234			base.outClass = "owl-"+className+"-out";
1235			base.inClass = "owl-"+className+"-in";
1236		},
1237
1238		singleItemTransition : function(){
1239			var base = this;
1240			base.isTransition = true;
1241
1242			var outClass = base.outClass,
1243				inClass = base.inClass,
1244				$currentItem = base.$owlItems.eq(base.currentItem),
1245				$prevItem = base.$owlItems.eq(base.prevItem),
1246				prevPos = Math.abs(base.positionsInArray[base.currentItem]) + base.positionsInArray[base.prevItem],
1247				origin = Math.abs(base.positionsInArray[base.currentItem])+base.itemWidth/2;
1248
1249            base.$owlWrapper
1250	            .addClass('owl-origin')
1251	            .css({
1252	            	"-webkit-transform-origin" : origin+"px",
1253	            	"-moz-perspective-origin" : origin+"px",
1254	            	"perspective-origin" : origin+"px"
1255	            });
1256	        function transStyles(prevPos,zindex){
1257				return {
1258					"position" : "relative",
1259					"left" : prevPos+"px"
1260				};
1261			}
1262
1263	        var animEnd = 'webkitAnimationEnd oAnimationEnd MSAnimationEnd animationend';
1264
1265			$prevItem
1266			.css(transStyles(prevPos,10))
1267			.addClass(outClass)
1268			.on(animEnd, function() {
1269				base.endPrev = true;
1270				$prevItem.off(animEnd);
1271		    	base.clearTransStyle($prevItem,outClass);
1272			});
1273
1274			$currentItem
1275			.addClass(inClass)
1276			.on(animEnd, function() {
1277				base.endCurrent = true;
1278				$currentItem.off(animEnd);
1279		    	base.clearTransStyle($currentItem,inClass);
1280		    });
1281		},
1282
1283		clearTransStyle : function(item,classToRemove){
1284			var base = this;
1285			item.css({
1286					"position" : "",
1287					"left" : ""
1288				})
1289				.removeClass(classToRemove);
1290			if(base.endPrev && base.endCurrent){
1291				base.$owlWrapper.removeClass('owl-origin');
1292				base.endPrev = false;
1293				base.endCurrent = false;
1294				base.isTransition = false;
1295			}
1296		},
1297
1298		owlStatus : function(){
1299			var base = this;
1300			base.owl = {
1301				"userOptions"	: base.userOptions,
1302				"baseElement" 	: base.$elem,
1303				"userItems"		: base.$userItems,
1304				"owlItems"		: base.$owlItems,
1305				"currentItem"	: base.currentItem,
1306				"prevItem"		: base.prevItem,
1307				"visibleItems"	: base.visibleItems,
1308				"isTouch" 		: base.browser.isTouch,
1309				"browser"		: base.browser,
1310				"dragDirection" : base.dragDirection
1311			}
1312		},
1313
1314		clearEvents : function(){
1315			var base = this;
1316			base.$elem.off(".owl owl mousedown.disableTextSelect");
1317			$(document).off(".owl owl");
1318			$(window).off("resize", base.resizer);
1319		},
1320
1321		unWrap : function(){
1322			var base = this;
1323			if(base.$elem.children().length !== 0){
1324				base.$owlWrapper.unwrap();
1325				base.$userItems.unwrap().unwrap();
1326				if(base.owlControls){
1327					base.owlControls.remove();
1328				}
1329			}
1330			base.clearEvents();
1331			base.$elem
1332				.attr("style", base.$elem.data("owl-originalStyles") || "")
1333				.attr("class", base.$elem.data("owl-originalClasses"));
1334		},
1335
1336		destroy : function(){
1337			var base = this;
1338			base.stop();
1339			clearInterval(base.checkVisible);
1340			base.unWrap();
1341			base.$elem.removeData();
1342		},
1343
1344		reinit : function(newOptions){
1345			var base = this;
1346			var options = $.extend({}, base.userOptions, newOptions);
1347		 	base.unWrap();
1348		 	base.init(options,base.$elem);
1349		},
1350
1351		addItem : function(htmlString,targetPosition){
1352			var base = this,
1353				position;
1354
1355			if(!htmlString){return false}
1356
1357			if(base.$elem.children().length === 0){
1358				base.$elem.append(htmlString);
1359				base.setVars();
1360				return false;
1361			}
1362			base.unWrap();
1363			if(targetPosition === undefined || targetPosition === -1){
1364				position = -1;
1365			} else {
1366				position = targetPosition;
1367			}
1368			if(position >= base.$userItems.length || position === -1){
1369				base.$userItems.eq(-1).after(htmlString)
1370			} else {
1371				base.$userItems.eq(position).before(htmlString)
1372			}
1373
1374			base.setVars();
1375		},
1376
1377		removeItem : function(targetPosition){
1378			var base = this,
1379				position;
1380
1381			if(base.$elem.children().length === 0){return false}
1382			
1383			if(targetPosition === undefined || targetPosition === -1){
1384				position = -1;
1385			} else {
1386				position = targetPosition;
1387			}
1388
1389			base.unWrap();
1390			base.$userItems.eq(position).remove();
1391			base.setVars();
1392		}
1393
1394	};
1395
1396	$.fn.owlCarousel = function( options ){
1397		return this.each(function() {
1398			if($(this).data("owl-init") === true){
1399				return false;
1400			}
1401			$(this).data("owl-init", true);
1402			var carousel = Object.create( Carousel );
1403			carousel.init( options, this );
1404			$.data( this, "owlCarousel", carousel );
1405		});
1406	};
1407
1408	$.fn.owlCarousel.options = {
1409
1410		items : 5,
1411		itemsCustom : false,
1412		itemsDesktop : [1199,4],
1413		itemsDesktopSmall : [979,3],
1414		itemsTablet : [768,2],
1415		itemsTabletSmall : false,
1416		itemsMobile : [479,1],
1417		singleItem : false,
1418		itemsScaleUp : false,
1419
1420		slideSpeed : 200,
1421		paginationSpeed : 800,
1422		rewindSpeed : 1000,
1423
1424		autoPlay : false,
1425		stopOnHover : false,
1426
1427		navigation : false,
1428		navigationText : ["prev","next"],
1429		rewindNav : true,
1430		scrollPerPage : false,
1431
1432		pagination : true,
1433		paginationNumbers : false,
1434
1435		responsive : true,
1436		responsiveRefreshRate : 200,
1437		responsiveBaseWidth	: window,
1438		
1439
1440		baseClass : "owl-carousel",
1441		theme : "owl-theme",
1442
1443		lazyLoad : false,
1444		lazyFollow : true,
1445		lazyEffect : "fade",
1446
1447		autoHeight : false,
1448
1449		jsonPath : false,
1450		jsonSuccess : false,
1451
1452		dragBeforeAnimFinish : true,
1453		mouseDrag : true,
1454		touchDrag : true,
1455
1456		addClassActive : false,
1457		transitionStyle : false,
1458
1459		beforeUpdate : false,
1460		afterUpdate : false,
1461		beforeInit : false,
1462		afterInit : false,
1463		beforeMove : false,
1464		afterMove : false,
1465		afterAction : false,
1466		startDragging : false,
1467		afterLazyLoad: false
1468		
1469	};
1470})( jQuery, window, document );

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.