Index: javascripts/lightbox.js
===================================================================
--- javascripts/lightbox.js (revision 36)
+++ javascripts/lightbox.js (working copy)
@@ -1,74 +1,662 @@
+// -----------------------------------------------------------------------------------
+//
+// Lightbox v2.03.3
+// by Lokesh Dhakar - http://www.huddletogether.com
+// 5/21/06
+//
+// For more information on this script, visit:
+// http://huddletogether.com/projects/lightbox2/
+//
+// Licensed under the Creative Commons Attribution 2.5 License - http://creativecommons.org/licenses/by/2.5/
+//
+// Credit also due to those who have helped, inspired, and made their code available to the public.
+// Including: Scott Upton(uptonic.com), Peter-Paul Koch(quirksmode.com), Thomas Fuchs(mir.aculo.us), and others.
+//
+//
+// -----------------------------------------------------------------------------------
/*
- 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
+ Global Variables
+
+ Extending Built-in Objects
+ - Object.extend(Element)
+ - Array.prototype.removeDuplicates()
+ - Array.prototype.empty()
+
+ Lightbox Class Declaration
+ - initialize()
+ - updateImageList()
+ - start()
+ - changeImage()
+ - resizeImageContainer()
+ - showImage()
+ - updateDetails()
+ - updateNav()
+ - enableKeyboardNav()
+ - disableKeyboardNav()
+ - keyboardAction()
+ - preloadNeighborImages()
+ - end()
- Functions
+ Miscellaneous Functions
- getPageScroll()
- getPageSize()
- - pause()
- getKey()
- listenKey()
- - showLightbox()
- - hideLightbox()
+ - showSelectBoxes()
+ - hideSelectBoxes()
+ - showFlash()
+ - hideFlash()
+ - pause()
- initLightbox()
- - addLoadEvent()
Function Calls
- addLoadEvent(initLightbox)
-
+
*/
+// -----------------------------------------------------------------------------------
+//
+// Configuration
+//
+var fileLoadingImage = "/images/loading.gif";
+var fileBottomNavCloseImage = "/images/closelabel.gif";
+var overlayOpacity = 0.8; // controls transparency of shadow overlay
+var animate = true; // toggles resizing animations
+var resizeSpeed = 7; // controls the speed of the image resizing animations (1=slowest and 10=fastest)
+
+var borderSize = 10; //if you adjust the padding in the CSS, you will need to update this variable
+
+// -----------------------------------------------------------------------------------
+
//
-// Configuration
+// Global Variables
//
+var imageArray = new Array;
+var activeImage;
-// If you would like to use a custom loading image or close button reference them in the next two lines.
-var loadingImage = '/images/loading.gif';
-var closeButton = '/images/x.png';
+if(animate == true){
+ overlayDuration = 0.2; // shadow fade in/out duration
+ if(resizeSpeed > 10){ resizeSpeed = 10;}
+ if(resizeSpeed < 1){ resizeSpeed = 1;}
+ resizeDuration = (11 - resizeSpeed) * 0.15;
+} else {
+ overlayDuration = 0;
+ resizeDuration = 0;
+}
+// -----------------------------------------------------------------------------------
+//
+// Additional methods for Element added by SU, Couloir
+// - further additions by Lokesh Dhakar (huddletogether.com)
+//
+Object.extend(Element, {
+ getWidth: function(element) {
+ element = $(element);
+ return element.offsetWidth;
+ },
+ setWidth: function(element,w) {
+ element = $(element);
+ element.style.width = w +"px";
+ },
+ setHeight: function(element,h) {
+ element = $(element);
+ element.style.height = h +"px";
+ },
+ setTop: function(element,t) {
+ element = $(element);
+ element.style.top = t +"px";
+ },
+ setLeft: function(element,l) {
+ element = $(element);
+ element.style.left = l +"px";
+ },
+ setSrc: function(element,src) {
+ element = $(element);
+ element.src = src;
+ },
+ setHref: function(element,href) {
+ element = $(element);
+ element.href = href;
+ },
+ setInnerHTML: function(element,content) {
+ element = $(element);
+ element.innerHTML = content;
+ }
+});
+// -----------------------------------------------------------------------------------
+//
+// Extending built-in Array object
+// - array.removeDuplicates()
+// - array.empty()
+//
+Array.prototype.removeDuplicates = function () {
+ for(i = 0; i < this.length; i++){
+ for(j = this.length-1; j>i; j--){
+ if(this[i][0] == this[j][0]){
+ this.splice(j,1);
+ }
+ }
+ }
+}
+// -----------------------------------------------------------------------------------
+
+Array.prototype.empty = function () {
+ for(i = 0; i <= this.length; i++){
+ this.shift();
+ }
+}
+
+// -----------------------------------------------------------------------------------
+
//
+// Lightbox Class Declaration
+// - initialize()
+// - start()
+// - changeImage()
+// - resizeImageContainer()
+// - showImage()
+// - updateDetails()
+// - updateNav()
+// - enableKeyboardNav()
+// - disableKeyboardNav()
+// - keyboardNavAction()
+// - preloadNeighborImages()
+// - end()
+//
+// Structuring of code inspired by Scott Upton (http://www.uptonic.com/)
+//
+var Lightbox = Class.create();
+
+Lightbox.prototype = {
+
+ // initialize()
+ // Constructor runs on completion of the DOM loading. Calls updateImageList and then
+ // the function inserts html at the bottom of the page which is used to display the shadow
+ // overlay and the image container.
+ //
+ initialize: function() {
+
+ this.updateImageList();
+
+ // Code inserts html at the bottom of the page that looks similar to this:
+ //
+ //
+ //
+ //
+ //
+ //
![]()
+ //
+ //
+ //
+ //
+ //
+ //
+ //
+ //
+ //
+ //
+ //
+ //
+ //
+ //
+
+
+ var objBody = document.getElementsByTagName("body").item(0);
+
+ var objOverlay = document.createElement("div");
+ objOverlay.setAttribute('id','overlay');
+ objOverlay.style.display = 'none';
+ objOverlay.onclick = function() { myLightbox.end(); }
+ objBody.appendChild(objOverlay);
+
+ var objLightbox = document.createElement("div");
+ objLightbox.setAttribute('id','lightbox');
+ objLightbox.style.display = 'none';
+ objLightbox.onclick = function(e) { // close Lightbox is user clicks shadow overlay
+ if (!e) var e = window.event;
+ var clickObj = Event.element(e).id;
+ if ( clickObj == 'lightbox') {
+ myLightbox.end();
+ }
+ };
+ objBody.appendChild(objLightbox);
+
+ var objOuterImageContainer = document.createElement("div");
+ objOuterImageContainer.setAttribute('id','outerImageContainer');
+ objLightbox.appendChild(objOuterImageContainer);
+
+ // When Lightbox starts it will resize itself from 250 by 250 to the current image dimension.
+ // If animations are turned off, it will be hidden as to prevent a flicker of a
+ // white 250 by 250 box.
+ if(animate){
+ Element.setWidth('outerImageContainer', 250);
+ Element.setHeight('outerImageContainer', 250);
+ } else {
+ Element.setWidth('outerImageContainer', 1);
+ Element.setHeight('outerImageContainer', 1);
+ }
+
+ var objImageContainer = document.createElement("div");
+ objImageContainer.setAttribute('id','imageContainer');
+ objOuterImageContainer.appendChild(objImageContainer);
+
+ var objLightboxImage = document.createElement("img");
+ objLightboxImage.setAttribute('id','lightboxImage');
+ objImageContainer.appendChild(objLightboxImage);
+
+ var objHoverNav = document.createElement("div");
+ objHoverNav.setAttribute('id','hoverNav');
+ objImageContainer.appendChild(objHoverNav);
+
+ var objPrevLink = document.createElement("a");
+ objPrevLink.setAttribute('id','prevLink');
+ objPrevLink.setAttribute('href','#');
+ objHoverNav.appendChild(objPrevLink);
+
+ var objNextLink = document.createElement("a");
+ objNextLink.setAttribute('id','nextLink');
+ objNextLink.setAttribute('href','#');
+ objHoverNav.appendChild(objNextLink);
+
+ var objLoading = document.createElement("div");
+ objLoading.setAttribute('id','loading');
+ objImageContainer.appendChild(objLoading);
+
+ var objLoadingLink = document.createElement("a");
+ objLoadingLink.setAttribute('id','loadingLink');
+ objLoadingLink.setAttribute('href','#');
+ objLoadingLink.onclick = function() { myLightbox.end(); return false; }
+ objLoading.appendChild(objLoadingLink);
+
+ var objLoadingImage = document.createElement("img");
+ objLoadingImage.setAttribute('src', fileLoadingImage);
+ objLoadingLink.appendChild(objLoadingImage);
+
+ var objImageDataContainer = document.createElement("div");
+ objImageDataContainer.setAttribute('id','imageDataContainer');
+ objLightbox.appendChild(objImageDataContainer);
+
+ var objImageData = document.createElement("div");
+ objImageData.setAttribute('id','imageData');
+ objImageDataContainer.appendChild(objImageData);
+
+ var objImageDetails = document.createElement("div");
+ objImageDetails.setAttribute('id','imageDetails');
+ objImageData.appendChild(objImageDetails);
+
+ var objCaption = document.createElement("span");
+ objCaption.setAttribute('id','caption');
+ objImageDetails.appendChild(objCaption);
+
+ var objNumberDisplay = document.createElement("span");
+ objNumberDisplay.setAttribute('id','numberDisplay');
+ objImageDetails.appendChild(objNumberDisplay);
+
+ var objBottomNav = document.createElement("div");
+ objBottomNav.setAttribute('id','bottomNav');
+ objImageData.appendChild(objBottomNav);
+
+ var objBottomNavCloseLink = document.createElement("a");
+ objBottomNavCloseLink.setAttribute('id','bottomNavClose');
+ objBottomNavCloseLink.setAttribute('href','#');
+ objBottomNavCloseLink.onclick = function() { myLightbox.end(); return false; }
+ objBottomNav.appendChild(objBottomNavCloseLink);
+
+ var objBottomNavCloseImage = document.createElement("img");
+ objBottomNavCloseImage.setAttribute('src', fileBottomNavCloseImage);
+ objBottomNavCloseLink.appendChild(objBottomNavCloseImage);
+ },
+
+
+ //
+ // updateImageList()
+ // Loops through anchor tags looking for 'lightbox' references and applies onclick
+ // events to appropriate links. You can rerun after dynamically adding images w/ajax.
+ //
+ updateImageList: function() {
+ if (!document.getElementsByTagName){ return; }
+ var anchors = document.getElementsByTagName('a');
+ var areas = document.getElementsByTagName('area');
+
+ // loop through all anchor tags
+ for (var i=0; i 1){
+ Element.show('numberDisplay');
+ Element.setInnerHTML( 'numberDisplay', "Image " + eval(activeImage + 1) + " of " + imageArray.length);
+ }
+
+ new Effect.Parallel(
+ [ new Effect.SlideDown( 'imageDataContainer', { sync: true, duration: resizeDuration, from: 0.0, to: 1.0 }),
+ new Effect.Appear('imageDataContainer', { sync: true, duration: resizeDuration }) ],
+ { duration: resizeDuration, afterFinish: function() {
+ // update overlay size and update nav
+ var arrayPageSize = getPageSize();
+ Element.setHeight('overlay', arrayPageSize[1]);
+ myLightbox.updateNav();
+ }
+ }
+ );
+ },
+
+ //
+ // updateNav()
+ // Display appropriate previous and next hover navigation.
+ //
+ updateNav: function() {
+
+ Element.show('hoverNav');
+
+ // if not first image in set, display prev image button
+ if(activeImage != 0){
+ Element.show('prevLink');
+ document.getElementById('prevLink').onclick = function() {
+ myLightbox.changeImage(activeImage - 1); return false;
+ }
+ }
+
+ // if not last image in set, display next image button
+ if(activeImage != (imageArray.length - 1)){
+ Element.show('nextLink');
+ document.getElementById('nextLink').onclick = function() {
+ myLightbox.changeImage(activeImage + 1); return false;
+ }
+ }
+
+ this.enableKeyboardNav();
+ },
+
+ //
+ // enableKeyboardNav()
+ //
+ enableKeyboardNav: function() {
+ document.onkeydown = this.keyboardAction;
+ },
+
+ //
+ // disableKeyboardNav()
+ //
+ disableKeyboardNav: function() {
+ document.onkeydown = '';
+ },
+
+ //
+ // keyboardAction()
+ //
+ keyboardAction: function(e) {
+ if (e == null) { // ie
+ keycode = event.keyCode;
+ escapeKey = 27;
+ } else { // mozilla
+ keycode = e.keyCode;
+ escapeKey = e.DOM_VK_ESCAPE;
+ }
+
+ key = String.fromCharCode(keycode).toLowerCase();
+
+ if((key == 'x') || (key == 'o') || (key == 'c') || (keycode == escapeKey)){ // close lightbox
+ myLightbox.end();
+ } else if((key == 'p') || (keycode == 37)){ // display previous image
+ if(activeImage != 0){
+ myLightbox.disableKeyboardNav();
+ myLightbox.changeImage(activeImage - 1);
+ }
+ } else if((key == 'n') || (keycode == 39)){ // display next image
+ if(activeImage != (imageArray.length - 1)){
+ myLightbox.disableKeyboardNav();
+ myLightbox.changeImage(activeImage + 1);
+ }
+ }
+
+ },
+
+ //
+ // preloadNeighborImages()
+ // Preload previous and next images.
+ //
+ preloadNeighborImages: function(){
+
+ if((imageArray.length - 1) > activeImage){
+ preloadNextImage = new Image();
+ preloadNextImage.src = imageArray[activeImage + 1][0];
+ }
+ if(activeImage > 0){
+ preloadPrevImage = new Image();
+ preloadPrevImage.src = imageArray[activeImage - 1][0];
+ }
+
+ },
+
+ //
+ // end()
+ //
+ end: function() {
+ this.disableKeyboardNav();
+ Element.hide('lightbox');
+ new Effect.Fade('overlay', { duration: overlayDuration});
+ showSelectBoxes();
+ showFlash();
+ }
+}
+
+// -----------------------------------------------------------------------------------
+
+//
// getPageScroll()
// Returns array with x,y page scroll values.
-// Core code from - quirksmode.org
+// Core code from - quirksmode.com
//
function getPageScroll(){
- var yScroll;
+ var xScroll, yScroll;
if (self.pageYOffset) {
yScroll = self.pageYOffset;
+ xScroll = self.pageXOffset;
} else if (document.documentElement && document.documentElement.scrollTop){ // Explorer 6 Strict
yScroll = document.documentElement.scrollTop;
+ xScroll = document.documentElement.scrollLeft;
} else if (document.body) {// all other Explorers
yScroll = document.body.scrollTop;
+ xScroll = document.body.scrollLeft;
}
- arrayPageScroll = new Array('',yScroll)
+ arrayPageScroll = new Array(xScroll,yScroll)
return arrayPageScroll;
}
+// -----------------------------------------------------------------------------------
-
//
// getPageSize()
// Returns array with page width, height and window width, height
-// Core code from - quirksmode.org
+// Core code from - quirksmode.com
// Edit for Firefox by pHaez
//
function getPageSize(){
@@ -76,7 +664,7 @@
var xScroll, yScroll;
if (window.innerHeight && window.scrollMaxY) {
- xScroll = document.body.scrollWidth;
+ xScroll = window.innerWidth + window.scrollMaxX;
yScroll = window.innerHeight + window.scrollMaxY;
} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
xScroll = document.body.scrollWidth;
@@ -87,8 +675,16 @@
}
var windowWidth, windowHeight;
+
+// console.log(self.innerWidth);
+// console.log(document.documentElement.clientWidth);
+
if (self.innerHeight) { // all except Explorer
- windowWidth = self.innerWidth;
+ if(document.documentElement.clientWidth){
+ windowWidth = document.documentElement.clientWidth;
+ } else {
+ windowWidth = self.innerWidth;
+ }
windowHeight = self.innerHeight;
} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
windowWidth = document.documentElement.clientWidth;
@@ -105,39 +701,27 @@
pageHeight = yScroll;
}
+// console.log("xScroll " + xScroll)
+// console.log("windowWidth " + windowWidth)
+
// for small pages with total width less then width of the viewport
if(xScroll < windowWidth){
+ pageWidth = xScroll;
+ } else {
pageWidth = windowWidth;
- } else {
- pageWidth = xScroll;
}
+// console.log("pageWidth " + pageWidth)
-
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;
@@ -146,292 +730,88 @@
}
key = String.fromCharCode(keycode).toLowerCase();
- if(key == 'x'){ hideLightbox(); }
+ if(key == 'x'){
+ }
}
+// -----------------------------------------------------------------------------------
//
// 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';
+function showSelectBoxes(){
+ var selects = document.getElementsByTagName("select");
+ for (i = 0; i != selects.length; i++) {
+ selects[i].style.visibility = "visible";
}
+}
- // 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;
+function hideSelectBoxes(){
+ var selects = document.getElementsByTagName("select");
+ for (i = 0; i != selects.length; i++) {
+ selects[i].style.visibility = "hidden";
}
-
- imgPreload.src = objLink.href;
-
}
+// ---------------------------------------------------
+function showFlash(){
+ var flashObjects = document.getElementsByTagName("object");
+ for (i = 0; i < flashObjects.length; i++) {
+ flashObjects[i].style.visibility = "visible";
+ }
-
-
-//
-// 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";
+ var flashEmbeds = document.getElementsByTagName("embed");
+ for (i = 0; i < flashEmbeds.length; i++) {
+ flashEmbeds[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
- //
- //
- //
-
- 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;
+ var flashEmbeds = document.getElementsByTagName("embed");
+ for (i = 0; i < flashEmbeds.length; i++) {
+ flashEmbeds[i].style.visibility = "hidden";
}
- 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 x 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/
+// pause(numberMillis)
+// Pauses code execution for specified time. Uses busy code, not good.
+// Help from Ran Bar-On [ran2103@gmail.com]
//
-function addLoadEvent(func)
-{
- var oldonload = window.onload;
- if (typeof window.onload != 'function'){
- window.onload = func;
- } else {
- window.onload = function(){
- oldonload();
- func();
- }
- }
+function pause(ms){
+ var date = new Date();
+ curDate = null;
+ do{var curDate = new Date();}
+ while( curDate - date < ms);
}
+/*
+function pause(numberMillis) {
+ var curently = new Date().getTime() + sender;
+ while (new Date().getTime();
+}
+*/
+// ---------------------------------------------------
-addLoadEvent(initLightbox); // run initLightbox onLoad
\ No newline at end of file
+function initLightbox() { myLightbox = new Lightbox(); }
+Event.observe(window, 'load', initLightbox, false);
Index: stylesheets/lightbox.css
===================================================================
--- stylesheets/lightbox.css (revision 36)
+++ stylesheets/lightbox.css (working copy)
@@ -1,24 +1,79 @@
#lightbox{
- background-color:#333;
- padding: 5px;
+ position: absolute;
+ left: 0;
+ width: 100%;
+ z-index: 100;
+ text-align: center;
+ line-height: 0;
}
-#lightboxDetails{
- font-size: 0.8em;
- padding-top: 0.4em;
- }
-#lightboxCaption{ float: left; }
-#keyboardMsg{ float: right; }
-#closeButton{ top: 5px; right: 5px; }
-#lightbox img{ border: none; clear: both;}
-#overlay img{ border: none; }
+#lightbox a img{ border: none; }
-#overlay{ background-image: url(/images/overlay.png); }
+#outerImageContainer{
+ position: relative;
+ background-color: #fff;
+ width: 250px;
+ height: 250px;
+ margin: 0 auto;
+ }
-* html #overlay{
- background-color: #333;
- back\ground-color: transparent;
- background-image: url(/images/blank.gif);
- filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="/images/overlay.png", sizingMethod="scale");
+#imageContainer{
+ padding: 10px;
}
-
\ No newline at end of file
+
+#loading{
+ position: absolute;
+ top: 40%;
+ left: 0%;
+ height: 25%;
+ width: 100%;
+ text-align: center;
+ line-height: 0;
+ }
+#hoverNav{
+ position: absolute;
+ top: 0;
+ left: 0;
+ height: 100%;
+ width: 100%;
+ z-index: 10;
+ }
+#imageContainer>#hoverNav{ left: 0;}
+#hoverNav a{ outline: none;}
+
+#prevLink, #nextLink{
+ width: 49%;
+ height: 100%;
+ background: transparent url(/images/blank.gif) no-repeat; /* Trick IE into showing hover */
+ display: block;
+ }
+#prevLink { left: 0; float: left;}
+#nextLink { right: 0; float: right;}
+#prevLink:hover, #prevLink:visited:hover { background: url(/images/prevlabel.gif) left 15% no-repeat; }
+#nextLink:hover, #nextLink:visited:hover { background: url(/images/nextlabel.gif) right 15% no-repeat; }
+
+
+#imageDataContainer{
+ font: 10px Verdana, Helvetica, sans-serif;
+ background-color: #fff;
+ margin: 0 auto;
+ line-height: 1.4em;
+ overflow: auto;
+ width: 100%
+ }
+
+#imageData{ padding:0 10px; color: #666; }
+#imageData #imageDetails{ width: 70%; float: left; text-align: left; }
+#imageData #caption{ font-weight: bold; }
+#imageData #numberDisplay{ display: block; clear: left; padding-bottom: 1.0em; }
+#imageData #bottomNavClose{ width: 66px; float: right; padding-bottom: 0.7em; }
+
+#overlay{
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 90;
+ width: 100%;
+ height: 500px;
+ background-color: #000;
+ }