Blame | Last modification | View Log
/** nyroModal - jQuery Plugin* http://nyromodal.nyrodev.com** Copyright (c) 2010 Cedric Nirousset (nyrodev.com)* Licensed under the MIT license** $Date: 2010-02-23 (Tue, 23 Feb 2010) $* $version: 1.6.2+jquery1.8fix+bindfix+ff2fix*/jQuery(function($) {// -------------------------------------------------------// Private Variables// -------------------------------------------------------var userAgent = navigator.userAgent.toLowerCase();var browserVersion = (userAgent.match(/.+(?:rv|webkit|khtml|opera|msie)[\/: ]([\d.]+)/ ) || [0,'0'])[1];var isIE6 = (/msie/.test(userAgent) && !/opera/.test(userAgent) && parseInt(browserVersion) < 7 && (!window.XMLHttpRequest || typeof(XMLHttpRequest) === 'function'));var body = $('body');var currentSettings;var callingSettings;var shouldResize = false;var gallery = {};// To know if the fix for the Issue 10 should be applied (or has been applied)var fixFF = false;// Used for retrieve the content from an hidden divvar contentElt;var contentEltLast;// Contains info about nyroModal state and all div referencesvar modal = {started: false,ready: false,dataReady: false,anim: false,animContent: false,loadingShown: false,transition: false,resizing: false,closing: false,error: false,blocker: null,blockerVars: null,full: null,bg: null,loading: null,tmp: null,content: null,wrapper: null,contentWrapper: null,scripts: new Array(),scriptsShown: new Array()};// Indicate of the height or the width was resized, to reinit the currentsettings related to nullvar resized = {width: false,height: false,windowResizing: false};var initSettingsSize = {width: null,height: null,windowResizing: true};var windowResizeTimeout;// -------------------------------------------------------// Public function// -------------------------------------------------------// jQuery extension function. A paramater object could be used to overwrite the default settings$.fn.nyroModal = function(settings) {if (!this)return false;return this.each(function() {var me = $(this);if (this.nodeName.toLowerCase() == 'form') {me.off('submit.nyroModal').on('submit.nyroModal', function(e) {if(e.isDefaultPrevented())return false;if (me.data('nyroModalprocessing'))return true;if (this.enctype == 'multipart/form-data') {processModal($.extend(settings, {from: this}));return true;}e.preventDefault();processModal($.extend(settings, {from: this}));return false;});} else {me.off('click.nyroModal').on('click.nyroModal', function(e) {if(e.isDefaultPrevented())return false;e.preventDefault();processModal($.extend(settings, {from: this}));return false;});}});};// jQuery extension function to call manually the modal. A paramater object could be used to overwrite the default settings$.fn.nyroModalManual = function(settings) {if (!this.length)processModal(settings);return this.each(function(){processModal($.extend(settings, {from: this}));});};$.nyroModalManual = function(settings) {processModal(settings);};// Update the current settings// object settings// string deep1 first key where overwrite the settings// string deep2 second key where overwrite the settings$.nyroModalSettings = function(settings, deep1, deep2) {setCurrentSettings(settings, deep1, deep2);if (!deep1 && modal.started) {if (modal.bg && settings.bgColor)currentSettings.updateBgColor(modal, currentSettings, function(){});if (modal.contentWrapper && settings.title)setTitle();if (!modal.error && (settings.windowResizing || (!modal.resizing && (('width' in settings && settings.width == currentSettings.width) || ('height' in settings && settings.height == currentSettings.height))))) {modal.resizing = true;if (modal.contentWrapper)calculateSize(true);if (modal.contentWrapper && modal.contentWrapper.is(':visible') && !modal.animContent) {if (fixFF)modal.content.css({position: ''});currentSettings.resize(modal, currentSettings, function() {currentSettings.windowResizing = false;modal.resizing = false;if (fixFF)modal.content.css({position: 'fixed'});if ($.isFunction(currentSettings.endResize))currentSettings.endResize(modal, currentSettings);});}}}};// Remove the modal function$.nyroModalRemove = function() {removeModal();};// Go to the next image for a gallery// return false if nothing was done$.nyroModalNext = function() {var link = getGalleryLink(1);if (link)return link.nyroModalManual(getCurrentSettingsNew());return false;};// Go to the previous image for a gallery// return false if nothing was done$.nyroModalPrev = function() {var link = getGalleryLink(-1);if (link)return link.nyroModalManual(getCurrentSettingsNew());return false;};// -------------------------------------------------------// Default Settings// -------------------------------------------------------$.fn.nyroModal.settings = {debug: false, // Show the debug in the backgroundblocker: false, // Element which will be blocked by the modalwindowResize: true, // indicates if the modal should resize when the window is resizedmodal: false, // Esc key or click backgrdound enabling or nottype: '', // nyroModal type (form, formData, iframe, image, etc...)forceType: null, // Used to force the typefrom: '', // Dom object where the call come fromhash: '', // Eventual hash in the urlprocessHandler: null, // Handler just before the real processselIndicator: 'nyroModalSel', // Value added when a form or Ajax is sent with a filter contentformIndicator: 'nyroModal', // Value added when a form is sentcontent: null, // Raw content if type content is usedbgColor: '#000000', // Background colorajax: {}, // Ajax option (url, data, type, success will be overwritten for a form, url and success only for an ajax call)swf: { // Swf player options if swf type is used.wmode: 'transparent'},width: null, // default Width If null, will be calculate automaticallyheight: null, // default Height If null, will be calculate automaticallyminWidth: 400, // Minimum widthminHeight: 300, // Minimum heightresizable: true, // Indicate if the content is resizable. Will be set to false for swfautoSizable: true, // Indicate if the content is auto sizable. If not, the min size will be usedpadding: 25, // padding for the max modal sizeregexImg: '[^\.]\.(jpg|jpeg|png|tiff|gif|bmp)\s*$', // Regex to find imagesaddImageDivTitle: false, // Indicate if the div title should be inserteddefaultImgAlt: 'Image', // Default alt attribute for the imagessetWidthImgTitle: true, // Set the width to the image titleltr: true, // Left to Right by default. Put to false for Hebrew or Right to Left languagegallery: null, // Gallery name if providedgalleryLinks: '<a href="#" class="nyroModalPrev">Prev</a><a href="#" class="nyroModalNext">Next</a>', // Use .nyroModalPrev and .nyroModalNext to set the navigation linkgalleryCounts: galleryCounts, // Callback to show the gallery countgalleryLoop: false, // Indicate if the gallery should loopzIndexStart: 100,cssOpt: { // Default CSS option for the nyroModal Div. Some will be overwritten or updated when using IE6bg: {position: 'absolute',overflow: 'hidden',top: 0,left: 0,height: '100%',width: '100%'},wrapper: {position: 'absolute',top: '50%',left: '50%'},wrapper2: {},content: {},loading: {position: 'absolute',top: '50%',left: '50%',marginTop: '-50px',marginLeft: '-50px'}},wrap: { // Wrapper div used to style the modal regarding the content typediv: '<div class="wrapper"></div>',ajax: '<div class="wrapper"></div>',form: '<div class="wrapper"></div>',formData: '<div class="wrapper"></div>',image: '<div class="wrapperImg"></div>',swf: '<div class="wrapperSwf"></div>',iframe: '<div class="wrapperIframe"></div>',iframeForm: '<div class="wrapperIframe"></div>',manual: '<div class="wrapper"></div>'},closeButton: '<a href="#" class="nyroModalClose" id="closeBut" title="close"></a>', // Adding automaticly as the first child of #nyroModalWrappertitle: null, // Modal titletitleFromIframe: true, // When using iframe in the same domain, try to get the title from itopenSelector: '.nyroModal', // selector for open a new modal. will be used to parse automaticly at page loadingcloseSelector: '.nyroModalClose', // selector to close the modalcontentLoading: '<a href="#" class="nyroModalClose">Cancel</a>', // Loading div contenterrorClass: 'error', // CSS Error class added to the loading div in case of errorcontentError: 'The requested content cannot be loaded.<br />Please try again later.<br /><a href="#" class="nyroModalClose">Close</a>', // Content placed in the loading div in case of errorhandleError: null, // Callback in case of errorshowBackground: showBackground, // Show background animation functionhideBackground: hideBackground, // Hide background animation functionendFillContent: null, // Will be called after filling and wraping the content, before parsing closeSelector and openSelector and showing the contentshowContent: showContent, // Show content animation functionendShowContent: null, // Will be called once the content is shownbeforeHideContent: null, // Will be called just before the modal closinghideContent: hideContent, // Hide content animation functionshowTransition: showTransition, // Show the transition animation (a modal is already shown and a new one is requested)hideTransition: hideTransition, // Hide the transition animation to show the contentshowLoading: showLoading, // show loading animation functionhideLoading: hideLoading, // hide loading animation functionresize: resize, // Resize animation functionendResize: null, // Will be called one the content is resizedupdateBgColor: updateBgColor, // Change background color animation functionendRemove: null // Will be called once the modal is totally gone};// -------------------------------------------------------// Private function// -------------------------------------------------------// Main functionfunction processModal(settings) {if (modal.loadingShown || modal.transition || modal.anim)return;debug('processModal');modal.started = true;callingSettings = $.extend(true, settings);setDefaultCurrentSettings(settings);if (!modal.full)modal.blockerVars = modal.blocker = null;modal.error = false;modal.closing = false;modal.dataReady = false;modal.scripts = new Array();modal.scriptsShown = new Array();currentSettings.type = fileType();if (currentSettings.forceType) {if (!currentSettings.content)currentSettings.from = true;currentSettings.type = currentSettings.forceType;currentSettings.forceType = null;}if ($.isFunction(currentSettings.processHandler))currentSettings.processHandler(currentSettings);var from = currentSettings.from;var url = currentSettings.url;initSettingsSize.width = currentSettings.width;initSettingsSize.height = currentSettings.height;if (currentSettings.type == 'swf') {// Swf is transforming as a raw contentsetCurrentSettings({overflow: 'visible'}, 'cssOpt', 'content');currentSettings.content = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+currentSettings.width+'" height="'+currentSettings.height+'"><param name="movie" value="'+url+'"></param>';var tmp = '';$.each(currentSettings.swf, function(name, val) {currentSettings.content+= '<param name="'+name+'" value="'+val+'"></param>';tmp+= ' '+name+'="'+val+'"';});currentSettings.content+= '<embed src="'+url+'" type="application/x-shockwave-flash" width="'+currentSettings.width+'" height="'+currentSettings.height+'"'+tmp+'></embed></object>';}if (from) {var jFrom = $(from).blur();if (currentSettings.type == 'form') {var data = $(from).serializeArray();data.push({name: currentSettings.formIndicator, value: 1});if (currentSettings.selector)data.push({name: currentSettings.selIndicator, value: currentSettings.selector.substring(1)});showModal();$.ajax($.extend({}, currentSettings.ajax, {url: url,data: data,type: jFrom.attr('method') ? jFrom.attr('method') : 'get',success: ajaxLoaded,error: loadingError}));debug('Form Ajax Load: '+jFrom.attr('action'));} else if (currentSettings.type == 'formData') {// Form with data. We're using a hidden iframeinitModal();jFrom.attr('target', 'nyroModalIframe');jFrom.attr('action', url);jFrom.prepend('<input type="hidden" name="'+currentSettings.formIndicator+'" value="1" />');if (currentSettings.selector)jFrom.prepend('<input type="hidden" name="'+currentSettings.selIndicator+'" value="'+currentSettings.selector.substring(1)+'" />');modal.tmp.html('<iframe frameborder="0" hspace="0" name="nyroModalIframe" src="javascript:\'\';"></iframe>');$('iframe', modal.tmp).css({width: currentSettings.width,height: currentSettings.height}).error(loadingError).load(formDataLoaded);debug('Form Data Load: '+jFrom.attr('action'));showModal();showContentOrLoading();} else if (currentSettings.type == 'image') {debug('Image Load: '+url);var title = jFrom.attr('title') || currentSettings.defaultImgAlt;initModal();modal.tmp.html('<img id="nyroModalImg" />').find('img').attr('alt', title);modal.tmp.css({lineHeight: 0});$('img', modal.tmp).error(loadingError).load(function() {debug('Image Loaded: '+this.src);$(this).off('load');var w = modal.tmp.width();var h = modal.tmp.height();modal.tmp.css({lineHeight: ''});resized.width = w;resized.height = h;setCurrentSettings({width: w,height: h,imgWidth: w,imgHeight: h});initSettingsSize.width = w;initSettingsSize.height = h;setCurrentSettings({overflow: 'visible'}, 'cssOpt', 'content');modal.dataReady = true;if (modal.loadingShown || modal.transition)showContentOrLoading();}).attr('src', url);showModal();} else if (currentSettings.type == 'iframeForm') {initModal();modal.tmp.html('<iframe frameborder="0" hspace="0" src="javascript:\'\';" name="nyroModalIframe" id="nyroModalIframe"></iframe>');debug('Iframe Form Load: '+url);$('iframe', modal.tmp).eq(0).css({width: '100%',height: $.support.boxModel? '99%' : '100%'}).load(iframeLoaded);modal.dataReady = true;showModal();} else if (currentSettings.type == 'iframe') {initModal();modal.tmp.html('<iframe frameborder="0" hspace="0" src="javascript:\'\';" name="nyroModalIframe" id="nyroModalIframe"></iframe>');debug('Iframe Load: '+url);$('iframe', modal.tmp).eq(0).css({width: '100%',height: $.support.boxModel? '99%' : '100%'}).load(iframeLoaded);modal.dataReady = true;showModal();} else if (currentSettings.type) {// Could be every other kind of type or a dom selectordebug('Content: '+currentSettings.type);initModal();modal.tmp.html(currentSettings.content);var w = modal.tmp.width();var h = modal.tmp.height();var div = $(currentSettings.type);if (div.length) {setCurrentSettings({type: 'div'});w = div.width();h = div.height();if (contentElt)contentEltLast = contentElt;contentElt = div;modal.tmp.append(div.contents());}initSettingsSize.width = w;initSettingsSize.height = h;setCurrentSettings({width: w,height: h});if (modal.tmp.html())modal.dataReady = true;elseloadingError();if (!modal.ready)showModal();elseendHideContent();} else {debug('Ajax Load: '+url);setCurrentSettings({type: 'ajax'});var data = currentSettings.ajax.data || {};if (currentSettings.selector) {if (typeof data == "string") {data+= '&'+currentSettings.selIndicator+'='+currentSettings.selector.substring(1);} else {data[currentSettings.selIndicator] = currentSettings.selector.substring(1);}}showModal();$.ajax($.extend(true, currentSettings.ajax, {url: url,success: ajaxLoaded,error: loadingError,data: data}));}} else if (currentSettings.content) {// Raw content not from a DOM elementdebug('Content: '+currentSettings.type);setCurrentSettings({type: 'manual'});initModal();modal.tmp.html($('<div/>').html(currentSettings.content).contents());if (modal.tmp.html())modal.dataReady = true;elseloadingError();showModal();} else {// What should we show here? nothing happen}}// Update the current settings// object settings// string deep1 first key where overwrite the settings// string deep2 second key where overwrite the settingsfunction setDefaultCurrentSettings(settings) {debug('setDefaultCurrentSettings');currentSettings = $.extend(true, {}, $.fn.nyroModal.settings, settings);setMargin();}function setCurrentSettings(settings, deep1, deep2) {if (modal.started) {if (deep1 && deep2) {$.extend(true, currentSettings[deep1][deep2], settings);} else if (deep1) {$.extend(true, currentSettings[deep1], settings);} else {if (modal.animContent) {if ('width' in settings) {if (!modal.resizing) {settings.setWidth = settings.width;shouldResize = true;}delete settings['width'];}if ('height' in settings) {if (!modal.resizing) {settings.setHeight = settings.height;shouldResize = true;}delete settings['height'];}}$.extend(true, currentSettings, settings);}} else {if (deep1 && deep2) {$.extend(true, $.fn.nyroModal.settings[deep1][deep2], settings);} else if (deep1) {$.extend(true, $.fn.nyroModal.settings[deep1], settings);} else {$.extend(true, $.fn.nyroModal.settings, settings);}}}// Set the margin for postionning the element. Useful for IE6function setMarginScroll() {if (isIE6 && !modal.blocker) {if (document.documentElement) {currentSettings.marginScrollLeft = document.documentElement.scrollLeft;currentSettings.marginScrollTop = document.documentElement.scrollTop;} else {currentSettings.marginScrollLeft = document.body.scrollLeft;currentSettings.marginScrollTop = document.body.scrollTop;}} else {currentSettings.marginScrollLeft = 0;currentSettings.marginScrollTop = 0;}}// Set the margin for the contentfunction setMargin() {setMarginScroll();currentSettings.marginLeft = -(currentSettings.width+currentSettings.borderW)/2;currentSettings.marginTop = -(currentSettings.height+currentSettings.borderH)/2;if (!modal.blocker) {currentSettings.marginLeft+= currentSettings.marginScrollLeft;currentSettings.marginTop+= currentSettings.marginScrollTop;}}// Set the margin for the current loadingfunction setMarginLoading() {setMarginScroll();var outer = getOuter(modal.loading);currentSettings.marginTopLoading = -(modal.loading.height() + outer.h.border + outer.h.padding)/2;currentSettings.marginLeftLoading = -(modal.loading.width() + outer.w.border + outer.w.padding)/2;if (!modal.blocker) {currentSettings.marginLeftLoading+= currentSettings.marginScrollLeft;currentSettings.marginTopLoading+= currentSettings.marginScrollTop;}}// Set the modal Titlefunction setTitle() {var title = $('h1#nyroModalTitle', modal.contentWrapper);if (title.length)title.text(currentSettings.title);elsemodal.contentWrapper.prepend('<h1 id="nyroModalTitle">'+currentSettings.title+'</h1>');}// Init the nyroModal div by settings the CSS elements and hide needed elementsfunction initModal() {debug('initModal');if (!modal.full) {if (currentSettings.debug)setCurrentSettings({color: 'white'}, 'cssOpt', 'bg');var full = {zIndex: currentSettings.zIndexStart,position: 'fixed',top: 0,left: 0,width: '100%',height: '100%'};var contain = body;var iframeHideIE = '';if (currentSettings.blocker) {modal.blocker = contain = $(currentSettings.blocker);var pos = modal.blocker.offset();var w = modal.blocker.outerWidth();var h = modal.blocker.outerHeight();if (isIE6) {setCurrentSettings({height: '100%',width: '100%',top: 0,left: 0}, 'cssOpt', 'bg');}modal.blockerVars = {top: pos.top,left: pos.left,width: w,height: h};var plusTop = (/msie/.test(userAgent) ?0:getCurCSS(body.get(0), 'borderTopWidth'));var plusLeft = (/msie/.test(userAgent) ?0:getCurCSS(body.get(0), 'borderLeftWidth'));full = {position: 'absolute',top: pos.top + plusTop,left: pos.left + plusLeft,width: w,height: h};} else if (isIE6) {body.css({marginLeft: 0,marginRight: 0});var w = body.width();var h = $(window).height()+'px';if ($(window).height() >= body.outerHeight()) {h = body.outerHeight()+'px';} elsew+= 20;w += 'px';body.css({width: w,height: h,position: 'static',overflow: 'hidden'});$('html').css({overflow: 'hidden'});setCurrentSettings({cssOpt: {bg: {position: 'absolute',zIndex: currentSettings.zIndexStart+1,height: '110%',width: '110%',top: currentSettings.marginScrollTop+'px',left: currentSettings.marginScrollLeft+'px'},wrapper: { zIndex: currentSettings.zIndexStart+2 },loading: { zIndex: currentSettings.zIndexStart+3 }}});iframeHideIE = $('<iframe id="nyroModalIframeHideIe" src="javascript:\'\';"></iframe>').css($.extend({},currentSettings.cssOpt.bg, {opacity: 0,zIndex: 50,border: 'none'}));}contain.append($('<div id="nyroModalFull"><div id="nyroModalBg"></div><div id="nyroModalWrapper"><div id="nyroModalContent"></div></div><div id="nyrModalTmp"></div><div id="nyroModalLoading"></div></div>').hide());modal.full = $('#nyroModalFull').css(full).show();modal.bg = $('#nyroModalBg').css($.extend({backgroundColor: currentSettings.bgColor}, currentSettings.cssOpt.bg)).before(iframeHideIE);modal.bg.on('click.nyroModal', clickBg);modal.loading = $('#nyroModalLoading').css(currentSettings.cssOpt.loading).hide();modal.contentWrapper = $('#nyroModalWrapper').css(currentSettings.cssOpt.wrapper).hide();modal.content = $('#nyroModalContent');modal.tmp = $('#nyrModalTmp').hide();// To stop the mousewheel if the the plugin is availableif ($.isFunction($.fn.mousewheel)) {modal.content.mousewheel(function(e, d) {var elt = modal.content.get(0);if ((d > 0 && elt.scrollTop == 0) ||(d < 0 && elt.scrollHeight - elt.scrollTop == elt.clientHeight)) {e.preventDefault();e.stopPropagation();}});}$(document).on('keydown.nyroModal', keyHandler);modal.content.css({width: 'auto', height: 'auto'});modal.contentWrapper.css({width: 'auto', height: 'auto'});if (!currentSettings.blocker && currentSettings.windowResize) {$(window).on('resize.nyroModal', function() {window.clearTimeout(windowResizeTimeout);windowResizeTimeout = window.setTimeout(windowResizeHandler, 200);});}}}function windowResizeHandler() {$.nyroModalSettings(initSettingsSize);}// Show the modal (ie: the background and then the loading if needed or the content directly)function showModal() {debug('showModal');if (!modal.ready) {initModal();modal.anim = true;currentSettings.showBackground(modal, currentSettings, endBackground);} else {modal.anim = true;modal.transition = true;currentSettings.showTransition(modal, currentSettings, function(){endHideContent();modal.anim=false;showContentOrLoading();});}}// Called when user click on backgroundfunction clickBg(e) {if (!currentSettings.modal)removeModal();}// Used for the escape key or the arrow in the gallery typefunction keyHandler(e) {if (e.keyCode == 27) {if (!currentSettings.modal)removeModal();} else if (currentSettings.gallery && modal.ready && modal.dataReady && !modal.anim && !modal.transition) {if (e.keyCode == 39 || e.keyCode == 40) {e.preventDefault();$.nyroModalNext();return false;} else if (e.keyCode == 37 || e.keyCode == 38) {e.preventDefault();$.nyroModalPrev();return false;}}}// Determine the filetype regarding the link DOM elementfunction fileType() {var from = currentSettings.from;var url;if (from && from.nodeName) {var jFrom = $(from);url = jFrom.attr(from.nodeName.toLowerCase() == 'form' ? 'action' : 'href');if (!url)url = location.href.substring(window.location.host.length+7);currentSettings.url = url;if (jFrom.attr('rev') == 'modal')currentSettings.modal = true;currentSettings.title = jFrom.attr('title');if (from && from.rel && from.rel.toLowerCase() != 'nofollow') {var indexSpace = from.rel.indexOf(' ');currentSettings.gallery = indexSpace > 0 ? from.rel.substr(0, indexSpace) : from.rel;}var imgType = imageType(url, from);if (imgType)return imgType;if (isSwf(url))return 'swf';var iframe = false;if (from.target && from.target.toLowerCase() == '_blank' || (from.hostname && from.hostname.replace(/:\d*$/,'') != window.location.hostname.replace(/:\d*$/,''))) {iframe = true;}if (from.nodeName.toLowerCase() == 'form') {if (iframe)return 'iframeForm';setCurrentSettings(extractUrlSel(url));if (jFrom.attr('enctype') == 'multipart/form-data')return 'formData';return 'form';}if (iframe)return 'iframe';} else {url = currentSettings.url;if (!currentSettings.content)currentSettings.from = true;if (!url)return null;if (isSwf(url))return 'swf';var reg1 = new RegExp("^http://|https://", "g");if (url.match(reg1))return 'iframe';}var imgType = imageType(url, from);if (imgType)return imgType;var tmp = extractUrlSel(url);setCurrentSettings(tmp);if (!tmp.url)return tmp.selector;}function imageType(url, from) {var image = new RegExp(currentSettings.regexImg, 'i');if (image.test(url)) {return 'image';}}function isSwf(url) {var swf = new RegExp('[^\.]\.(swf)\s*$', 'i');return swf.test(url);}function extractUrlSel(url) {var ret = {url: null,selector: null};if (url) {var hash = getHash(url);var hashLoc = getHash(window.location.href);var curLoc = window.location.href.substring(0, window.location.href.length - hashLoc.length);var req = url.substring(0, url.length - hash.length);if (req == curLoc || req == $('base').attr('href')) {ret.selector = hash;} else {ret.url = req;ret.selector = hash;}}return ret;}// Called when the content cannot be loaded or tiemout reachedfunction loadingError() {debug('loadingError');modal.error = true;if (!modal.ready)return;if ($.isFunction(currentSettings.handleError))currentSettings.handleError(modal, currentSettings);modal.loading.addClass(currentSettings.errorClass).html(currentSettings.contentError);$(currentSettings.closeSelector, modal.loading).off('click.nyroModal').on('click.nyroModal', removeModal);setMarginLoading();modal.loading.css({marginTop: currentSettings.marginTopLoading+'px',marginLeft: currentSettings.marginLeftLoading+'px'});}// Put the content from modal.tmp to modal.contentfunction fillContent() {debug('fillContent');if (!modal.tmp.html())return;modal.content.html(modal.tmp.contents());modal.tmp.empty();wrapContent();if (currentSettings.type == 'iframeForm') {$(currentSettings.from).attr('target', 'nyroModalIframe').data('nyroModalprocessing', 1).submit().attr('target', '_blank').removeData('nyroModalprocessing');}if (!currentSettings.modal)modal.wrapper.prepend(currentSettings.closeButton);if ($.isFunction(currentSettings.endFillContent))currentSettings.endFillContent(modal, currentSettings);modal.content.append(modal.scripts);$(currentSettings.closeSelector, modal.contentWrapper).off('click.nyroModal').on('click.nyroModal', removeModal);$(currentSettings.openSelector, modal.contentWrapper).nyroModal(getCurrentSettingsNew());}// Get the current settings to be used in new linksfunction getCurrentSettingsNew() {return callingSettings;/*var currentSettingsNew = $.extend(true, {}, currentSettings);if (resized.width)currentSettingsNew.width = null;elsecurrentSettingsNew.width = initSettingsSize.width;if (resized.height)currentSettingsNew.height = null;elsecurrentSettingsNew.height = initSettingsSize.height;currentSettingsNew.cssOpt.content.overflow = 'auto';return currentSettingsNew;*/}// Wrap the content and update the modal size if neededfunction wrapContent() {debug('wrapContent');var wrap = $(currentSettings.wrap[currentSettings.type]);modal.content.append(wrap.children().remove());modal.contentWrapper.wrapInner(wrap);if (currentSettings.gallery) {// Set the action for the next and prev button (or remove them)modal.content.append(currentSettings.galleryLinks);gallery.links = $('[rel="'+currentSettings.gallery+'"], [rel^="'+currentSettings.gallery+' "]');gallery.index = gallery.links.index(currentSettings.from);if (currentSettings.galleryCounts && $.isFunction(currentSettings.galleryCounts))currentSettings.galleryCounts(gallery.index + 1, gallery.links.length, modal, currentSettings);var currentSettingsNew = getCurrentSettingsNew();var linkPrev = getGalleryLink(-1);if (linkPrev) {var prev = $('.nyroModalPrev', modal.contentWrapper).attr('href', linkPrev.attr('href')).click(function(e) {e.preventDefault();$.nyroModalPrev();return false;});if (isIE6 && currentSettings.type == 'swf') {prev.before($('<iframe id="nyroModalIframeHideIeGalleryPrev" src="javascript:\'\';"></iframe>').css({position: prev.css('position'),top: prev.css('top'),left: prev.css('left'),width: prev.width(),height: prev.height(),opacity: 0,border: 'none'}));}} else {$('.nyroModalPrev', modal.contentWrapper).remove();}var linkNext = getGalleryLink(1);if (linkNext) {var next = $('.nyroModalNext', modal.contentWrapper).attr('href', linkNext.attr('href')).click(function(e) {e.preventDefault();$.nyroModalNext();return false;});if (isIE6 && currentSettings.type == 'swf') {next.before($('<iframe id="nyroModalIframeHideIeGalleryNext" src="javascript:\'\';"></iframe>').css($.extend({}, {position: next.css('position'),top: next.css('top'),left: next.css('left'),width: next.width(),height: next.height(),opacity: 0,border: 'none'})));}} else {$('.nyroModalNext', modal.contentWrapper).remove();}}calculateSize();}function getGalleryLink(dir) {if (currentSettings.gallery) {if (!currentSettings.ltr)dir *= -1;var index = gallery.index + dir;if (index >= 0 && index < gallery.links.length)return gallery.links.eq(index);else if (currentSettings.galleryLoop) {if (index < 0)return gallery.links.eq(gallery.links.length-1);elsereturn gallery.links.eq(0);}}return false;}// Calculate the size for the contentWrapperfunction calculateSize(resizing) {debug('calculateSize');modal.wrapper = modal.contentWrapper.children('div:first');resized.width = false;resized.height = false;if (false && !currentSettings.windowResizing) {initSettingsSize.width = currentSettings.width;initSettingsSize.height = currentSettings.height;}if (currentSettings.autoSizable && (!currentSettings.width || !currentSettings.height)) {modal.contentWrapper.css({opacity: 0,width: 'auto',height: 'auto'}).show();var tmp = {width: 'auto',height: 'auto'};if (currentSettings.width) {tmp.width = currentSettings.width;} else if (currentSettings.type == 'iframe') {tmp.width = currentSettings.minWidth;}if (currentSettings.height) {tmp.height = currentSettings.height;} else if (currentSettings.type == 'iframe') {tmp.height = currentSettings.minHeight;}modal.content.css(tmp);if (!currentSettings.width) {currentSettings.width = modal.content.outerWidth(true);resized.width = true;}if (!currentSettings.height) {currentSettings.height = modal.content.outerHeight(true);resized.height = true;}modal.contentWrapper.css({opacity: 1});if (!resizing)modal.contentWrapper.hide();}if (currentSettings.type != 'image' && currentSettings.type != 'swf') {currentSettings.width = Math.max(currentSettings.width, currentSettings.minWidth);currentSettings.height = Math.max(currentSettings.height, currentSettings.minHeight);}var outerWrapper = getOuter(modal.contentWrapper);var outerWrapper2 = getOuter(modal.wrapper);var outerContent = getOuter(modal.content);var tmp = {content: {width: currentSettings.width,height: currentSettings.height},wrapper2: {width: currentSettings.width + outerContent.w.total,height: currentSettings.height + outerContent.h.total},wrapper: {width: currentSettings.width + outerContent.w.total + outerWrapper2.w.total,height: currentSettings.height + outerContent.h.total + outerWrapper2.h.total}};if (currentSettings.resizable) {var maxHeight = modal.blockerVars? modal.blockerVars.height : $(window).height()- outerWrapper.h.border- (tmp.wrapper.height - currentSettings.height);var maxWidth = modal.blockerVars? modal.blockerVars.width : $(window).width()- outerWrapper.w.border- (tmp.wrapper.width - currentSettings.width);maxHeight-= currentSettings.padding*2;maxWidth-= currentSettings.padding*2;if (tmp.content.height > maxHeight || tmp.content.width > maxWidth) {// We're gonna resize the modal as it will goes outside the view portif (currentSettings.type == 'image' || currentSettings.type == 'swf') {// An image is resized proportionnalyvar useW = currentSettings.imgWidth?currentSettings.imgWidth : currentSettings.width;var useH = currentSettings.imgHeight?currentSettings.imgHeight : currentSettings.height;var diffW = tmp.content.width - useW;var diffH = tmp.content.height - useH;if (diffH < 0) diffH = 0;if (diffW < 0) diffW = 0;var calcH = maxHeight - diffH;var calcW = maxWidth - diffW;var ratio = Math.min(calcH/useH, calcW/useW);calcW = Math.floor(useW*ratio);calcH = Math.floor(useH*ratio);tmp.content.height = calcH + diffH;tmp.content.width = calcW + diffW;} else {// For an HTML content, we simply decrease the sizetmp.content.height = Math.min(tmp.content.height, maxHeight);tmp.content.width = Math.min(tmp.content.width, maxWidth);}tmp.wrapper2 = {width: tmp.content.width + outerContent.w.total,height: tmp.content.height + outerContent.h.total};tmp.wrapper = {width: tmp.content.width + outerContent.w.total + outerWrapper2.w.total,height: tmp.content.height + outerContent.h.total + outerWrapper2.h.total};}}if (currentSettings.type == 'swf') {$('object, embed', modal.content).attr('width', tmp.content.width).attr('height', tmp.content.height);} else if (currentSettings.type == 'image') {$('img', modal.content).css({width: tmp.content.width,height: tmp.content.height});}modal.content.css($.extend({}, tmp.content, currentSettings.cssOpt.content));modal.wrapper.css($.extend({}, tmp.wrapper2, currentSettings.cssOpt.wrapper2));if (!resizing)modal.contentWrapper.css($.extend({}, tmp.wrapper, currentSettings.cssOpt.wrapper));if (currentSettings.type == 'image' && currentSettings.addImageDivTitle) {// Adding the title for the image$('img', modal.content).removeAttr('alt');var divTitle = $('div', modal.content);if (currentSettings.title != currentSettings.defaultImgAlt && currentSettings.title) {if (divTitle.length == 0) {divTitle = $('<div>'+currentSettings.title+'</div>');modal.content.append(divTitle);}if (currentSettings.setWidthImgTitle) {var outerDivTitle = getOuter(divTitle);divTitle.css({width: (tmp.content.width + outerContent.w.padding - outerDivTitle.w.total)+'px'});}} else if (divTitle.length = 0) {divTitle.remove();}}if (currentSettings.title)setTitle();tmp.wrapper.borderW = outerWrapper.w.border;tmp.wrapper.borderH = outerWrapper.h.border;setCurrentSettings(tmp.wrapper);setMargin();}function removeModal(e) {debug('removeModal');if (e)e.preventDefault();if (modal.full && modal.ready) {$(document).off('keydown.nyroModal');if (!currentSettings.blocker)$(window).off('resize.nyroModal');modal.ready = false;modal.anim = true;modal.closing = true;if (modal.loadingShown || modal.transition) {currentSettings.hideLoading(modal, currentSettings, function() {modal.loading.hide();modal.loadingShown = false;modal.transition = false;currentSettings.hideBackground(modal, currentSettings, endRemove);});} else {if (fixFF)modal.content.css({position: ''}); // Fix Issue #10, remove the attributemodal.wrapper.css({overflow: 'hidden'}); // Used to fix a visual issue when hidingmodal.content.css({overflow: 'hidden'}); // Used to fix a visual issue when hiding$('iframe', modal.content).hide(); // Fix issue 359if ($.isFunction(currentSettings.beforeHideContent)) {currentSettings.beforeHideContent(modal, currentSettings, function() {currentSettings.hideContent(modal, currentSettings, function() {endHideContent();currentSettings.hideBackground(modal, currentSettings, endRemove);});});} else {currentSettings.hideContent(modal, currentSettings, function() {endHideContent();currentSettings.hideBackground(modal, currentSettings, endRemove);});}}}if (e)return false;}function showContentOrLoading() {debug('showContentOrLoading');if (modal.ready && !modal.anim) {if (modal.dataReady) {if (modal.tmp.html()) {modal.anim = true;if (modal.transition) {fillContent();modal.animContent = true;currentSettings.hideTransition(modal, currentSettings, function() {modal.loading.hide();modal.transition = false;modal.loadingShown = false;endShowContent();});} else {currentSettings.hideLoading(modal, currentSettings, function() {modal.loading.hide();modal.loadingShown = false;fillContent();setMarginLoading();setMargin();modal.animContent = true;currentSettings.showContent(modal, currentSettings, endShowContent);});}}} else if (!modal.loadingShown && !modal.transition) {modal.anim = true;modal.loadingShown = true;if (modal.error)loadingError();elsemodal.loading.html(currentSettings.contentLoading);$(currentSettings.closeSelector, modal.loading).off('click.nyroModal').on('click.nyroModal', removeModal);setMarginLoading();currentSettings.showLoading(modal, currentSettings, function(){modal.anim=false;showContentOrLoading();});}}}// -------------------------------------------------------// Private Data Loaded callback// -------------------------------------------------------function ajaxLoaded(data) {debug('AjaxLoaded: '+this.url);if (currentSettings.selector) {var tmp = {};var i = 0;// Looking for script to store themdata = data.replace(/\r\n/gi,'nyroModalLN').replace(/gi, function(x) {tmp[i] = x;return '<pre style="display: none" class=nyroModalScript rel="'+(i++)+'"></pre>';});data = $('<div>'+data+'</div>').find(currentSettings.selector).html().replace(/
Generated by GNU Enscript 1.6.6.