1/* 2 * FancyBox - jQuery Plugin 3 * Simple and fancy lightbox alternative 4 * 5 * Examples and documentation at: http://fancybox.net 6 * 7 * Copyright (c) 2008 - 2010 Janis Skarnelis 8 * That said, it is hardly a one-person project. Many people have submitted bugs, code, and offered their advice freely. Their support is greatly appreciated. 9 * 10 * Version: 1.3.4 (11/11/2010) 11 * Requires: jQuery v1.3+ 12 * 13 * Dual licensed under the MIT and GPL licenses: 14 * http://www.opensource.org/licenses/mit-license.php 15 * http://www.gnu.org/licenses/gpl.html 16 */ 17 18;(function($) { 19 var tmp, loading, overlay, wrap, outer, content, close, title, nav_left, nav_right, 20 21 selectedIndex = 0, selectedOpts = {}, selectedArray = [], currentIndex = 0, currentOpts = {}, currentArray = [], 22 23 ajaxLoader = null, imgPreloader = new Image(), imgRegExp = /\.(jpg|gif|png|bmp|jpeg)(.*)?$/i, swfRegExp = /[^\.]\.(swf)\s*$/i, 24 25 loadingTimer, loadingFrame = 1, 26 27 titleHeight = 0, titleStr = '', start_pos, final_pos, busy = false, fx = $.extend($('<div/>')[0], { prop: 0 }), 28 29 isIE6 = $.browser.msie && $.browser.version < 7 && !window.XMLHttpRequest, 30 31 /* 32 * Private methods 33 */ 34 35 _abort = function() { 36 loading.hide(); 37 38 imgPreloader.onerror = imgPreloader.onload = null; 39 40 if (ajaxLoader) { 41 ajaxLoader.abort(); 42 } 43 44 tmp.empty(); 45 }, 46 47 _error = function() { 48 if (false === selectedOpts.onError(selectedArray, selectedIndex, selectedOpts)) { 49 loading.hide(); 50 busy = false; 51 return; 52 } 53 54 selectedOpts.titleShow = false; 55 56 selectedOpts.width = 'auto'; 57 selectedOpts.height = 'auto'; 58 59 tmp.html( '<p id="fancybox-error">The requested content cannot be loaded.<br />Please try again later.</p>' ); 60 61 _process_inline(); 62 }, 63 64 _start = function() { 65 var obj = selectedArray[ selectedIndex ], 66 href, 67 type, 68 title, 69 str, 70 emb, 71 ret; 72 73 _abort(); 74 75 selectedOpts = $.extend({}, $.fn.fancybox.defaults, (typeof $(obj).data('fancybox') == 'undefined' ? selectedOpts : $(obj).data('fancybox'))); 76 77 ret = selectedOpts.onStart(selectedArray, selectedIndex, selectedOpts); 78 79 if (ret === false) { 80 busy = false; 81 return; 82 } else if (typeof ret == 'object') { 83 selectedOpts = $.extend(selectedOpts, ret); 84 } 85 86 title = selectedOpts.title || (obj.nodeName ? $(obj).attr('title') : obj.title) || ''; 87 88 if (obj.nodeName && !selectedOpts.orig) { 89 selectedOpts.orig = $(obj).children("img:first").length ? $(obj).children("img:first") : $(obj); 90 } 91 92 if (title === '' && selectedOpts.orig && selectedOpts.titleFromAlt) { 93 title = selectedOpts.orig.attr('alt'); 94 } 95 96 href = selectedOpts.href || (obj.nodeName ? $(obj).attr('href') : obj.href) || null; 97 98 if ((/^(?:javascript)/i).test(href) || href == '#') { 99 href = null; 100 } 101 102 if (selectedOpts.type) { 103 type = selectedOpts.type; 104 105 if (!href) { 106 href = selectedOpts.content; 107 } 108 109 } else if (selectedOpts.content) { 110 type = 'html'; 111 112 } else if (href) { 113 if (href.match(imgRegExp)) { 114 type = 'image'; 115 116 } else if (href.match(swfRegExp)) { 117 type = 'swf'; 118 119 } else if ($(obj).hasClass("iframe")) { 120 type = 'iframe'; 121 122 } else if (href.indexOf("#") === 0) { 123 type = 'inline'; 124 125 } else { 126 type = 'ajax'; 127 } 128 } 129 130 if (!type) { 131 _error(); 132 return; 133 } 134 135 if (type == 'inline') { 136 obj = href.substr(href.indexOf("#")); 137 type = $(obj).length > 0 ? 'inline' : 'ajax'; 138 } 139 140 selectedOpts.type = type; 141 selectedOpts.href = href; 142 selectedOpts.title = title; 143 144 if (selectedOpts.autoDimensions) { 145 if (selectedOpts.type == 'html' || selectedOpts.type == 'inline' || selectedOpts.type == 'ajax') { 146 selectedOpts.width = 'auto'; 147 selectedOpts.height = 'auto'; 148 } else { 149 selectedOpts.autoDimensions = false; 150 } 151 } 152 153 if (selectedOpts.modal) { 154 selectedOpts.overlayShow = true; 155 selectedOpts.hideOnOverlayClick = false; 156 selectedOpts.hideOnContentClick = false; 157 selectedOpts.enableEscapeButton = false; 158 selectedOpts.showCloseButton = false; 159 } 160 161 selectedOpts.padding = parseInt(selectedOpts.padding, 10); 162 selectedOpts.margin = parseInt(selectedOpts.margin, 10); 163
164 tmp.css('padding', (selectedOpts.padding + selectedOpts.margin)); 165 166 $('.fancybox-inline-tmp').unbind('fancybox-cancel').bind('fancybox-change', function() { 167 $(this).replaceWith(content.children()); 168 }); 169 170 switch (type) { 171 case 'html' : 172 tmp.html( selectedOpts.content ); 173 _process_inline(); 174 break; 175 176 case 'inline' : 177 if ( $(obj).parent().is('#fancybox-content') === true) { 178 busy = false; 179 return; 180 } 181 182 $('<div class="fancybox-inline-tmp" />') 183 .hide() 184 .insertBefore( $(obj) ) 185 .bind('fancybox-cleanup', function() { 186 $(this).replaceWith(content.children()); 187 }).bind('fancybox-cancel', function() { 188 $(this).replaceWith(tmp.children()); 189 }); 190 191 $(obj).appendTo(tmp); 192 193 _process_inline(); 194 break; 195 196 case 'image': 197 busy = false; 198 199 $.fancybox.showActivity(); 200 201 imgPreloader = new Image(); 202 203 imgPreloader.onerror = function() { 204 _error(); 205 }; 206 207 imgPreloader.onload = function() { 208 busy = true; 209 210 imgPreloader.onerror = imgPreloader.onload = null; 211 212 _process_image(); 213 }; 214 215 imgPreloader.src = href; 216 break; 217 218 case 'swf': 219 selectedOpts.scrolling = 'no'; 220 221 str = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="' + selectedOpts.width + '" height="' + selectedOpts.height + '"><param name="movie" value="' + href + '"></param>'; 222 emb = ''; 223 224 $.each(selectedOpts.swf, function(name, val) { 225 str += '<param name="' + name + '" value="' + val + '"></param>'; 226 emb += ' ' + name + '="' + val + '"'; 227 }); 228 229 str += '<embed src="' + href + '" type="application/x-shockwave-flash" width="' + selectedOpts.width + '" height="' + selectedOpts.height + '"' + emb + '></embed></object>'; 230 231 tmp.html(str); 232 233 _process_inline(); 234 break; 235 236 case 'ajax': 237 busy = false; 238 239 $.fancybox.showActivity(); 240 241 selectedOpts.ajax.win = selectedOpts.ajax.success; 242 243 ajaxLoader = $.ajax($.extend({}, selectedOpts.ajax, { 244 url : href, 245 data : selectedOpts.ajax.data || {}, 246 error : function(XMLHttpRequest, textStatus, errorThrown) { 247 if ( XMLHttpRequest.status > 0 ) { 248 _error(); 249 } 250 }, 251 success : function(data, textStatus, XMLHttpRequest) { 252 var o = typeof XMLHttpRequest == 'object' ? XMLHttpRequest : ajaxLoader; 253 if (o.status == 200) { 254 if ( typeof selectedOpts.ajax.win == 'function' ) { 255 ret = selectedOpts.ajax.win(href, data, textStatus, XMLHttpRequest); 256 257 if (ret === false) { 258 loading.hide(); 259 return; 260 } else if (typeof ret == 'string' || typeof ret == 'object') { 261 data = ret; 262 } 263 } 264 265 tmp.html( data ); 266 _process_inline(); 267 } 268 } 269 })); 270 271 break; 272 273 case 'iframe': 274 _show(); 275 break; 276 } 277 }, 278 279 _process_inline = function() { 280 var 281 w = selectedOpts.width, 282 h = selectedOpts.height; 283 284 if (w.toString().indexOf('%') > -1) { 285 w = parseInt( ($(window).width() - (selectedOpts.margin * 2)) * parseFloat(w) / 100, 10) + 'px'; 286 287 } else { 288 w = w == 'auto' ? 'auto' : w + 'px'; 289 } 290 291 if (h.toString().indexOf('%') > -1) { 292 h = parseInt( ($(window).height() - (selectedOpts.margin * 2)) * parseFloat(h) / 100, 10) + 'px'; 293 294 } else { 295 h = h == 'auto' ? 'auto' : h + 'px'; 296 } 297 298 tmp.wrapInner('<div style="width:' + w + ';height:' + h + ';overflow: ' + (selectedOpts.scrolling == 'auto' ? 'auto' : (selectedOpts.scrolling == 'yes' ? 'scroll' : 'hidden')) + ';position:relative;"></div>'); 299 300 selectedOpts.width = tmp.width(); 301 selectedOpts.height = tmp.height(); 302 303 _show(); 304 }, 305 306 _process_image = function() { 307 selectedOpts.width = imgPreloader.width; 308 selectedOpts.height = imgPreloader.height; 309 310 $("<img />").attr({ 311 'id' : 'fancybox-img', 312 'src' : imgPreloader.src, 313 'alt' : selectedOpts.title 314 }).appendTo( tmp ); 315 316 _show(); 317 }, 318 319 _show = function() { 320 var pos, equal; 321 322 loading.hide(); 323 324 if (wrap.is(":visible") && false === currentOpts.onCleanup(currentArray, currentIndex, currentOpts)) { 325 $.event.trigger('fancybox-cancel'); 326 327 busy = false; 328 return; 329 } 330 331 busy = true; 332 333 $(content.add( overlay )).unbind(); 334 335 $(window).unbind("resize.fb scroll.fb"); 336 $(document).unbind('keydown.fb'); 337 338 if (wrap.is(":visible") && currentOpts.titlePosition !== 'outside') { 339 wrap.css('height', wrap.height()); 340 } 341 342 currentArray = selectedArray; 343 currentIndex = selectedIndex; 344 currentOpts = selectedOpts; 345 346 if (currentOpts.overlayShow) { 347 overlay.css({ 348 'background-color' : currentOpts.overlayColor, 349 'opacity' : currentOpts.overlayOpacity, 350 'cursor' : currentOpts.hideOnOverlayClick ? 'pointer' : 'auto', 351 'height' : $(document).height() 352 }); 353 354 if (!overlay.is(':visible')) { 355 if (isIE6) { 356 $('select:not(#fancybox-tmp select)').filter(function() { 357 return this.style.visibility !== 'hidden'; 358 }).css({'visibility' : 'hidden'}).one('fancybox-cleanup', function() { 359 this.style.visibility = 'inherit'; 360 });
361 } 362 363 overlay.show(); 364 } 365 } else { 366 overlay.hide(); 367 } 368 369 final_pos = _get_zoom_to(); 370 371 _process_title(); 372 373 if (wrap.is(":visible")) { 374 $( close.add( nav_left ).add( nav_right ) ).hide(); 375 376 pos = wrap.position(), 377 378 start_pos = { 379 top : pos.top, 380 left : pos.left, 381 width : wrap.width(), 382 height : wrap.height() 383 }; 384 385 equal = (start_pos.width == final_pos.width && start_pos.height == final_pos.height); 386 387 content.fadeTo(currentOpts.changeFade, 0.3, function() { 388 var finish_resizing = function() { 389 content.html( tmp.contents() ).fadeTo(currentOpts.changeFade, 1, _finish); 390 }; 391 392 $.event.trigger('fancybox-change'); 393 394 content 395 .empty() 396 .removeAttr('filter') 397 .css({ 398 'border-width' : currentOpts.padding, 399 'width' : final_pos.width - currentOpts.padding * 2, 400 'height' : selectedOpts.autoDimensions ? 'auto' : final_pos.height - titleHeight - currentOpts.padding * 2 401 }); 402 403 if (equal) { 404 finish_resizing(); 405 406 } else { 407 fx.prop = 0; 408 409 $(fx).animate({prop: 1}, { 410 duration : currentOpts.changeSpeed, 411 easing : currentOpts.easingChange, 412 step : _draw, 413 complete : finish_resizing 414 }); 415 } 416 }); 417 418 return; 419 } 420 421 wrap.removeAttr("style"); 422 423 content.css('border-width', currentOpts.padding); 424 425 if (currentOpts.transitionIn == 'elastic') { 426 start_pos = _get_zoom_from(); 427 428 content.html( tmp.contents() ); 429 430 wrap.show(); 431 432 if (currentOpts.opacity) { 433 final_pos.opacity = 0; 434 } 435 436 fx.prop = 0; 437 438 $(fx).animate({prop: 1}, { 439 duration : currentOpts.speedIn, 440 easing : currentOpts.easingIn, 441 step : _draw, 442 complete : _finish 443 }); 444 445 return; 446 } 447 448 if (currentOpts.titlePosition == 'inside' && titleHeight > 0) { 449 title.show(); 450 } 451 452 content 453 .css({ 454 'width' : final_pos.width - currentOpts.padding * 2, 455 'height' : selectedOpts.autoDimensions ? 'auto' : final_pos.height - titleHeight - currentOpts.padding * 2 456 }) 457 .html( tmp.contents() ); 458 459 wrap 460 .css(final_pos) 461 .fadeIn( currentOpts.transitionIn == 'none' ? 0 : currentOpts.speedIn, _finish ); 462 }, 463 464 _format_title = function(title) { 465 if (title && title.length) { 466 if (currentOpts.titlePosition == 'float') { 467 return '<table id="fancybox-title-float-wrap" cellpadding="0" cellspacing="0"><tr><td id="fancybox-title-float-left"></td><td id="fancybox-title-float-main">' + title + '</td><td id="fancybox-title-float-right"></td></tr></table>'; 468 } 469 470 return '<div id="fancybox-title-' + currentOpts.titlePosition + '">' + title + '</div>'; 471 } 472 473 return false; 474 }, 475 476 _process_title = function() { 477 titleStr = currentOpts.title || ''; 478 titleHeight = 0; 479 480 title 481 .empty() 482 .removeAttr('style') 483 .removeClass(); 484 485 if (currentOpts.titleShow === false) { 486 title.hide(); 487 return; 488 } 489 490 titleStr = $.isFunction(currentOpts.titleFormat) ? currentOpts.titleFormat(titleStr, currentArray, currentIndex, currentOpts) : _format_title(titleStr); 491 492 if (!titleStr || titleStr === '') { 493 title.hide(); 494 return; 495 } 496 497 title 498 .addClass('fancybox-title-' + currentOpts.titlePosition) 499 .html( titleStr ) 500 .appendTo( 'body' ) 501 .show(); 502 503 switch (currentOpts.titlePosition) { 504 case 'inside': 505 title 506 .css({ 507 'width' : final_pos.width - (currentOpts.padding * 2), 508 'marginLeft' : currentOpts.padding, 509 'marginRight' : currentOpts.padding 510 }); 511 512 titleHeight = title.outerHeight(true); 513 514 title.appendTo( outer ); 515 516 final_pos.height += titleHeight; 517 break; 518 519 case 'over': 520 title 521 .css({ 522 'marginLeft' : currentOpts.padding, 523 'width' : final_pos.width - (currentOpts.padding * 2), 524 'bottom' : currentOpts.padding 525 }) 526 .appendTo( outer ); 527 break; 528 529 case 'float': 530 title 531 .css('left', parseInt((title.width() - final_pos.width - 40)/ 2, 10) * -1) 532 .appendTo( wrap ); 533 break; 534 535 default: 536 title 537 .css({ 538 'width' : final_pos.width - (currentOpts.padding * 2), 539 'paddingLeft' : currentOpts.padding, 540 'paddingRight' : currentOpts.padding 541 }) 542 .appendTo( wrap ); 543 break; 544 } 545 546 title.hide(); 547 }, 548 549 _set_navigation = function() { 550 if (currentOpts.enableEscapeButton || currentOpts.enableKeyboardNav) { 551 $(document).bind('keydown.fb', function(e) { 552 if (e.keyCode == 27 && currentOpts.enableEscapeButton) { 553 e.preventDefault(); 554 $.fancybox.close(); 555 556 } else if ((e.keyCode == 37 || e.keyCode == 39) && currentOpts.enableKeyboardNav && e.target.tagName !== 'INPUT' && e.target.tagName !== 'TEXTAREA' && e.target.tagName !== 'SELECT') { 557 e.preventDefault(); 558 $.fancybox[ e.keyCode == 37 ? 'prev' : 'next'](); 559 } 560 }); 561 } 562 563 if (!currentOpts.showNavArrows) { 564 nav_left.hide(); 565 nav_right.hide(); 566 return; 567 } 568 569 if ((currentOpts.cyclic && currentArray.length > 1) || currentIndex !== 0) { 570 nav_left.show(); 571 } 572 573 if ((currentOpts.cyclic && currentArray.length > 1) || currentIndex != (currentArray.length -1)) { 574 nav_right.show(); 575 } 576 }, 577 578 _finish = function () { 579 if (!$.support.opacity) { 580 content.get(0).style.removeAttribute('filter'); 581 wrap.get(0).style.removeAttribute('filter'); 582 } 583 584 if (selectedOpts.autoDimensions) { 585 content.css('height', 'auto'); 586 } 587 588 wrap.css('height', 'auto'); 589 590 if (titleStr && titleStr.length) { 591 title.show(); 592 } 593 594 if (currentOpts.showCloseButton) { 595 close.show(); 596 } 597 598 _set_navigation(); 599 600 if (currentOpts.hideOnContentClick) { 601 content.bind('click', $.fancybox.close); 602 } 603 604 if (currentOpts.hideOnOverlayClick) { 605 overlay.bind('click', $.fancybox.close); 606 } 607 608 $(window).bind("resize.fb", $.fancybox.resize); 609 610 if (currentOpts.centerOnScroll) { 611 $(window).bind("scroll.fb", $.fancybox.center); 612 } 613 614 if (currentOpts.type == 'iframe') { 615 $('<iframe id="fancybox-frame" name="fancybox-frame' + new Date().getTime() + '" frameborder="0" hspace="0" ' + ($.browser.msie ? 'allowtransparency="true""' : '') + ' scrolling="' + selectedOpts.scrolling + '" src="' + currentOpts.href + '"></iframe>').appendTo(content); 616 } 617 618 wrap.show(); 619 620 busy = false; 621 622 $.fancybox.center(); 623 624 currentOpts.onComplete(currentArray, currentIndex, currentOpts); 625 626 _preload_images(); 627 }, 628 629 _preload_images = function() { 630 var href, 631 objNext; 632 633 if ((currentArray.length -1) > currentIndex) { 634 href = currentArray[ currentIndex + 1 ].href; 635 636 if (typeof href !== 'undefined' && href.match(imgRegExp)) { 637 objNext = new Image(); 638 objNext.src = href; 639 } 640 } 641 642 if (currentIndex > 0) { 643 href = currentArray[ currentIndex - 1 ].href; 644 645 if (typeof href !== 'undefined' && href.match(imgRegExp)) { 646 objNext = new Image(); 647 objNext.src = href; 648 } 649 } 650 }, 651 652 _draw = function(pos) { 653 var dim = { 654 width : parseInt(start_pos.width + (final_pos.width - start_pos.width) * pos, 10), 655 height : parseInt(start_pos.height + (final_pos.height - start_pos.height) * pos, 10), 656 657 top : parseInt(start_pos.top + (final_pos.top - start_pos.top) * pos, 10), 658 left : parseInt(start_pos.left + (final_pos.left - start_pos.left) * pos, 10) 659 }; 660 661 if (typeof final_pos.opacity !== 'undefined') { 662 dim.opacity = pos < 0.5 ? 0.5 : pos; 663 } 664 665 wrap.css(dim); 666 667 content.css({ 668 'width' : dim.width - currentOpts.padding * 2,
669 'height' : dim.height - (titleHeight * pos) - currentOpts.padding * 2 670 }); 671 }, 672 673 _get_viewport = function() { 674 return [ 675 $(window).width() - (currentOpts.margin * 2), 676 $(window).height() - (currentOpts.margin * 2), 677 $(document).scrollLeft() + currentOpts.margin, 678 $(document).scrollTop() + currentOpts.margin 679 ]; 680 }, 681 682 _get_zoom_to = function () { 683 var view = _get_viewport(), 684 to = {}, 685 resize = currentOpts.autoScale, 686 double_padding = currentOpts.padding * 2, 687 ratio; 688 689 if (currentOpts.width.toString().indexOf('%') > -1) { 690 to.width = parseInt((view[0] * parseFloat(currentOpts.width)) / 100, 10); 691 } else { 692 to.width = currentOpts.width + double_padding; 693 } 694 695 if (currentOpts.height.toString().indexOf('%') > -1) { 696 to.height = parseInt((view[1] * parseFloat(currentOpts.height)) / 100, 10); 697 } else { 698 to.height = currentOpts.height + double_padding; 699 } 700 701 if (resize && (to.width > view[0] || to.height > view[1])) { 702 if (selectedOpts.type == 'image' || selectedOpts.type == 'swf') { 703 ratio = (currentOpts.width ) / (currentOpts.height ); 704 705 if ((to.width ) > view[0]) { 706 to.width = view[0]; 707 to.height = parseInt(((to.width - double_padding) / ratio) + double_padding, 10); 708 } 709 710 if ((to.height) > view[1]) { 711 to.height = view[1]; 712 to.width = parseInt(((to.height - double_padding) * ratio) + double_padding, 10); 713 } 714 715 } else { 716 to.width = Math.min(to.width, view[0]); 717 to.height = Math.min(to.height, view[1]); 718 } 719 } 720 721 to.top = parseInt(Math.max(view[3] - 20, view[3] + ((view[1] - to.height - 40) * 0.5)), 10); 722 to.left = parseInt(Math.max(view[2] - 20, view[2] + ((view[0] - to.width - 40) * 0.5)), 10); 723 724 return to; 725 }, 726 727 _get_obj_pos = function(obj) { 728 var pos = obj.offset(); 729 730 pos.top += parseInt( obj.css('paddingTop'), 10 ) || 0; 731 pos.left += parseInt( obj.css('paddingLeft'), 10 ) || 0; 732 733 pos.top += parseInt( obj.css('border-top-width'), 10 ) || 0; 734 pos.left += parseInt( obj.css('border-left-width'), 10 ) || 0; 735 736 pos.width = obj.width(); 737 pos.height = obj.height(); 738 739 return pos; 740 }, 741 742 _get_zoom_from = function() { 743 var orig = selectedOpts.orig ? $(selectedOpts.orig) : false, 744 from = {}, 745 pos, 746 view; 747 748 if (orig && orig.length) { 749 pos = _get_obj_pos(orig); 750 751 from = { 752 width : pos.width + (currentOpts.padding * 2), 753 height : pos.height + (currentOpts.padding * 2), 754 top : pos.top - currentOpts.padding - 20, 755 left : pos.left - currentOpts.padding - 20 756 }; 757 758 } else { 759 view = _get_viewport(); 760 761 from = { 762 width : currentOpts.padding * 2, 763 height : currentOpts.padding * 2, 764 top : parseInt(view[3] + view[1] * 0.5, 10), 765 left : parseInt(view[2] + view[0] * 0.5, 10) 766 }; 767 } 768 769 return from; 770 }, 771 772 _animate_loading = function() { 773 if (!loading.is(':visible')){ 774 clearInterval(loadingTimer); 775 return; 776 } 777 778 $('div', loading).css('top', (loadingFrame * -40) + 'px'); 779 780 loadingFrame = (loadingFrame + 1) % 12; 781 }; 782 783 /* 784 * Public methods 785 */ 786 787 $.fn.fancybox = function(options) { 788 if (!$(this).length) { 789 return this; 790 } 791 var inventItems = $(this); 792 793 $(this) 794 .data('fancybox', $.extend({}, options, ($.metadata ? $(this).metadata() : {}))) 795 .unbind('click.fb') 796 .bind('click.fb', function(e) { 797 e.preventDefault(); 798 799 if (busy) { 800 return; 801 } 802 803 busy = true; 804 805 $(this).blur(); 806 807/* 808 selectedArray = []; 809 selectedIndex = 0; 810 811 var rel = $(this).attr('rel') || ''; 812 if (!rel || rel == '' || rel === 'nofollow') { 813 selectedArray.push(this); 814 815 } else { 816 selectedArray = $("a[rel=" + rel + "], area[rel=" + rel + "]"); 817 selectedIndex = selectedArray.index( this ); 818 } 819*/ 820 selectedArray = inventItems; 821 selectedIndex = inventItems.index(this); 822 823 _start(); 824 825 return; 826 }); 827 828 return this; 829 }; 830 831 $.fancybox = function(obj) { 832 var opts; 833 834 if (busy) { 835 return; 836 } 837 838 busy = true; 839 opts = typeof arguments[1] !== 'undefined' ? arguments[1] : {}; 840 841 selectedArray = []; 842 selectedIndex = parseInt(opts.index, 10) || 0; 843 844 if ($.isArray(obj)) { 845 for (var i = 0, j = obj.length; i < j; i++) { 846 if (typeof obj[i] == 'object') { 847 $(obj[i]).data('fancybox', $.extend({}, opts, obj[i])); 848 } else { 849 obj[i] = $({}).data('fancybox', $.extend({content : obj[i]}, opts)); 850 } 851 } 852 853 selectedArray = jQuery.merge(selectedArray, obj); 854 855 } else { 856 if (typeof obj == 'object') { 857 $(obj).data('fancybox', $.extend({}, opts, obj)); 858 } else { 859 obj = $({}).data('fancybox', $.extend({content : obj}, opts)); 860 } 861 862 selectedArray.push(obj); 863 } 864 865 if (selectedIndex > selectedArray.length || selectedIndex < 0) { 866 selectedIndex = 0; 867 } 868 869 _start(); 870 }; 871 872 $.fancybox.showActivity = function() { 873 clearInterval(loadingTimer); 874 875 loading.show(); 876 loadingTimer = setInterval(_animate_loading, 66); 877 }; 878 879 $.fancybox.hideActivity = function() { 880 loading.hide(); 881 }; 882 883 $.fancybox.next = function() { 884 return $.fancybox.pos( currentIndex + 1); 885 }; 886 887 $.fancybox.prev = function() { 888 return $.fancybox.pos( currentIndex - 1); 889 }; 890 891 $.fancybox.pos = function(pos) { 892 if (busy) { 893 return; 894 } 895 896 pos = parseInt(pos); 897 898 selectedArray = currentArray; 899 900 if (pos > -1 && pos < currentArray.length) { 901 selectedIndex = pos; 902 _start(); 903 904 } else if (currentOpts.cyclic && currentArray.length > 1) { 905 selectedIndex = pos >= currentArray.length ? 0 : currentArray.length - 1; 906 _start(); 907 } 908 909 return; 910 }; 911 912 $.fancybox.cancel = function() { 913 if (busy) { 914 return; 915 } 916 917 busy = true; 918 919 $.event.trigger('fancybox-cancel'); 920 921 _abort(); 922 923 selectedOpts.onCancel(selectedArray, selectedIndex, selectedOpts); 924 925 busy = false; 926 }; 927 928 // Note: within an iframe use - parent.$.fancybox.close(); 929 $.fancybox.close = function() { 930 if (busy || wrap.is(':hidden')) { 931 return; 932 } 933 934 busy = true; 935 936 if (currentOpts && false === currentOpts.onCleanup(currentArray, currentIndex, currentOpts)) { 937 busy = false; 938 return; 939 } 940 941 _abort(); 942 943 $(close.add( nav_left ).add( nav_right )).hide(); 944 945 $(content.add( overlay )).unbind(); 946 947 $(window).unbind("resize.fb scroll.fb"); 948 $(document).unbind('keydown.fb'); 949 950 content.find('iframe').attr('src', isIE6 && /^https/i.test(window.location.href || '') ? 'javascript:void(false)' : 'about:blank'); 951 952 if (currentOpts.titlePosition !== 'inside') { 953 title.empty(); 954 } 955 956 wrap.stop(); 957 958 function _cleanup() { 959 overlay.fadeOut('fast'); 960 961 title.empty().hide(); 962 wrap.hide(); 963 964 $.event.trigger('fancybox-cleanup'); 965 966 content.empty(); 967 968 currentOpts.onClosed(currentArray, currentIndex, currentOpts); 969 970 currentArray = selectedOpts = []; 971 currentIndex = selectedIndex = 0; 972 currentOpts = selectedOpts = {}; 973 974 busy = false; 975 } 976 977 if (currentOpts.transitionOut == 'elastic') { 978 start_pos = _get_zoom_from(); 979 980 var pos = wrap.position(); 981 982 final_pos = { 983 top : pos.top , 984 left : pos.left, 985 width : wrap.width(), 986 height : wrap.height() 987 }; 988 989 if (currentOpts.opacity) { 990 final_pos.opacity = 1; 991 } 992 993 title.empty().hide(); 994 995 fx.prop = 1; 996 997 $(fx).animate({ prop: 0 }, { 998 duration : currentOpts.speedOut, 999 easing : currentOpts.easingOut, 1000 step : _draw, 1001 complete : _cleanup 1002 }); 1003 1004 } else { 1005 wrap.fadeOut( currentOpts.transitionOut == 'none' ? 0 : currentOpts.speedOut, _cleanup); 1006 } 1007 }; 1008 1009 $.fancybox.resize = function() { 1010 if (overlay.is(':visible')) { 1011 overlay.css('height', $(document).height()); 1012 } 1013 1014 $.fancybox.center(true); 1015 }; 1016 1017 $.fancybox.center = function() { 1018 var view, align; 1019 1020 if (busy) { 1021 return; 1022 } 1023 1024 align = arguments[0] === true ? 1 : 0; 1025 view = _get_viewport(); 1026 1027 if (!align && (wrap.width() > view[0] || wrap.height() > view[1])) { 1028 return; 1029 } 1030 1031 wrap 1032 .stop() 1033 .animate({ 1034 'top' : parseInt(Math.max(view[3] - 20, view[3] + ((view[1] - content.height() - 40) * 0.5) - currentOpts.padding)), 1035 'left' : parseInt(Math.max(view[2] - 20, view[2] + ((view[0] - content.width() - 40) * 0.5) - currentOpts.padding)) 1036 }, typeof arguments[0] == 'number' ? arguments[0] : 200); 1037 }; 1038 1039 $.fancybox.init = function() { 1040 if ($("#fancybox-wrap").length) { 1041 return; 1042 } 1043 1044 $('body').append( 1045 tmp = $('<div id="fancybox-tmp"></div>'), 1046 loading = $('<div id="fancybox-loading"><div></div></div>'), 1047 overlay = $('<div id="fancybox-overlay"></div>'), 1048 wrap = $('<div id="fancybox-wrap"></div>') 1049 ); 1050
1051 outer = $('<div id="fancybox-outer"></div>') 1052 .append('<div class="fancybox-bg" id="fancybox-bg-n"></div><div class="fancybox-bg" id="fancybox-bg-ne"></div><div class="fancybox-bg" id="fancybox-bg-e"></div><div class="fancybox-bg" id="fancybox-bg-se"></div><div class="fancybox-bg" id="fancybox-bg-s"></div><div class="fancybox-bg" id="fancybox-bg-sw"></div><div class="fancybox-bg" id="fancybox-bg-w"></div><div class="fancybox-bg" id="fancybox-bg-nw"></div>') 1053 .appendTo( wrap ); 1054 1055 outer.append( 1056 content = $('<div id="fancybox-content"></div>'), 1057 close = $('<a id="fancybox-close"></a>'), 1058 title = $('<div id="fancybox-title"></div>'), 1059 1060 nav_left = $('<a href="javascript:;" id="fancybox-left"><span class="fancy-ico" id="fancybox-left-ico"></span></a>'), 1061 nav_right = $('<a href="javascript:;" id="fancybox-right"><span class="fancy-ico" id="fancybox-right-ico"></span></a>') 1062 ); 1063 1064 close.click($.fancybox.close); 1065 loading.click($.fancybox.cancel); 1066 1067 nav_left.click(function(e) { 1068 e.preventDefault(); 1069 $.fancybox.prev(); 1070 }); 1071 1072 nav_right.click(function(e) { 1073 e.preventDefault(); 1074 $.fancybox.next(); 1075 }); 1076 1077 if ($.fn.mousewheel) { 1078 wrap.bind('mousewheel.fb', function(e, delta) { 1079 if (busy) { 1080 e.preventDefault(); 1081 1082 } else if ($(e.target).get(0).clientHeight == 0 || $(e.target).get(0).scrollHeight === $(e.target).get(0).clientHeight) { 1083 e.preventDefault(); 1084 $.fancybox[ delta > 0 ? 'prev' : 'next'](); 1085 } 1086 }); 1087 } 1088 1089 if (!$.support.opacity) { 1090 wrap.addClass('fancybox-ie'); 1091 } 1092 1093 if (isIE6) { 1094 loading.addClass('fancybox-ie6'); 1095 wrap.addClass('fancybox-ie6'); 1096 1097 $('<iframe id="fancybox-hide-sel-frame" src="' + (/^https/i.test(window.location.href || '') ? 'javascript:void(false)' : 'about:blank' ) + '" scrolling="no" border="0" frameborder="0" tabindex="-1"></iframe>').prependTo(outer); 1098 } 1099 }; 1100 1101 $.fn.fancybox.defaults = { 1102 padding : 10, 1103 margin : 40, 1104 opacity : false, 1105 modal : false, 1106 cyclic : false, 1107 scrolling : 'auto', // 'auto', 'yes' or 'no' 1108 1109 width : 560, 1110 height : 340, 1111 1112 autoScale : true, 1113 autoDimensions : true, 1114 centerOnScroll : false, 1115 1116 ajax : {}, 1117 swf : { wmode: 'transparent' }, 1118 1119 hideOnOverlayClick : true, 1120 hideOnContentClick : false, 1121 1122 overlayShow : true, 1123 overlayOpacity : 0.7, 1124 overlayColor : '#777', 1125 1126 titleShow : true, 1127 titlePosition : 'float', // 'float', 'outside', 'inside' or 'over' 1128 titleFormat : null, 1129 titleFromAlt : false, 1130 1131 transitionIn : 'fade', // 'elastic', 'fade' or 'none' 1132 transitionOut : 'fade', // 'elastic', 'fade' or 'none' 1133 1134 speedIn : 300, 1135 speedOut : 300, 1136 1137 changeSpeed : 300, 1138 changeFade : 'fast', 1139 1140 easingIn : 'swing', 1141 easingOut : 'swing', 1142 1143 showCloseButton : true, 1144 showNavArrows : true, 1145 enableEscapeButton : true, 1146 enableKeyboardNav : true, 1147 1148 onStart : function(){}, 1149 onCancel : function(){}, 1150 onComplete : function(){}, 1151 onCleanup : function(){}, 1152 onClosed : function(){}, 1153 onError : function(){} 1154 }; 1155 1156 $(document).ready(function() { 1157 $.fancybox.init(); 1158 }); 1159 1160})(jQuery);
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.