daily pastebin goal
25%
SHARE
TWEET

jQuery Fancybox 1.3.4 patched for jQuery 1.11

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