+++ /dev/null
-<html>
-<head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>The source code</title>
- <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
- <script type="text/javascript" src="../resources/prettify/prettify.js"></script>
-</head>
-<body onload="prettyPrint();">
- <pre class="prettyprint lang-js">/*!
- * Ext JS Library 3.2.0
- * Copyright(c) 2006-2010 Ext JS, Inc.
- * licensing@extjs.com
- * http://www.extjs.com/license
- */
-Ext.ns('Ext.ux');
-
-Ext.ux.Lightbox = (function(){
- var els = {},
- images = [],
- activeImage,
- initialized = false,
- selectors = [];
-
- return {
- overlayOpacity: 0.85,
- animate: true,
- resizeSpeed: 8,
- borderSize: 10,
- labelImage: "Image",
- labelOf: "of",
-
- init: function() {
- this.resizeDuration = this.animate ? ((11 - this.resizeSpeed) * 0.15) : 0;
- this.overlayDuration = this.animate ? 0.2 : 0;
-
- if(!initialized) {
- Ext.apply(this, Ext.util.Observable.prototype);
- Ext.util.Observable.constructor.call(this);
- this.addEvents('open', 'close');
- this.initMarkup();
- this.initEvents();
- initialized = true;
- }
- },
-
- initMarkup: function() {
- els.shim = Ext.DomHelper.append(document.body, {
- tag: 'iframe',
- id: 'ux-lightbox-shim'
- }, true);
- els.overlay = Ext.DomHelper.append(document.body, {
- id: 'ux-lightbox-overlay'
- }, true);
-
- var lightboxTpl = new Ext.Template(this.getTemplate());
- els.lightbox = lightboxTpl.append(document.body, {}, true);
-
- var ids =
- ['outerImageContainer', 'imageContainer', 'image', 'hoverNav', 'navPrev', 'navNext', 'loading', 'loadingLink',
- 'outerDataContainer', 'dataContainer', 'data', 'details', 'caption', 'imageNumber', 'bottomNav', 'navClose'];
-
- Ext.each(ids, function(id){
- els[id] = Ext.get('ux-lightbox-' + id);
- });
-
- Ext.each([els.overlay, els.lightbox, els.shim], function(el){
- el.setVisibilityMode(Ext.Element.DISPLAY)
- el.hide();
- });
-
- var size = (this.animate ? 250 : 1) + 'px';
- els.outerImageContainer.setStyle({
- width: size,
- height: size
- });
- },
-
- getTemplate : function() {
- return [
- '<div id="ux-lightbox">',
- '<div id="ux-lightbox-outerImageContainer">',
- '<div id="ux-lightbox-imageContainer">',
- '<img id="ux-lightbox-image">',
- '<div id="ux-lightbox-hoverNav">',
- '<a href="#" id="ux-lightbox-navPrev"></a>',
- '<a href="#" id="ux-lightbox-navNext"></a>',
- '</div>',
- '<div id="ux-lightbox-loading">',
- '<a id="ux-lightbox-loadingLink"></a>',
- '</div>',
- '</div>',
- '</div>',
- '<div id="ux-lightbox-outerDataContainer">',
- '<div id="ux-lightbox-dataContainer">',
- '<div id="ux-lightbox-data">',
- '<div id="ux-lightbox-details">',
- '<span id="ux-lightbox-caption"></span>',
- '<span id="ux-lightbox-imageNumber"></span>',
- '</div>',
- '<div id="ux-lightbox-bottomNav">',
- '<a href="#" id="ux-lightbox-navClose"></a>',
- '</div>',
- '</div>',
- '</div>',
- '</div>',
- '</div>'
- ];
- },
-
- initEvents: function() {
- var close = function(ev) {
- ev.preventDefault();
- this.close();
- };
-
- els.overlay.on('click', close, this);
- els.loadingLink.on('click', close, this);
- els.navClose.on('click', close, this);
-
- els.lightbox.on('click', function(ev) {
- if(ev.getTarget().id == 'ux-lightbox') {
- this.close();
- }
- }, this);
-
- els.navPrev.on('click', function(ev) {
- ev.preventDefault();
- this.setImage(activeImage - 1);
- }, this);
-
- els.navNext.on('click', function(ev) {
- ev.preventDefault();
- this.setImage(activeImage + 1);
- }, this);
- },
-
- register: function(sel, group) {
- if(selectors.indexOf(sel) === -1) {
- selectors.push(sel);
-
- Ext.fly(document).on('click', function(ev){
- var target = ev.getTarget(sel);
-
- if (target) {
- ev.preventDefault();
- this.open(target, sel, group);
- }
- }, this);
- }
- },
-
- open: function(image, sel, group) {
- group = group || false;
- this.setViewSize();
- els.overlay.fadeIn({
- duration: this.overlayDuration,
- endOpacity: this.overlayOpacity,
- callback: function() {
- images = [];
-
- var index = 0;
- if(!group) {
- images.push([image.href, image.title]);
- }
- else {
- var setItems = Ext.query(sel);
- Ext.each(setItems, function(item) {
- if(item.href) {
- images.push([item.href, item.title]);
- }
- });
-
- while (images[index][0] != image.href) {
- index++;
- }
- }
-
- // calculate top and left offset for the lightbox
- var pageScroll = Ext.fly(document).getScroll();
-
- var lightboxTop = pageScroll.top + (Ext.lib.Dom.getViewportHeight() / 10);
- var lightboxLeft = pageScroll.left;
- els.lightbox.setStyle({
- top: lightboxTop + 'px',
- left: lightboxLeft + 'px'
- }).show();
-
- this.setImage(index);
-
- this.fireEvent('open', images[index]);
- },
- scope: this
- });
- },
-
- setViewSize: function(){
- var viewSize = this.getViewSize();
- els.overlay.setStyle({
- width: viewSize[0] + 'px',
- height: viewSize[1] + 'px'
- });
- els.shim.setStyle({
- width: viewSize[0] + 'px',
- height: viewSize[1] + 'px'
- }).show();
- },
-
- setImage: function(index){
- activeImage = index;
-
- this.disableKeyNav();
- if (this.animate) {
- els.loading.show();
- }
-
- els.image.hide();
- els.hoverNav.hide();
- els.navPrev.hide();
- els.navNext.hide();
- els.dataContainer.setOpacity(0.0001);
- els.imageNumber.hide();
-
- var preload = new Image();
- preload.onload = (function(){
- els.image.dom.src = images[activeImage][0];
- this.resizeImage(preload.width, preload.height);
- }).createDelegate(this);
- preload.src = images[activeImage][0];
- },
-
- resizeImage: function(w, h){
- var wCur = els.outerImageContainer.getWidth();
- var hCur = els.outerImageContainer.getHeight();
-
- var wNew = (w + this.borderSize * 2);
- var hNew = (h + this.borderSize * 2);
-
- var wDiff = wCur - wNew;
- var hDiff = hCur - hNew;
-
- var afterResize = function(){
- els.hoverNav.setWidth(els.imageContainer.getWidth() + 'px');
-
- els.navPrev.setHeight(h + 'px');
- els.navNext.setHeight(h + 'px');
-
- els.outerDataContainer.setWidth(wNew + 'px');
-
- this.showImage();
- };
-
- if (hDiff != 0 || wDiff != 0) {
- els.outerImageContainer.shift({
- height: hNew,
- width: wNew,
- duration: this.resizeDuration,
- scope: this,
- callback: afterResize,
- delay: 50
- });
- }
- else {
- afterResize.call(this);
- }
- },
-
- showImage: function(){
- els.loading.hide();
- els.image.fadeIn({
- duration: this.resizeDuration,
- scope: this,
- callback: function(){
- this.updateDetails();
- }
- });
- this.preloadImages();
- },
-
- updateDetails: function(){
- var detailsWidth = els.data.getWidth(true) - els.navClose.getWidth() - 10;
- els.details.setWidth((detailsWidth > 0 ? detailsWidth : 0) + 'px');
-
- els.caption.update(images[activeImage][1]);
-
- els.caption.show();
- if (images.length > 1) {
- els.imageNumber.update(this.labelImage + ' ' + (activeImage + 1) + ' ' + this.labelOf + ' ' + images.length);
- els.imageNumber.show();
- }
-
- els.dataContainer.fadeIn({
- duration: this.resizeDuration/2,
- scope: this,
- callback: function() {
- var viewSize = this.getViewSize();
- els.overlay.setHeight(viewSize[1] + 'px');
- this.updateNav();
- }
- });
- },
-
- updateNav: function(){
- this.enableKeyNav();
-
- els.hoverNav.show();
-
- // if not first image in set, display prev image button
- if (activeImage > 0)
- els.navPrev.show();
-
- // if not last image in set, display next image button
- if (activeImage < (images.length - 1))
- els.navNext.show();
- },
-
- enableKeyNav: function() {
- Ext.fly(document).on('keydown', this.keyNavAction, this);
- },
-
- disableKeyNav: function() {
- Ext.fly(document).un('keydown', this.keyNavAction, this);
- },
-
- keyNavAction: function(ev) {
- var keyCode = ev.getKey();
-
- if (
- keyCode == 88 || // x
- keyCode == 67 || // c
- keyCode == 27
- ) {
- this.close();
- }
- else if (keyCode == 80 || keyCode == 37){ // display previous image
- if (activeImage != 0){
- this.setImage(activeImage - 1);
- }
- }
- else if (keyCode == 78 || keyCode == 39){ // display next image
- if (activeImage != (images.length - 1)){
- this.setImage(activeImage + 1);
- }
- }
- },
-
- preloadImages: function(){
- var next, prev;
- if (images.length > activeImage + 1) {
- next = new Image();
- next.src = images[activeImage + 1][0];
- }
- if (activeImage > 0) {
- prev = new Image();
- prev.src = images[activeImage - 1][0];
- }
- },
-
- close: function(){
- this.disableKeyNav();
- els.lightbox.hide();
- els.overlay.fadeOut({
- duration: this.overlayDuration
- });
- els.shim.hide();
- this.fireEvent('close', activeImage);
- },
-
- getViewSize: function() {
- return [Ext.lib.Dom.getViewWidth(), Ext.lib.Dom.getViewHeight()];
- }
- }
-})();
-
-Ext.onReady(Ext.ux.Lightbox.init, Ext.ux.Lightbox);</pre>
-</body>
-</html>
\ No newline at end of file