X-Git-Url: http://git.cyclocoop.org/?p=velocampus%2Fweb%2Fwww.git;a=blobdiff_plain;f=www%2Fplugins%2Fauto%2Fthickbox2%2Fjavascript%2Fthickbox.js;fp=www%2Fplugins%2Fauto%2Fthickbox2%2Fjavascript%2Fthickbox.js;h=fbb7e67490e47e8675c61391d8884d5a50fa4706;hp=0000000000000000000000000000000000000000;hb=80b4d3e85f78d402ed2e73f8f5d1bf4c19962eed;hpb=aaf970bf4cdaf76689ecc10609048e18d073820c diff --git a/www/plugins/auto/thickbox2/javascript/thickbox.js b/www/plugins/auto/thickbox2/javascript/thickbox.js new file mode 100644 index 0000000..fbb7e67 --- /dev/null +++ b/www/plugins/auto/thickbox2/javascript/thickbox.js @@ -0,0 +1,484 @@ +/* + * Thickbox 2.1 - One Box To Rule Them All. + * By Cody Lindley (http://www.codylindley.com) + * Copyright (c) 2006 cody lindley + * Licensed under the MIT License: + *http://www.opensource.org/licenses/mit-license.php + * Thickbox is built on top of the very light weight jQuery library. + * Modified for SPIP by Fil : + * Modified by BoOz@rezo.net + * - added recognition of images based on a.type + * - added an image gallery + * - added keyboard navigation ('n'ext (->), 'p'revious (<-), 'q'uit (esc)) + * - customize path to the css and wheel image + * - default size for thickbox links that have no width x height indicated ?? + * - don't load css when not needed ?? + * - TODO: don't load js when not needed!! + + */ + + +//on page load call TB_init +// +// init +// +var DELAI = 7000 ; //nombre de secondes entre deux images +var imageArray = []; +var FULL_S = false; +var DIAPO = false; + +if(typeof TB_chemin_css == 'undefined') { TB_chemin_css = 'thickbox.css'; } +if(typeof TB_chemin_animation == 'undefined') { TB_chemin_animation = 'circle_animation.gif'; } +//add thickbox to href elements that have a class of .thickbox + +function TB_image() { + var t = this.title || this.name ; + var longdesc = jQuery('img[longdesc]', this).attr('longdesc'); + + if (longdesc) + TB_show(t,longdesc); + else + TB_show(t,this.href,'image'); + + return false; +} + +//add thickbox to href elements that have a class of .thickbox +function TB_init(root) { + jQuery("a.thickbox",root).each( + function(i) { + this.onclick = TB_image; + var t = this.alt || this.name || null; + this.alt = t + " - view bigger version"; + if ( + (this.type && this.type.match(/^image[\/](jpeg|gif|png)$/i)) + || (this.href && this.href.match(/\.(jpeg|jpg|png|gif)$/i)) + ) { + // we store image links in an array (for a gallery) + imageArray.push ([ + this.href, + this.title || this.name + ]); + + } + } + ); +//console.log(imageArray); +} + +function TB_show(caption, url) {//function called when the user clicks on a thickbox link + try { + if (document.getElementById("TB_HideSelect") == null) { + jQuery("body").append("
"); + jQuery("#TB_overlay").click(TB_remove); + } + jQuery(".TB_hide").hide(); + + if(caption==null){caption=""}; + + if(!FULL_S){ + jQuery(window).scroll(TB_position); + } + + TB_overlaySize(); + + jQuery("body").append("
loading
"); + TB_load_position(); + + if(url.indexOf("?")!==-1){ //If there is a query string involved + var baseURL = url.substr(0, url.indexOf("?")); + }else{ + var baseURL = url; + } + var urlString = /\.jpg|\.jpeg|\.png|\.gif|\.bmp/g; + var urlType = baseURL.toLowerCase().match(urlString); + + if(urlType == '.jpg' || urlType == '.jpeg' || urlType == '.png' || urlType == '.gif' || urlType == '.bmp'){//code to show images + + TB_PrevCaption = ""; + TB_PrevURL = ""; + TB_PrevHTML = ""; + TB_NextCaption = ""; + TB_NextURL = ""; + TB_NextHTML = ""; + TB_imageCount = ""; + TB_Full_Size = ""; + TB_FoundURL = false; + + if(imageArray.length > 0){ + TB_TempArray = imageArray ; + for (TB_Counter = 0; ((TB_Counter < TB_TempArray.length) && (TB_NextHTML == "")); TB_Counter++) { + var urlTypeTemp = TB_TempArray[TB_Counter][0].toLowerCase().match(urlString); + if (!(TB_TempArray[TB_Counter][0] == url)) { + if (TB_FoundURL) { + TB_NextCaption = TB_TempArray[TB_Counter][1]; + TB_NextURL = TB_TempArray[TB_Counter][0]; + TB_NextHTML = "   >"; + } else { + TB_PrevCaption = TB_TempArray[TB_Counter][1]; + TB_PrevURL = TB_TempArray[TB_Counter][0]; + TB_PrevHTML = "  < "; + } + } else { + TB_FoundURL = true; + TB_imageCount =(TB_Counter + 1) +" / "+ (TB_TempArray.length); + } + } + } + if (!(TB_NextHTML == "")) { //preload de la prochaine image + imageSuivante = new Image(); + imageSuivante.src = TB_NextURL ; + } + + imgPreloader = new Image(); + imgPreloader.onload = function(){ + imgPreloader.onload = null; + //console.log("loaded" + url); + // Resizing large images - orginal by Christian Montoya edited by me. + TB_Big_Image = false ; + var pagesize = TB_getPageSize(); + var x = pagesize[0] - 150; + var y = pagesize[1] - 150; + var imageWidth = imgPreloader.width; + var imageHeight = imgPreloader.height; + IMAGE_WIDTH = imageWidth ; + IMAGE_HEIGHT = imageHeight ; + + if (imageWidth > x) { + TB_Big_Image = true ; + imageHeight = imageHeight * (x / imageWidth); + imageWidth = x; + + if (imageHeight > y) { + TB_Big_Image = true ; + imageWidth = imageWidth * (y / imageHeight); + imageHeight = y; + } + } else if (imageHeight > y) { + TB_Big_Image = true ; + imageWidth = imageWidth * (y / imageHeight); + imageHeight = y; + + if (imageWidth > x) { + TB_Big_Image = true ; + imageHeight = imageHeight * (x / imageWidth); + imageWidth = x; + } + } + // End Resizing + if(!DIAPO){ + TB_Diapo = "  [Diaporama]"; + }else{ + TB_Diapo = "  [Stop]"; + } + if (TB_Big_Image) + TB_Full_Size = "  [Zoom]"; + TB_WIDTH = imageWidth + 20; + TB_HEIGHT = imageHeight + 20; + + jQuery("#TB_window").append(""+caption+" - next picture" + "
"+caption+"
" + TB_imageCount + TB_Full_Size + TB_PrevHTML + TB_NextHTML + TB_Diapo +"
Fermer
"); + + jQuery("#TB_closeWindowButton").click(TB_remove); + jQuery("#TB_load").remove(); + jQuery("#TB_window").fadeIn("slow"); + //setTimeout('jQuery("#TB_legend").slideDown(800);',1600); + + if (!(TB_NextHTML == "")) { + function goNext(){ + FULL_S = false ; + jQuery("#TB_window").remove(); + jQuery("body").append("
"); + TB_show(TB_NextCaption, TB_NextURL); + return false; + } + jQuery("#TB_next").click(goNext); + } + + if (!(TB_PrevHTML == "")) { + function goPrev(){ + FULL_S = false ; + if(jQuery(document).unbind('click',goPrev)){jQuery(document).unbind('click',goPrev)}; + jQuery("#TB_window").remove(); + jQuery("body").append("
"); + TB_show(TB_PrevCaption, TB_PrevURL); + return false; + } + jQuery("#TB_prev").click(goPrev); + } + + if (!(TB_Full_Size == "")) { + function fullSize(){ + var arrayPageScroll = TB_getPageScrollTop(); + var pagesize = TB_getPageSize(); + + if(!FULL_S){ + FULL_S = true ; + TB_TOP = arrayPageScroll[1]; + + if( (arrayPageScroll[0] + (pagesize[0] - IMAGE_WIDTH)/2) > 0 ){ + TB_LEFT = arrayPageScroll[0] + (pagesize[0] - IMAGE_WIDTH)/2 ; + }else{ + TB_LEFT = 50 ; + } + + jQuery("#TB_window").animate({top:TB_TOP,left:TB_LEFT,width:(IMAGE_WIDTH+20),height:(IMAGE_HEIGHT+20)},1500); + jQuery("#TB_Image").animate({top:20,left:20,width:IMAGE_WIDTH,height:IMAGE_HEIGHT},1500, TB_recadre); + } + else{ + FULL_S = false ; + jQuery("#TB_window").animate({top: (arrayPageScroll[1] + (pagesize[1]-TB_HEIGHT)/2),left:(arrayPageScroll[0] + (pagesize[0] - TB_WIDTH)/2), width:TB_WIDTH,height:TB_HEIGHT},1500); + jQuery("#TB_Image").animate({top:20,left:20,width:(TB_WIDTH - 20),height:(TB_HEIGHT - 20)},1500,TB_recadre); + } + return false; + } + jQuery("#TB_Full").click(fullSize); + } + + if(!(TB_NextHTML == "")){ + jQuery("#TB_ImageOff").click(goNext); + }else{ + jQuery("#TB_ImageOff").click(TB_remove); + } + + jQuery("#TB_Diapo").click(diaporama); + + document.onkeydown = function(e){ + if (e == null) { // ie + keycode = event.keyCode; + } else { // mozilla + keycode = e.which; + } + if(keycode == 27 | keycode == 67 | keycode == 70){ // close + TB_remove(); + } else if(keycode == 190 | keycode == 39){ // display previous image <- + if(!(TB_NextHTML == "")){ + document.onkeydown = ""; + goNext(); + } + } else if(keycode == 188| keycode == 37){ // display next image -> + if(!(TB_PrevHTML == "")){ + document.onkeydown = ""; + goPrev(); + } + } + } + + TB_position() ; + + jQuery("#TB_load").remove(); + jQuery("#TB_window").css({display:"block"}); //for safari using css instead of show + + + //diapo + //console.log("deb " + DELAI); + if(DIAPO) + setTimeout('diapo();',DELAI); + jQuery("#TB_ImageOff")[0].focus(); + } + + imgPreloader.src = url; + //console.log("hop" + url); + + }else{//code to show html pages + //console.log(url); + var queryString = url.replace(/^[^\?]+\?+/,''); + //rhooooo, c'est pas du boulot ce thickbox + queryString = queryString.replace(/^[^\?]+\?+/,''); + //console.log(queryString); + var params = TB_parseQuery( queryString ); + //console.log(params); + + TB_WIDTH = (params['width']*1) + 30; + TB_HEIGHT = (params['height']*1) + 40; + + ajaxContentW = TB_WIDTH - 30; + ajaxContentH = TB_HEIGHT - 45; + + if(url.indexOf('TB_iframe') != -1){ + urlNoQuery = url.split('TB_'); + jQuery("#TB_window").append("
"+caption+"
"); + }else{ + jQuery("#TB_window").append("
"+caption+"
"); + } + + jQuery("#TB_closeWindowButton").click(TB_remove); + + if(url.indexOf('TB_inline') != -1){ + jQuery("#TB_ajaxContent").html(jQuery('#' + params['inlineId']).html()); + TB_position(); + jQuery("#TB_load").remove(); + jQuery("#TB_window").css({display:"block"}); + }else if(url.indexOf('TB_iframe') != -1){ + TB_position(); + if(frames['TB_iframeContent'] == undefined){//be nice to safari + jQuery("#TB_load").remove(); + jQuery("#TB_window").css({display:"block"}); + jQuery(document).keyup( function(e){ var key = e.keyCode; if(key == 27){TB_remove()} }); + } + }else{ + jQuery("#TB_ajaxContent").load(url, function(){ + TB_position(); + jQuery("#TB_load").remove(); + jQuery("#TB_window").css({display:"block"}); + }); + } + + } + + jQuery(window).resize(TB_position); + + document.onkeyup = function(e){ + if (e == null) { // ie + keycode = event.keyCode; + } else { // mozilla + keycode = e.which; + } + + if(keycode == 27){ // close + TB_remove(); + } + } + + } catch(e) { + alert( e ); + } +} + +//helper functions below +function diaporama(){ + //alert("diapo"); + if(!DIAPO){ + DIAPO = true ; + //console.log("deb"); + diapo(); + //jQuery("TB_secondLine").html(TB_imageCount + TB_Full_Size + TB_PrevHTML + TB_NextHTML + "[Stop]"); + } else { + DIAPO = false ; + } + return false; +} + +function diapo(){ + //console.log(DIAPO); + if(DIAPO){ + if(TB_NextURL !=""){ + jQuery("#TB_window").remove(); + jQuery("body").append("
"); + //console.log("hop"); + TB_show(TB_NextCaption, TB_NextURL); + }else DIAPO = false ; + } + return false; +} + +function TB_showIframe(){ + jQuery("#TB_load").remove(); + jQuery("#TB_window").css({display:"block"}); +} + +function TB_remove() { + DIAPO = false ; + FULL_S = false ; + jQuery("#TB_imageOff").unbind('click'); + jQuery("#TB_overlay").unbind('click'); + jQuery("#TB_closeWindowButton").unbind('click'); + jQuery("#TB_window").fadeOut("fast",function(){jQuery('#TB_window,#TB_overlay,#TB_HideSelect').remove();}); + jQuery("#TB_load").remove(); + jQuery(".TB_hide").show(); + + return false; +} + +function TB_position() { + var pagesize = TB_getPageSize(); + var arrayPageScroll = TB_getPageScrollTop(); + var legendHeight = jQuery("#TB_legend").height() ; + + if(FULL_S && DIAPO){ + FULL_S = false ; + jQuery("#TB_window").animate({top: (arrayPageScroll[1] + (pagesize[1]-TB_HEIGHT)/2),left:(arrayPageScroll[0] + (pagesize[0] - TB_WIDTH)/2), width:TB_WIDTH,height:TB_HEIGHT},1500); + jQuery("#TB_Image").animate({top:20,left:20,width:(TB_WIDTH - 20),height:(TB_HEIGHT - 20)},1500,TB_recadre); + } + + if(!FULL_S || DIAPO){ + jQuery("#TB_window").css({width:TB_WIDTH+"px",left: (arrayPageScroll[0] + (pagesize[0] - TB_WIDTH)/2)+"px", top: (arrayPageScroll[1] + (pagesize[1]-TB_HEIGHT)/2 - legendHeight/2)+"px" }); + } +} + +function TB_overlaySize(){ + if (window.innerHeight && window.scrollMaxY || window.innerWidth && window.scrollMaxX) { + yScroll = window.innerHeight + window.scrollMaxY; + xScroll = window.innerWidth + window.scrollMaxX; + var deff = document.documentElement; + var wff = (deff&&deff.clientWidth) || document.body.clientWidth || window.innerWidth || self.innerWidth; + var hff = (deff&&deff.clientHeight) || document.body.clientHeight || window.innerHeight || self.innerHeight; + xScroll -= (window.innerWidth - wff); + yScroll -= (window.innerHeight - hff); + } else if (document.body.scrollHeight > document.body.offsetHeight || document.body.scrollWidth > document.body.offsetWidth){ // all but Explorer Mac + yScroll = document.body.scrollHeight; + xScroll = document.body.scrollWidth; + } else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari + yScroll = document.body.offsetHeight; + xScroll = document.body.offsetWidth; + } + jQuery("#TB_overlay").css({"height":yScroll +"px", "width":xScroll +"px"}); + jQuery("#TB_HideSelect").css({"height":yScroll +"px","width":xScroll +"px"}); +} + +function TB_load_position() { + var pagesize = TB_getPageSize(); + var arrayPageScroll = TB_getPageScrollTop(); + jQuery("#TB_load") + .css({left: (arrayPageScroll[0] + (pagesize[0] - 100)/2)+"px", top: (arrayPageScroll[1] + ((pagesize[1]-100)/2))+"px" }) + .css({display:"block"}); +} + +function TB_parseQuery ( query ) { + var Params = new Object (); + if ( ! query ) return Params; // return empty object + var Pairs = query.split(/[;&]/); + + for ( var i = 0; i < Pairs.length; i++ ) { + var KeyVal = Pairs[i].split('='); + + if ( ! KeyVal || KeyVal.length != 2 ) continue; + var key = unescape( KeyVal[0] ); + var val = unescape( KeyVal[1] ); + val = val.replace(/\+/g, ' '); + Params[key] = val; + } + return Params; +} + +function TB_getPageScrollTop(){ + var yScrolltop; + var xScrollleft; + + if (self.pageYOffset || self.pageXOffset) { + yScrolltop = self.pageYOffset; + xScrollleft = self.pageXOffset; + + } else if (document.documentElement && document.documentElement.scrollTop || document.documentElement.scrollLeft ){// Explorer 6 Strict + yScrolltop = document.documentElement.scrollTop; + xScrollleft = document.documentElement.scrollLeft; + + } else if (document.body) {// all other Explorers + yScrolltop = document.body.scrollTop; + xScrollleft = document.body.scrollLeft; + } + arrayPageScroll = new Array(xScrollleft,yScrolltop) + return arrayPageScroll; +} + +function TB_getPageSize(){ + var de = document.documentElement; + var w = window.innerWidth || self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth; + var h = window.innerHeight || self.innerHeight || (de&&de.clientHeight) || document.body.clientHeight + arrayPageSize = new Array(w,h) + return arrayPageSize; +} + +function TB_recadre(){ + TB_overlaySize(); + TB_position(); +}