Team:UC Davis/Home wip
From 2011.igem.org
(Difference between revisions)
Line 4: | Line 4: | ||
<head> | <head> | ||
- | <script type="text/javascript" src="lightbox. | + | <script type="text/javascript" >/* |
+ | Lightbox JS: Fullsize Image Overlays | ||
+ | by Lokesh Dhakar - http://www.huddletogether.com | ||
+ | |||
+ | For more information on this script, visit: | ||
+ | http://huddletogether.com/projects/lightbox/ | ||
+ | |||
+ | Licensed under the Creative Commons Attribution 2.5 License - http://creativecommons.org/licenses/by/2.5/ | ||
+ | (basically, do anything you want, just leave my name and link) | ||
+ | |||
+ | Table of Contents | ||
+ | ----------------- | ||
+ | Configuration | ||
+ | |||
+ | Functions | ||
+ | - getPageScroll() | ||
+ | - getPageSize() | ||
+ | - pause() | ||
+ | - getKey() | ||
+ | - listenKey() | ||
+ | - showLightbox() | ||
+ | - hideLightbox() | ||
+ | - initLightbox() | ||
+ | - addLoadEvent() | ||
+ | |||
+ | Function Calls | ||
+ | - addLoadEvent(initLightbox) | ||
+ | |||
+ | */ | ||
+ | |||
+ | |||
+ | |||
+ | // | ||
+ | // Configuration | ||
+ | // | ||
+ | |||
+ | // If you would like to use a custom loading image or close button reference them in the next two lines. | ||
+ | var loadingImage = 'loading.gif'; | ||
+ | var closeButton = 'close.gif'; | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | // | ||
+ | // getPageScroll() | ||
+ | // Returns array with x,y page scroll values. | ||
+ | // Core code from - quirksmode.org | ||
+ | // | ||
+ | function getPageScroll(){ | ||
+ | |||
+ | var yScroll; | ||
+ | |||
+ | if (self.pageYOffset) { | ||
+ | yScroll = self.pageYOffset; | ||
+ | } else if (document.documentElement && document.documentElement.scrollTop){ // Explorer 6 Strict | ||
+ | yScroll = document.documentElement.scrollTop; | ||
+ | } else if (document.body) {// all other Explorers | ||
+ | yScroll = document.body.scrollTop; | ||
+ | } | ||
+ | |||
+ | arrayPageScroll = new Array('',yScroll) | ||
+ | return arrayPageScroll; | ||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | // | ||
+ | // getPageSize() | ||
+ | // Returns array with page width, height and window width, height | ||
+ | // Core code from - quirksmode.org | ||
+ | // Edit for Firefox by pHaez | ||
+ | // | ||
+ | function getPageSize(){ | ||
+ | |||
+ | var xScroll, yScroll; | ||
+ | |||
+ | if (window.innerHeight && window.scrollMaxY) { | ||
+ | xScroll = document.body.scrollWidth; | ||
+ | yScroll = window.innerHeight + window.scrollMaxY; | ||
+ | } else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac | ||
+ | xScroll = document.body.scrollWidth; | ||
+ | yScroll = document.body.scrollHeight; | ||
+ | } else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari | ||
+ | xScroll = document.body.offsetWidth; | ||
+ | yScroll = document.body.offsetHeight; | ||
+ | } | ||
+ | |||
+ | var windowWidth, windowHeight; | ||
+ | if (self.innerHeight) { // all except Explorer | ||
+ | windowWidth = self.innerWidth; | ||
+ | windowHeight = self.innerHeight; | ||
+ | } else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode | ||
+ | windowWidth = document.documentElement.clientWidth; | ||
+ | windowHeight = document.documentElement.clientHeight; | ||
+ | } else if (document.body) { // other Explorers | ||
+ | windowWidth = document.body.clientWidth; | ||
+ | windowHeight = document.body.clientHeight; | ||
+ | } | ||
+ | |||
+ | // for small pages with total height less then height of the viewport | ||
+ | if(yScroll < windowHeight){ | ||
+ | pageHeight = windowHeight; | ||
+ | } else { | ||
+ | pageHeight = yScroll; | ||
+ | } | ||
+ | |||
+ | // for small pages with total width less then width of the viewport | ||
+ | if(xScroll < windowWidth){ | ||
+ | pageWidth = windowWidth; | ||
+ | } else { | ||
+ | pageWidth = xScroll; | ||
+ | } | ||
+ | |||
+ | |||
+ | arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) | ||
+ | return arrayPageSize; | ||
+ | } | ||
+ | |||
+ | |||
+ | // | ||
+ | // pause(numberMillis) | ||
+ | // Pauses code execution for specified time. Uses busy code, not good. | ||
+ | // Code from http://www.faqts.com/knowledge_base/view.phtml/aid/1602 | ||
+ | // | ||
+ | function pause(numberMillis) { | ||
+ | var now = new Date(); | ||
+ | var exitTime = now.getTime() + numberMillis; | ||
+ | while (true) { | ||
+ | now = new Date(); | ||
+ | if (now.getTime() > exitTime) | ||
+ | return; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | // | ||
+ | // getKey(key) | ||
+ | // Gets keycode. If 'x' is pressed then it hides the lightbox. | ||
+ | // | ||
+ | |||
+ | function getKey(e){ | ||
+ | if (e == null) { // ie | ||
+ | keycode = event.keyCode; | ||
+ | } else { // mozilla | ||
+ | keycode = e.which; | ||
+ | } | ||
+ | key = String.fromCharCode(keycode).toLowerCase(); | ||
+ | |||
+ | if(key == 'x'){ hideLightbox(); } | ||
+ | } | ||
+ | |||
+ | |||
+ | // | ||
+ | // listenKey() | ||
+ | // | ||
+ | function listenKey () { document.onkeypress = getKey; } | ||
+ | |||
+ | |||
+ | // | ||
+ | // showLightbox() | ||
+ | // Preloads images. Pleaces new image in lightbox then centers and displays. | ||
+ | // | ||
+ | function showLightbox(objLink) | ||
+ | { | ||
+ | // prep objects | ||
+ | var objOverlay = document.getElementById('overlay'); | ||
+ | var objLightbox = document.getElementById('lightbox'); | ||
+ | var objCaption = document.getElementById('lightboxCaption'); | ||
+ | var objImage = document.getElementById('lightboxImage'); | ||
+ | var objLoadingImage = document.getElementById('loadingImage'); | ||
+ | var objLightboxDetails = document.getElementById('lightboxDetails'); | ||
+ | |||
+ | |||
+ | var arrayPageSize = getPageSize(); | ||
+ | var arrayPageScroll = getPageScroll(); | ||
+ | |||
+ | // center loadingImage if it exists | ||
+ | if (objLoadingImage) { | ||
+ | objLoadingImage.style.top = (arrayPageScroll[1] + ((arrayPageSize[3] - 35 - objLoadingImage.height) / 2) + 'px'); | ||
+ | objLoadingImage.style.left = (((arrayPageSize[0] - 20 - objLoadingImage.width) / 2) + 'px'); | ||
+ | objLoadingImage.style.display = 'block'; | ||
+ | } | ||
+ | |||
+ | // set height of Overlay to take up whole page and show | ||
+ | objOverlay.style.height = (arrayPageSize[1] + 'px'); | ||
+ | objOverlay.style.display = 'block'; | ||
+ | |||
+ | // preload image | ||
+ | imgPreload = new Image(); | ||
+ | |||
+ | imgPreload.onload=function(){ | ||
+ | objImage.src = objLink.href; | ||
+ | |||
+ | // center lightbox and make sure that the top and left values are not negative | ||
+ | // and the image placed outside the viewport | ||
+ | var lightboxTop = arrayPageScroll[1] + ((arrayPageSize[3] - 35 - imgPreload.height) / 2); | ||
+ | var lightboxLeft = ((arrayPageSize[0] - 20 - imgPreload.width) / 2); | ||
+ | |||
+ | objLightbox.style.top = (lightboxTop < 0) ? "0px" : lightboxTop + "px"; | ||
+ | objLightbox.style.left = (lightboxLeft < 0) ? "0px" : lightboxLeft + "px"; | ||
+ | |||
+ | |||
+ | objLightboxDetails.style.width = imgPreload.width + 'px'; | ||
+ | |||
+ | if(objLink.getAttribute('title')){ | ||
+ | objCaption.style.display = 'block'; | ||
+ | //objCaption.style.width = imgPreload.width + 'px'; | ||
+ | objCaption.innerHTML = objLink.getAttribute('title'); | ||
+ | } else { | ||
+ | objCaption.style.display = 'none'; | ||
+ | } | ||
+ | |||
+ | // A small pause between the image loading and displaying is required with IE, | ||
+ | // this prevents the previous image displaying for a short burst causing flicker. | ||
+ | if (navigator.appVersion.indexOf("MSIE")!=-1){ | ||
+ | pause(250); | ||
+ | } | ||
+ | |||
+ | if (objLoadingImage) { objLoadingImage.style.display = 'none'; } | ||
+ | |||
+ | // Hide select boxes as they will 'peek' through the image in IE | ||
+ | selects = document.getElementsByTagName("select"); | ||
+ | for (i = 0; i != selects.length; i++) { | ||
+ | selects[i].style.visibility = "hidden"; | ||
+ | } | ||
+ | |||
+ | |||
+ | objLightbox.style.display = 'block'; | ||
+ | |||
+ | // After image is loaded, update the overlay height as the new image might have | ||
+ | // increased the overall page height. | ||
+ | arrayPageSize = getPageSize(); | ||
+ | objOverlay.style.height = (arrayPageSize[1] + 'px'); | ||
+ | |||
+ | // Check for 'x' keypress | ||
+ | listenKey(); | ||
+ | |||
+ | return false; | ||
+ | } | ||
+ | |||
+ | imgPreload.src = objLink.href; | ||
+ | |||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | // | ||
+ | // hideLightbox() | ||
+ | // | ||
+ | function hideLightbox() | ||
+ | { | ||
+ | // get objects | ||
+ | objOverlay = document.getElementById('overlay'); | ||
+ | objLightbox = document.getElementById('lightbox'); | ||
+ | |||
+ | // hide lightbox and overlay | ||
+ | objOverlay.style.display = 'none'; | ||
+ | objLightbox.style.display = 'none'; | ||
+ | |||
+ | // make select boxes visible | ||
+ | selects = document.getElementsByTagName("select"); | ||
+ | for (i = 0; i != selects.length; i++) { | ||
+ | selects[i].style.visibility = "visible"; | ||
+ | } | ||
+ | |||
+ | // disable keypress listener | ||
+ | document.onkeypress = ''; | ||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | // | ||
+ | // initLightbox() | ||
+ | // Function runs on window load, going through link tags looking for rel="lightbox". | ||
+ | // These links receive onclick events that enable the lightbox display for their targets. | ||
+ | // The function also inserts html markup at the top of the page which will be used as a | ||
+ | // container for the overlay pattern and the inline image. | ||
+ | // | ||
+ | function initLightbox() | ||
+ | { | ||
+ | |||
+ | if (!document.getElementsByTagName){ return; } | ||
+ | var anchors = document.getElementsByTagName("a"); | ||
+ | |||
+ | // loop through all anchor tags | ||
+ | for (var i=0; i<anchors.length; i++){ | ||
+ | var anchor = anchors[i]; | ||
+ | |||
+ | if (anchor.getAttribute("href") && (anchor.getAttribute("rel") == "lightbox")){ | ||
+ | anchor.onclick = function () {showLightbox(this); return false;} | ||
+ | } | ||
+ | } | ||
+ | |||
+ | // the rest of this code inserts html at the top of the page that looks like this: | ||
+ | // | ||
+ | // <div id="overlay"> | ||
+ | // <a href="#" onclick="hideLightbox(); return false;"><img id="loadingImage" /></a> | ||
+ | // </div> | ||
+ | // <div id="lightbox"> | ||
+ | // <a href="#" onclick="hideLightbox(); return false;" title="Click anywhere to close image"> | ||
+ | // <img id="closeButton" /> | ||
+ | // <img id="lightboxImage" /> | ||
+ | // </a> | ||
+ | // <div id="lightboxDetails"> | ||
+ | // <div id="lightboxCaption"></div> | ||
+ | // <div id="keyboardMsg"></div> | ||
+ | // </div> | ||
+ | // </div> | ||
+ | |||
+ | var objBody = document.getElementsByTagName("body").item(0); | ||
+ | |||
+ | // create overlay div and hardcode some functional styles (aesthetic styles are in CSS file) | ||
+ | var objOverlay = document.createElement("div"); | ||
+ | objOverlay.setAttribute('id','overlay'); | ||
+ | objOverlay.onclick = function () {hideLightbox(); return false;} | ||
+ | objOverlay.style.display = 'none'; | ||
+ | objOverlay.style.position = 'absolute'; | ||
+ | objOverlay.style.top = '0'; | ||
+ | objOverlay.style.left = '0'; | ||
+ | objOverlay.style.zIndex = '90'; | ||
+ | objOverlay.style.width = '100%'; | ||
+ | objBody.insertBefore(objOverlay, objBody.firstChild); | ||
+ | |||
+ | var arrayPageSize = getPageSize(); | ||
+ | var arrayPageScroll = getPageScroll(); | ||
+ | |||
+ | // preload and create loader image | ||
+ | var imgPreloader = new Image(); | ||
+ | |||
+ | // if loader image found, create link to hide lightbox and create loadingimage | ||
+ | imgPreloader.onload=function(){ | ||
+ | |||
+ | var objLoadingImageLink = document.createElement("a"); | ||
+ | objLoadingImageLink.setAttribute('href','#'); | ||
+ | objLoadingImageLink.onclick = function () {hideLightbox(); return false;} | ||
+ | objOverlay.appendChild(objLoadingImageLink); | ||
+ | |||
+ | var objLoadingImage = document.createElement("img"); | ||
+ | objLoadingImage.src = loadingImage; | ||
+ | objLoadingImage.setAttribute('id','loadingImage'); | ||
+ | objLoadingImage.style.position = 'absolute'; | ||
+ | objLoadingImage.style.zIndex = '150'; | ||
+ | objLoadingImageLink.appendChild(objLoadingImage); | ||
+ | |||
+ | imgPreloader.onload=function(){}; // clear onLoad, as IE will flip out w/animated gifs | ||
+ | |||
+ | return false; | ||
+ | } | ||
+ | |||
+ | imgPreloader.src = loadingImage; | ||
+ | |||
+ | // create lightbox div, same note about styles as above | ||
+ | var objLightbox = document.createElement("div"); | ||
+ | objLightbox.setAttribute('id','lightbox'); | ||
+ | objLightbox.style.display = 'none'; | ||
+ | objLightbox.style.position = 'absolute'; | ||
+ | objLightbox.style.zIndex = '100'; | ||
+ | objBody.insertBefore(objLightbox, objOverlay.nextSibling); | ||
+ | |||
+ | // create link | ||
+ | var objLink = document.createElement("a"); | ||
+ | objLink.setAttribute('href','#'); | ||
+ | objLink.setAttribute('title','Click to close'); | ||
+ | objLink.onclick = function () {hideLightbox(); return false;} | ||
+ | objLightbox.appendChild(objLink); | ||
+ | |||
+ | // preload and create close button image | ||
+ | var imgPreloadCloseButton = new Image(); | ||
+ | |||
+ | // if close button image found, | ||
+ | imgPreloadCloseButton.onload=function(){ | ||
+ | |||
+ | var objCloseButton = document.createElement("img"); | ||
+ | objCloseButton.src = closeButton; | ||
+ | objCloseButton.setAttribute('id','closeButton'); | ||
+ | objCloseButton.style.position = 'absolute'; | ||
+ | objCloseButton.style.zIndex = '200'; | ||
+ | objLink.appendChild(objCloseButton); | ||
+ | |||
+ | return false; | ||
+ | } | ||
+ | |||
+ | imgPreloadCloseButton.src = closeButton; | ||
+ | |||
+ | // create image | ||
+ | var objImage = document.createElement("img"); | ||
+ | objImage.setAttribute('id','lightboxImage'); | ||
+ | objLink.appendChild(objImage); | ||
+ | |||
+ | // create details div, a container for the caption and keyboard message | ||
+ | var objLightboxDetails = document.createElement("div"); | ||
+ | objLightboxDetails.setAttribute('id','lightboxDetails'); | ||
+ | objLightbox.appendChild(objLightboxDetails); | ||
+ | |||
+ | // create caption | ||
+ | var objCaption = document.createElement("div"); | ||
+ | objCaption.setAttribute('id','lightboxCaption'); | ||
+ | objCaption.style.display = 'none'; | ||
+ | objLightboxDetails.appendChild(objCaption); | ||
+ | |||
+ | // create keyboard message | ||
+ | var objKeyboardMsg = document.createElement("div"); | ||
+ | objKeyboardMsg.setAttribute('id','keyboardMsg'); | ||
+ | objKeyboardMsg.innerHTML = 'press <a href="#" onclick="hideLightbox(); return false;"><kbd>x</kbd></a> to close'; | ||
+ | objLightboxDetails.appendChild(objKeyboardMsg); | ||
+ | |||
+ | |||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | // | ||
+ | // addLoadEvent() | ||
+ | // Adds event to window.onload without overwriting currently assigned onload functions. | ||
+ | // Function found at Simon Willison's weblog - http://simon.incutio.com/ | ||
+ | // | ||
+ | function addLoadEvent(func) | ||
+ | { | ||
+ | var oldonload = window.onload; | ||
+ | if (typeof window.onload != 'function'){ | ||
+ | window.onload = func; | ||
+ | } else { | ||
+ | window.onload = function(){ | ||
+ | oldonload(); | ||
+ | func(); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | addLoadEvent(initLightbox); // run initLightbox onLoad</script> | ||
</head> | </head> | ||
Revision as of 20:50, 27 June 2011
Start a Family
Got a favorite BioBrick? Check our our process for expanding basic parts into part families.Criteria
View our judging criteria for iGEM 2011 here.image #1
Hello!
Welcome to the UCD iGEM 2011 page!
We're currently constructing this site so stay tuned for more info!
-Tim