Skip to content
Browse files

First Import

  • Loading branch information...
0 parents commit 0c600587a7daec122ec91479238affa33b3d2533 @DAddYE DAddYE committed Jul 2, 2008
21 LICENSE
@@ -0,0 +1,21 @@
+Created by Davide D'Agostino on 2008-01-11.
+Copyright 2008 Lipsiasoft s.r.l. All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 README
@@ -0,0 +1,23 @@
+LightBoxObject v.1.1
+====================
+This LightBox Helper is based on the lastest javascript http://www.huddletogether.com/projects/lightbox2/
+
+It's only make an helper, copy the lastest javascripts, css, and images on your public/javascript directory
+and register the javascript in the AssetTagHelper of rails,
+so for include the javascript in your page you only can add this (if you havn't yet):
+
+<%= javascript_include_tag :defaults %>
+
+You must add also the stylesheet so add this on your page head:
+
+<%= stylesheet_link_tag 'lightbox' %>
+
+The is very simple for add a LightBox in your page add this:
+
+<%= lightbox_link_to "Link Name", "/path/of/your/image.png" %>
+or
+<%= lightbox_image_tag("/path/of/your/image-thumb.png", "/path/of/your/image.png", {:class=>"images"}, :title => "This is a test!") %>
+
+You can add, title, controller, action what do u whant becaue it's based on image_tag and link_to.
+
+Vist my website: http://blog.lipsiasoft.com
1 init.rb
@@ -0,0 +1 @@
+require 'lightbox_view_helper'
25 install.rb
@@ -0,0 +1,25 @@
+require 'fileutils'
+
+blank_gif = File.dirname(__FILE__) + '/../../../public/images/blank.gif'
+close_gif = File.dirname(__FILE__) + '/../../../public/images/close.gif'
+closelabel_gif = File.dirname(__FILE__) + '/../../../public/images/closelabel.gif'
+loading_gif = File.dirname(__FILE__) + '/../../../public/images/loading.gif'
+next_gif = File.dirname(__FILE__) + '/../../../public/images/next.gif'
+nextlabel_gif = File.dirname(__FILE__) + '/../../../public/images/nextlabel.gif'
+prev_gif = File.dirname(__FILE__) + '/../../../public/images/prev.gif'
+prevlabel_gif = File.dirname(__FILE__) + '/../../../public/images/prevlabel.gif'
+lightbox_js = File.dirname(__FILE__) + '/../../../public/javascripts/lightbox.js'
+lightbox_css = File.dirname(__FILE__) + '/../../../public/stylesheets/lightbox.css'
+
+FileUtils.cp File.dirname(__FILE__) + '/public/images/blank.gif', blank_gif unless File.exist?(blank_gif)
+FileUtils.cp File.dirname(__FILE__) + '/public/images/close.gif', close_gif unless File.exist?(close_gif)
+FileUtils.cp File.dirname(__FILE__) + '/public/images/closelabel.gif', closelabel_gif unless File.exist?(closelabel_gif)
+FileUtils.cp File.dirname(__FILE__) + '/public/images/loading.gif', loading_gif unless File.exist?(loading_gif)
+FileUtils.cp File.dirname(__FILE__) + '/public/images/next.gif', next_gif unless File.exist?(next_gif)
+FileUtils.cp File.dirname(__FILE__) + '/public/images/nextlabel.gif', nextlabel_gif unless File.exist?(nextlabel_gif)
+FileUtils.cp File.dirname(__FILE__) + '/public/images/prev.gif', prev_gif unless File.exist?(prev_gif)
+FileUtils.cp File.dirname(__FILE__) + '/public/images/prevlabel.gif', prevlabel_gif unless File.exist?(prevlabel_gif)
+FileUtils.cp File.dirname(__FILE__) + '/public/javascripts/lightbox.js', lightbox_js unless File.exist?(lightbox_js)
+FileUtils.cp File.dirname(__FILE__) + '/public/stylesheets/lightbox.css', lightbox_css unless File.exist?(lightbox_css)
+
+puts IO.read(File.join(File.dirname(__FILE__), 'README'))
34 lib/lightbox_view_helper.rb
@@ -0,0 +1,34 @@
+# Author:: Davide D'Agostino (DAddYE)
+# WebSite:: http://blog.lipsiasoft.com
+require 'action_view'
+
+module ActionView
+ module Helpers
+ module LightBoxHelper
+ def self.included(base)
+ base.class_eval do
+ include InstanceMethods
+ end
+ end
+ module InstanceMethods
+ def lightbox_image_tag(source, destination, image_options = {}, html_options = {})
+ html_options.merge!(:rel => "lightbox") unless html_options[:rel]
+ html_options.merge!(:title => "") unless html_options[:title]
+ link_to(image_tag(source, image_options), destination, html_options)
+ end
+
+ def lightbox_link_to(name, options = {}, html_options = {}, *parameters_for_method_reference)
+ html_options.merge!(:rel => "lightbox") unless html_options[:rel]
+ html_options.merge!(:title => "") unless html_options[:title]
+ link_to(name, options, html_options, *parameters_for_method_reference)
+ end
+ end
+ end
+ end
+end
+
+ActionView::Base.class_eval do
+ include ActionView::Helpers::LightBoxHelper
+end
+
+ActionView::Helpers::AssetTagHelper.register_javascript_include_default 'lightbox'
BIN public/images/blank.gif
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN public/images/close.gif
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN public/images/closelabel.gif
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN public/images/loading.gif
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN public/images/next.gif
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN public/images/nextlabel.gif
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN public/images/prev.gif
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN public/images/prevlabel.gif
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
780 public/javascripts/lightbox.js
@@ -0,0 +1,780 @@
+// -----------------------------------------------------------------------------------
+//
+// Lightbox v2.03.2
+// by Lokesh Dhakar - http://www.huddletogether.com
+// 4/30/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.org), Thomas Fuchs(mir.aculo.us), and others.
+//
+//
+// -----------------------------------------------------------------------------------
+/*
+
+ Table of Contents
+ -----------------
+ Configuration
+ Global Variables
+
+ Extending Built-in Objects
+ - Object.extend(Element)
+ - Array.prototype.removeDuplicates()
+ - Array.prototype.empty()
+
+ Lightbox Class Declaration
+ - initialize()
+ - start()
+ - changeImage()
+ - resizeImageContainer()
+ - showImage()
+ - updateDetails()
+ - updateNav()
+ - enableKeyboardNav()
+ - disableKeyboardNav()
+ - keyboardAction()
+ - preloadNeighborImages()
+ - end()
+
+ Miscellaneous Functions
+ - getPageScroll()
+ - getPageSize()
+ - getKey()
+ - listenKey()
+ - showSelectBoxes()
+ - hideSelectBoxes()
+ - showFlash()
+ - hideFlash()
+ - pause()
+ - initLightbox()
+
+ 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
+
+// -----------------------------------------------------------------------------------
+
+//
+// Global Variables
+//
+var imageArray = new Array;
+var activeImage;
+
+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";
+ },
+ 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. Loops through anchor tags looking for
+ // 'lightbox' references and applies onclick events to appropriate links. The 2nd section of
+ // the function inserts html at the bottom of the page which is used to display the shadow
+ // overlay and the image container.
+ //
+ initialize: 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<anchors.length; i++){
+ var anchor = anchors[i];
+
+ var relAttribute = String(anchor.getAttribute('rel'));
+
+ // use the string.match() method to catch 'lightbox' references in the rel attribute
+ if (anchor.getAttribute('href') && (relAttribute.toLowerCase().match('lightbox'))){
+ anchor.onclick = function () {myLightbox.start(this); return false;}
+ }
+ }
+
+ // loop through all area tags
+ // todo: combine anchor & area tag loops
+ for (var i=0; i< areas.length; i++){
+ var area = areas[i];
+
+ var relAttribute = String(area.getAttribute('rel'));
+
+ // use the string.match() method to catch 'lightbox' references in the rel attribute
+ if (area.getAttribute('href') && (relAttribute.toLowerCase().match('lightbox'))){
+ area.onclick = function () {myLightbox.start(this); return false;}
+ }
+ }
+
+ // The rest of this code inserts html at the bottom of the page that looks similar to this:
+ //
+ // <div id="overlay"></div>
+ // <div id="lightbox">
+ // <div id="outerImageContainer">
+ // <div id="imageContainer">
+ // <img id="lightboxImage">
+ // <div style="" id="hoverNav">
+ // <a href="#" id="prevLink"></a>
+ // <a href="#" id="nextLink"></a>
+ // </div>
+ // <div id="loading">
+ // <a href="#" id="loadingLink">
+ // <img src="images/loading.gif">
+ // </a>
+ // </div>
+ // </div>
+ // </div>
+ // <div id="imageDataContainer">
+ // <div id="imageData">
+ // <div id="imageDetails">
+ // <span id="caption"></span>
+ // <span id="numberDisplay"></span>
+ // </div>
+ // <div id="bottomNav">
+ // <a href="#" id="bottomNavClose">
+ // <img src="images/close.gif">
+ // </a>
+ // </div>
+ // </div>
+ // </div>
+ // </div>
+
+
+ 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);
+ },
+
+ //
+ // start()
+ // Display overlay and lightbox. If image is part of a set, add siblings to imageArray.
+ //
+ start: function(imageLink) {
+
+ hideSelectBoxes();
+ hideFlash();
+
+ // stretch overlay to fill page and fade in
+ var arrayPageSize = getPageSize();
+ Element.setHeight('overlay', arrayPageSize[1]);
+
+ new Effect.Appear('overlay', { duration: overlayDuration, from: 0.0, to: overlayOpacity });
+
+ imageArray = [];
+ imageNum = 0;
+
+ if (!document.getElementsByTagName){ return; }
+ var anchors = document.getElementsByTagName( imageLink.tagName);
+
+ // if image is NOT part of a set..
+ if((imageLink.getAttribute('rel') == 'lightbox')){
+ // add single image to imageArray
+ imageArray.push(new Array(imageLink.getAttribute('href'), imageLink.getAttribute('title')));
+ } else {
+ // if image is part of a set..
+
+ // loop through anchors, find other images in set, and add them to imageArray
+ for (var i=0; i<anchors.length; i++){
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && (anchor.getAttribute('rel') == imageLink.getAttribute('rel'))){
+ imageArray.push(new Array(anchor.getAttribute('href'), anchor.getAttribute('title')));
+ }
+ }
+ imageArray.removeDuplicates();
+ while(imageArray[imageNum][0] != imageLink.getAttribute('href')) { imageNum++;}
+ }
+
+ // calculate top offset for the lightbox and display
+ var arrayPageScroll = getPageScroll();
+ var lightboxTop = arrayPageScroll[1] + (arrayPageSize[3] / 10);
+
+ Element.setTop('lightbox', lightboxTop);
+ Element.show('lightbox');
+
+ this.changeImage(imageNum);
+ },
+
+ //
+ // changeImage()
+ // Hide most elements and preload image in preparation for resizing image container.
+ //
+ changeImage: function(imageNum) {
+
+ activeImage = imageNum; // update global var
+
+ // hide elements during transition
+ if(animate){ Element.show('loading');}
+ Element.hide('lightboxImage');
+ Element.hide('hoverNav');
+ Element.hide('prevLink');
+ Element.hide('nextLink');
+ Element.hide('imageDataContainer');
+ Element.hide('numberDisplay');
+
+ imgPreloader = new Image();
+
+ // once image is preloaded, resize image container
+ imgPreloader.onload=function(){
+ Element.setSrc('lightboxImage', imageArray[activeImage][0]);
+ myLightbox.resizeImageContainer(imgPreloader.width, imgPreloader.height);
+
+ imgPreloader.onload=function(){}; // clear onLoad, IE behaves irratically with animated gifs otherwise
+ }
+ imgPreloader.src = imageArray[activeImage][0];
+ },
+
+ //
+ // resizeImageContainer()
+ //
+ resizeImageContainer: function( imgWidth, imgHeight) {
+
+ // get curren width and height
+ this.widthCurrent = Element.getWidth('outerImageContainer');
+ this.heightCurrent = Element.getHeight('outerImageContainer');
+
+ // get new width and height
+ var widthNew = (imgWidth + (borderSize * 2));
+ var heightNew = (imgHeight + (borderSize * 2));
+
+ // scalars based on change from old to new
+ this.xScale = ( widthNew / this.widthCurrent) * 100;
+ this.yScale = ( heightNew / this.heightCurrent) * 100;
+
+ // calculate size difference between new and old image, and resize if necessary
+ wDiff = this.widthCurrent - widthNew;
+ hDiff = this.heightCurrent - heightNew;
+
+ if(!( hDiff == 0)){ new Effect.Scale('outerImageContainer', this.yScale, {scaleX: false, duration: resizeDuration, queue: 'front'}); }
+ if(!( wDiff == 0)){ new Effect.Scale('outerImageContainer', this.xScale, {scaleY: false, delay: resizeDuration, duration: resizeDuration}); }
+
+ // if new and old image are same size and no scaling transition is necessary,
+ // do a quick pause to prevent image flicker.
+ if((hDiff == 0) && (wDiff == 0)){
+ if (navigator.appVersion.indexOf("MSIE")!=-1){ pause(250); } else { pause(100);}
+ }
+
+ Element.setHeight('prevLink', imgHeight);
+ Element.setHeight('nextLink', imgHeight);
+ Element.setWidth( 'imageDataContainer', widthNew);
+
+ this.showImage();
+ },
+
+ //
+ // showImage()
+ // Display image and begin preloading neighbors.
+ //
+ showImage: function(){
+ Element.hide('loading');
+ new Effect.Appear('lightboxImage', { duration: resizeDuration, queue: 'end', afterFinish: function(){ myLightbox.updateDetails(); } });
+ this.preloadNeighborImages();
+ },
+
+ //
+ // updateDetails()
+ // Display caption, image number, and bottom nav.
+ //
+ updateDetails: function() {
+
+ Element.show('caption');
+ Element.setInnerHTML( 'caption', imageArray[activeImage][1]);
+
+ // if image is part of set display 'Image x of x'
+ if(imageArray.length > 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
+//
+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;
+}
+
+// -----------------------------------------------------------------------------------
+
+//
+// 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'){
+ }
+}
+
+// -----------------------------------------------------------------------------------
+
+//
+// listenKey()
+//
+function listenKey () { document.onkeypress = getKey; }
+
+// ---------------------------------------------------
+
+function showSelectBoxes(){
+ var selects = document.getElementsByTagName("select");
+ for (i = 0; i != selects.length; i++) {
+ selects[i].style.visibility = "visible";
+ }
+}
+
+// ---------------------------------------------------
+
+function hideSelectBoxes(){
+ var selects = document.getElementsByTagName("select");
+ for (i = 0; i != selects.length; i++) {
+ selects[i].style.visibility = "hidden";
+ }
+}
+
+// ---------------------------------------------------
+
+function showFlash(){
+ var flashObjects = document.getElementsByTagName("object");
+ for (i = 0; i < flashObjects.length; i++) {
+ flashObjects[i].style.visibility = "visible";
+ }
+
+ var flashEmbeds = document.getElementsByTagName("embed");
+ for (i = 0; i < flashEmbeds.length; i++) {
+ flashEmbeds[i].style.visibility = "visible";
+ }
+}
+
+// ---------------------------------------------------
+
+function hideFlash(){
+ var flashObjects = document.getElementsByTagName("object");
+ for (i = 0; i < flashObjects.length; i++) {
+ flashObjects[i].style.visibility = "hidden";
+ }
+
+ var flashEmbeds = document.getElementsByTagName("embed");
+ for (i = 0; i < flashEmbeds.length; i++) {
+ flashEmbeds[i].style.visibility = "hidden";
+ }
+
+}
+
+
+// ---------------------------------------------------
+
+//
+// pause(numberMillis)
+// Pauses code execution for specified time. Uses busy code, not good.
+// Help from Ran Bar-On [ran2103@gmail.com]
+//
+
+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();
+}
+*/
+// ---------------------------------------------------
+
+
+
+function initLightbox() { myLightbox = new Lightbox(); }
+Event.observe(window, 'load', initLightbox, false);
79 public/stylesheets/lightbox.css
@@ -0,0 +1,79 @@
+#lightbox{
+ position: absolute;
+ left: 0;
+ width: 100%;
+ z-index: 100;
+ text-align: center;
+ line-height: 0;
+ }
+
+#lightbox a img{ border: none; }
+
+#outerImageContainer{
+ position: relative;
+ background-color: #fff;
+ width: 250px;
+ height: 250px;
+ margin: 0 auto;
+ }
+
+#imageContainer{
+ padding: 10px;
+ }
+
+#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;
+ }

0 comments on commit 0c60058

Please sign in to comment.
Something went wrong with that request. Please try again.