Team:Goettingen/project gallery

From 2014.igem.org

(Difference between revisions)
m
m
Line 21: Line 21:
         <h3>Meet us in the lab!</h3>
         <h3>Meet us in the lab!</h3>
                 <ul class="gallery">
                 <ul class="gallery">
-
                         <li><a href="https://static.igem.org/mediawiki/2014/4/4c/Goettingen_lab_photo0.jpg"><img src="https://static.igem.org/mediawiki/2014/b/b4/Goettingen_lab_photo0_reduced.jpg"></a></li>
+
                         <li><a href="https://static.igem.org/mediawiki/2014/4/4c/Goettingen_lab_photo0.jpg" rel="superbox[gallery][in_the_lab]><img src="https://static.igem.org/mediawiki/2014/b/b4/Goettingen_lab_photo0_reduced.jpg"></a></li>
-
                         <li><a href="https://static.igem.org/mediawiki/2014/a/ae/Goettingen_lab_photo5.png"><img src="https://static.igem.org/mediawiki/2014/3/3d/Goettingen_lab_photo5_reduced.png"></a></li>
+
                         <li><a href="https://static.igem.org/mediawiki/2014/a/ae/Goettingen_lab_photo5.png" rel="superbox[gallery][in_the_lab]><img src="https://static.igem.org/mediawiki/2014/3/3d/Goettingen_lab_photo5_reduced.png"></a></li>
-
                         <li><a href="https://static.igem.org/mediawiki/2014/1/10/Goettingen_lab_photo2.jpg"><img src="https://static.igem.org/mediawiki/2014/4/46/Goettingen_lab_photo2_reduced.jpg"></a></li>
+
                         <li><a href="https://static.igem.org/mediawiki/2014/1/10/Goettingen_lab_photo2.jpg" rel="superbox[gallery][in_the_lab]><img src="https://static.igem.org/mediawiki/2014/4/46/Goettingen_lab_photo2_reduced.jpg"></a></li>
-
                         <li><a href="https://static.igem.org/mediawiki/2014/5/5d/Goettingen_lab_photo3.jpg"><img src="https://static.igem.org/mediawiki/2014/1/19/Goettingen_lab_photo3_reduced.jpg"></a></li>
+
                         <li><a href="https://static.igem.org/mediawiki/2014/5/5d/Goettingen_lab_photo3.jpg" rel="superbox[gallery][in_the_lab]><img src="https://static.igem.org/mediawiki/2014/1/19/Goettingen_lab_photo3_reduced.jpg"></a></li>
-
                         <li><a href="https://static.igem.org/mediawiki/2014/1/17/Goettingen_lab_photo1.jpg"><img src="https://static.igem.org/mediawiki/2014/3/34/Goettingen_lab_photo1_reduced.jpg"></a></li>
+
                         <li><a href="https://static.igem.org/mediawiki/2014/1/17/Goettingen_lab_photo1.jpg" rel="superbox[gallery][in_the_lab]><img src="https://static.igem.org/mediawiki/2014/3/34/Goettingen_lab_photo1_reduced.jpg"></a></li>
-
                         <li><a href="https://static.igem.org/mediawiki/2014/3/3a/Goettingen_lab_photo4.jpg"><img src="https://static.igem.org/mediawiki/2014/c/c7/Goettingen_lab_photo4_reduced.jpg"></a></li>
+
                         <li><a href="https://static.igem.org/mediawiki/2014/3/3a/Goettingen_lab_photo4.jpg" rel="superbox[gallery][in_the_lab]><img src="https://static.igem.org/mediawiki/2014/c/c7/Goettingen_lab_photo4_reduced.jpg"></a></li>
-
 
+
                 </ul>
                 </ul>
                 <br /><br />
                 <br /><br />
Line 35: Line 34:
</div>
</div>
 +
 +
<!-- superbox -->
 +
<script>
 +
$(function(){
 +
$.superbox();
 +
});
 +
