/* inspired by the lightbox plugin adapted to jquery by leandro vieira pinho (http://leandrovieira.com) @author : nicolas turlais : nicolas-at-insipi.de @version : v0.3.1 - june 2012 @license : licensed under ccattribution-sharealike @website : http://chocolat.insipi.de */ (function($) { images = []; var calls = 0; $.fn.chocolat = function(settings) { settings = $.extend({ container : $('body'), displayasalink : false, linkimages : true, linkscontainer : 'choco_links_container', overlayopacity : 0.9, overlaycolor : '#fff', fadeinoverlayduration : 500, fadeinimageduration : 500, fadeoutimageduration : 500, vache : true, separator1 : ' | ', separator2 : '/', leftimg : 'images/left.gif', rightimg : 'images/right.gif', closeimg : 'images/close.gif', loadingimg : 'images/loading.gif', currentimage : 0, setindex : 0, settitle : '', lastimage : 0 },settings); calls++; settings.setindex = calls; images[settings.setindex] = []; //images: this.each(function(index){ if(index == 0 && settings.linkimages && settings.settitle == ''){ settings.settitle = isset($(this).attr('rel'), ' '); } $(this).each(function() { images[settings.setindex]['displayasalink'] = settings.displayasalink; images[settings.setindex][index] = []; images[settings.setindex][index]['adress'] = isset($(this).attr('href'), ' '); images[settings.setindex][index]['caption'] = isset($(this).attr('title'), ' '); if(!settings.displayasalink){ $(this).unbind('click').bind('click', { id : settings.setindex, nom : settings.settitle, i : index }, _initialise); } }) }); //setindex: for(var i = 0; i < images[settings.setindex].length; i++) { if(images[settings.setindex]['displayasalink']){ if($('#'+settings.linkscontainer).size() == 0){ this.filter(":first").before(''); } $('#'+settings.linkscontainer).append('
  • '+settings.settitle+'
  • '); e = this.parent(); $(this).remove(); if($.trim(e.html()) == ""){//if parent empty : remove it e.remove(); } return $('#choco_numsetindex_'+settings.setindex).unbind('click').bind('click', {id: settings.setindex, nom : settings.settitle, i : settings.currentimage}, _initialise); } } function _initialise(event) { settings.currentimage = event.data.i; settings.setindex = event.data.id; settings.settitle = event.data.nom; settings.lastimage = images[settings.setindex].length - 1; showchocolat(); return false; } function _interface(){ //html clear(); settings.container.append('
    '); $('#choco_left_arrow').css('background-image', 'url('+settings.leftimg+')'); $('#choco_right_arrow').css('background-image', 'url('+settings.rightimg+')'); $('#choco_close').css('background-image', 'url('+settings.closeimg+')'); $('#choco_loading').css('background-image', 'url('+settings.loadingimg+')'); if(settings.container.get(0).nodename.tolowercase() !== 'body'){ settings.container.css({'position':'relative','overflow':'hidden','line-height':'normal'});//yes, yes $('#choco_content').css('position','relative'); $('#choco_overlay').css('position', 'absolute'); } //events $(document).unbind('keydown').bind('keydown', function(e){ switch(e.keycode){ case 37: changepagechocolat(-1); break; case 39: changepagechocolat(1); break; case 27: close(); break; }; }); if(settings.vache){ $('#choco_overlay').click(function(){ close(); return false; }); } $('#choco_left_arrow').unbind().bind('click', function(){ changepagechocolat(-1); return false; }); $('#choco_right_arrow').unbind().bind('click', function(){ changepagechocolat(1); return false; }); $('#choco_close').unbind().bind('click', function(){ close(); return false; }); $(window).resize(function() { load(settings.currentimage,true); }); } function showchocolat(){ _interface(); load(settings.currentimage, false); $('#choco_overlay') .css({ 'background-color' : settings.overlaycolor, 'opacity' : settings.overlayopacity }) .fadein(settings.fadeinoverlayduration); $('#choco_content').fadein(settings.fadeinimageduration,function(){}); } function load(image,resize){ settings.currentimage = image; $('#choco_loading').fadein(settings.fadeinimageduration); var imgpreloader = new image(); imgpreloader.onload = function(){ $('#choco_bigimage').attr('src',images[settings.setindex][settings.currentimage]['adress']); var ajustees = iwanttheperfectimagesize(imgpreloader.height,imgpreloader.width); chocolat(ajustees['hauteur'],ajustees['largeur'],resize); $('#choco_loading').stop().fadeout(settings.fadeoutimageduration); }; imgpreloader.src = images[settings.setindex][settings.currentimage]['adress']; preload(); upadtedescription(); } function changepagechocolat(signe){ if(!settings.linkimages || (settings.currentimage == 0 && signe == -1) || (settings.currentimage == settings.lastimage && signe == 1)) { return false; } else{ //$('#choco_container_description').fadeto(settings.fadeoutimageduration,0); making a weird bug with firefox 17 $('#choco_container_description').css('visibility','hidden'); $('#choco_bigimage').fadeto(settings.fadeoutimageduration, 0, function(){ load(settings.currentimage + parseint(signe), false); }); } } function chocolat(hauteur_image,largeur_image,resize){ if(resize){ $('#choco_container_photo, #choco_content, #choco_bigimage').stop(true,false).css({'overflow':'visible'}); $('#choco_bigimage').animate({ 'height' : hauteur_image+'px', 'width' : largeur_image+'px' },settings.fadeinimageduration); } $('#choco_container_photo').animate({ 'height' : hauteur_image, 'width' : largeur_image },settings.fadeinimageduration); $('#choco_content').animate({ 'height' : hauteur_image, 'width' : largeur_image, 'marginleft' : -largeur_image/2, 'margintop' : -(hauteur_image)/2 },settings.fadeinimageduration, 'swing', function(){ $('#choco_bigimage').fadeto(settings.fadeinimageduration, 1).height(hauteur_image).width(largeur_image); if(!resize) { arrowsmanaging(); //$('#choco_container_description').fadeto(settings.fadeinimageduration,1); making a weird bug with firefox 17 $('#choco_container_description').css('visibility','visible'); $('#choco_close').fadein(settings.fadeinimageduration); } }). css('overflow', 'visible'); } function arrowsmanaging(){ if(settings.linkimages){ var what = ['choco_right_arrow','choco_left_arrow']; for(var i=0; i < what.length; i++){ hide = false; if(what[i] == 'choco_right_arrow' && settings.currentimage == settings.lastimage){ hide = true; $('#'+what[i]).fadeout(300); } else if(what[i] == 'choco_left_arrow' && settings.currentimage == 0){ hide = true; $('#'+what[i]).fadeout(300); } if(!hide){ $('#'+what[i]).fadein(settings.fadeoutimageduration); } } } } function preload(){ if(settings.currentimage !== settings.lastimage){ i = new image; z = settings.currentimage + 1; i.src = images[settings.setindex][z]['adress']; } } function upadtedescription(){ var current = settings.currentimage + 1; var last = settings.lastimage + 1; $('#choco_container_title').html(images[settings.setindex][settings.currentimage]['caption']); $('#choco_container_via').html(settings.settitle+settings.separator1+current +settings.separator2+last); } function isset(variable,defaultvalue){ // return variable === undefined ? defaultvalue : variable; ? if (variable === undefined) { return defaultvalue; } else{ return variable; } } function iwanttheperfectimagesize(himg,limg){ //28% = 14% + 14% margin var lblock = limg + (limg*28/100); var heightdescandclose = $('#choco_container_description').height()+$('#choco_close').height(); var hblock = himg + heightdescandclose; var k = limg/himg; var kk = himg/limg; if(settings.container.get(0).nodename.tolowercase() == 'body'){ windowheight = $(window).height(); windowwidth = $(window).width(); } else{ windowheight = settings.container.height(); windowwidth = settings.container.width(); } notfitting = true; while (notfitting){ var lblock = limg + (limg*28/100); var hblock = himg + heightdescandclose; if(lblock > windowwidth){ limg = windowwidth*100/128; himg = kk * limg; }else if(hblock > windowheight){ himg = (windowheight - heightdescandclose); limg = k * himg; }else{ notfitting = false; }; }; return { largeur:limg, hauteur:himg }; } function clear(){ $('#choco_overlay').remove(); $('#choco_content').remove(); } function close(){ $('#choco_overlay').fadeout(900, function(){$('#choco_overlay').remove()}); $('#choco_content').fadeout(500, function(){$('#choco_content').remove()}); settings.currentimage = 0; } }; })(jquery);