/* 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);