PageSourceSearch

https://vanguard-movie.com/jquery.colorbox.js

js vanguard-movie.com collected 2026-10-02 22:29:50 UTC 29,124 bytes, 1,090 lines download raw bytes

vendor: 29,124 bytes, lines 1-1090
1/*!
2	Colorbox 1.5.14
3	license: MIT
4	http://www.jacklmoore.com/colorbox
5*/
6(function ($, document, window) {
7	var
8	// Default settings object.
9	// See http://jacklmoore.com/colorbox for details.
10	defaults = {
11		// data sources
12		html: false,
13		photo: false,
14		iframe: false,
15		inline: false,
16
17		// behavior and appearance
18		transition: "elastic",
19		speed: 300,
20		fadeOut: 300,
21		width: false,
22		initialWidth: "600",
23		innerWidth: false,
24		maxWidth: false,
25		height: false,
26		initialHeight: "450",
27		innerHeight: false,
28		maxHeight: false,
29		scalePhotos: true,
30		scrolling: true,
31		opacity: 0.9,
32		preloading: true,
33		className: false,
34		overlayClose: true,
35		escKey: true,
36		arrowKey: true,
37		top: false,
38		bottom: false,
39		left: false,
40		right: false,
41		fixed: false,
42		data: undefined,
43		closeButton: true,
44		fastIframe: true,
45		open: false,
46		reposition: true,
47		loop: true,
48		slideshow: false,
49		slideshowAuto: true,
50		slideshowSpeed: 2500,
51		slideshowStart: "start slideshow",
52		slideshowStop: "stop slideshow",
53		photoRegex: /\.(gif|png|jp(e|g|eg)|bmp|ico|webp|jxr|svg)((#|\?).*)?$/i,
54
55		// alternate image paths for high-res displays
56		retinaImage: false,
57		retinaUrl: false,
58		retinaSuffix: '@2x.$1',
59
60		// internationalization
61		current: "image {current} of {total}",
62		previous: "previous",
63		next: "next",
64		close: "close",
65		xhrError: "This content failed to load.",
66		imgError: "This image failed to load.",
67
68		// accessbility
69		returnFocus: true,
70		trapFocus: true,
71
72		// callbacks
73		onOpen: false,
74		onLoad: false,
75		onComplete: false,
76		onCleanup: false,
77		onClosed: false,
78
79		rel: function() {
80			return this.rel;
81		},
82		href: function() {
83			// using this.href would give the absolute url, when the href may have been inteded as a selector (e.g. '#container')
84			return $(this).attr('href');
85		},
86		title: function() {
87			return this.title;
88		}
89	},
90
91	// Abstracting the HTML and event identifiers for easy rebranding
92	colorbox = 'colorbox',
93	prefix = 'cbox',
94	boxElement = prefix + 'Element',
95	
96	// Events
97	event_open = prefix + '_open',
98	event_load = prefix + '_load',
99	event_complete = prefix + '_complete',
100	event_cleanup = prefix + '_cleanup',
101	event_closed = prefix + '_closed',
102	event_purge = prefix + '_purge',
103
104	// Cached jQuery Object Variables
105	$overlay,
106	$box,
107	$wrap,
108	$content,
109	$topBorder,
110	$leftBorder,
111	$rightBorder,
112	$bottomBorder,
113	$related,
114	$window,
115	$loaded,
116	$loadingBay,
117	$loadingOverlay,
118	$title,
119	$current,
120	$slideshow,
121	$next,
122	$prev,
123	$close,
124	$groupControls,
125	$events = $('<a/>'), // $({}) would be prefered, but there is an issue with jQuery 1.4.2
126	
127	// Variables for cached values or use across multiple functions
128	settings,
129	interfaceHeight,
130	interfaceWidth,
131	loadedHeight,
132	loadedWidth,
133	index,
134	photo,
135	open,
136	active,
137	closing,
138	loadingTimer,
139	publicMethod,
140	div = "div",
141	requests = 0,
142	previousCSS = {},
143	init;
144
145	// ****************
146	// HELPER FUNCTIONS
147	// ****************
148	
149	// Convenience function for creating new jQuery objects
150	function $tag(tag, id, css) {
151		var element = document.createElement(tag);
152
153		if (id) {
154			element.id = prefix + id;
155		}
156
157		if (css) {
158			element.style.cssText = css;
159		}
160
161		return $(element);
162	}
163	
164	// Get the window height using innerHeight when available to avoid an issue with iOS
165	// http://bugs.jquery.com/ticket/6724
166	function winheight() {
167		return window.innerHeight ? window.innerHeight : $(window).height();
168	}
169
170	function Settings(element, options) {
171		if (options !== Object(options)) {
172			options = {};
173		}
174
175		this.cache = {};
176		this.el = element;
177
178		this.value = function(key) {
179			var dataAttr;
180
181			if (this.cache[key] === undefined) {
182				dataAttr = $(this.el).attr('data-cbox-'+key);
183
184				if (dataAttr !== undefined) {
185					this.cache[key] = dataAttr;
186				} else if (options[key] !== undefined) {
187					this.cache[key] = options[key];
188				} else if (defaults[key] !== undefined) {
189					this.cache[key] = defaults[key];
190				}
191			}
192
193			return this.cache[key];
194		};
195
196		this.get = function(key) {
197			var value = this.value(key);
198			return $.isFunction(value) ? value.call(this.el, this) : value;
199		};
200	}
201
202	// Determine the next and previous members in a group.
203	function getIndex(increment) {
204		var
205		max = $related.length,
206		newIndex = (index + increment) % max;
207		
208		return (newIndex < 0) ? max + newIndex : newIndex;
209	}
210
211	// Convert '%' and 'px' values to integers
212	function setSize(size, dimension) {
213		return Math.round((/%/.test(size) ? ((dimension === 'x' ? $window.width() : winheight()) / 100) : 1) * parseInt(size, 10));
214	}
215	
216	// Checks an href to see if it is a photo.
217	// There is a force photo option (photo: true) for hrefs that cannot be matched by the regex.
218	function isImage(settings, url) {
219		return settings.get('photo') || settings.get('photoRegex').test(url);
220	}
221
222	function retinaUrl(settings, url) {
223		return settings.get('retinaUrl') && window.devicePixelRatio > 1 ? url.replace(settings.get('photoRegex'), settings.get('retinaSuffix')) : url;
224	}
225
226	function trapFocus(e) {
227		if ('contains' in $box[0] && !$box[0].contains(e.target) && e.target !== $overlay[0]) {
228			e.stopPropagation();
229			$box.focus();
230		}
231	}
232
233	function setClass(str) {
234		if (setClass.str !== str) {
235			$box.add($overlay).removeClass(setClass.str).addClass(str);
236			setClass.str = str;
237		}
238	}
239
240	function getRelated(rel) {
241		index = 0;
242		
243		if (rel && rel !== false && rel !== 'nofollow') {
244			$related = $('.' + boxElement).filter(function () {
245				var options = $.data(this, colorbox);
246				var settings = new Settings(this, options);
247				return (settings.get('rel') === rel);
248			});
249			index = $related.index(settings.el);
250			
251			// Check direct calls to Colorbox.
252			if (index === -1) {
253				$related = $related.add(settings.el);
254				index = $related.length - 1;
255			}
256		} else {
257			$related = $(settings.el);
258		}
259	}
260
261	function trigger(event) {
262		// for external use
263		$(document).trigger(event);
264		// for internal use
265		$events.triggerHandler(event);
266	}
267
268	var slideshow = (function(){
269		var active,
270			className = prefix + "Slideshow_",
271			click = "click." + prefix,
272			timeOut;
273
274		function clear () {
275			clearTimeout(timeOut);
276		}
277
278		function set() {
279			if (settings.get('loop') || $related[index + 1]) {
280				clear();
281				timeOut = setTimeout(publicMethod.next, settings.get('slideshowSpeed'));
282			}
283		}
284
285		function start() {
286			$slideshow
287				.html(settings.get('slideshowStop'))
288				.unbind(click)
289				.one(click, stop);
290
291			$events
292				.bind(event_complete, set)
293				.bind(event_load, clear);
294
295			$box.removeClass(className + "off").addClass(className + "on");
296		}
297
298		function stop() {
299			clear();
300			
301			$events
302				.unbind(event_complete, set)
303				.unbind(event_load, clear);
304
305			$slideshow
306				.html(settings.get('slideshowStart'))
307				.unbind(click)
308				.one(click, function () {
309					publicMethod.next();
310					start();
311				});
312
313			$box.removeClass(className + "on").addClass(className + "off");
314		}
315
316		function reset() {
317			active = false;
318			$slideshow.hide();
319			clear();
320			$events
321				.unbind(event_complete, set)
322				.unbind(event_load, clear);
323			$box.removeClass(className + "off " + className + "on");
324		}
325
326		return function(){
327			if (active) {
328				if (!settings.get('slideshow')) {
329					$events.unbind(event_cleanup, reset);
330					reset();
331				}
332			} else {
333				if (settings.get('slideshow') && $related[1]) {
334					active = true;
335					$events.one(event_cleanup, reset);
336					if (settings.get('slideshowAuto')) {
337						start();
338					} else {
339						stop();
340					}
341					$slideshow.show();
342				}
343			}
344		};
345
346	}());
347
348
349	function launch(element) {
350		var options;
351
352		if (!closing) {
353
354			options = $(element).data(colorbox);
355
356			settings = new Settings(element, options);
357			
358			getRelated(settings.get('rel'));
359
360			if (!open) {
361				open = active = true; // Prevents the page-change action from queuing up if the visitor holds down the left or right keys.
362
363				setClass(settings.get('className'));
364				
365				// Show colorbox so the sizes can be calculated in older versions of jQuery
366				$box.css({visibility:'hidden', display:'block', opacity:''});
367				
368				$loaded = $tag(div, 'LoadedContent', 'width:0; height:0; overflow:hidden; visibility:hidden');
369				$content.css({width:'', height:''}).append($loaded);
370
371				// Cache values needed for size calculations
372				interfaceHeight = $topBorder.height() + $bottomBorder.height() + $content.outerHeight(true) - $content.height();
373				interfaceWidth = $leftBorder.width() + $rightBorder.width() + $content.outerWidth(true) - $content.width();
374				loadedHeight = $loaded.outerHeight(true);
375				loadedWidth = $loaded.outerWidth(true);
376
377				// Opens inital empty Colorbox prior to content being loaded.
378				var initialWidth = setSize(settings.get('initialWidth'), 'x');
379				var initialHeight = setSize(settings.get('initialHeight'), 'y');
380				var maxWidth = settings.get('maxWidth');
381				var maxHeight = settings.get('maxHeight');
382
383				settings.w = (maxWidth !== false ? Math.min(initialWidth, setSize(maxWidth, 'x')) : initialWidth) - loadedWidth - interfaceWidth;
384				settings.h = (maxHeight !== false ? Math.min(initialHeight, setSize(maxHeight, 'y')) : initialHeight) - loadedHeight - interfaceHeight;
385
386				$loaded.css({width:'', height:settings.h});
387				publicMethod.position();
388
389				trigger(event_open);
390				settings.get('onOpen');
391
392				$groupControls.add($title).hide();
393
394				$box.focus();
395				
396				if (settings.get('trapFocus')) {
397					// Confine focus to the modal
398					// Uses event capturing that is not supported in IE8-
399					if (document.addEventListener) {
400
401						document.addEventListener('focus', trapFocus, true);
402						
403						$events.one(event_closed, function () {
404							document.removeEventListener('focus', trapFocus, true);
405						});
406					}
407				}
408
409				// Return focus on closing
410				if (settings.get('returnFocus')) {
411					$events.one(event_closed, function () {
412						$(settings.el).focus();
413					});
414				}
415			}
416
417			var opacity = parseFloat(settings.get('opacity'));
418			$overlay.css({
419				opacity: opacity === opacity ? opacity : '',
420				cursor: settings.get('overlayClose') ? 'pointer' : '',
421				visibility: 'visible'
422			}).show();
423			
424			if (settings.get('closeButton')) {
425				$close.html(settings.get('close')).appendTo($content);
426			} else {
427				$close.appendTo('<div/>'); // replace with .detach() when dropping jQuery < 1.4
428			}
429
430			load();
431		}
432	}
433
434	// Colorbox's markup needs to be added to the DOM prior to being called
435	// so that the browser will go ahead and load the CSS background images.
436	function appendHTML() {
437		if (!$box) {
438			init = false;
439			$window = $(window);
440			$box = $tag(div).attr({
441				id: colorbox,
442				'class': $.support.opacity === false ? prefix + 'IE' : '', // class for optional IE8 & lower targeted CSS.
443				role: 'dialog',
444				tabindex: '-1'
445			}).hide();
446			$overlay = $tag(div, "Overlay").hide();
447			$loadingOverlay = $([$tag(div, "LoadingOverlay")[0],$tag(div, "LoadingGraphic")[0]]);
448			$wrap = $tag(div, "Wrapper");
449			$content = $tag(div, "Content").append(
450				$title = $tag(div, "Title"),
451				$current = $tag(div, "Current"),
452				$prev = $('<button type="button"/>').attr({id:prefix+'Previous'}),
453				$next = $('<button type="button"/>').attr({id:prefix+'Next'}),
454				$slideshow = $tag('button', "Slideshow"),
455				$loadingOverlay
456			);
457
458			$close = $('<button type="button"/>').attr({id:prefix+'Close'});
459			
460			$wrap.append( // The 3x3 Grid that makes up Colorbox
461				$tag(div).append(
462					$tag(div, "TopLeft"),
463					$topBorder = $tag(div, "TopCenter"),
464					$tag(div, "TopRight")
465				),
466				$tag(div, false, 'clear:left').append(
467					$leftBorder = $tag(div, "MiddleLeft"),
468					$content,
469					$rightBorder = $tag(div, "MiddleRight")
470				),
471				$tag(div, false, 'clear:left').append(
472					$tag(div, "BottomLeft"),
473					$bottomBorder = $tag(div, "BottomCenter"),
474					$tag(div, "BottomRight")
475				)
476			).find('div div').css({'float': 'left'});
477			
478			$loadingBay = $tag(div, false, 'position:absolute; width:9999px; visibility:hidden; display:none; max-width:none;');
479			
480			$groupControls = $next.add($prev).add($current).add($slideshow);
481		}
482		if (document.body && !$box.parent().length) {
483			$(document.body).append($overlay, $box.append($wrap, $loadingBay));
484		}
485	}
486
487	// Add Colorbox's event bindings
488	function addBindings() {
489		function clickHandler(e) {
490			// ignore non-left-mouse-clicks and clicks modified with ctrl / command, shift, or alt.
491			// See: http://jacklmoore.com/notes/click-events/
492			if (!(e.which > 1 || e.shiftKey || e.altKey || e.metaKey || e.ctrlKey)) {
493				e.preventDefault();
494				launch(this);
495			}
496		}
497
498		if ($box) {
499			if (!init) {
500				init = true;
501
502				// Anonymous functions here keep the public method from being cached, thereby allowing them to be redefined on the fly.
503				$next.click(function () {
504					publicMethod.next();
505				});
506				$prev.click(function () {
507					publicMethod.prev();
508				});
509				$close.click(function () {
510					publicMethod.close();
511				});
512				$overlay.click(function () {
513					if (settings.get('overlayClose')) {
514						publicMethod.close();
515					}
516				});
517				
518				// Key Bindings
519				$(document).bind('keydown.' + prefix, function (e) {
520					var key = e.keyCode;
521					if (open && settings.get('escKey') && key === 27) {
522						e.preventDefault();
523						publicMethod.close();
524					}
525					if (open && settings.get('arrowKey') && $related[1] && !e.altKey) {
526						if (key === 37) {
527							e.preventDefault();
528							$prev.click();
529						} else if (key === 39) {
530							e.preventDefault();
531							$next.click();
532						}
533					}
534				});
535
536				if ($.isFunction($.fn.on)) {
537					// For jQuery 1.7+
538					$(document).on('click.'+prefix, '.'+boxElement, clickHandler);
539				} else {
540					// For jQuery 1.3.x -> 1.6.x
541					// This code is never reached in jQuery 1.9, so do not contact me about 'live' being removed.
542					// This is not here for jQuery 1.9, it's here for legacy users.
543					$('.'+boxElement).live('click.'+prefix, clickHandler);
544				}
545			}
546			return true;
547		}
548		return false;
549	}
550
551	// Don't do anything if Colorbox already exists.
552	if ($[colorbox]) {
553		return;
554	}
555
556	// Append the HTML when the DOM loads
557	$(appendHTML);
558
559
560	// ****************
561	// PUBLIC FUNCTIONS
562	// Usage format: $.colorbox.close();
563	// Usage from within an iframe: parent.jQuery.colorbox.close();
564	// ****************
565	
566	publicMethod = $.fn[colorbox] = $[colorbox] = function (options, callback) {
567		var settings;
568		var $obj = this;
569
570		options = options || {};
571
572		if ($.isFunction($obj)) { // assume a call to $.colorbox
573			$obj = $('<a/>');
574			options.open = true;
575		} else if (!$obj[0]) { // colorbox being applied to empty collection
576			return $obj;
577		}
578
579
580		if (!$obj[0]) { // colorbox being applied to empty collection
581			return $obj;
582		}
583		
584		appendHTML();
585
586		if (addBindings()) {
587
588			if (callback) {
589				options.onComplete = callback;
590			}
591
592			$obj.each(function () {
593				var old = $.data(this, colorbox) || {};
594				$.data(this, colorbox, $.extend(old, options));
595			}).addClass(boxElement);
596
597			settings = new Settings($obj[0], options);
598			
599			if (settings.get('open')) {
600				launch($obj[0]);
601			}
602		}
603		
604		return $obj;
605	};
606
607	publicMethod.position = function (speed, loadedCallback) {
608		var
609		css,
610		top = 0,
611		left = 0,
612		offset = $box.offset(),
613		scrollTop,
614		scrollLeft;
615		
616		$window.unbind('resize.' + prefix);
617
618		// remove the modal so that it doesn't influence the document width/height
619		$box.css({top: -9e4, left: -9e4});
620
621		scrollTop = $window.scrollTop();
622		scrollLeft = $window.scrollLeft();
623
624		if (settings.get('fixed')) {
625			offset.top -= scrollTop;
626			offset.left -= scrollLeft;
627			$box.css({position: 'fixed'});
628		} else {
629			top = scrollTop;
630			left = scrollLeft;
631			$box.css({position: 'absolute'});
632		}
633
634		// keeps the top and left positions within the browser's viewport.
635		if (settings.get('right') !== false) {
636			left += Math.max($window.width() - settings.w - loadedWidth - interfaceWidth - setSize(settings.get('right'), 'x'), 0);
637		} else if (settings.get('left') !== false) {
638			left += setSize(settings.get('left'), 'x');
639		} else {
640			left += Math.round(Math.max($window.width() - settings.w - loadedWidth - interfaceWidth, 0) / 2);
641		}
642		
643		if (settings.get('bottom') !== false) {
644			top += Math.max(winheight() - settings.h - loadedHeight - interfaceHeight - setSize(settings.get('bottom'), 'y'), 0);
645		} else if (settings.get('top') !== false) {
646			top += setSize(settings.get('top'), 'y');
647		} else {
648			top += Math.round(Math.max(winheight() - settings.h - loadedHeight - interfaceHeight, 0) / 2);
649		}
650
651		$box.css({top: offset.top, left: offset.left, visibility:'visible'});
652		
653		// this gives the wrapper plenty of breathing room so it's floated contents can move around smoothly,
654		// but it has to be shrank down around the size of div#colorbox when it's done.  If not,
655		// it can invoke an obscure IE bug when using iframes.
656		$wrap[0].style.width = $wrap[0].style.height = "9999px";
657		
658		function modalDimensions() {
659			$topBorder[0].style.width = $bottomBorder[0].style.width = $content[0].style.width = (parseInt($box[0].style.width,10) - interfaceWidth)+'px';
660			$content[0].style.height = $leftBorder[0].style.height = $rightBorder[0].style.height = (parseInt($box[0].style.height,10) - interfaceHeight)+'px';
661		}
662
663		css = {width: settings.w + loadedWidth + interfaceWidth, height: settings.h + loadedHeight + interfaceHeight, top: top, left: left};
664
665		// setting the speed to 0 if the content hasn't changed size or position
666		if (speed) {
667			var tempSpeed = 0;
668			$.each(css, function(i){
669				if (css[i] !== previousCSS[i]) {
670					tempSpeed = speed;
671					return;
672				}
673			});
674			speed = tempSpeed;
675		}
676
677		previousCSS = css;
678
679		if (!speed) {
680			$box.css(css);
681		}
682
683		$box.dequeue().animate(css, {
684			duration: speed || 0,
685			complete: function () {
686				modalDimensions();
687				
688				active = false;
689				
690				// shrink the wrapper down to exactly the size of colorbox to avoid a bug in IE's iframe implementation.
691				$wrap[0].style.width = (settings.w + loadedWidth + interfaceWidth) + "px";
692				$wrap[0].style.height = (settings.h + loadedHeight + interfaceHeight) + "px";
693				
694				if (settings.get('reposition')) {
695					setTimeout(function () {  // small delay before binding onresize due to an IE8 bug.
696						$window.bind('resize.' + prefix, publicMethod.position);
697					}, 1);
698				}
699
700				if ($.isFunction(loadedCallback)) {
701					loadedCallback();
702				}
703			},
704			step: modalDimensions
705		});
706	};
707
708	publicMethod.resize = function (options) {
709		var scrolltop;
710		
711		if (open) {
712			options = options || {};
713			
714			if (options.width) {
715				settings.w = setSize(options.width, 'x') - loadedWidth - interfaceWidth;
716			}
717
718			if (options.innerWidth) {
719				settings.w = setSize(options.innerWidth, 'x');
720			}
721
722			$loaded.css({width: settings.w});
723			
724			if (options.height) {
725				settings.h = setSize(options.height, 'y') - loadedHeight - interfaceHeight;
726			}
727
728			if (options.innerHeight) {
729				settings.h = setSize(options.innerHeight, 'y');
730			}
731
732			if (!options.innerHeight && !options.height) {
733				scrolltop = $loaded.scrollTop();
734				$loaded.css({height: "auto"});
735				settings.h = $loaded.height();
736			}
737
738			$loaded.css({height: settings.h});
739
740			if(scrolltop) {
741				$loaded.scrollTop(scrolltop);
742			}
743			
744			publicMethod.position(settings.get('transition') === "none" ? 0 : settings.get('speed'));
745		}
746	};
747
748	publicMethod.prep = function (object) {
749		if (!open) {
750			return;
751		}
752		
753		var callback, speed = settings.get('transition') === "none" ? 0 : settings.get('speed');
754
755		$loaded.remove();
756
757		$loaded = $tag(div, 'LoadedContent').append(object);
758		
759		function getWidth() {
760			settings.w = settings.w || $loaded.width();
761			settings.w = settings.mw && settings.mw < settings.w ? settings.mw : settings.w;
762			return settings.w;
763		}
764		function getHeight() {
765			settings.h = settings.h || $loaded.height();
766			settings.h = settings.mh && settings.mh < settings.h ? settings.mh : settings.h;
767			return settings.h;
768		}
769		
770		$loaded.hide()
771		.appendTo($loadingBay.show())// content has to be appended to the DOM for accurate size calculations.
772		.css({width: getWidth(), overflow: settings.get('scrolling') ? 'auto' : 'hidden'})
773		.css({height: getHeight()})// sets the height independently from the width in case the new width influences the value of height.
774		.prependTo($content);
775		
776		$loadingBay.hide();
777		
778		// floating the IMG removes the bottom line-height and fixed a problem where IE miscalculates the width of the parent element as 100% of the document width.
779		
780		$(photo).css({'float': 'none'});
781
782		setClass(settings.get('className'));
783
784		callback = function () {
785			var total = $related.length,
786				iframe,
787				complete;
788			
789			if (!open) {
790				return;
791			}
792			
793			function removeFilter() { // Needed for IE8 in versions of jQuery prior to 1.7.2
794				if ($.support.opacity === false) {
795					$box[0].style.removeAttribute('filter');
796				}
797			}
798			
799			complete = function () {
800				clearTimeout(loadingTimer);
801				$loadingOverlay.hide();
802				trigger(event_complete);
803				settings.get('onComplete');
804			};
805
806			
807			$title.html(settings.get('title')).show();
808			$loaded.show();
809			
810			if (total > 1) { // handle grouping
811				if (typeof settings.get('current') === "string") {
812					$current.html(settings.get('current').replace('{current}', index + 1).replace('{total}', total)).show();
813				}
814				
815				$next[(settings.get('loop') || index < total - 1) ? "show" : "hide"]().html(settings.get('next'));
816				$prev[(settings.get('loop') || index) ? "show" : "hide"]().html(settings.get('previous'));
817				
818				slideshow();
819				
820				// Preloads images within a rel group
821				if (settings.get('preloading')) {
822					$.each([getIndex(-1), getIndex(1)], function(){
823						var img,
824							i = $related[this],
825							settings = new Settings(i, $.data(i, colorbox)),
826							src = settings.get('href');
827
828						if (src && isImage(settings, src)) {
829							src = retinaUrl(settings, src);
830							img = document.createElement('img');
831							img.src = src;
832						}
833					});
834				}
835			} else {
836				$groupControls.hide();
837			}
838			
839			if (settings.get('iframe')) {
840				iframe = document.createElement('iframe');
841				
842				if ('frameBorder' in iframe) {
843					iframe.frameBorder = 0;
844				}
845				
846				if ('allowTransparency' in iframe) {
847					iframe.allowTransparency = "true";
848				}
849
850				if (!settings.get('scrolling')) {
851					iframe.scrolling = "no";
852				}
853				
854				$(iframe)
855					.attr({
856						src: settings.get('href'),
857						name: (new Date()).getTime(), // give the iframe a unique name to prevent caching
858						'class': prefix + 'Iframe',
859						allowFullScreen : true // allow HTML5 video to go fullscreen
860					})
861					.one('load', complete)
862					.appendTo($loaded);
863				
864				$events.one(event_purge, function () {
865					iframe.src = "//about:blank";
866				});
867
868				if (settings.get('fastIframe')) {
869					$(iframe).trigger('load');
870				}
871			} else {
872				complete();
873			}
874			
875			if (settings.get('transition') === 'fade') {
876				$box.fadeTo(speed, 1, removeFilter);
877			} else {
878				removeFilter();
879			}
880		};
881		
882		if (settings.get('transition') === 'fade') {
883			$box.fadeTo(speed, 0, function () {
884				publicMethod.position(0, callback);
885			});
886		} else {
887			publicMethod.position(speed, callback);
888		}
889	};
890
891	function load () {
892		var href, setResize, prep = publicMethod.prep, $inline, request = ++requests;
893		
894		active = true;
895		
896		photo = false;
897		
898		trigger(event_purge);
899		trigger(event_load);
900		settings.get('onLoad');
901		
902		settings.h = settings.get('height') ?
903				setSize(settings.get('height'), 'y') - loadedHeight - interfaceHeight :
904				settings.get('innerHeight') && setSize(settings.get('innerHeight'), 'y');
905		
906		settings.w = settings.get('width') ?
907				setSize(settings.get('width'), 'x') - loadedWidth - interfaceWidth :
908				settings.get('innerWidth') && setSize(settings.get('innerWidth'), 'x');
909		
910		// Sets the minimum dimensions for use in image scaling
911		settings.mw = settings.w;
912		settings.mh = settings.h;
913		
914		// Re-evaluate the minimum width and height based on maxWidth and maxHeight values.
915		// If the width or height exceed the maxWidth or maxHeight, use the maximum values instead.
916		if (settings.get('maxWidth')) {
917			settings.mw = setSize(settings.get('maxWidth'), 'x') - loadedWidth - interfaceWidth;
918			settings.mw = settings.w && settings.w < settings.mw ? settings.w : settings.mw;
919		}
920		if (settings.get('maxHeight')) {
921			settings.mh = setSize(settings.get('maxHeight'), 'y') - loadedHeight - interfaceHeight;
922			settings.mh = settings.h && settings.h < settings.mh ? settings.h : settings.mh;
923		}
924		
925		href = settings.get('href');
926		
927		loadingTimer = setTimeout(function () {
928			$loadingOverlay.show();
929		}, 100);
930		
931		if (settings.get('inline')) {
932			var $target = $(href);
933			// Inserts an empty placeholder where inline content is being pulled from.
934			// An event is bound to put inline content back when Colorbox closes or loads new content.
935			$inline = $('<div>').hide().insertBefore($target);
936
937			$events.one(event_purge, function () {
938				$inline.replaceWith($target);
939			});
940
941			prep($target);
942		} else if (settings.get('iframe')) {
943			// IFrame element won't be added to the DOM until it is ready to be displayed,
944			// to avoid problems with DOM-ready JS that might be trying to run in that iframe.
945			prep(" ");
946		} else if (settings.get('html')) {
947			prep(settings.get('html'));
948		} else if (isImage(settings, href)) {
949
950			href = retinaUrl(settings, href);
951
952			photo = new Image();
953
954			$(photo)
955			.addClass(prefix + 'Photo')
956			.bind('error',function () {
957				prep($tag(div, 'Error').html(settings.get('imgError')));
958			})
959			.one('load', function () {
960				if (request !== requests) {
961					return;
962				}
963
964				// A small pause because some browsers will occassionaly report a 
965				// img.width and img.height of zero immediately after the img.onload fires
966				setTimeout(function(){
967					var percent;
968
969					$.each(['alt', 'longdesc', 'aria-describedby'], function(i,val){
970						var attr = $(settings.el).attr(val) || $(settings.el).attr('data-'+val);
971						if (attr) {
972							photo.setAttribute(val, attr);
973						}
974					});
975
976					if (settings.get('retinaImage') && window.devicePixelRatio > 1) {
977						photo.height = photo.height / window.devicePixelRatio;
978						photo.width = photo.width / window.devicePixelRatio;
979					}
980
981					if (settings.get('scalePhotos')) {
982						setResize = function () {
983							photo.height -= photo.height * percent;
984							photo.width -= photo.width * percent;
985						};
986						if (settings.mw && photo.width > settings.mw) {
987							percent = (photo.width - settings.mw) / photo.width;
988							setResize();
989						}
990						if (settings.mh && photo.height > settings.mh) {
991							percent = (photo.height - settings.mh) / photo.height;
992							setResize();
993						}
994					}
995					
996					if (settings.h) {
997						photo.style.marginTop = Math.max(settings.mh - photo.height, 0) / 2 + 'px';
998					}
999					
1000					if ($related[1] && (settings.get('loop') || $related[index + 1])) {
1001						photo.style.cursor = 'pointer';
1002						photo.onclick = function () {
1003							publicMethod.next();
1004						};
1005					}
1006
1007					photo.style.width = photo.width + 'px';
1008					photo.style.height = photo.height + 'px';
1009					prep(photo);
1010				}, 1);
1011			});
1012			
1013			photo.src = href;
1014
1015		} else if (href) {
1016			$loadingBay.load(href, settings.get('data'), function (data, status) {
1017				if (request === requests) {
1018					prep(status === 'error' ? $tag(div, 'Error').html(settings.get('xhrError')) : $(this).contents());
1019				}
1020			});
1021		}
1022	}
1023		
1024	// Navigates to the next page/image in a set.
1025	publicMethod.next = function () {
1026		if (!active && $related[1] && (settings.get('loop') || $related[index + 1])) {
1027			index = getIndex(1);
1028			launch($related[index]);
1029		}
1030	};
1031	
1032	publicMethod.prev = function () {
1033		if (!active && $related[1] && (settings.get('loop') || index)) {
1034			index = getIndex(-1);
1035			launch($related[index]);
1036		}
1037	};
1038
1039	// Note: to use this within an iframe use the following format: parent.jQuery.colorbox.close();
1040	publicMethod.close = function () {
1041		if (open && !closing) {
1042			
1043			closing = true;
1044			open = false;
1045			trigger(event_cleanup);
1046			settings.get('onCleanup');
1047			$window.unbind('.' + prefix);
1048			$overlay.fadeTo(settings.get('fadeOut') || 0, 0);
1049			
1050			$box.stop().fadeTo(settings.get('fadeOut') || 0, 0, function () {
1051				$box.hide();
1052				$overlay.hide();
1053				trigger(event_purge);
1054				$loaded.remove();
1055				
1056				setTimeout(function () {
1057					closing = false;
1058					trigger(event_closed);
1059					settings.get('onClosed');
1060				}, 1);
1061			});
1062		}
1063	};
1064
1065	// Removes changes Colorbox made to the document, but does not remove the plugin.
1066	publicMethod.remove = function () {
1067		if (!$box) { return; }
1068
1069		$box.stop();
1070		$[colorbox].close();
1071		$box.stop(false, true).remove();
1072		$overlay.remove();
1073		closing = false;
1074		$box = null;
1075		$('.' + boxElement)
1076			.removeData(colorbox)
1077			.removeClass(boxElement);
1078
1079		$(document).unbind('click.'+prefix).unbind('keydown.'+prefix);
1080	};
1081
1082	// A method for fetching the current element Colorbox is referencing.
1083	// returns a jQuery object.
1084	publicMethod.element = function () {
1085		return $(settings.el);
1086	};
1087
1088	publicMethod.settings = defaults;
1089
1090}(jQuery, document, window));

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.