$.superbox.settings = {
 +
boxId: "superbox", // Id attribute of the "superbox" element
 +
boxClasses: "", // Class of the "superbox" element
 +
overlayOpacity: .8, // Background opaqueness
 +
boxWidth: "600", // Default width of the box
 +
boxHeight: "400", // Default height of the box
 +
loadTxt: "Loading...", // Loading text
 +
closeTxt: "Close", // "Close" button text
 +
prevTxt: "Previous", // "Previous" button text
 +
nextTxt: "Next" // "Next" button text
 +
};
 +
;(function($){
 +
// Local variables
 +
var $overlay, $wrapper, $container, $superbox, $closeBtn, $loading, $nextprev, $nextBtn, $prevBtn, settings,
 +
// Default settings
 +
defaultSettings = {
 +
boxId: "superbox",
 +
boxClasses: "",
 +
overlayOpacity: .8,
 +
boxWidth: "600",
 +
boxHeight: "400",
 +
loadTxt: "Loading...",
 +
closeTxt: "Close",
 +
prevTxt: "Previous",
 +
nextTxt: "Next",
 +
beforeShow: function(){}
 +
},
 +
galleryGroups = {},
 +
galleryMode = false,
 +
hideElts = $([]);
 +
 +
// Init dispatcher
 +
$.superbox = function(){
 +
// Settings
 +
settings = $.extend({}, defaultSettings, $.superbox.settings);
 +
// If IE6, select elements to hide
 +
if ($.browser.msie && $.browser.version < 7){
 +
hideElts = hideElts.add("select");
 +
}
 +
// Create base elements
 +
createElements();
 +
// Dispatch types
 +
dispatch();
 +
};
 +
 +
// Dispatch types
 +
function dispatch(){
 +
 +
// Match all superbox links
 +
$("a[rel^=superbox],area[rel^=superbox]").each(function(){
 +
 +
// Optimisation
 +
var $this = $(this),
 +
relAttr = $this.attr("rel"),
 +
 +
// Match type (ex : superbox[gallery#my_id.my_class][my_gallery] > gallery
 +
type = relAttr.match(/^superbox\[([^#\.\]]+)/)[1],
 +
 +
// Match additionnal classes or IDs (#xxx.yyy.zzz)
 +
boxCurrentAttrs = relAttr.replace("superbox", "").match(/([#\.][^#\.\]]+)/g) || [],
 +
 +
// Box ID and classes
 +
newBoxId = settings.boxId,
 +
newBoxClasses = settings.boxClasses;
 +
 +
// Additionnal rel settings
 +
this._relSettings = relAttr.replace("superbox["+ type + boxCurrentAttrs.join("") +"]", "");
 +
           
 +
// Redefine settings
 +
$.each(boxCurrentAttrs, function(i, val){ // each class or id
 +
if (val.substr(0,1) == "#"){
 +
newBoxId = val.substr(1);
 +
}
 +
else if (val.substr(0,1) == "."){
 +
newBoxClasses += " " + val.substr(1);
 +
}
 +
});
 +
 +
// Call type method
 +
if (type.search(/^image|gallery|iframe|content|ajax$/) != -1) {
 +
$this.superbox(type, {boxId: newBoxId, boxClasses: newBoxClasses});
 +
}
 +
});
 +
};
 +
 +
/*-- Superbox Method --*/
 +
$.fn.superbox = function(type, curSettings){
 +
curSettings = $.extend({}, settings, curSettings);
 +
$.superbox[type](this, curSettings);
 +
};
 +
 +
/*-- Types --*/
 +
$.extend($.superbox, {
 +
 +
// Image
 +
image: function($elt, curSettings, type){
 +
 +
var relSettings = getRelSettings($elt.get(0)),
 +
dimensions = false;
 +
 +
// Extra settings
 +
if (relSettings && type == "gallery")
 +
dimensions = relSettings[1];
 +
else if (relSettings)
 +
dimensions = relSettings[0];
 +
 +
// On click event
 +
$elt.click(function(e){
 +
e.preventDefault();
 +
 +
prepareBox();
 +
 +
// "Prev / Next" buttons
 +
if (type == "gallery")
 +
nextPrev($elt, relSettings[0]);
 +
 +
// Loading anim
 +
initLoading(function(){
 +
 +
// Dimensions
 +
var dims = false,
 +
 +
// Image
 +
$curImg;
 +
 +
if (dimensions) {
 +
dims = dimensions.split("x");
 +
}
 +
 +
// Image
 +
$curImg = $('<img src="'+ $elt.attr("href") +'" title="'+ ($elt.attr("title") || $elt.text()) +'" />');
 +
 +
// On image load
 +
$curImg.load(function(){
 +
 +
// Resize
 +
resizeImageBox($curImg, dims);
 +
 +
// Id and Classes
 +
setBoxAttrs({boxClasses: "image " + curSettings.boxClasses, boxId: curSettings.boxId});
 +
 +
// Show box
 +
showBox();
 +
 +
}).appendTo($innerbox);
 +
 +
});
 +
 +
});
 +
},
 +
 +
// Gallery
 +
gallery: function($elt, curSettings){
 +
 +
// Extra settings
 +
var extraSettings = getRelSettings($elt.get(0));
 +
 +
// Create group
 +
if(!galleryGroups[extraSettings[0]]) {
 +
    galleryGroups[extraSettings[0]] = [];
 +
}
 +
 +
// Add element to current group
 +
galleryGroups[extraSettings[0]].push($elt);
 +
 +
$elt.get(0)._superboxGroupKey = (galleryGroups[extraSettings[0]].length - 1);
 +
 +
// Image Box
 +
$.superbox["image"]($elt, curSettings, "gallery");
 +
},
 +
 +
// iframe
 +
iframe: function($elt, curSettings){
 +
 +
// Extra settings
 +
var extraSettings = getRelSettings($elt.get(0));
 +
 +
// On click event
 +
$elt.click(function(e){
 +
e.preventDefault();
 +
 +
prepareBox();
 +
 +
// Loading anim
 +
initLoading(function(){
 +
 +
// Dimensions
 +
var dims = false,
 +
 +
// iframe
 +
$iframe;
 +
 +
if (extraSettings) {
 +
dims = extraSettings[0].split("x");
 +
}
 +
 +
curSettings = $.extend({}, curSettings, {
 +
boxWidth: dims[0] || curSettings.boxWidth,
 +
boxHeight: dims[1] || curSettings.boxHeight
 +
});
 +
 +
// iframe
 +
$iframe = $('<iframe src="'+ $elt.attr("href") +'" name="'+ $elt.attr("href") +'" frameborder="0" scrolling="auto" hspace="0" width="'+ curSettings.boxWidth +'" height="'+ curSettings.boxHeight +'"></iframe>');
 +
 +
// On iframe load
 +
$iframe.load(function(){
 +
 +
// Specified dimensions
 +
$superbox.width( curSettings.boxWidth+"px" );
 +
$innerbox.height( curSettings.boxHeight+"px" );
 +
 +
// Id and Classes
 +
setBoxAttrs({boxClasses: "iframe " + curSettings.boxClasses, boxId: curSettings.boxId});
 +
 +
// Show box
 +
showBox();
 +
 +
}).appendTo($innerbox);
 +
});
 +
 +
});
 +
},
 +
 +
// Content
 +
content: function($elt, curSettings){
 +
// Extra settings
 +
var extraSettings = getRelSettings($elt.get(0));
 +
 +
// On click event
 +
$elt.click(function(e){
 +
e.preventDefault();
 +
 +
prepareBox();
 +
 +
// Loading anim
 +
initLoading(function(){
 +
 +
// Dimensions
 +
var dims = false;
 +
if (extraSettings)
 +
dims = extraSettings[0].split("x");
 +
 +
curSettings = $.extend({}, curSettings, {
 +
boxWidth: dims[0] || curSettings.boxWidth,
 +
boxHeight: dims[1] || curSettings.boxHeight
 +
});
 +
 +
// Specified dimensions
 +
$superbox.width( curSettings.boxWidth+"px" );
 +
$innerbox.height( curSettings.boxHeight+"px" );
 +
 +
$($elt.attr('href')).clone().appendTo($innerbox).show();
 +
 +
// Id and Classes
 +
setBoxAttrs({boxClasses: "content " + curSettings.boxClasses, boxId: curSettings.boxId});
 +
 +
// Show box
 +
showBox();
 +
});
 +
 +
});
 +
},
 +
 +
// Ajax
 +
ajax: function($elt, curSettings){
 +
 +
// Extra settings
 +
var extraSettings = getRelSettings($elt.get(0));
 +
 +
// On click event
 +
$elt.click(function(e){
 +
e.preventDefault();
 +
 +
prepareBox();
 +
 +
// Loading anim
 +
initLoading(function(){
 +
 +
// Dimensions
 +
var dims = false;
 +
if (extraSettings && extraSettings[3]) {
 +
dims = extraSettings[3].split("x");
 +
}
 +
 +
// Extend default dimension settings
 +
curSettings = $.extend({}, curSettings, {
 +
boxWidth: dims[0] || curSettings.boxWidth,
 +
boxHeight: dims[1] || curSettings.boxHeight
 +
});
 +
 +
// Specified dimensions
 +
$superbox.width( curSettings.boxWidth+"px" );
 +
$innerbox.height( curSettings.boxHeight+"px" );
 +
 +
$.get( extraSettings[2], function(data){
 +
$(data).appendTo($innerbox);
 +
});
 +
 +
// Id and Classes
 +
setBoxAttrs({boxClasses: "ajax " + curSettings.boxClasses, boxId: curSettings.boxId});
 +
 +
// Show box
 +
showBox();
 +
});
 +
});
 +
}
 +
});
 +
 +
 +
// Get extra settings in rel attribute
 +
function getRelSettings(elt){
 +
return elt._relSettings.match(/([^\[\]]+)/g);
 +
};
 +
 +
// Set image box dimensions
 +
function resizeImageBox($curImg, dims){
 +
 +
// Auto
 +
$superbox.width($curImg.width() + ($innerbox.css("paddingLeft").slice(0,-2)-0) + ($innerbox.css("paddingRight").slice(0,-2)-0)); // Padding ajouté, pour corriger le problème de définition padding sur $innerbox
 +
$innerbox.height($curImg.height());
 +
 +
// Specified
 +
if (dims && dims[0] != "") {
 +
$superbox.width(dims[0] + "px");
 +
}
 +
if (dims && dims[1] != "" && dims[1] > $curImg.height()) {
 +
$innerbox.height(dims[1] + "px");
 +
}
 +
};
 +
 +
// Next / Previous
 +
function nextPrev($elt, group){
 +
$nextprev.show();
 +
 +
galleryMode = true;
 +
 +
var nextKey = $elt.get(0)._superboxGroupKey + 1,
 +
    prevKey = nextKey - 2;
 +
 +
// Next
 +
if (galleryGroups[group][nextKey]){
 +
$nextBtn.removeClass("disabled").unbind("click").bind("click", function(){
 +
galleryGroups[group][nextKey].click();
 +
});
 +
}
 +
else
 +
$nextBtn.addClass("disabled").unbind("click");
 +
 +
// Prev
 +
if (galleryGroups[group][prevKey]){
 +
$prevBtn.removeClass("disabled").unbind("click").bind("click", function(){
 +
galleryGroups[group][prevKey].click();
 +
});
 +
}
 +
else
 +
$prevBtn.addClass("disabled").unbind("click");
 +
};
 +
 +
// Set ID and Class
 +
function setBoxAttrs(attrs){
 +
$superbox.attr("id", attrs.boxId).attr("class", attrs.boxClasses);
 +
};
 +
 +
// Hide Box
 +
function hideBox(){
 +
$(document).unbind("keydown");
 +
$loading.hide();
 +
$nextprev.hide();
 +
$wrapper.hide().css({position: "fixed", top: 0});
 +
$innerbox.empty();
 +
};
 +
 +
// Hide Box + Overlay
 +
function hideAll(callback){
 +
hideBox();
 +
$overlay.fadeOut(300, function(){
 +
// Show hidden elements for IE6
 +
hideElts.show();
 +
});
 +
galleryMode = false;
 +
};
 +
 +
// "Loading..."
 +
function initLoading(callback){
 +
 +
var loading = function(){
 +
 +
// IE6
 +
if($.browser.msie && $.browser.version < 7){
 +
$wrapper.css({position: "absolute", top:"50%"});
 +
}
 +
 +
// Hide elements for IE6
 +
hideElts.hide();
 +
 +
$loading.show();
 +
callback();
 +
};
 +
 +
if (galleryMode){
 +
$overlay.css("opacity", settings.overlayOpacity).show();
 +
loading();
 +
}
 +
else {
 +
$overlay.css("opacity", 0).show().fadeTo(300, settings.overlayOpacity, loading);
 +
}
 +
};
 +
// "Prepare" box : Show $superbox with top:-99999px;
 +
function prepareBox(){
 +
$wrapper.show();
 +
$innerbox.empty();
 +
$superbox.css({position: "absolute", top: "-99999px"});
 +
};
 +
 +
// Display box
 +
function showBox(curSettings, $elt){
 +
// Stop "Loading..."
 +
$loading.hide();
 +
// Keys shortcuts
 +
$(document).unbind("keydown").bind("keydown",function(e){
 +
// Escape
 +
if (e.keyCode == 27)
 +
hideAll();
 +
// Left/right arrows
 +
if (e.keyCode == 39 && $nextBtn.is(":visible"))
 +
$nextBtn.click();
 +
if (e.keyCode == 37 && $prevBtn.is(":visible"))
 +
$prevBtn.click();
 +
});
 +
// Show $superbox
 +
$superbox.css({position: "static", top: 0, opacity: 0});
 +
// IE6 and IE7
 +
if ($.browser.msie && $.browser.version < 8){
 +
$superbox.css({position: "relative", top:"-50%"});
 +
// IE6
 +
if ($.browser.msie && $.browser.version < 7)
 +
$wrapper.css({position: "absolute", top:"50%"});
 +
}
 +
// Position absolute if image height > window height
 +
if ( $(window).height() < $wrapper.height() ){
 +
$wrapper.css({position: "absolute", top: ($wrapper.offset().top + 10) + "px"});
 +
}
 +
settings.beforeShow();
 +
$superbox.fadeTo(300,1);
 +
 +
};
 +
 +
// Create base elements (overlay, wrapper, box, loading)
 +
function createElements(){
 +
if (!$.superbox.elementsReady){
 +
// Overlay (background)
 +
$overlay = $('<div id="superbox-overlay"></div>').appendTo("body").hide();
 +
// Wrapper
 +
$wrapper = $('<div id="superbox-wrapper"></div>').appendTo("body").hide();
 +
// Box container
 +
$container = $('<div id="superbox-container"></div>').appendTo($wrapper);
 +
// Box
 +
$superbox = $('<div id="superbox"></div>').appendTo($container);
 +
// Inner box
 +
$innerbox = $('<div id="superbox-innerbox"></div>').appendTo($superbox);
 +
// "Next / Previous"
 +
$nextprev = $('<p class="nextprev"></p>').appendTo($superbox).hide();
 +
$prevBtn = $('<a class="prev"><strong><span>'+ settings.prevTxt +'</span></strong></a>').appendTo($nextprev);
 +
$nextBtn = $('<a class="next"><strong><span>'+ settings.nextTxt +'</span></strong></a>').appendTo($nextprev);
 +
 +
// Add close button
 +
$closeBtn = $('<p class="close"><a><strong><span>'+ settings.closeTxt +'</span></strong></a></p>').prependTo($superbox).find("a");
 +
// "Loading..."
 +
$loading = $('<p class="loading">'+ settings.loadTxt +'</p>').appendTo($container).hide();
 +
// Hide on click
 +
$overlay.add($wrapper).add($closeBtn).click(function(){
 +
hideAll();
 +
});
 +
// Remove "hide on click" on superbox
 +
$superbox.click(function(e){
 +
e.stopPropagation();
 +
});
 +
// Dont call this function twice
 +
$.superbox.elementsReady = true;
 +
}
 +
};
 +
})(jQuery);
 +
</script>
</body>
</body>
</html>
</html>

Revision as of 14:14, 2 September 2014

Gallery for the lab work