2 * Interface Elements for jQuery
5 * http://interface.eyecon.ro
7 * Copyright (c) 2006 Stefan Petre
8 * Dual licensed under the MIT (MIT-LICENSE.txt)
9 * and GPL (GPL-LICENSE.txt) licenses.
14 * This a jQuery equivalent for Lightbox2. Alternative to image popups that will display images in an overlay. All links that have attribute 'rel' starting with 'imagebox' and link to an image will display the image inside the page. Galleries can by build buy giving the value 'imagebox-galname' to attribute 'rel'. Attribute 'title' will be used as caption.
15 * Keyboard navigation:
16 * - next image: arrow right, page down, 'n' key, space
17 * - previous image: arrow left, page up, 'p' key, backspace
23 * background-color: #000;
27 * background-color: #F4F4EC;
33 * background-color: #F4F4EC;
35 * #ImageBoxCaptionText
38 * padding-bottom: 5px;
42 * #ImageBoxCaptionImages
48 * background-image: url(images/imagebox/spacer.gif);
49 * background-color: transparent;
53 * background-image: url(images/imagebox/spacer.gif);
54 * background-color: transparent;
56 * #ImageBoxNextImage:hover
58 * background-image: url(images/imagebox/next_image.jpg);
59 * background-repeat: no-repeat;
60 * background-position: right top;
62 * #ImageBoxPrevImage:hover
64 * background-image: url(images/imagebox/prev_image.jpg);
65 * background-repeat: no-repeat;
66 * background-position: left bottom;
70 * @description This a jQuery equivalent for Lightbox2. Alternative to image popups that will display images in an overlay. All links that have attribute 'rel' starting with 'imagebox' and link to an image will display the image inside the page. Galleries can by build buy giving the value 'imagebox-galname' to attribute 'rel'. Attribute 'title' will be used as caption.
71 * @param Hash hash A hash of parameters
72 * @option Integer border border width
73 * @option String loaderSRC path to loading image
74 * @option String closeHTML path to close overlay image
75 * @option Float overlayOpacity opacity for overlay
76 * @option String textImage when a galalry it is build then the iteration is displayed
77 * @option String textImageFrom when a galalry it is build then the iteration is displayed
78 * @option Integer fadeDuration fade duration in miliseconds
81 * @cat Plugins/Interface
82 * @author Stefan Petre
87 loaderSRC : 'images/loading.gif',
88 closeHTML : '<img src="images/close.jpg" />',
90 textImage : 'Showing image',
91 textImageFrom : 'from',
97 animationInProgress : false,
100 keyPressed : function(event)
102 if(!jQuery.ImageBox.opened || jQuery.ImageBox.animationInProgress)
104 var pressedKey = event.charCode || event.keyCode || -1;
109 if (jQuery.ImageBox.currentRel)
110 jQuery.ImageBox.start(null, jQuery('a[@rel=' + jQuery.ImageBox.currentRel+ ']:last').get(0));
114 if (jQuery.ImageBox.currentRel)
115 jQuery.ImageBox.start(null, jQuery('a[@rel=' + jQuery.ImageBox.currentRel+ ']:first').get(0));
126 var prevEl = jQuery('#ImageBoxPrevImage');
127 if(prevEl.get(0).onclick != null) {
128 prevEl.get(0).onclick.apply(prevEl.get(0));
143 var nextEl = jQuery('#ImageBoxNextImage');
144 if(nextEl.get(0).onclick != null) {
145 nextEl.get(0).onclick.apply(nextEl.get(0));
153 jQuery.ImageBox.hideImage();
158 init : function(options)
161 jQuery.extend(jQuery.ImageBox.options, options);
163 jQuery('body',document).bind('keyup', jQuery.ImageBox.keyPressed);
165 jQuery(document).bind('keyup', jQuery.ImageBox.keyPressed);
171 relAttr = el.attr('rel')||'';
172 hrefAttr = el.attr('href')||'';
173 imageTypes = /\.jpg|\.jpeg|\.png|\.gif|\.bmp/g;
174 if (hrefAttr.toLowerCase().match(imageTypes) != null && relAttr.toLowerCase().indexOf('imagebox') == 0) {
175 el.bind('click', jQuery.ImageBox.start);
179 if (jQuery.browser.msie) {
180 iframe = document.createElement('iframe');
184 id : 'ImageBoxIframe',
185 src : 'javascript:false;',
193 position : 'absolute',
196 filter : 'progid:DXImageTransform.Microsoft.Alpha(opacity=0)'
199 jQuery('body').append(iframe);
202 overlay = document.createElement('div');
204 .attr('id', 'ImageBoxOverlay')
207 position : 'absolute',
214 .append(document.createTextNode(' '))
215 .bind('click', jQuery.ImageBox.hideImage);
217 captionText = document.createElement('div');
219 .attr('id', 'ImageBoxCaptionText')
222 paddingLeft : jQuery.ImageBox.options.border + 'px'
225 .append(document.createTextNode(' '));
227 captionImages = document.createElement('div');
228 jQuery(captionImages)
229 .attr('id', 'ImageBoxCaptionImages')
232 paddingLeft : jQuery.ImageBox.options.border + 'px',
233 paddingBottom : jQuery.ImageBox.options.border + 'px'
236 .append(document.createTextNode(' '));
238 closeEl = document.createElement('a');
242 id : 'ImageBoxClose',
248 position : 'absolute',
249 right : jQuery.ImageBox.options.border + 'px',
253 .append(jQuery.ImageBox.options.closeHTML)
254 .bind('click', jQuery.ImageBox.hideImage);
256 captionEl = document.createElement('div');
258 .attr('id', 'ImageBoxCaption')
261 position : 'relative',
268 .append(captionImages)
271 loader = document.createElement('img');
272 loader.src = jQuery.ImageBox.options.loaderSRC;
274 .attr('id', 'ImageBoxLoader')
277 position : 'absolute'
281 prevImage = document.createElement('a');
285 id : 'ImageBoxPrevImage',
291 position : 'absolute',
294 textDecoration : 'none'
297 .append(document.createTextNode(' '));
299 nextImage = document.createElement('a');
303 id : 'ImageBoxNextImage',
309 position : 'absolute',
311 textDecoration : 'none'
314 .append(document.createTextNode(' '));
316 container = document.createElement('div');
318 .attr('id', 'ImageBoxContainer')
322 position : 'relative',
331 .append([loader, prevImage, nextImage]);
333 outerContainer = document.createElement('div');
334 jQuery(outerContainer)
335 .attr('id', 'ImageBoxOuterContainer')
339 position : 'absolute',
343 textAlign : 'center',
344 backgroundColor : 'transparent',
348 .append([container,captionEl]);
352 .append(outerContainer);
355 start : function(e, elm)
357 el = elm ? jQuery(elm) : jQuery(this);
358 linkRel = el.attr('rel');
359 var totalImages, iteration, prevImage, nextImage;
360 if (linkRel != 'imagebox') {
361 jQuery.ImageBox.currentRel = linkRel;
362 gallery = jQuery('a[@rel=' + linkRel + ']');
363 totalImages = gallery.size();
364 iteration = gallery.index(elm ? elm : this);
365 prevImage = gallery.get(iteration - 1);
366 nextImage = gallery.get(iteration + 1);
368 imageSrc = el.attr('href');
369 captionText = el.attr('title');
370 pageSize = jQuery.iUtil.getScroll();
371 overlay = jQuery('#ImageBoxOverlay');
372 if (!jQuery.ImageBox.opened) {
373 jQuery.ImageBox.opened = true;
374 if (jQuery.browser.msie) {
375 jQuery('#ImageBoxIframe')
376 .css ('height', Math.max(pageSize.ih,pageSize.h) + 'px')
377 .css ('width', Math.max(pageSize.iw,pageSize.w) + 'px')
381 .css ('height', Math.max(pageSize.ih,pageSize.h) + 'px')
382 .css ('width', Math.max(pageSize.iw,pageSize.w) + 'px')
386 jQuery.ImageBox.options.overlayOpacity,
389 jQuery.ImageBox.loadImage(
400 jQuery('#ImageBoxOuterContainer').css ('width', Math.max(pageSize.iw,pageSize.w) + 'px');
402 jQuery('#ImageBoxPrevImage').get(0).onclick = null;
403 jQuery('#ImageBoxNextImage').get(0).onclick = null;
404 jQuery.ImageBox.loadImage(
417 loadImage : function(imageSrc, captiontext, pageSize, totalImages, iteration, prevImage, nextImage)
419 jQuery('#ImageBoxCurrentImage').remove();
420 prevImageEl = jQuery('#ImageBoxPrevImage');
422 nextImageEl = jQuery('#ImageBoxNextImage');
424 loader = jQuery('#ImageBoxLoader');
425 container = jQuery('#ImageBoxContainer');
426 outerContainer = jQuery('#ImageBoxOuterContainer');
427 captionEl = jQuery('#ImageBoxCaption').css('visibility', 'hidden');
428 jQuery('#ImageBoxCaptionText').html(captionText);
429 jQuery.ImageBox.animationInProgress = true;
431 jQuery('#ImageBoxCaptionImages').html(
432 jQuery.ImageBox.options.textImage
433 + ' ' + (iteration + 1) + ' '
434 + jQuery.ImageBox.options.textImageFrom
438 prevImageEl.get(0).onclick = function()
441 jQuery.ImageBox.start(null, prevImage);
446 nextImageEl.get(0).onclick =function()
449 jQuery.ImageBox.start(null, nextImage);
454 containerSize = jQuery.iUtil.getSize(container.get(0));
455 containerW = Math.max(containerSize.wb, loader.get(0).width + jQuery.ImageBox.options.border * 2);
456 containerH = Math.max(containerSize.hb, loader.get(0).height + jQuery.ImageBox.options.border * 2);
460 left : (containerW - loader.get(0).width)/2 + 'px',
461 top : (containerH - loader.get(0).height)/2 + 'px'
467 width : containerW + 'px',
468 height : containerH + 'px'
472 clientSize = jQuery.iUtil.getClient();
474 .css('top', pageSize.t + (clientSize.h / 15) + 'px');
475 if (outerContainer.css('display') == 'none') {
479 jQuery.ImageBox.options.fadeDuration
484 .attr('id', 'ImageBoxCurrentImage')
488 containerW = imageEl.width + jQuery.ImageBox.options.border * 2;
489 containerH = imageEl.height + jQuery.ImageBox.options.border * 2;
495 containerSize.hb != containerH ? jQuery.ImageBox.options.fadeDuration : 1,
502 containerSize.wb != containerW ? jQuery.ImageBox.options.fadeDuration : 1,
505 container.prepend(imageEl);
509 position : 'absolute',
510 left : jQuery.ImageBox.options.border + 'px',
511 top : jQuery.ImageBox.options.border + 'px'
515 jQuery.ImageBox.options.fadeDuration,
518 captionSize = jQuery.iUtil.getSize(captionEl.get(0));
523 left : jQuery.ImageBox.options.border + 'px',
524 top : jQuery.ImageBox.options.border + 'px',
525 width : containerW/2 - jQuery.ImageBox.options.border * 3 + 'px',
526 height : containerH - jQuery.ImageBox.options.border * 2 + 'px'
535 left : containerW/2 + jQuery.ImageBox.options.border * 2 + 'px',
536 top : jQuery.ImageBox.options.border + 'px',
537 width : containerW/2 - jQuery.ImageBox.options.border * 3 + 'px',
538 height : containerH - jQuery.ImageBox.options.border * 2 + 'px'
546 width : containerW + 'px',
547 top : - captionSize.hb + 'px',
548 visibility : 'visible'
555 jQuery.ImageBox.options.fadeDuration,
558 jQuery.ImageBox.animationInProgress = false;
569 imageEl.src = imageSrc;
573 hideImage : function()
575 jQuery('#ImageBoxCurrentImage').remove();
576 jQuery('#ImageBoxOuterContainer').hide();
577 jQuery('#ImageBoxCaption').css('visibility', 'hidden');
578 jQuery('#ImageBoxOverlay').fadeTo(
583 if (jQuery.browser.msie) {
584 jQuery('#ImageBoxIframe').hide();
588 jQuery('#ImageBoxPrevImage').get(0).onclick = null;
589 jQuery('#ImageBoxNextImage').get(0).onclick = null;
590 jQuery.ImageBox.currentRel = null;
591 jQuery.ImageBox.opened = false;
592 jQuery.ImageBox.animationInProgress = false;