PageSourceSearch

https://765fm.com/wp/wp-content/themes/twentythirteen/js/jquery.colorbox.js

js 765fm.com collected 2026-10-02 16:45:09 UTC 29,080 bytes, 1,089 lines download raw bytes

vendor: 29,080 bytes, lines 1-1089
1/*!
2	Colorbox v1.5.8 - 2014-04-15
3	jQuery lightbox and modal window plugin
4	(c) 2014 Jack Moore - http://www.jacklmoore.com/colorbox
5	license: http://www.opensource.org/licenses/mit-license.php
6*/
7(function ($, document, window) {
8	var
9	// Default settings object.
10	// See http://jacklmoore.com/colorbox for details.
11	defaults = {
12		// data sources
13		html: false,
14		photo: false,
15		iframe: false,
16		inline: false,
17
18		// behavior and appearance
19		transition: "elastic",
20		speed: 300,
21		fadeOut: 300,
22		width: false,
23		initialWidth: "600",
24		innerWidth: false,
25		maxWidth: false,
26		height: false,
27		initialHeight: "450",
28		innerHeight: false,
29		maxHeight: false,
30		scalePhotos: true,
31		scrolling: true,
32		opacity: 0.9,
33		preloading: true,
34		className: false,
35		overlayClose: true,
36		escKey: true,
37		arrowKey: true,
38		top: false,
39		bottom: false,
40		left: false,
41		right: false,
42		fixed: false,
43		data: undefined,
44		closeButton: true,
45		fastIframe: true,
46		open: false,
47		reposition: true,
48		loop: true,
49		slideshow: false,
50		slideshowAuto: true,
51		slideshowSpeed: 2500,
52		slideshowStart: "start slideshow",
53		slideshowStop: "stop slideshow",
54		photoRegex: /\.(gif|png|jp(e|g|eg)|bmp|ico|webp|jxr|svg)((#|\?).*)?$/i,
55
56		// alternate image paths for high-res displays
57		retinaImage: false,
58		retinaUrl: false,
59		retinaSuffix: '@2x.$1',
60
61		// internationalization
62		current: "image {current} of {total}",
63		previous: "previous",
64		next: "next",
65		close: "close",
66		xhrError: "This content failed to load.",
67		imgError: "This image failed to load.",
68
69		// accessbility
70		returnFocus: true,
71		trapFocus: true,
72
73		// callbacks
74		onOpen: false,
75		onLoad: false,
76		onComplete: false,
77		onCleanup: false,
78		onClosed: false,
79
80		rel: function() {
81			return this.rel;
82		},
83		href: function() {
84			// using this.href would give the absolute url, when the href may have been inteded as a selector (e.g. '#container')
85			return $(this).attr('href');
86		},
87		title: function() {
88			return this.title;
89		}
90	},
91
92
93	// Abstracting the HTML and event identifiers for easy rebranding
94	colorbox = 'colorbox',
95	prefix = 'cbox',
96	boxElement = prefix + 'Element',
97	
98	// Events
99	event_open = prefix + '_open',
100	event_load = prefix + '_load',
101	event_complete = prefix + '_complete',
102	event_cleanup = prefix + '_cleanup',
103	event_closed = prefix + '_closed',
104	event_purge = prefix + '_purge',
105
106	// Cached jQuery Object Variables
107	$overlay,
108	$box,
109	$wrap,
110	$content,
111	$topBorder,
112	$leftBorder,
113	$rightBorder,
114	$bottomBorder,
115	$related,
116	$window,
117	$loaded,
118	$loadingBay,
119	$loadingOverlay,
120	$title,
121	$current,
122	$slideshow,
123	$next,
124	$prev,
125	$close,
126	$groupControls,
127	$events = $('<a/>'), // $({}) would be prefered, but there is an issue with jQuery 1.4.2
128	
129	// Variables for cached values or use across multiple functions
130	settings,
131	interfaceHeight,
132	interfaceWidth,
133	loadedHeight,
134	loadedWidth,
135	index,
136	photo,
137	open,
138	active,
139	closing,
140	loadingTimer,
141	publicMethod,
142	div = "div",
143	requests = 0,
144	previousCSS = {},
145	init;
146
147	// ****************
148	// HELPER FUNCTIONS
149	// ****************
150	
151	// Convenience function for creating new jQuery objects
152	function $tag(tag, id, css) {
153		var element = document.createElement(tag);
154
155		if (id) {
156			element.id = prefix + id;
157		}
158
159		if (css) {
160			element.style.cssText = css;
161		}
162
163		return $(element);
164	}
165	
166	// Get the window height using innerHeight when available to avoid an issue with iOS
167	// http://bugs.jquery.com/ticket/6724
168	function winheight() {
169		return window.innerHeight ? window.innerHeight : $(window).height();
170	}
171
172	function Settings(element, options) {
173		if (options !== Object(options)) {
174			options = {};
175		}
176
177		this.cache = {};
178		this.el = element;
179
180		this.value = function(key) {
181			var dataAttr;
182
183			if (this.cache[key] === undefined) {
184				dataAttr = $(this.el).attr('data-cbox-'+key);
185
186				if (dataAttr !== undefined) {
187					this.cache[key] = dataAttr;
188				} else if (options[key] !== undefined) {
189					this.cache[key] = options[key];
190				} else if (defaults[key] !== undefined) {
191					this.cache[key] = defaults[key];
192				}
193			}
194
195			return this.cache[key];
196		};
197
198		this.get = function(key) {
199			var value = this.value(key);
200			return $.isFunction(value) ? value.call(this.el, this) : value;
201		};
202	}
203
204	// Determine the next and previous members in a group.
205	function getIndex(increment) {
206		var
207		max = $related.length,
208		newIndex = (index + increment) % max;
209		
210		return (newIndex < 0) ? max + newIndex : newIndex;
211	}
212
213	// Convert '%' and 'px' values to integers
214	function setSize(size, dimension) {
215		return Math.round((/%/.test(size) ? ((dimension === 'x' ? $window.width() : winheight()) / 100) : 1) * parseInt(size, 10));
216	}
217	
218	// Checks an href to see if it is a photo.
219	// There is a force photo option (photo: true) for hrefs that cannot be matched by the regex.
220	function isImage(settings, url) {
221		return settings.get('photo') || settings.get('photoRegex').test(url);
222	}
223
224	function retinaUrl(settings, url) {
225		return settings.get('retinaUrl') && window.devicePixelRatio > 1 ? url.replace(settings.get('photoRegex'), settings.get('retinaSuffix')) : url;
226	}
227
228	function trapFocus(e) {
229		if ('contains' in $box[0] && !$box[0].contains(e.target) && e.target !== $overlay[0]) {
230			e.stopPropagation();
231			$box.focus();
232		}
233	}
234
235	function setClass(str) {
236		if (setClass.str !== str) {
237			$box.add($overlay).removeClass(setClass.str).addClass(str);
238			setClass.str = str;
239		}
240	}
241
242	function getRelated(rel) {
243		index = 0;
244		
245		if (rel && rel !== false) {
246			$related = $('.' + boxElement).filter(function () {
247				var options = $.data(this, colorbox);
248				var settings = new Settings(this, options);
249				return (settings.get('rel') === rel);
250			});
251			index = $related.index(settings.el);
252			
253			// Check direct calls to Colorbox.
254			if (index === -1) {
255				$related = $related.add(settings.el);
256				index = $related.length - 1;
257			}
258		} else {
259			$related = $(settings.el);
260		}
261	}
262
263	function trigger(event) {
264		// for external use
265		$(document).trigger(event);
266		// for internal use
267		$events.triggerHandler(event);
268	}
269
270	var slideshow = (function(){
271		var active,
272			className = prefix + "Slideshow_",
273			click = "click." + prefix,
274			timeOut;
275
276		function clear () {
277			clearTimeout(timeOut);
278		}
279
280		function set() {
281			if (settings.get('loop') || $related[index + 1]) {
282				clear();
283				timeOut = setTimeout(publicMethod.next, settings.get('slideshowSpeed'));
284			}
285		}
286
287		function start() {
288			$slideshow
289				.html(settings.get('slideshowStop'))
290				.unbind(click)
291				.one(click, stop);
292
293			$events
294				.bind(event_complete, set)
295				.bind(event_load, clear);
296
297			$box.removeClass(className + "off").addClass(className + "on");
298		}
299
300		function stop() {
301			clear();
302			
303			$events
304				.unbind(event_complete, set)
305				.unbind(event_load, clear);
306
307			$slideshow
308				.html(settings.get('slideshowStart'))
309				.unbind(click)
310				.one(click, function () {
311					publicMethod.next();
312					start();
313				});
314
315			$box.removeClass(className + "on").addClass(className + "off");
316		}
317
318		function reset() {
319			active = false;
320			$slideshow.hide();
321			clear();
322			$events
323				.unbind(event_complete, set)
324				.unbind(event_load, clear);
325			$box.removeClass(className + "off " + className + "on");
326		}
327
328		return function(){
329			if (active) {
330				if (!settings.get('slideshow')) {
331					$events.unbind(event_cleanup, reset);
332					reset();
333				}
334			} else {
335				if (settings.get('slideshow') && $related[1]) {
336					active = true;
337					$events.one(event_cleanup, reset);
338					if (settings.get('slideshowAuto')) {
339						start();
340					} else {
341						stop();
342					}
343					$slideshow.show();
344				}
345			}
346		};
347
348	}());
349
350
351	function launch(element) {
352		var options;
353
354		if (!closing) {
355
356			options = $(element).data('colorbox');
357
358			settings = new Settings(element, options);
359			
360			getRelated(settings.get('rel'));
361
362			if (!open) {
363				open = active = true; // Prevents the page-change action from queuing up if the visitor holds down the left or right keys.
364
365				setClass(settings.get('className'));
366				
367				// Show colorbox so the sizes can be calculated in older versions of jQuery
368				$box.css({visibility:'hidden', display:'block', opacity:''});
369				
370				$loaded = $tag(div, 'LoadedContent', 'width:0; height:0; overflow:hidden; visibility:hidden');
371				$content.css({width:'', height:''}).append($loaded);
372
373				// Cache values needed for size calculations
374				interfaceHeight = $topBorder.height() + $bottomBorder.height() + $content.outerHeight(true) - $content.height();
375				interfaceWidth = $leftBorder.width() + $rightBorder.width() + $content.outerWidth(true) - $content.width();
376				loadedHeight = $loaded.outerHeight(true);
377				loadedWidth = $loaded.outerWidth(true);
378
379				// Opens inital empty Colorbox prior to content being loaded.
380				var initialWidth = setSize(settings.get('initialWidth'), 'x');
381				var initialHeight = setSize(settings.get('initialHeight'), 'y');
382				var maxWidth = settings.get('maxWidth');
383				var maxHeight = settings.get('maxHeight');
384
385				settings.w = (maxWidth !== false ? Math.min(initialWidth, setSize(maxWidth, 'x')) : initialWidth) - loadedWidth - interfaceWidth;
386				settings.h = (maxHeight !== false ? Math.min(initialHeight, setSize(maxHeight, 'y')) : initialHeight) - loadedHeight - interfaceHeight;
387
388				$loaded.css({width:'', height:settings.h});
389				publicMethod.position();
390
391				trigger(event_open);
392				settings.get('onOpen');
393
394				$groupControls.add($title).hide();
395
396				$box.focus();
397				
398				if (settings.get('trapFocus')) {
399					// Confine focus to the modal
400					// Uses event capturing that is not supported in IE8-
401					if (document.addEventListener) {
402
403						document.addEventListener('focus', trapFocus, true);
404						
405						$events.one(event_closed, function () {
406							document.removeEventListener('focus', trapFocus, true);
407						});
408					}
409				}
410
411				// Return focus on closing
412				if (settings.get('returnFocus')) {
413					$events.one(event_closed, function () {
414						$(settings.el).focus();
415					});
416				}
417			}
418
419			$overlay.css({
420				opacity: parseFloat(settings.get('opacity')) || '',
421				cursor: settings.get('overlayClose') ? 'pointer' : '',
422				visibility: 'visible'
423			}).show();
424			
425			if (settings.get('closeButton')) {
426				$close.html(settings.get('close')).appendTo($content);
427			} else {
428				$close.appendTo('<div/>'); // replace with .detach() when dropping jQuery < 1.4
429			}
430
431			load();
432		}
433	}
434
435	// Colorbox's markup needs to be added to the DOM prior to being called
436	// so that the browser will go ahead and load the CSS background images.
437	function appendHTML() {
438		if (!$box && document.body) {
439			init = false;
440			$window = $(window);
441			$box = $tag(div).attr({
442				id: colorbox,
443				'class': $.support.opacity === false ? prefix + 'IE' : '', // class for optional IE8 & lower targeted CSS.
444				role: 'dialog',
445				tabindex: '-1'
446			}).hide();
447			$overlay = $tag(div, "Overlay").hide();
448			$loadingOverlay = $([$tag(div, "LoadingOverlay")[0],$tag(div, "LoadingGraphic")[0]]);
449			$wrap = $tag(div, "Wrapper");
450			$content = $tag(div, "Content").append(
451				$title = $tag(div, "Title"),
452				$current = $tag(div, "Current"),
453				$prev = $('<button type="button"/>').attr({id:prefix+'Previous'}),
454				$next = $('<button type="button"/>').attr({id:prefix+'Next'}),
455				$slideshow = $tag('button', "Slideshow"),
456				$loadingOverlay
457			);
458
459			$close = $('<button type="button"/>').attr({id:prefix+'Close'});
460			
461			$wrap.append( // The 3x3 Grid that makes up Colorbox
462				$tag(div).append(
463					$tag(div, "TopLeft"),
464					$topBorder = $tag(div, "TopCenter"),
465					$tag(div, "TopRight")
466				),
467				$tag(div, false, 'clear:left').append(
468					$leftBorder = $tag(div, "MiddleLeft"),
469					$content,
470					$rightBorder = $tag(div, "MiddleRight")
471				),
472				$tag(div, false, 'clear:left').append(
473					$tag(div, "BottomLeft"),
474					$bottomBorder = $tag(div, "BottomCenter"),
475					$tag(div, "BottomRight")
476				)
477			).find('div div').css({'float': 'left'});
478			
479			$loadingBay = $tag(div, false, 'position:absolute; width:9999px; visibility:hidden; display:none; max-width:none;');
480			
481			$groupControls = $next.add($prev).add($current).add($slideshow);
482
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 (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			// Inserts an empty placeholder where inline content is being pulled from.
933			// An event is bound to put inline content back when Colorbox closes or loads new content.
934			$inline = $tag(div).hide().insertBefore($(href)[0]);
935
936			$events.one(event_purge, function () {
937				$inline.replaceWith($loaded.children());
938			});
939
940			prep($(href));
941		} else if (settings.get('iframe')) {
942			// IFrame element won't be added to the DOM until it is ready to be displayed,
943			// to avoid problems with DOM-ready JS that might be trying to run in that iframe.
944			prep(" ");
945		} else if (settings.get('html')) {
946			prep(settings.get('html'));
947		} else if (isImage(settings, href)) {
948
949			href = retinaUrl(settings, href);
950
951			photo = new Image();
952
953			$(photo)
954			.addClass(prefix + 'Photo')
955			.bind('error',function () {
956				prep($tag(div, 'Error').html(settings.get('imgError')));
957			})
958			.one('load', function () {
959				if (request !== requests) {
960					return;
961				}
962
963				// A small pause because some browsers will occassionaly report a 
964				// img.width and img.height of zero immediately after the img.onload fires
965				setTimeout(function(){
966					var percent;
967
968					$.each(['alt', 'longdesc', 'aria-describedby'], function(i,val){
969						var attr = $(settings.el).attr(val) || $(settings.el).attr('data-'+val);
970						if (attr) {
971							photo.setAttribute(val, attr);
972						}
973					});
974
975					if (settings.get('retinaImage') && window.devicePixelRatio > 1) {
976						photo.height = photo.height / window.devicePixelRatio;
977						photo.width = photo.width / window.devicePixelRatio;
978					}
979
980					if (settings.get('scalePhotos')) {
981						setResize = function () {
982							photo.height -= photo.height * percent;
983							photo.width -= photo.width * percent;
984						};
985						if (settings.mw && photo.width > settings.mw) {
986							percent = (photo.width - settings.mw) / photo.width;
987							setResize();
988						}
989						if (settings.mh && photo.height > settings.mh) {
990							percent = (photo.height - settings.mh) / photo.height;
991							setResize();
992						}
993					}
994					
995					if (settings.h) {
996						photo.style.marginTop = Math.max(settings.mh - photo.height, 0) / 2 + 'px';
997					}
998					
999					if ($related[1] && (settings.get('loop') || $related[index + 1])) {
1000						photo.style.cursor = 'pointer';
1001						photo.onclick = function () {
1002							publicMethod.next();
1003						};
1004					}
1005
1006					photo.style.width = photo.width + 'px';
1007					photo.style.height = photo.height + 'px';
1008					prep(photo);
1009				}, 1);
1010			});
1011			
1012			photo.src = href;
1013
1014		} else if (href) {
1015			$loadingBay.load(href, settings.get('data'), function (data, status) {
1016				if (request === requests) {
1017					prep(status === 'error' ? $tag(div, 'Error').html(settings.get('xhrError')) : $(this).contents());
1018				}
1019			});
1020		}
1021	}
1022		
1023	// Navigates to the next page/image in a set.
1024	publicMethod.next = function () {
1025		if (!active && $related[1] && (settings.get('loop') || $related[index + 1])) {
1026			index = getIndex(1);
1027			launch($related[index]);
1028		}
1029	};
1030	
1031	publicMethod.prev = function () {
1032		if (!active && $related[1] && (settings.get('loop') || index)) {
1033			index = getIndex(-1);
1034			launch($related[index]);
1035		}
1036	};
1037
1038	// Note: to use this within an iframe use the following format: parent.jQuery.colorbox.close();
1039	publicMethod.close = function () {
1040		if (open && !closing) {
1041			
1042			closing = true;
1043			open = false;
1044			trigger(event_cleanup);
1045			settings.get('onCleanup');
1046			$window.unbind('.' + prefix);
1047			$overlay.fadeTo(settings.get('fadeOut') || 0, 0);
1048			
1049			$box.stop().fadeTo(settings.get('fadeOut') || 0, 0, function () {
1050				$box.hide();
1051				$overlay.hide();
1052				trigger(event_purge);
1053				$loaded.remove();
1054				
1055				setTimeout(function () {
1056					closing = false;
1057					trigger(event_closed);
1058					settings.get('onClosed');
1059				}, 1);
1060			});
1061		}
1062	};
1063
1064	// Removes changes Colorbox made to the document, but does not remove the plugin.
1065	publicMethod.remove = function () {
1066		if (!$box) { return; }
1067
1068		$box.stop();
1069		$.colorbox.close();
1070		$box.stop().remove();
1071		$overlay.remove();
1072		closing = false;
1073		$box = null;
1074		$('.' + boxElement)
1075			.removeData(colorbox)
1076			.removeClass(boxElement);
1077
1078		$(document).unbind('click.'+prefix);
1079	};
1080
1081	// A method for fetching the current element Colorbox is referencing.
1082	// returns a jQuery object.
1083	publicMethod.element = function () {
1084		return $(settings.el);
1085	};
1086
1087	publicMethod.settings = defaults;
1088
1089}(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.