PageSourceSearch

https://www.oorcas.com/resources/js/jquery.colorbox.js

js oorcas.com collected 2026-10-04 02:19:56 UTC 28,835 bytes, 1,087 lines download raw bytes

vendor: 11,177 bytes, lines 1-454
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"
vendor: 10,640 bytes, lines 454-836
454),
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		}
576
577		if (!$obj[0]) { // colorbox being applied to empty collection
578			return $obj;
579		}
580
581		appendHTML();
582
583		if (addBindings()) {
584
585			if (callback) {
586				options.onComplete = callback;
587			}
588
589			$obj.each(function () {
590				var old = $.data(this, colorbox) || {};
591				$.data(this, colorbox, $.extend(old, options));
592			}).addClass(boxElement);
593
594			settings = new Settings($obj[0], options);
595
596			if (settings.get('open')) {
597				launch($obj[0]);
598			}
599		}
600
601		return $obj;
602	};
603
604	publicMethod.position = function (speed, loadedCallback) {
605		var
606		css,
607		top = 0,
608		left = 0,
609		offset = $box.offset(),
610		scrollTop,
611		scrollLeft;
612
613		$window.unbind('resize.' + prefix);
614
615		// remove the modal so that it doesn't influence the document width/height
616		$box.css({top: -9e4, left: -9e4});
617
618		scrollTop = $window.scrollTop();
619		scrollLeft = $window.scrollLeft();
620
621		if (settings.get('fixed')) {
622			offset.top -= scrollTop;
623			offset.left -= scrollLeft;
624			$box.css({position: 'fixed'});
625		} else {
626			top = scrollTop;
627			left = scrollLeft;
628			$box.css({position: 'absolute'});
629		}
630
631		// keeps the top and left positions within the browser's viewport.
632		if (settings.get('right') !== false) {
633			left += Math.max($window.width() - settings.w - loadedWidth - interfaceWidth - setSize(settings.get('right'), 'x'), 0);
634		} else if (settings.get('left') !== false) {
635			left += setSize(settings.get('left'), 'x');
636		} else {
637			left += Math.round(Math.max($window.width() - settings.w - loadedWidth - interfaceWidth, 0) / 2);
638		}
639
640		if (settings.get('bottom') !== false) {
641			top += Math.max(winheight() - settings.h - loadedHeight - interfaceHeight - setSize(settings.get('bottom'), 'y'), 0);
642		} else if (settings.get('top') !== false) {
643			top += setSize(settings.get('top'), 'y');
644		} else {
645			top += Math.round(Math.max(winheight() - settings.h - loadedHeight - interfaceHeight, 0) / 2);
646		}
647
648		$box.css({top: offset.top, left: offset.left, visibility:'visible'});
649
650		// this gives the wrapper plenty of breathing room so it's floated contents can move around smoothly,
651		// but it has to be shrank down around the size of div#colorbox when it's done.  If not,
652		// it can invoke an obscure IE bug when using iframes.
653		$wrap[0].style.width = $wrap[0].style.height = "9999px";
654
655		function modalDimensions() {
656			$topBorder[0].style.width = $bottomBorder[0].style.width = $content[0].style.width = (parseInt($box[0].style.width,10) - interfaceWidth)+'px';
657			$content[0].style.height = $leftBorder[0].style.height = $rightBorder[0].style.height = (parseInt($box[0].style.height,10) - interfaceHeight)+'px';
658		}
659
660		css = {width: settings.w + loadedWidth + interfaceWidth, height: settings.h + loadedHeight + interfaceHeight, top: top, left: left};
661
662		// setting the speed to 0 if the content hasn't changed size or position
663		if (speed) {
664			var tempSpeed = 0;
665			$.each(css, function(i){
666				if (css[i] !== previousCSS[i]) {
667					tempSpeed = speed;
668					return;
669				}
670			});
671			speed = tempSpeed;
672		}
673
674		previousCSS = css;
675
676		if (!speed) {
677			$box.css(css);
678		}
679
680		$box.dequeue().animate(css, {
681			duration: speed || 0,
682			complete: function () {
683				modalDimensions();
684
685				active = false;
686
687				// shrink the wrapper down to exactly the size of colorbox to avoid a bug in IE's iframe implementation.
688				$wrap[0].style.width = (settings.w + loadedWidth + interfaceWidth) + "px";
689				$wrap[0].style.height = (settings.h + loadedHeight + interfaceHeight) + "px";
690
691				if (settings.get('reposition')) {
692					setTimeout(function () {  // small delay before binding onresize due to an IE8 bug.
693						$window.bind('resize.' + prefix, publicMethod.position);
694					}, 1);
695				}
696
697				if ($.isFunction(loadedCallback)) {
698					loadedCallback();
699				}
700			},
701			step: modalDimensions
702		});
703	};
704
705	publicMethod.resize = function (options) {
706		var scrolltop;
707
708		if (open) {
709			options = options || {};
710
711			if (options.width) {
712				settings.w = setSize(options.width, 'x') - loadedWidth - interfaceWidth;
713			}
714
715			if (options.innerWidth) {
716				settings.w = setSize(options.innerWidth, 'x');
717			}
718
719			$loaded.css({width: settings.w});
720
721			if (options.height) {
722				settings.h = setSize(options.height, 'y') - loadedHeight - interfaceHeight;
723			}
724
725			if (options.innerHeight) {
726				settings.h = setSize(options.innerHeight, 'y');
727			}
728
729			if (!options.innerHeight && !options.height) {
730				scrolltop = $loaded.scrollTop();
731				$loaded.css({height: "auto"});
732				settings.h = $loaded.height();
733			}
734
735			$loaded.css({height: settings.h});
736
737			if(scrolltop) {
738				$loaded.scrollTop(scrolltop);
739			}
740
741			publicMethod.position(settings.get('transition') === "none" ? 0 : settings.get('speed'));
742		}
743	};
744
745	publicMethod.prep = function (object) {
746		if (!open) {
747			return;
748		}
749
750		var callback, speed = settings.get('transition') === "none" ? 0 : settings.get('speed');
751
752		$loaded.remove();
753
754		$loaded = $tag(div, 'LoadedContent').append(object);
755
756		function getWidth() {
757			settings.w = settings.w || $loaded.width();
758			settings.w = settings.mw && settings.mw < settings.w ? settings.mw : settings.w;
759			return settings.w;
760		}
761		function getHeight() {
762			settings.h = settings.h || $loaded.height();
763			settings.h = settings.mh && settings.mh < settings.h ? settings.mh : settings.h;
764			return settings.h;
765		}
766
767		$loaded.hide()
768		.appendTo($loadingBay.show())// content has to be appended to the DOM for accurate size calculations.
769		.css({width: getWidth(), overflow: settings.get('scrolling') ? 'auto' : 'hidden'})
770		.css({height: getHeight()})// sets the height independently from the width in case the new width influences the value of height.
771		.prependTo($content);
772
773		$loadingBay.hide();
774
775		// 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.
776
777		$(photo).css({'float': 'none'});
778
779		setClass(settings.get('className'));
780
781		callback = function () {
782			var total = $related.length,
783				iframe,
784				complete;
785
786			if (!open) {
787				return;
788			}
789
790			function removeFilter() { // Needed for IE8 in versions of jQuery prior to 1.7.2
791				if ($.support.opacity === false) {
792					$box[0].style.removeAttribute('filter');
793				}
794			}
795
796			complete = function () {
797				clearTimeout(loadingTimer);
798				$loadingOverlay.hide();
799				trigger(event_complete);
800				settings.get('onComplete');
801			};
802
803
804			$title.html(settings.get('title')).show();
805			$loaded.show();
806
807			if (total > 1) { // handle grouping
808				if (typeof settings.get('current') === "string") {
809					$current.html(settings.get('current').replace('{current}', index + 1).replace('{total}', total)).show();
810				}
811
812				$next[(settings.get('loop') || index < total - 1) ? "show" : "hide"]().html(settings.get('next'));
813				$prev[(settings.get('loop') || index) ? "show" : "hide"]().html(settings.get('previous'));
814
815				slideshow();
816
817				// Preloads images within a rel group
818				if (settings.get('preloading')) {
819					$.each([getIndex(-1), getIndex(1)], function(){
820						var img,
821							i = $related[this],
822							settings = new Settings(i, $.data(i, colorbox)),
823							src = settings.get('href');
824
825						if (src && isImage(settings, src)) {
826							src = retinaUrl(settings, src);
827							img = document.createElement('img');
828							img.src = src;
829						}
830					});
831				}
832			} else {
833				$groupControls.hide();
834			}
835
836			if (settings.get('iframe')) {
vendor: 7,018 bytes, lines 837-1087
837				iframe = document.createElement('iframe');
838
839				if ('frameBorder' in iframe) {
840					iframe.frameBorder = 0;
841				}
842
843				if ('allowTransparency' in iframe) {
844					iframe.allowTransparency = "true";
845				}
846
847				if (!settings.get('scrolling')) {
848					iframe.scrolling = "no";
849				}
850
851				$(iframe)
852					.attr({
853						src: settings.get('href'),
854						name: (new Date()).getTime(), // give the iframe a unique name to prevent caching
855						'class': prefix + 'Iframe',
856						allowFullScreen : true // allow HTML5 video to go fullscreen
857					})
858					.one('load', complete)
859					.appendTo($loaded);
860
861				$events.one(event_purge, function () {
862					iframe.src = "//about:blank";
863				});
864
865				if (settings.get('fastIframe')) {
866					$(iframe).trigger('load');
867				}
868			} else {
869				complete();
870			}
871
872			if (settings.get('transition') === 'fade') {
873				$box.fadeTo(speed, 1, removeFilter);
874			} else {
875				removeFilter();
876			}
877		};
878
879		if (settings.get('transition') === 'fade') {
880			$box.fadeTo(speed, 0, function () {
881				publicMethod.position(0, callback);
882			});
883		} else {
884			publicMethod.position(speed, callback);
885		}
886	};
887
888	function load () {
889		var href, setResize, prep = publicMethod.prep, $inline, request = ++requests;
890
891		active = true;
892
893		photo = false;
894
895		trigger(event_purge);
896		trigger(event_load);
897		settings.get('onLoad');
898
899		settings.h = settings.get('height') ?
900				setSize(settings.get('height'), 'y') - loadedHeight - interfaceHeight :
901				settings.get('innerHeight') && setSize(settings.get('innerHeight'), 'y');
902
903		settings.w = settings.get('width') ?
904				setSize(settings.get('width'), 'x') - loadedWidth - interfaceWidth :
905				settings.get('innerWidth') && setSize(settings.get('innerWidth'), 'x');
906
907		// Sets the minimum dimensions for use in image scaling
908		settings.mw = settings.w;
909		settings.mh = settings.h;
910
911		// Re-evaluate the minimum width and height based on maxWidth and maxHeight values.
912		// If the width or height exceed the maxWidth or maxHeight, use the maximum values instead.
913		if (settings.get('maxWidth')) {
914			settings.mw = setSize(settings.get('maxWidth'), 'x') - loadedWidth - interfaceWidth;
915			settings.mw = settings.w && settings.w < settings.mw ? settings.w : settings.mw;
916		}
917		if (settings.get('maxHeight')) {
918			settings.mh = setSize(settings.get('maxHeight'), 'y') - loadedHeight - interfaceHeight;
919			settings.mh = settings.h && settings.h < settings.mh ? settings.h : settings.mh;
920		}
921
922		href = settings.get('href');
923
924		loadingTimer = setTimeout(function () {
925			$loadingOverlay.show();
926		}, 100);
927
928		if (settings.get('inline')) {
929			var $target = $(href);
930			// Inserts an empty placeholder where inline content is being pulled from.
931			// An event is bound to put inline content back when Colorbox closes or loads new content.
932			$inline = $('<div>').hide().insertBefore($target);
933
934			$events.one(event_purge, function () {
935				$inline.replaceWith($target);
936			});
937
938			prep($target);
939		} else if (settings.get('iframe')) {
940			// IFrame element won't be added to the DOM until it is ready to be displayed,
941			// to avoid problems with DOM-ready JS that might be trying to run in that iframe.
942			prep(" ");
943		} else if (settings.get('html')) {
944			prep(settings.get('html'));
945		} else if (isImage(settings, href)) {
946
947			href = retinaUrl(settings, href);
948
949			photo = new Image();
950
951			$(photo)
952			.addClass(prefix + 'Photo')
953			.bind('error',function () {
954				prep($tag(div, 'Error').html(settings.get('imgError')));
955			})
956			.one('load', function () {
957				if (request !== requests) {
958					return;
959				}
960
961				// A small pause because some browsers will occassionaly report a
962				// img.width and img.height of zero immediately after the img.onload fires
963				setTimeout(function(){
964					var percent;
965
966					$.each(['alt', 'longdesc', 'aria-describedby'], function(i,val){
967						var attr = $(settings.el).attr(val) || $(settings.el).attr('data-'+val);
968						if (attr) {
969							photo.setAttribute(val, attr);
970						}
971					});
972
973					if (settings.get('retinaImage') && window.devicePixelRatio > 1) {
974						photo.height = photo.height / window.devicePixelRatio;
975						photo.width = photo.width / window.devicePixelRatio;
976					}
977
978					if (settings.get('scalePhotos')) {
979						setResize = function () {
980							photo.height -= photo.height * percent;
981							photo.width -= photo.width * percent;
982						};
983						if (settings.mw && photo.width > settings.mw) {
984							percent = (photo.width - settings.mw) / photo.width;
985							setResize();
986						}
987						if (settings.mh && photo.height > settings.mh) {
988							percent = (photo.height - settings.mh) / photo.height;
989							setResize();
990						}
991					}
992
993					if (settings.h) {
994						photo.style.marginTop = Math.max(settings.mh - photo.height, 0) / 2 + 'px';
995					}
996
997					if ($related[1] && (settings.get('loop') || $related[index + 1])) {
998						photo.style.cursor = 'pointer';
999						photo.onclick = function () {
1000							publicMethod.next();
1001						};
1002					}
1003
1004					photo.style.width = photo.width + 'px';
1005					photo.style.height = photo.height + 'px';
1006					prep(photo);
1007				}, 1);
1008			});
1009
1010			photo.src = href;
1011
1012		} else if (href) {
1013			$loadingBay.load(href, settings.get('data'), function (data, status) {
1014				if (request === requests) {
1015					prep(status === 'error' ? $tag(div, 'Error').html(settings.get('xhrError')) : $(this).contents());
1016				}
1017			});
1018		}
1019	}
1020
1021	// Navigates to the next page/image in a set.
1022	publicMethod.next = function () {
1023		if (!active && $related[1] && (settings.get('loop') || $related[index + 1])) {
1024			index = getIndex(1);
1025			launch($related[index]);
1026		}
1027	};
1028
1029	publicMethod.prev = function () {
1030		if (!active && $related[1] && (settings.get('loop') || index)) {
1031			index = getIndex(-1);
1032			launch($related[index]);
1033		}
1034	};
1035
1036	// Note: to use this within an iframe use the following format: parent.jQuery.colorbox.close();
1037	publicMethod.close = function () {
1038		if (open && !closing) {
1039
1040			closing = true;
1041			open = false;
1042			trigger(event_cleanup);
1043			settings.get('onCleanup');
1044			$window.unbind('.' + prefix);
1045			$overlay.fadeTo(settings.get('fadeOut') || 0, 0);
1046
1047			$box.stop().fadeTo(settings.get('fadeOut') || 0, 0, function () {
1048				$box.hide();
1049				$overlay.hide();
1050				trigger(event_purge);
1051				$loaded.remove();
1052
1053				setTimeout(function () {
1054					closing = false;
1055					trigger(event_closed);
1056					settings.get('onClosed');
1057				}, 1);
1058			});
1059		}
1060	};
1061
1062	// Removes changes Colorbox made to the document, but does not remove the plugin.
1063	publicMethod.remove = function () {
1064		if (!$box) { return; }
1065
1066		$box.stop();
1067		$[colorbox].close();
1068		$box.stop(false, true).remove();
1069		$overlay.remove();
1070		closing = false;
1071		$box = null;
1072		$('.' + boxElement)
1073			.removeData(colorbox)
1074			.removeClass(boxElement);
1075
1076		$(document).unbind('click.'+prefix).unbind('keydown.'+prefix);
1077	};
1078
1079	// A method for fetching the current element Colorbox is referencing.
1080	// returns a jQuery object.
1081	publicMethod.element = function () {
1082		return $(settings.el);
1083	};
1084
1085	publicMethod.settings = defaults;
1086
1087}(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.