PageSourceSearch

https://teamfm.nl/wp-content/plugins/proradio-swipebox/swipebox/NEW/js/jquery.swipebox.js?ver=PR.5.9.1

js teamfm.nl collected 2026-10-01 16:37:05 UTC 25,355 bytes, 964 lines download raw bytes

1/*! Swipebox v1.5.2 | Constantin Saguin csag.co | MIT License | github.com/brutaldesign/swipebox */
2
3;( function ( window, document, $, undefined ) {
4
5	$.swipebox = function( elem, options ) {
6
7        $( elem ).addClass( 'swipebox' ); // fugly but yea, swipebox class all the things
8
9		// Default options
10		var ui,
11			defaults = {
12				useCSS : true,
13				useSVG : true,
14				initialIndexOnArray : 0,
15				removeBarsOnMobile : true,
16				hideCloseButtonOnMobile : false,
17				hideBarsDelay : 3000,
18				videoMaxWidth : 1140,
19				vimeoColor : 'cccccc',
20				beforeOpen: null,
21				afterOpen: null,
22				afterClose: null,
23				afterMedia: null,
24				nextSlide: null,
25				prevSlide: null,
26				loopAtEnd: false,
27				autoplayVideos: false,
28				queryStringData: {},
29				toggleClassOnLoad: ''
30			},
31
32			plugin = this,
33			elements = [], // slides array [ { href:'...', title:'...' }, ...],
34			$elem,
35			selector = '.swipebox',
36			isMobile = navigator.userAgent.match( /(iPad)|(iPhone)|(iPod)|(Android)|(PlayBook)|(BB10)|(BlackBerry)|(Opera Mini)|(IEMobile)|(webOS)|(MeeGo)/i ),
37			isTouch = isMobile !== null || document.createTouch !== undefined || ( 'ontouchstart' in window ) || ( 'onmsgesturechange' in window ) || navigator.msMaxTouchPoints,
38			supportSVG = !! document.createElementNS && !! document.createElementNS( 'http://www.w3.org/2000/svg', 'svg').createSVGRect,
39			winWidth = window.innerWidth ? window.innerWidth : $( window ).width(),
40			winHeight = window.innerHeight ? window.innerHeight : $( window ).height(),
41			currentX = 0,
42			/* jshint multistr: true */
43			html = '<div id="swipebox-overlay">\
44					<div id="swipebox-container">\
45						<div id="swipebox-slider"></div>\
46						<div id="swipebox-top-bar">\
47							<div id="swipebox-title"></div>\
48						</div>\
49						<div id="swipebox-bottom-bar">\
50							<div id="swipebox-arrows">\
51								<a id="swipebox-prev"></a>\
52								<a id="swipebox-next"></a>\
53							</div>\
54						</div>\
55						<a id="swipebox-close"></a>\
56					</div>\
57			</div>';
58
59        plugin.settings = {};
60        
61		$.swipebox.close = function () {
62			ui.closeSlide();
63		};
64
65		$.swipebox.extend = function () {
66			return ui;
67		};
68
69		plugin.init = function() {
70
71			plugin.settings = $.extend( {}, defaults, options );
72
73			if ( Array.isArray( elem ) ) {
74
75				elements = elem;
76				ui.target = $( window );
77				ui.init( plugin.settings.initialIndexOnArray );
78
79			} else {
80
81				$( document ).on( 'click', selector, function( event ) {
82
83					// console.log( isTouch );
84
85					if ( event.target.parentNode.className === 'slide current' ) {
86
87						return false;
88					}
89
90					if ( ! Array.isArray( elem ) ) {
91						ui.destroy();
92						$elem = $( selector );
93						ui.actions();
94					}
95
96					elements = [];
97					var index, relType, relVal;
98
99					// Allow for HTML5 compliant attribute before legacy use of rel
100					if ( ! relVal ) {
101						relType = 'data-rel';
102						relVal = $( this ).attr( relType );
103					}
104
105					if ( ! relVal ) {
106						relType = 'rel';
107						relVal = $( this ).attr( relType );
108					}
109
110					if ( relVal && relVal !== '' && relVal !== 'nofollow' ) {
111						$elem = $( selector ).filter( '[' + relType + '="' + relVal + '"]' );
112					} else {
113						$elem = $( selector );
114					}
115
116					$elem.each( function() {
117
118						var title = null,
119							href = null;
120
121						if ( $( this ).attr( 'title' ) ) {
122							title = $( this ).attr( 'title' );
123						}
124
125						if ( $( this ).attr( 'href' ) ) {
126							href = $( this ).attr( 'href' );
127						}
128
129						elements.push( {
130							href: href,
131							title: title
132						} );
133					} );
134
135					index = $elem.index( $( this ) );
136					event.preventDefault();
137					event.stopPropagation();
138					ui.target = $( event.target );
139					ui.init( index );
140				} );
141			}
142		};
143
144		ui = {
145
146			/**
147			 * Initiate Swipebox
148			 */
149			init : function( index ) {
150				if ( plugin.settings.beforeOpen ) {
151					plugin.settings.beforeOpen();
152				}
153				this.target.trigger( 'swipebox-start' );
154				$.swipebox.isOpen = true;
155				this.build();
156				this.openSlide( index );
157				this.openMedia( index );
158				this.preloadMedia( index+1 );
159				this.preloadMedia( index-1 );
160				if ( plugin.settings.afterOpen ) {
161					plugin.settings.afterOpen(index);
162				}
163			},
164
165			/**
166			 * Built HTML containers and fire main functions
167			 */
168			build : function () {
169				var $this = this, bg;
170
171				$( 'body' ).append( html );
172
173				if ( supportSVG && plugin.settings.useSVG === true ) {
174					bg = $( '#swipebox-close' ).css( 'background-image' );
175					bg = bg.replace( 'png', 'svg' );
176					$( '#swipebox-prev, #swipebox-next, #swipebox-close' ).css( {
177						'background-image' : bg
178					} );
179				}
180
181				if ( isMobile && plugin.settings.removeBarsOnMobile ) {
182					$( '#swipebox-bottom-bar, #swipebox-top-bar' ).remove();
183				}
184
185				$.each( elements,  function() {
186					$( '#swipebox-slider' ).append( '<div class="slide"></div>' );
187				} );
188
189				$this.setDim();
190				$this.actions();
191
192				if ( isTouch ) {
193					$this.gesture();
194				}
195
196				// Devices can have both touch and keyboard input so always allow key events
197				$this.keyboard();
198
199				$this.animBars();
200				$this.resize();
201
202			},
203
204			/**
205			 * Set dimensions depending on windows width and height
206			 */
207			setDim : function () {
208
209				var width, height, sliderCss = {};
210
211				// Reset dimensions on mobile orientation change
212				if ( 'onorientationchange' in window ) {
213
214					window.addEventListener( 'orientationchange', function() {
215						if ( window.orientation === 0 ) {
216							width = winWidth;
217							height = winHeight;
218						} else if ( window.orientation === 90 || window.orientation === -90 ) {
219							width = winHeight;
220							height = winWidth;
221						}
222					}, false );
223
224
225				} else {
226
227					width = window.innerWidth ? window.innerWidth : $( window ).width();
228					height = window.innerHeight ? window.innerHeight : $( window ).height();
229				}
230
231				sliderCss = {
232					width : width,
233					height : height
234				};
235
236				$( '#swipebox-overlay' ).css( sliderCss );
237
238			},
239
240			/**
241			 * Reset dimensions on window resize envent
242			 */
243			resize : function () {
244				var $this = this;
245
246				$( window ).resize( function() {
247					$this.setDim();
248				} ).resize();
249			},
250
251			/**
252			 * Check if device supports CSS transitions
253			 */
254			supportTransition : function () {
255
256				var prefixes = 'transition WebkitTransition MozTransition OTransition msTransition KhtmlTransition'.split( ' ' ),
257					i;
258
259				for ( i = 0; i < prefixes.length; i++ ) {
260					if ( document.createElement( 'div' ).style[ prefixes[i] ] !== undefined ) {
261						return prefixes[i];
262					}
263				}
264				return false;
265			},
266
267			/**
268			 * Check if CSS transitions are allowed (options + devicesupport)
269			 */
270			doCssTrans : function () {
271				if ( plugin.settings.useCSS && this.supportTransition() ) {
272					return true;
273				}
274			},
275
276			/**
277			 * Touch navigation
278			 */
279			gesture : function () {
280
281				var $this = this,
282					index,
283					hDistance,
284					vDistance,
285					hDistanceLast,
286					vDistanceLast,
287					hDistancePercent,
288					vSwipe = false,
289					hSwipe = false,
290					hSwipMinDistance = 10,
291					vSwipMinDistance = 50,
292					startCoords = {},
293					endCoords = {},
294					bars = $( '#swipebox-top-bar, #swipebox-bottom-bar' ),
295					slider = $( '#swipebox-slider' );
296
297				bars.addClass( 'visible-bars' );
298				$this.setTimeout();
299
300				$( 'body' ).bind( 'touchstart', function( event ) {
301
302					$( this ).addClass( 'touching' );
303					index = $( '#swipebox-slider .slide' ).index( $( '#swipebox-slider .slide.current' ) );
304					endCoords = event.originalEvent.targetTouches[0];
305					startCoords.pageX = event.originalEvent.targetTouches[0].pageX;
306					startCoords.pageY = event.originalEvent.targetTouches[0].pageY;
307
308					$( '#swipebox-slider' ).css( {
309						'-webkit-transform' : 'translate3d(' + currentX +'%, 0, 0)',
310						'transform' : 'translate3d(' + currentX + '%, 0, 0)'
311					} );
312
313					$( '.touching' ).bind( 'touchmove',function( event ) {
314						event.preventDefault();
315						event.stopPropagation();
316						endCoords = event.originalEvent.targetTouches[0];
317
318						if ( ! hSwipe ) {
319							vDistanceLast = vDistance;
320							vDistance = endCoords.pageY - startCoords.pageY;
321							if ( Math.abs( vDistance ) >= vSwipMinDistance || vSwipe ) {
322								var opacity = 0.75 - Math.abs(vDistance) / slider.height();
323
324								slider.css( { 'top': vDistance + 'px' } );
325								slider.css( { 'opacity': opacity } );
326
327								vSwipe = true;
328							}
329						}
330
331						hDistanceLast = hDistance;
332						hDistance = endCoords.pageX - startCoords.pageX;
333						hDistancePercent = hDistance * 100 / winWidth;
334
335						if ( ! hSwipe && ! vSwipe && Math.abs( hDistance ) >= hSwipMinDistance ) {
336							$( '#swipebox-slider' ).css( {
337								'-webkit-transition' : '',
338								'transition' : ''
339							} );
340							hSwipe = true;
341						}
342
343						if ( hSwipe ) {
344
345							// swipe left
346							if ( 0 < hDistance ) {
347
348								// first slide
349								if ( 0 === index ) {
350									// console.log( 'first' );
351									$( '#swipebox-overlay' ).addClass( 'leftSpringTouch' );
352								} else {
353									// Follow gesture
354									$( '#swipebox-overlay' ).removeClass( 'leftSpringTouch' ).removeClass( 'rightSpringTouch' );
355									$( '#swipebox-slider' ).css( {
356										'-webkit-transform' : 'translate3d(' + ( currentX + hDistancePercent ) +'%, 0, 0)',
357										'transform' : 'translate3d(' + ( currentX + hDistancePercent ) + '%, 0, 0)'
358									} );
359								}
360
361							// swipe right
362							} else if ( 0 > hDistance ) {
363
364								// last Slide
365								if ( elements.length === index +1 ) {
366									// console.log( 'last' );
367									$( '#swipebox-overlay' ).addClass( 'rightSpringTouch' );
368								} else {
369									$( '#swipebox-overlay' ).removeClass( 'leftSpringTouch' ).removeClass( 'rightSpringTouch' );
370									$( '#swipebox-slider' ).css( {
371										'-webkit-transform' : 'translate3d(' + ( currentX + hDistancePercent ) +'%, 0, 0)',
372										'transform' : 'translate3d(' + ( currentX + hDistancePercent ) + '%, 0, 0)'
373									} );
374								}
375
376							}
377						}
378					} );
379
380					return false;
381
382				} ).bind( 'touchend',function( event ) {
383					event.preventDefault();
384					event.stopPropagation();
385
386					$( '#swipebox-slider' ).css( {
387						'-webkit-transition' : '-webkit-transform 0.4s ease',
388						'transition' : 'transform 0.4s ease'
389					} );
390
391					vDistance = endCoords.pageY - startCoords.pageY;
392					hDistance = endCoords.pageX - startCoords.pageX;
393					hDistancePercent = hDistance*100/winWidth;
394
395					// Swipe to bottom to close
396					if ( vSwipe ) {
397						vSwipe = false;
398						if ( Math.abs( vDistance ) >= 2 * vSwipMinDistance && Math.abs( vDistance ) > Math.abs( vDistanceLast ) ) {
399							var vOffset = vDistance > 0 ? slider.height() : - slider.height();
400							slider.animate( { top: vOffset + 'px', 'opacity': 0 },
401								300,
402								function () {
403									$this.closeSlide();
404								} );
405						} else {
406							slider.animate( { top: 0, 'opacity': 1 }, 300 );
407						}
408
409					} else if ( hSwipe ) {
410
411						hSwipe = false;
412
413						// swipeLeft
414						if( hDistance >= hSwipMinDistance && hDistance >= hDistanceLast) {
415
416							$this.getPrev();
417
418						// swipeRight
419						} else if ( hDistance <= -hSwipMinDistance && hDistance <= hDistanceLast) {
420
421							$this.getNext();
422						}
423
424					} else { // Top and bottom bars have been removed on touchable devices
425						// tap
426						if ( ! bars.hasClass( 'visible-bars' ) ) {
427							$this.showBars();
428							$this.setTimeout();
429						} else {
430							$this.clearTimeout();
431							$this.hideBars();
432						}
433					}
434
435					$( '#swipebox-slider' ).css( {
436						'-webkit-transform' : 'translate3d(' + currentX + '%, 0, 0)',
437						'transform' : 'translate3d(' + currentX + '%, 0, 0)'
438					} );
439
440					$( '#swipebox-overlay' ).removeClass( 'leftSpringTouch' ).removeClass( 'rightSpringTouch' );
441					$( '.touching' ).off( 'touchmove' ).removeClass( 'touching' );
442
443				} );
444			},
445
446			/**
447			 * Set timer to hide the action bars
448			 */
449			setTimeout: function () {
450				if ( plugin.settings.hideBarsDelay > 0 ) {
451					var $this = this;
452					$this.clearTimeout();
453					$this.timeout = window.setTimeout( function() {
454							$this.hideBars();
455						},
456
457						plugin.settings.hideBarsDelay
458					);
459				}
460			},
461
462			/**
463			 * Clear timer
464			 */
465			clearTimeout: function () {
466				window.clearTimeout( this.timeout );
467				this.timeout = null;
468			},
469
470			/**
471			 * Show navigation and title bars
472			 */
473			showBars : function () {
474				var bars = $( '#swipebox-top-bar, #swipebox-bottom-bar' );
475				if ( this.doCssTrans() ) {
476					bars.addClass( 'visible-bars' );
477				} else {
478					$( '#swipebox-top-bar' ).animate( { top : 0 }, 500 );
479					$( '#swipebox-bottom-bar' ).animate( { bottom : 0 }, 500 );
480					setTimeout( function() {
481						bars.addClass( 'visible-bars' );
482					}, 1000 );
483				}
484			},
485
486			/**
487			 * Hide navigation and title bars
488			 */
489			hideBars : function () {
490				var bars = $( '#swipebox-top-bar, #swipebox-bottom-bar' );
491				if ( this.doCssTrans() ) {
492					bars.removeClass( 'visible-bars' );
493				} else {
494					$( '#swipebox-top-bar' ).animate( { top : '-50px' }, 500 );
495					$( '#swipebox-bottom-bar' ).animate( { bottom : '-50px' }, 500 );
496					setTimeout( function() {
497						bars.removeClass( 'visible-bars' );
498					}, 1000 );
499				}
500			},
501
502			/**
503			 * Animate navigation and top bars
504			 */
505			animBars : function () {
506				var $this = this,
507					bars = $( '#swipebox-top-bar, #swipebox-bottom-bar' );
508
509				bars.addClass( 'visible-bars' );
510				$this.setTimeout();
511
512				$( '#swipebox-slider' ).click( function() {
513					if ( ! bars.hasClass( 'visible-bars' ) ) {
514						$this.showBars();
515						$this.setTimeout();
516					}
517				} );
518
519				$( '#swipebox-bottom-bar' ).hover( function() {
520					$this.showBars();
521					bars.addClass( 'visible-bars' );
522					$this.clearTimeout();
523
524				}, function() {
525					if ( plugin.settings.hideBarsDelay > 0 ) {
526						bars.removeClass( 'visible-bars' );
527						$this.setTimeout();
528					}
529
530				} );
531			},
532
533			/**
534			 * Keyboard navigation
535			 */
536			keyboard : function () {
537				var $this = this;
538				$( window ).bind( 'keyup', function( event ) {
539					event.preventDefault();
540					event.stopPropagation();
541
542					if ( event.keyCode === 37 ) {
543
544						$this.getPrev();
545
546					} else if ( event.keyCode === 39 ) {
547
548						$this.getNext();
549
550					} else if ( event.keyCode === 27 ) {
551
552						$this.closeSlide();
553					}
554				} );
555			},
556
557			/**
558			 * Navigation events : go to next slide, go to prevous slide and close
559			 */
560			actions : function () {
561				var $this = this,
562					action = 'touchend click'; // Just detect for both event types to allow for multi-input
563
564				if ( elements.length < 2 ) {
565
566					$( '#swipebox-bottom-bar' ).hide();
567
568					if ( undefined === elements[ 1 ] ) {
569						$( '#swipebox-top-bar' ).hide();
570					}
571
572				} else {
573					$( '#swipebox-prev' ).bind( action, function( event ) {
574						event.preventDefault();
575						event.stopPropagation();
576						$this.getPrev();
577						$this.setTimeout();
578					} );
579
580					$( '#swipebox-next' ).bind( action, function( event ) {
581						event.preventDefault();
582						event.stopPropagation();
583						$this.getNext();
584						$this.setTimeout();
585					} );
586				}
587
588				$( '#swipebox-close' ).bind( action, function( event ) {
589					event.preventDefault();
590					event.stopPropagation();
591					$this.closeSlide();
592				} );
593			},
594
595			/**
596			 * Set current slide
597			 */
598			setSlide : function ( index, isFirst ) {
599
600				isFirst = isFirst || false;
601
602				var slider = $( '#swipebox-slider' );
603
604				currentX = -index*100;
605
606				if ( this.doCssTrans() ) {
607					slider.css( {
608						'-webkit-transform' : 'translate3d(' + (-index*100)+'%, 0, 0)',
609						'transform' : 'translate3d(' + (-index*100)+'%, 0, 0)'
610					} );
611				} else {
612					slider.animate( { left : ( -index*100 )+'%' } );
613				}
614
615				$( '#swipebox-slider .slide' ).removeClass( 'current' );
616				$( '#swipebox-slider .slide' ).eq( index ).addClass( 'current' );
617				this.setTitle( index );
618
619				if ( isFirst ) {
620					slider.fadeIn();
621				}
622
623				$( '#swipebox-prev, #swipebox-next' ).removeClass( 'disabled' );
624
625				if ( index === 0 ) {
626					$( '#swipebox-prev' ).addClass( 'disabled' );
627				} else if ( index === elements.length - 1 && plugin.settings.loopAtEnd !== true ) {
628					$( '#swipebox-next' ).addClass( 'disabled' );
629				}
630			},
631
632			/**
633			 * Open slide
634			 */
635			openSlide : function ( index ) {
636				$( 'html' ).addClass( 'swipebox-html' );
637				if ( isTouch ) {
638					$( 'html' ).addClass( 'swipebox-touch' );
639
640					if ( plugin.settings.hideCloseButtonOnMobile ) {
641						$( 'html' ).addClass( 'swipebox-no-close-button' );
642					}
643				} else {
644					$( 'html' ).addClass( 'swipebox-no-touch' );
645				}
646				$( window ).trigger( 'resize' ); // fix scroll bar visibility on desktop
647				this.setSlide( index, true );
648			},
649
650			/**
651			 * Set a time out if the media is a video
652			 */
653			preloadMedia : function ( index ) {
654				var $this = this,
655					src = null;
656
657				if ( elements[ index ] !== undefined ) {
658					src = elements[ index ].href;
659				}
660
661				if ( ! $this.isVideo( src ) ) {
662					console.log('Preload'+src);
663					setTimeout( function() {
664						$this.openMedia( index );
665					}, 1000);
666				} else {
667					$this.openMedia( index );
668				}
669			},
670
671			/**
672			 * Open
673			 */
674			openMedia : function ( index ) {
675				var $this = this,
676					src,
677					slide;
678
679				if ( elements[ index ] !== undefined ) {
680					src = elements[ index ].href;
681				}
682
683				if ( index < 0 || index >= elements.length ) {
684					return false;
685				}
686
687				slide = $( '#swipebox-slider .slide' ).eq( index );
688
689				if ( ! $this.isVideo( src ) ) {
690					slide.addClass( 'slide-loading' );
691					$this.loadMedia( src, function() {
692                        slide.removeClass( 'slide-loading' );
693						slide.html( this );
694
695						if ( plugin.settings.afterMedia ) {
696							plugin.settings.afterMedia( index );
697						}
698					} );
699				} else {
700					slide.html( $this.getVideo( src ) );
701
702					if ( plugin.settings.afterMedia ) {
703						plugin.settings.afterMedia( index );
704					}
705				}
706
707			},
708
709			/**
710			 * Set link title attribute as caption
711			 */
712			setTitle : function ( index ) {
713				var title = null;
714
715				$( '#swipebox-title' ).empty();
716
717				if ( elements[ index ] !== undefined ) {
718					title = elements[ index ].title;
719				}
720
721				if ( title ) {
722					$( '#swipebox-top-bar' ).show();
723					$( '#swipebox-title' ).append( title );
724				} else {
725					$( '#swipebox-top-bar' ).hide();
726				}
727			},
728
729			/**
730			 * Check if the URL is a video
731			 */
732			isVideo : function ( src ) {
733
734				if ( src ) {
735					if ( src.match( /(youtube\.com|youtube-nocookie\.com)\/watch\?v=([a-zA-Z0-9\-_]+)/) || src.match( /vimeo\.com\/([0-9]*)/ ) || src.match( /youtu\.be\/([a-zA-Z0-9\-_]+)/ ) ) {
736						return true;
737					}
738
739					if ( src.toLowerCase().indexOf( 'swipeboxvideo=1' ) >= 0 ) {
740						return true;
741                    }
742				}
743			},
744
745			/**
746			 * Parse URI querystring and:
747			 * - overrides value provided via dictionary
748			 * - rebuild it again returning a string
749			 */
750			parseUri : function (uri, customData) {
751				var a = document.createElement('a'),
752					qs = {};
753
754				// Decode the URI
755				a.href = decodeURIComponent( uri );
756
757				// QueryString to Object
758				if ( a.search ) {
759					qs = JSON.parse( '{"' + a.search.toLowerCase().replace('?','').replace(/&/g,'","').replace(/=/g,'":"') + '"}' );
760				}
761				
762				// Extend with custom data
763				if ( $.isPlainObject( customData ) ) {
764					qs = $.extend( qs, customData, plugin.settings.queryStringData ); // The dev has always the final word
765				}
766
767				// Return querystring as a string
768				return $
769					.map( qs, function (val, key) {
770						if ( val && val > '' ) {
771							return encodeURIComponent( key ) + '=' + encodeURIComponent( val );
772						}
773					})
774					.join('&');
775			},
776
777			/**
778			 * Get video iframe code from URL
779			 */
780			getVideo : function( url ) {
781				var iframe = '',
782					youtubeUrl = url.match( /((?:www\.)?youtube\.com|(?:www\.)?youtube-nocookie\.com)\/watch\?v=([a-zA-Z0-9\-_]+)/ ),
783					youtubeShortUrl = url.match(/(?:www\.)?youtu\.be\/([a-zA-Z0-9\-_]+)/),
784					vimeoUrl = url.match( /(?:www\.)?vimeo\.com\/([0-9]*)/ ),
785					qs = '';
786                
787                if ( youtubeUrl || youtubeShortUrl) {
788					if ( youtubeShortUrl ) {
789						youtubeUrl = youtubeShortUrl;
790                    }
791                    
792                    console.log( youtubeUrl );
793
794					qs = ui.parseUri( url, {
795						'autoplay' : ( plugin.settings.autoplayVideos ? '1' : '0' ),
796						'v' : ''
797					});
798					iframe = '<iframe width="560" height="315" src="https://' + youtubeUrl[1] + '/embed/' + youtubeUrl[2] + '?' + qs + '" frameborder="0" allowfullscreen></iframe>';
799
800				} else if ( vimeoUrl ) {
801					qs = ui.parseUri( url, {
802						'autoplay' : ( plugin.settings.autoplayVideos ? '1' : '0' ),
803						'byline' : '0',
804						'portrait' : '0',
805						'color': plugin.settings.vimeoColor
806					});
807					iframe = '<iframe width="560" height="315"  src="//player.vimeo.com/video/' + vimeoUrl[1] + '?' + qs + '" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>';
808
809				} else {
810					iframe = '<iframe width="560" height="315" src="' + url + '" frameborder="0" allowfullscreen></iframe>';
811				}
812
813				return '<div class="swipebox-video-container" style="max-width:' + plugin.settings.videoMaxWidth + 'px"><div class="swipebox-video">' + iframe + '</div></div>';
814			},
815
816			/**
817			 * Load image
818			 */
819			loadMedia : function ( src, callback ) {
820                // Inline content
821                if ( src.trim().indexOf('#') === 0 ) {
822                    callback.call(
823                    	$('<div>', {
824                    		'class' : 'swipebox-inline-container'
825                    	})
826                    	.append(
827                    		$(src)
828	                    	.clone()
829	                    	.toggleClass( plugin.settings.toggleClassOnLoad )
830	                    )
831                    );
832                }
833                // Everything else
834                else {
835    				if ( ! this.isVideo( src ) ) {
836    					var img = $( '<img>' ).on( 'load', function() {
837    						callback.call( img );
838    					} );
839
840    					img.attr( 'src', src );
841    				}
842                }
843			},
844
845			/**
846			 * Get next slide
847			 */
848			getNext : function () {
849				var $this = this,
850					src,
851					index = $( '#swipebox-slider .slide' ).index( $( '#swipebox-slider .slide.current' ) );
852				if ( index + 1 < elements.length ) {
853
854					src = $( '#swipebox-slider .slide' ).eq( index ).contents().find( 'iframe' ).attr( 'src' );
855					$( '#swipebox-slider .slide' ).eq( index ).contents().find( 'iframe' ).attr( 'src', src );
856					index++;
857					$this.setSlide( index );
858					$this.preloadMedia( index+1 );
859					if ( plugin.settings.nextSlide ) {
860						plugin.settings.nextSlide(index);
861					}
862				} else {
863
864					if ( plugin.settings.loopAtEnd === true ) {
865						src = $( '#swipebox-slider .slide' ).eq( index ).contents().find( 'iframe' ).attr( 'src' );
866						$( '#swipebox-slider .slide' ).eq( index ).contents().find( 'iframe' ).attr( 'src', src );
867						index = 0;
868						$this.preloadMedia( index );
869						$this.setSlide( index );
870						$this.preloadMedia( index + 1 );
871						if ( plugin.settings.nextSlide ) {
872							plugin.settings.nextSlide(index);
873						}
874					} else {
875						$( '#swipebox-overlay' ).addClass( 'rightSpring' );
876						setTimeout( function() {
877							$( '#swipebox-overlay' ).removeClass( 'rightSpring' );
878						}, 500 );
879					}
880				}
881			},
882
883			/**
884			 * Get previous slide
885			 */
886			getPrev : function () {
887				var index = $( '#swipebox-slider .slide' ).index( $( '#swipebox-slider .slide.current' ) ),
888					src;
889				if ( index > 0 ) {
890					src = $( '#swipebox-slider .slide' ).eq( index ).contents().find( 'iframe').attr( 'src' );
891					$( '#swipebox-slider .slide' ).eq( index ).contents().find( 'iframe' ).attr( 'src', src );
892					index--;
893					this.setSlide( index );
894					this.preloadMedia( index-1 );
895					if ( plugin.settings.prevSlide ) {
896						plugin.settings.prevSlide(index);
897					}
898				} else {
899					$( '#swipebox-overlay' ).addClass( 'leftSpring' );
900					setTimeout( function() {
901						$( '#swipebox-overlay' ).removeClass( 'leftSpring' );
902					}, 500 );
903				}
904			},
905			/* jshint unused:false */
906			nextSlide : function ( index ) {
907				// Callback for next slide
908			},
909
910			prevSlide : function ( index ) {
911				// Callback for prev slide
912			},
913
914			/**
915			 * Close
916			 */
917			closeSlide : function () {
918				$( 'html' ).removeClass( 'swipebox-html' );
919				$( 'html' ).removeClass( 'swipebox-touch' );
920				$( window ).trigger( 'resize' );
921				this.destroy();
922			},
923
924			/**
925			 * Destroy the whole thing
926			 */
927			destroy : function () {
928				$( window ).unbind( 'keyup' );
929				$( 'body' ).unbind( 'touchstart' );
930				$( 'body' ).unbind( 'touchmove' );
931				$( 'body' ).unbind( 'touchend' );
932				$( '#swipebox-slider' ).unbind();
933				$( '#swipebox-overlay' ).remove();
934
935				if ( ! Array.isArray( elem ) ) {
936					elem.removeData( '_swipebox' );
937				}
938
939				if ( this.target ) {
940					this.target.trigger( 'swipebox-destroy' );
941				}
942
943				$.swipebox.isOpen = false;
944
945				if ( plugin.settings.afterClose ) {
946					plugin.settings.afterClose();
947				}
948			}
949		};
950
951		plugin.init();
952	};
953
954	$.fn.swipebox = function( options ) {
955
956		if ( ! $.data( this, '_swipebox' ) ) {
957			var swipebox = new $.swipebox( this, options );
958			this.data( '_swipebox', swipebox );
959		}
960		return this.data( '_swipebox' );
961
962	};
963
964}( window, document, 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.