PageSourceSearch

https://www.noritz.co.jp/noritzchannel/js/jquery.colorbox.js

js noritz.co.jp collected 2026-10-01 11:26:43 UTC 30,305 bytes, 1,106 lines download raw bytes

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