1 line
7.9 KiB
JavaScript
1 line
7.9 KiB
JavaScript
(function() { var b, d, c; b = jQuery; c = (function() { function b() { this.fadeDuration = 500; this.fitImagesInViewport = true; this.resizeDuration = 700; this.showImageNumberLabel = true; this.wrapAround = false } b.prototype.albumLabel = function(b, c) { return"Image " + b + " sur " + c }; return b })(); d = (function() { function c(b) { this.options = b; this.album = []; this.currentImageIndex = void 0; this.init() } c.prototype.init = function() { this.enable(); return this.build() }; c.prototype.enable = function() { var c = this; return b('body').on('click', 'a[rel^=lightbox], area[rel^=lightbox], a[data-lightbox], area[data-lightbox]', function(d) { c.start(b(d.currentTarget)); return false }) }; c.prototype.build = function() { var c = this; b("<div id='lightboxOverlay' class='lightboxOverlay'></div><div id='lightbox' class='lightbox'><div class='lb-outerContainer'><div class='lb-container'><img class='lb-image' src='' /><div class='lb-nav'><a class='lb-prev' href='' ></a><a class='lb-next' href='' ></a></div><div class='lb-loader'><a class='lb-cancel'></a></div></div></div><div class='lb-dataContainer'><div class='lb-data'><div class='lb-details'><span class='lb-caption'></span><span class='lb-number'></span></div><div class='lb-closeContainer'><a class='lb-close'></a></div></div></div></div>").appendTo(b('body')); this.$lightbox = b('#lightbox'); this.$overlay = b('#lightboxOverlay'); this.$outerContainer = this.$lightbox.find('.lb-outerContainer'); this.$container = this.$lightbox.find('.lb-container'); this.containerTopPadding = parseInt(this.$container.css('padding-top'), 10); this.containerRightPadding = parseInt(this.$container.css('padding-right'), 10); this.containerBottomPadding = parseInt(this.$container.css('padding-bottom'), 10); this.containerLeftPadding = parseInt(this.$container.css('padding-left'), 10); this.$overlay.hide().on('click', function() { c.end(); return false }); this.$lightbox.hide().on('click', function(d) { if (b(d.target).attr('id') === 'lightbox') { c.end() } return false }); this.$outerContainer.on('click', function(d) { if (b(d.target).attr('id') === 'lightbox') { c.end() } return false }); this.$lightbox.find('.lb-prev').on('click', function() { if (c.currentImageIndex === 0) { c.changeImage(c.album.length - 1) } else { c.changeImage(c.currentImageIndex - 1) } return false }); this.$lightbox.find('.lb-next').on('click', function() { if (c.currentImageIndex === c.album.length - 1) { c.changeImage(0) } else { c.changeImage(c.currentImageIndex + 1) } return false }); return this.$lightbox.find('.lb-loader, .lb-close').on('click', function() { c.end(); return false }) }; c.prototype.start = function(c) { var f, e, j, d, g, n, o, k, l, m, p, h, i; b(window).on("resize", this.sizeOverlay); b('select, object, embed').css({visibility: "hidden"}); this.$overlay.width(b(document).width()).height(b(document).height()).fadeIn(this.options.fadeDuration); this.album = []; g = 0; j = c.attr('data-lightbox'); if (j) { h = b(c.prop("tagName") + '[data-lightbox="' + j + '"]'); for (d = k = 0, m = h.length; k < m; d = ++k) { e = h[d]; this.album.push({link: b(e).attr('href'), title: b(e).attr('title')}); if (b(e).attr('href') === c.attr('href')) { g = d } } } else { if (c.attr('rel') === 'lightbox') { this.album.push({link: c.attr('href'), title: c.attr('title')}) } else { i = b(c.prop("tagName") + '[rel="' + c.attr('rel') + '"]'); for (d = l = 0, p = i.length; l < p; d = ++l) { e = i[d]; this.album.push({link: b(e).attr('href'), title: b(e).attr('title')}); if (b(e).attr('href') === c.attr('href')) { g = d } } } } f = b(window); this.$lightbox.css({top: (f.height()/10) + 'px', left: 0 + 'px'}).fadeIn(this.options.fadeDuration); this.changeImage(g) }; c.prototype.changeImage = function(f) { var d, c, e = this; this.disableKeyboardNav(); d = this.$lightbox.find('.lb-image'); this.sizeOverlay(); this.$overlay.fadeIn(this.options.fadeDuration); b('.lb-loader').fadeIn('slow'); this.$lightbox.find('.lb-image, .lb-nav, .lb-prev, .lb-next, .lb-dataContainer, .lb-numbers, .lb-caption').hide(); this.$outerContainer.addClass('animating'); c = new Image(); c.onload = function() { var m, g, h, i, j, k, l; d.attr('src', e.album[f].link); m = b(c); d.width(c.width); d.height(c.height); if (e.options.fitImagesInViewport) { l = b(window).width(); k = b(window).height(); j = l - e.containerLeftPadding - e.containerRightPadding - 20; i = k - e.containerTopPadding - e.containerBottomPadding - 110; if ((c.width > j) || (c.height > i)) { if ((c.width / j) > (c.height / i)) { h = j; g = parseInt(c.height / (c.width / h), 10); d.width(h); d.height(g) } else { g = i; h = parseInt(c.width / (c.height / g), 10); d.width(h); d.height(g) } } } return e.sizeContainer(d.width(), d.height()) }; c.src = this.album[f].link; this.currentImageIndex = f }; c.prototype.sizeOverlay = function() { return b('#lightboxOverlay').width(b(document).width()).height(b(document).height()) }; c.prototype.sizeContainer = function(f, g) { var b, d, e, h, c = this; h = this.$outerContainer.outerWidth(); e = this.$outerContainer.outerHeight(); d = f + this.containerLeftPadding + this.containerRightPadding; b = g + this.containerTopPadding + this.containerBottomPadding; this.$outerContainer.animate({width: d, height: b}, this.options.resizeDuration, 'swing'); setTimeout(function() { c.$lightbox.find('.lb-dataContainer').width(d); c.$lightbox.find('.lb-prevLink').height(b); c.$lightbox.find('.lb-nextLink').height(b); c.showImage() }, this.options.resizeDuration) }; c.prototype.showImage = function() { this.$lightbox.find('.lb-loader').hide(); this.$lightbox.find('.lb-image').fadeIn('slow'); this.updateNav(); this.updateDetails(); this.preloadNeighboringImages(); this.enableKeyboardNav() }; c.prototype.updateNav = function() { this.$lightbox.find('.lb-nav').show(); if (this.album.length > 1) { if (this.options.wrapAround) { this.$lightbox.find('.lb-prev, .lb-next').show() } else { if (this.currentImageIndex > 0) { this.$lightbox.find('.lb-prev').show() } if (this.currentImageIndex < this.album.length - 1) { this.$lightbox.find('.lb-next').show() } } } }; c.prototype.updateDetails = function() { var b = this; if (typeof this.album[this.currentImageIndex].title !== 'undefined' && this.album[this.currentImageIndex].title !== "") { this.$lightbox.find('.lb-caption').html(this.album[this.currentImageIndex].title).fadeIn('fast') } if (this.album.length > 1 && this.options.showImageNumberLabel) { this.$lightbox.find('.lb-number').text(this.options.albumLabel(this.currentImageIndex + 1, this.album.length)).fadeIn('fast') } else { this.$lightbox.find('.lb-number').hide() } this.$outerContainer.removeClass('animating'); this.$lightbox.find('.lb-dataContainer').fadeIn(this.resizeDuration, function() { return b.sizeOverlay() }) }; c.prototype.preloadNeighboringImages = function() { var c, b; if (this.album.length > this.currentImageIndex + 1) { c = new Image(); c.src = this.album[this.currentImageIndex + 1].link } if (this.currentImageIndex > 0) { b = new Image(); b.src = this.album[this.currentImageIndex - 1].link } }; c.prototype.enableKeyboardNav = function() { b(document).on('keyup.keyboard', b.proxy(this.keyboardAction, this)) }; c.prototype.disableKeyboardNav = function() { b(document).off('.keyboard') }; c.prototype.keyboardAction = function(g) { var d, e, f, c, b; d = 27; e = 37; f = 39; b = g.keyCode; c = String.fromCharCode(b).toLowerCase(); if (b === d || c.match(/x|o|c/)) { this.end() } else if (c === 'p' || b === e) { if (this.currentImageIndex !== 0) { this.changeImage(this.currentImageIndex - 1) } } else if (c === 'n' || b === f) { if (this.currentImageIndex !== this.album.length - 1) { this.changeImage(this.currentImageIndex + 1) } } }; c.prototype.end = function() { this.disableKeyboardNav(); b(window).off("resize", this.sizeOverlay); this.$lightbox.fadeOut(this.options.fadeDuration); this.$overlay.fadeOut(this.options.fadeDuration); return b('select, object, embed').css({visibility: "visible"}) }; return c })(); b(function() { var e, b; b = new c(); return e = new d(b) }) }).call(this); |