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.