From fe84e8d825852f697338b5e09ef3d5095e701b65 Mon Sep 17 00:00:00 2001 From: bellord13 Date: Wed, 16 Feb 2022 15:09:31 +0300 Subject: [PATCH] fix --- assets/core/core.register.js | 13 +- assets/datepicker/js/datepicker.js | 2 +- assets/jquery/jquery.js | 6 +- assets/lightGallery/lightGallery.css | 0 assets/lightGallery/lightGallery.js | 1823 ++++++++++++++++++++++++++ assets/mask/mask.js | 2 +- assets/toolkit/toolkit.js | 2 +- 7 files changed, 1840 insertions(+), 8 deletions(-) create mode 100644 assets/lightGallery/lightGallery.css create mode 100644 assets/lightGallery/lightGallery.js diff --git a/assets/core/core.register.js b/assets/core/core.register.js index d6fa61c..41ee5f6 100644 --- a/assets/core/core.register.js +++ b/assets/core/core.register.js @@ -28,7 +28,7 @@ __PluginManager__.registerPlugins({ module: '/support.js', type: 'loader', }, - jquery: { + jQuery: { path: __pmConfig__.assetsPath + '/jquery', module: '/jquery.min.js', type: 'loader', @@ -109,14 +109,14 @@ __PluginManager__.registerPlugins({ path: __pmConfig__.assetsPath + '/mask', module: '/mask.js', type: 'loader', - deps: ['jquery'], + deps: ['jQuery'], }, toolkit: { path: __pmConfig__.assetsPath + '/toolkit', module: '/toolkit.js', type: 'loader', css: ['/toolkit.css'], - deps: ['jquery', 'mask'], + deps: ['jQuery', 'mask'], }, Modal: { path: __pmConfig__.assetsPath + '/modal', @@ -164,7 +164,7 @@ __PluginManager__.registerPlugins({ css: [ '/css/datepicker.css', ], - deps: ['jquery'], + deps: ['jQuery'], onRegister: function (plugin) { //kit.PluginManager.install(plugin.id) }, @@ -247,6 +247,11 @@ __PluginManager__.registerPlugins({ css: '/fancybox.css', js: '/fancybox.umd.js', }, + lightGallery: { + path: __pmConfig__.assetsPath + '/lightGallery', + css: '/lightGallery.css', + js: '/lightGallery.js', + }, }); diff --git a/assets/datepicker/js/datepicker.js b/assets/datepicker/js/datepicker.js index 3f5c62d..85ddc35 100644 --- a/assets/datepicker/js/datepicker.js +++ b/assets/datepicker/js/datepicker.js @@ -1,7 +1,7 @@ kit.PluginManager.register('datepicker', function(module, exports, require, global){ var $, jQuery; - jQuery = $ = require('jquery'); + jQuery = $ = require('jQuery'); ;(function (window, $, undefined) { diff --git a/assets/jquery/jquery.js b/assets/jquery/jquery.js index bb3b433..b316d4c 100644 --- a/assets/jquery/jquery.js +++ b/assets/jquery/jquery.js @@ -1,4 +1,5 @@ -kit.PluginManager.register('jquery', function(module, exports, require, global){ +/** @module jQuery */ +kit.PluginManager.register('jQuery', function(module, exports, require, global){ /*! * jQuery JavaScript Library v3.6.0 @@ -157,6 +158,9 @@ kit.PluginManager.register('jquery', function(module, exports, require, global){ version = "3.6.0", // Define a local copy of jQuery + /** + * @memberOf kit + */ jQuery = function( selector, context ) { // The jQuery object is actually just the init constructor 'enhanced' diff --git a/assets/lightGallery/lightGallery.css b/assets/lightGallery/lightGallery.css new file mode 100644 index 0000000..e69de29 diff --git a/assets/lightGallery/lightGallery.js b/assets/lightGallery/lightGallery.js new file mode 100644 index 0000000..3843379 --- /dev/null +++ b/assets/lightGallery/lightGallery.js @@ -0,0 +1,1823 @@ +/** @module lightGallery */ +kit.PluginManager.register('lightGallery',function(module, exports, require, global) { + + var $ = require('jQuery'); + + /** + * @memberOf kit + */ + /** ! lightgallery - v1.6.5 - 2017-11-16 + * http://sachinchoolur.github.io/lightGallery/ + * Copyright (c) 2017 Sachin N; Licensed GPLv3 + */ + (function() { + 'use strict'; + + var defaults = { + + mode: 'lg-slide', + + // Ex : 'ease' + cssEasing: 'ease', + + //'for jquery animation' + easing: 'linear', + speed: 600, + height: '100%', + width: '100%', + addClass: '', + startClass: 'lg-start-zoom', + backdropDuration: 150, + hideBarsDelay: 6000, + + useLeft: false, + + closable: true, + loop: true, + escKey: true, + keyPress: true, + controls: true, + slideEndAnimatoin: true, + hideControlOnEnd: false, + mousewheel: true, + + getCaptionFromTitleOrAlt: true, + + // .lg-item || '.lg-sub-html' + appendSubHtmlTo: '.lg-sub-html', + + subHtmlSelectorRelative: false, + + /** + * @desc number of preload slides + * will exicute only after the current slide is fully loaded. + * + * @ex you clicked on 4th image and if preload = 1 then 3rd slide and 5th + * slide will be loaded in the background after the 4th slide is fully loaded.. + * if preload is 2 then 2nd 3rd 5th 6th slides will be preloaded.. ... ... + * + */ + preload: 1, + showAfterLoad: true, + selector: '', + selectWithin: '', + nextHtml: '', + prevHtml: '', + + // 0, 1 + index: false, + + iframeMaxWidth: '100%', + + download: true, + counter: true, + appendCounterTo: '.lg-toolbar', + + swipeThreshold: 50, + enableSwipe: true, + enableDrag: true, + + dynamic: false, + dynamicEl: [], + galleryId: 1 + }; + + /** + * @memberOf {kit.$} + * @memberOf {}kit.$ + */ + function Plugin(element, options) { + + // Current lightGallery element + this.el = element; + + // Current jquery element + this.$el = $(element); + + // lightGallery settings + this.s = $.extend({}, defaults, options); + + // When using dynamic mode, ensure dynamicEl is an array + if (this.s.dynamic && this.s.dynamicEl !== 'undefined' && this.s.dynamicEl.constructor === Array && !this.s.dynamicEl.length) { + throw ('When using dynamic mode, you must also define dynamicEl as an Array.'); + } + + // lightGallery modules + this.modules = {}; + + // false when lightgallery complete first slide; + this.lGalleryOn = false; + + this.lgBusy = false; + + // Timeout function for hiding controls; + this.hideBartimeout = false; + + // To determine browser supports for touch events; + this.isTouch = ('ontouchstart' in document.documentElement); + + // Disable hideControlOnEnd if sildeEndAnimation is true + if (this.s.slideEndAnimatoin) { + this.s.hideControlOnEnd = false; + } + + // Gallery items + if (this.s.dynamic) { + this.$items = this.s.dynamicEl; + } else { + if (this.s.selector === 'this') { + this.$items = this.$el; + } else if (this.s.selector !== '') { + if (this.s.selectWithin) { + this.$items = $(this.s.selectWithin).find(this.s.selector); + } else { + this.$items = this.$el.find($(this.s.selector)); + } + } else { + this.$items = this.$el.children(); + } + } + + // .lg-item + this.$slide = ''; + + // .lg-outer + this.$outer = ''; + + this.init(); + + return this; + } + + Plugin.prototype.init = function() { + + var _this = this; + + // s.preload should not be more than $item.length + if (_this.s.preload > _this.$items.length) { + _this.s.preload = _this.$items.length; + } + + // if dynamic option is enabled execute immediately + var _hash = window.location.hash; + if (_hash.indexOf('lg=' + this.s.galleryId) > 0) { + + _this.index = parseInt(_hash.split('&slide=')[1], 10); + + $('body').addClass('lg-from-hash'); + if (!$('body').hasClass('lg-on')) { + setTimeout(function() { + _this.build(_this.index); + }); + + $('body').addClass('lg-on'); + } + } + + if (_this.s.dynamic) { + + _this.$el.trigger('onBeforeOpen.lg'); + + _this.index = _this.s.index || 0; + + // prevent accidental double execution + if (!$('body').hasClass('lg-on')) { + setTimeout(function() { + _this.build(_this.index); + $('body').addClass('lg-on'); + }); + } + } else { + + // Using different namespace for click because click event should not unbind if selector is same object('this') + _this.$items.on('click.lgcustom', function(event) { + + // For IE8 + try { + event.preventDefault(); + event.preventDefault(); + } catch (er) { + event.returnValue = false; + } + + _this.$el.trigger('onBeforeOpen.lg'); + + _this.index = _this.s.index || _this.$items.index(this); + + // prevent accidental double execution + if (!$('body').hasClass('lg-on')) { + _this.build(_this.index); + $('body').addClass('lg-on'); + } + }); + } + + }; + + Plugin.prototype.build = function(index) { + + var _this = this; + + _this.structure(); + + // module constructor + $.each($.fn.lightGallery.modules, function(key) { + _this.modules[key] = new $.fn.lightGallery.modules[key](_this.el); + }); + + // initiate slide function + _this.slide(index, false, false, false); + + if (_this.s.keyPress) { + _this.keyPress(); + } + + if (_this.$items.length > 1) { + + _this.arrow(); + + setTimeout(function() { + _this.enableDrag(); + _this.enableSwipe(); + }, 50); + + if (_this.s.mousewheel) { + _this.mousewheel(); + } + } else { + _this.$slide.on('click.lg', function() { + _this.$el.trigger('onSlideClick.lg'); + }); + } + + _this.counter(); + + _this.closeGallery(); + + _this.$el.trigger('onAfterOpen.lg'); + + // Hide controllers if mouse doesn't move for some period + _this.$outer.on('mousemove.lg click.lg touchstart.lg', function() { + + _this.$outer.removeClass('lg-hide-items'); + + clearTimeout(_this.hideBartimeout); + + // Timeout will be cleared on each slide movement also + _this.hideBartimeout = setTimeout(function() { + _this.$outer.addClass('lg-hide-items'); + }, _this.s.hideBarsDelay); + + }); + + _this.$outer.trigger('mousemove.lg'); + + }; + + Plugin.prototype.structure = function() { + var list = ''; + var controls = ''; + var i = 0; + var subHtmlCont = ''; + var template; + var _this = this; + + $('body').append('
'); + $('.lg-backdrop').css('transition-duration', this.s.backdropDuration + 'ms'); + + // Create gallery items + for (i = 0; i < this.$items.length; i++) { + list += '
'; + } + + // Create controlls + if (this.s.controls && this.$items.length > 1) { + controls = '
' + + '' + + '' + + '
'; + } + + if (this.s.appendSubHtmlTo === '.lg-sub-html') { + subHtmlCont = '
'; + } + + template = '
' + + '
' + + '
' + list + '
' + + '
' + + '' + + '
' + + controls + + subHtmlCont + + '
' + + '
'; + + $('body').append(template); + this.$outer = $('.lg-outer'); + this.$slide = this.$outer.find('.lg-item'); + + if (this.s.useLeft) { + this.$outer.addClass('lg-use-left'); + + // Set mode lg-slide if use left is true; + this.s.mode = 'lg-slide'; + } else { + this.$outer.addClass('lg-use-css3'); + } + + // For fixed height gallery + _this.setTop(); + $(window).on('resize.lg orientationchange.lg', function() { + setTimeout(function() { + _this.setTop(); + }, 100); + }); + + // add class lg-current to remove initial transition + this.$slide.eq(this.index).addClass('lg-current'); + + // add Class for css support and transition mode + if (this.doCss()) { + this.$outer.addClass('lg-css3'); + } else { + this.$outer.addClass('lg-css'); + + // Set speed 0 because no animation will happen if browser doesn't support css3 + this.s.speed = 0; + } + + this.$outer.addClass(this.s.mode); + + if (this.s.enableDrag && this.$items.length > 1) { + this.$outer.addClass('lg-grab'); + } + + if (this.s.showAfterLoad) { + this.$outer.addClass('lg-show-after-load'); + } + + if (this.doCss()) { + var $inner = this.$outer.find('.lg-inner'); + $inner.css('transition-timing-function', this.s.cssEasing); + $inner.css('transition-duration', this.s.speed + 'ms'); + } + + setTimeout(function() { + $('.lg-backdrop').addClass('in'); + }); + + setTimeout(function() { + _this.$outer.addClass('lg-visible'); + }, this.s.backdropDuration); + + if (this.s.download) { + this.$outer.find('.lg-toolbar').append(''); + } + + // Store the current scroll top value to scroll back after closing the gallery.. + this.prevScrollTop = $(window).scrollTop(); + }; + + // For fixed height gallery + Plugin.prototype.setTop = function() { + if (this.s.height !== '100%') { + var wH = $(window).height(); + var top = (wH - parseInt(this.s.height, 10)) / 2; + var $lGallery = this.$outer.find('.lg'); + if (wH >= parseInt(this.s.height, 10)) { + $lGallery.css('top', top + 'px'); + } else { + $lGallery.css('top', '0px'); + } + } + }; + + // Find css3 support + Plugin.prototype.doCss = function() { + // check for css animation support + var support = function() { + var transition = ['transition', 'MozTransition', 'WebkitTransition', 'OTransition', 'msTransition', 'KhtmlTransition']; + var root = document.documentElement; + var i = 0; + for (i = 0; i < transition.length; i++) { + if (transition[i] in root.style) { + return true; + } + } + }; + + if (support()) { + return true; + } + + return false; + }; + + /** + * @desc Check the given src is video + * @param {String} src + * @return {Object} video type + * Ex:{ youtube : ["//www.youtube.com/watch?v=c0asJgSyxcY", "c0asJgSyxcY"] } + */ + Plugin.prototype.isVideo = function(src, index) { + + var html; + if (this.s.dynamic) { + html = this.s.dynamicEl[index].html; + } else { + html = this.$items.eq(index).attr('data-html'); + } + + if (!src) { + if(html) { + return { + html5: true + }; + } else { + console.error('lightGallery :- data-src is not pvovided on slide item ' + (index + 1) + '. Please make sure the selector property is properly configured. More info - http://sachinchoolur.github.io/lightGallery/demos/html-markup.html'); + return false; + } + } + + var youtube = src.match(/\/\/(?:www\.)?youtu(?:\.be|be\.com)\/(?:watch\?v=|embed\/)?([a-z0-9\-\_\%]+)/i); + var vimeo = src.match(/\/\/(?:www\.)?vimeo.com\/([0-9a-z\-_]+)/i); + var dailymotion = src.match(/\/\/(?:www\.)?dai.ly\/([0-9a-z\-_]+)/i); + var vk = src.match(/\/\/(?:www\.)?(?:vk\.com|vkontakte\.ru)\/(?:video_ext\.php\?)(.*)/i); + + if (youtube) { + return { + youtube: youtube + }; + } else if (vimeo) { + return { + vimeo: vimeo + }; + } else if (dailymotion) { + return { + dailymotion: dailymotion + }; + } else if (vk) { + return { + vk: vk + }; + } + }; + + /** + * @desc Create image counter + * Ex: 1/10 + */ + Plugin.prototype.counter = function() { + if (this.s.counter) { + $(this.s.appendCounterTo).append('
' + (parseInt(this.index, 10) + 1) + ' / ' + this.$items.length + '
'); + } + }; + + /** + * @desc add sub-html into the slide + * @param {Number} index - index of the slide + */ + Plugin.prototype.addHtml = function(index) { + var subHtml = null; + var subHtmlUrl; + var $currentEle; + if (this.s.dynamic) { + if (this.s.dynamicEl[index].subHtmlUrl) { + subHtmlUrl = this.s.dynamicEl[index].subHtmlUrl; + } else { + subHtml = this.s.dynamicEl[index].subHtml; + } + } else { + $currentEle = this.$items.eq(index); + if ($currentEle.attr('data-sub-html-url')) { + subHtmlUrl = $currentEle.attr('data-sub-html-url'); + } else { + subHtml = $currentEle.attr('data-sub-html'); + if (this.s.getCaptionFromTitleOrAlt && !subHtml) { + subHtml = $currentEle.attr('title') || $currentEle.find('img').first().attr('alt'); + } + } + } + + if (!subHtmlUrl) { + if (typeof subHtml !== 'undefined' && subHtml !== null) { + + // get first letter of subhtml + // if first letter starts with . or # get the html form the jQuery object + var fL = subHtml.substring(0, 1); + if (fL === '.' || fL === '#') { + if (this.s.subHtmlSelectorRelative && !this.s.dynamic) { + subHtml = $currentEle.find(subHtml).html(); + } else { + subHtml = $(subHtml).html(); + } + } + } else { + subHtml = ''; + } + } + + if (this.s.appendSubHtmlTo === '.lg-sub-html') { + + if (subHtmlUrl) { + this.$outer.find(this.s.appendSubHtmlTo).load(subHtmlUrl); + } else { + this.$outer.find(this.s.appendSubHtmlTo).html(subHtml); + } + + } else { + + if (subHtmlUrl) { + this.$slide.eq(index).load(subHtmlUrl); + } else { + this.$slide.eq(index).append(subHtml); + } + } + + // Add lg-empty-html class if title doesn't exist + if (typeof subHtml !== 'undefined' && subHtml !== null) { + if (subHtml === '') { + this.$outer.find(this.s.appendSubHtmlTo).addClass('lg-empty-html'); + } else { + this.$outer.find(this.s.appendSubHtmlTo).removeClass('lg-empty-html'); + } + } + + this.$el.trigger('onAfterAppendSubHtml.lg', [index]); + }; + + /** + * @desc Preload slides + * @param {Number} index - index of the slide + */ + Plugin.prototype.preload = function(index) { + var i = 1; + var j = 1; + for (i = 1; i <= this.s.preload; i++) { + if (i >= this.$items.length - index) { + break; + } + + this.loadContent(index + i, false, 0); + } + + for (j = 1; j <= this.s.preload; j++) { + if (index - j < 0) { + break; + } + + this.loadContent(index - j, false, 0); + } + }; + + /** + * @desc Load slide content into slide. + * @param {Number} index - index of the slide. + * @param {Boolean} rec - if true call loadcontent() function again. + * @param {Boolean} delay - delay for adding complete class. it is 0 except first time. + */ + Plugin.prototype.loadContent = function(index, rec, delay) { + + var _this = this; + var _hasPoster = false; + var _$img; + var _src; + var _poster; + var _srcset; + var _sizes; + var _html; + var getResponsiveSrc = function(srcItms) { + var rsWidth = []; + var rsSrc = []; + for (var i = 0; i < srcItms.length; i++) { + var __src = srcItms[i].split(' '); + + // Manage empty space + if (__src[0] === '') { + __src.splice(0, 1); + } + + rsSrc.push(__src[0]); + rsWidth.push(__src[1]); + } + + var wWidth = $(window).width(); + for (var j = 0; j < rsWidth.length; j++) { + if (parseInt(rsWidth[j], 10) > wWidth) { + _src = rsSrc[j]; + break; + } + } + }; + + if (_this.s.dynamic) { + + if (_this.s.dynamicEl[index].poster) { + _hasPoster = true; + _poster = _this.s.dynamicEl[index].poster; + } + + _html = _this.s.dynamicEl[index].html; + _src = _this.s.dynamicEl[index].src; + + if (_this.s.dynamicEl[index].responsive) { + var srcDyItms = _this.s.dynamicEl[index].responsive.split(','); + getResponsiveSrc(srcDyItms); + } + + _srcset = _this.s.dynamicEl[index].srcset; + _sizes = _this.s.dynamicEl[index].sizes; + + } else { + + if (_this.$items.eq(index).attr('data-poster')) { + _hasPoster = true; + _poster = _this.$items.eq(index).attr('data-poster'); + } + + _html = _this.$items.eq(index).attr('data-html'); + _src = _this.$items.eq(index).attr('href') || _this.$items.eq(index).attr('data-src'); + + if (_this.$items.eq(index).attr('data-responsive')) { + var srcItms = _this.$items.eq(index).attr('data-responsive').split(','); + getResponsiveSrc(srcItms); + } + + _srcset = _this.$items.eq(index).attr('data-srcset'); + _sizes = _this.$items.eq(index).attr('data-sizes'); + + } + + //if (_src || _srcset || _sizes || _poster) { + + var iframe = false; + if (_this.s.dynamic) { + if (_this.s.dynamicEl[index].iframe) { + iframe = true; + } + } else { + if (_this.$items.eq(index).attr('data-iframe') === 'true') { + iframe = true; + } + } + + var _isVideo = _this.isVideo(_src, index); + if (!_this.$slide.eq(index).hasClass('lg-loaded')) { + if (iframe) { + _this.$slide.eq(index).prepend('
'); + } else if (_hasPoster) { + var videoClass = ''; + if (_isVideo && _isVideo.youtube) { + videoClass = 'lg-has-youtube'; + } else if (_isVideo && _isVideo.vimeo) { + videoClass = 'lg-has-vimeo'; + } else { + videoClass = 'lg-has-html5'; + } + + _this.$slide.eq(index).prepend('
'); + + } else if (_isVideo) { + _this.$slide.eq(index).prepend('
'); + _this.$el.trigger('hasVideo.lg', [index, _src, _html]); + } else { + _this.$slide.eq(index).prepend('
'); + } + + _this.$el.trigger('onAferAppendSlide.lg', [index]); + + _$img = _this.$slide.eq(index).find('.lg-object'); + if (_sizes) { + _$img.attr('sizes', _sizes); + } + + if (_srcset) { + _$img.attr('srcset', _srcset); + try { + picturefill({ + elements: [_$img[0]] + }); + } catch (e) { + console.warn('lightGallery :- If you want srcset to be supported for older browser please include picturefil version 2 javascript library in your document.'); + } + } + + if (this.s.appendSubHtmlTo !== '.lg-sub-html') { + _this.addHtml(index); + } + + _this.$slide.eq(index).addClass('lg-loaded'); + } + + _this.$slide.eq(index).find('.lg-object').on('load.lg error.lg', function() { + + // For first time add some delay for displaying the start animation. + var _speed = 0; + + // Do not change the delay value because it is required for zoom plugin. + // If gallery opened from direct url (hash) speed value should be 0 + if (delay && !$('body').hasClass('lg-from-hash')) { + _speed = delay; + } + + setTimeout(function() { + _this.$slide.eq(index).addClass('lg-complete'); + _this.$el.trigger('onSlideItemLoad.lg', [index, delay || 0]); + }, _speed); + + }); + + // @todo check load state for html5 videos + if (_isVideo && _isVideo.html5 && !_hasPoster) { + _this.$slide.eq(index).addClass('lg-complete'); + } + + if (rec === true) { + if (!_this.$slide.eq(index).hasClass('lg-complete')) { + _this.$slide.eq(index).find('.lg-object').on('load.lg error.lg', function() { + _this.preload(index); + }); + } else { + _this.preload(index); + } + } + + //} + }; + + /** + * @desc slide function for lightgallery + ** Slide() gets call on start + ** ** Set lg.on true once slide() function gets called. + ** Call loadContent() on slide() function inside setTimeout + ** ** On first slide we do not want any animation like slide of fade + ** ** So on first slide( if lg.on if false that is first slide) loadContent() should start loading immediately + ** ** Else loadContent() should wait for the transition to complete. + ** ** So set timeout s.speed + 50 + <=> ** loadContent() will load slide content in to the particular slide + ** ** It has recursion (rec) parameter. if rec === true loadContent() will call preload() function. + ** ** preload will execute only when the previous slide is fully loaded (images iframe) + ** ** avoid simultaneous image load + <=> ** Preload() will check for s.preload value and call loadContent() again accoring to preload value + ** loadContent() <====> Preload(); + + * @param {Number} index - index of the slide + * @param {Boolean} fromTouch - true if slide function called via touch event or mouse drag + * @param {Boolean} fromThumb - true if slide function called via thumbnail click + * @param {String} direction - Direction of the slide(next/prev) + */ + Plugin.prototype.slide = function(index, fromTouch, fromThumb, direction) { + + var _prevIndex = this.$outer.find('.lg-current').index(); + var _this = this; + + // Prevent if multiple call + // Required for hsh plugin + if (_this.lGalleryOn && (_prevIndex === index)) { + return; + } + + var _length = this.$slide.length; + var _time = _this.lGalleryOn ? this.s.speed : 0; + + if (!_this.lgBusy) { + + if (this.s.download) { + var _src; + if (_this.s.dynamic) { + _src = _this.s.dynamicEl[index].downloadUrl !== false && (_this.s.dynamicEl[index].downloadUrl || _this.s.dynamicEl[index].src); + } else { + _src = _this.$items.eq(index).attr('data-download-url') !== 'false' && (_this.$items.eq(index).attr('data-download-url') || _this.$items.eq(index).attr('href') || _this.$items.eq(index).attr('data-src')); + + } + + if (_src) { + $('#lg-download').attr('href', _src); + _this.$outer.removeClass('lg-hide-download'); + } else { + _this.$outer.addClass('lg-hide-download'); + } + } + + this.$el.trigger('onBeforeSlide.lg', [_prevIndex, index, fromTouch, fromThumb]); + + _this.lgBusy = true; + + clearTimeout(_this.hideBartimeout); + + // Add title if this.s.appendSubHtmlTo === lg-sub-html + if (this.s.appendSubHtmlTo === '.lg-sub-html') { + + // wait for slide animation to complete + setTimeout(function() { + _this.addHtml(index); + }, _time); + } + + this.arrowDisable(index); + + if (!direction) { + if (index < _prevIndex) { + direction = 'prev'; + } else if (index > _prevIndex) { + direction = 'next'; + } + } + + if (!fromTouch) { + + // remove all transitions + _this.$outer.addClass('lg-no-trans'); + + this.$slide.removeClass('lg-prev-slide lg-next-slide'); + + if (direction === 'prev') { + + //prevslide + this.$slide.eq(index).addClass('lg-prev-slide'); + this.$slide.eq(_prevIndex).addClass('lg-next-slide'); + } else { + + // next slide + this.$slide.eq(index).addClass('lg-next-slide'); + this.$slide.eq(_prevIndex).addClass('lg-prev-slide'); + } + + // give 50 ms for browser to add/remove class + setTimeout(function() { + _this.$slide.removeClass('lg-current'); + + //_this.$slide.eq(_prevIndex).removeClass('lg-current'); + _this.$slide.eq(index).addClass('lg-current'); + + // reset all transitions + _this.$outer.removeClass('lg-no-trans'); + }, 50); + } else { + + this.$slide.removeClass('lg-prev-slide lg-current lg-next-slide'); + var touchPrev; + var touchNext; + if (_length > 2) { + touchPrev = index - 1; + touchNext = index + 1; + + if ((index === 0) && (_prevIndex === _length - 1)) { + + // next slide + touchNext = 0; + touchPrev = _length - 1; + } else if ((index === _length - 1) && (_prevIndex === 0)) { + + // prev slide + touchNext = 0; + touchPrev = _length - 1; + } + + } else { + touchPrev = 0; + touchNext = 1; + } + + if (direction === 'prev') { + _this.$slide.eq(touchNext).addClass('lg-next-slide'); + } else { + _this.$slide.eq(touchPrev).addClass('lg-prev-slide'); + } + + _this.$slide.eq(index).addClass('lg-current'); + } + + if (_this.lGalleryOn) { + setTimeout(function() { + _this.loadContent(index, true, 0); + }, this.s.speed + 50); + + setTimeout(function() { + _this.lgBusy = false; + _this.$el.trigger('onAfterSlide.lg', [_prevIndex, index, fromTouch, fromThumb]); + }, this.s.speed); + + } else { + _this.loadContent(index, true, _this.s.backdropDuration); + + _this.lgBusy = false; + _this.$el.trigger('onAfterSlide.lg', [_prevIndex, index, fromTouch, fromThumb]); + } + + _this.lGalleryOn = true; + + if (this.s.counter) { + $('#lg-counter-current').text(index + 1); + } + + } + _this.index = index; + + }; + + /** + * @desc Go to next slide + * @param {Boolean} fromTouch - true if slide function called via touch event + */ + Plugin.prototype.goToNextSlide = function(fromTouch) { + var _this = this; + var _loop = _this.s.loop; + if (fromTouch && _this.$slide.length < 3) { + _loop = false; + } + + if (!_this.lgBusy) { + if ((_this.index + 1) < _this.$slide.length) { + _this.index++; + _this.$el.trigger('onBeforeNextSlide.lg', [_this.index]); + _this.slide(_this.index, fromTouch, false, 'next'); + } else { + if (_loop) { + _this.index = 0; + _this.$el.trigger('onBeforeNextSlide.lg', [_this.index]); + _this.slide(_this.index, fromTouch, false, 'next'); + } else if (_this.s.slideEndAnimatoin && !fromTouch) { + _this.$outer.addClass('lg-right-end'); + setTimeout(function() { + _this.$outer.removeClass('lg-right-end'); + }, 400); + } + } + } + }; + + /** + * @desc Go to previous slide + * @param {Boolean} fromTouch - true if slide function called via touch event + */ + Plugin.prototype.goToPrevSlide = function(fromTouch) { + var _this = this; + var _loop = _this.s.loop; + if (fromTouch && _this.$slide.length < 3) { + _loop = false; + } + + if (!_this.lgBusy) { + if (_this.index > 0) { + _this.index--; + _this.$el.trigger('onBeforePrevSlide.lg', [_this.index, fromTouch]); + _this.slide(_this.index, fromTouch, false, 'prev'); + } else { + if (_loop) { + _this.index = _this.$items.length - 1; + _this.$el.trigger('onBeforePrevSlide.lg', [_this.index, fromTouch]); + _this.slide(_this.index, fromTouch, false, 'prev'); + } else if (_this.s.slideEndAnimatoin && !fromTouch) { + _this.$outer.addClass('lg-left-end'); + setTimeout(function() { + _this.$outer.removeClass('lg-left-end'); + }, 400); + } + } + } + }; + + Plugin.prototype.keyPress = function() { + var _this = this; + if (this.$items.length > 1) { + $(window).on('keyup.lg', function(e) { + if (_this.$items.length > 1) { + if (e.keyCode === 37) { + e.preventDefault(); + _this.goToPrevSlide(); + } + + if (e.keyCode === 39) { + e.preventDefault(); + _this.goToNextSlide(); + } + } + }); + } + + $(window).on('keydown.lg', function(e) { + if (_this.s.escKey === true && e.keyCode === 27) { + e.preventDefault(); + if (!_this.$outer.hasClass('lg-thumb-open')) { + _this.destroy(); + } else { + _this.$outer.removeClass('lg-thumb-open'); + } + } + }); + }; + + Plugin.prototype.arrow = function() { + var _this = this; + this.$outer.find('.lg-prev').on('click.lg', function() { + _this.goToPrevSlide(); + }); + + this.$outer.find('.lg-next').on('click.lg', function() { + _this.goToNextSlide(); + }); + }; + + Plugin.prototype.arrowDisable = function(index) { + + // Disable arrows if s.hideControlOnEnd is true + if (!this.s.loop && this.s.hideControlOnEnd) { + if ((index + 1) < this.$slide.length) { + this.$outer.find('.lg-next').removeAttr('disabled').removeClass('disabled'); + } else { + this.$outer.find('.lg-next').attr('disabled', 'disabled').addClass('disabled'); + } + + if (index > 0) { + this.$outer.find('.lg-prev').removeAttr('disabled').removeClass('disabled'); + } else { + this.$outer.find('.lg-prev').attr('disabled', 'disabled').addClass('disabled'); + } + } + }; + + Plugin.prototype.setTranslate = function($el, xValue, yValue) { + // jQuery supports Automatic CSS prefixing since jQuery 1.8.0 + if (this.s.useLeft) { + $el.css('left', xValue); + } else { + $el.css({ + transform: 'translate3d(' + (xValue) + 'px, ' + yValue + 'px, 0px)' + }); + } + }; + + Plugin.prototype.touchMove = function(startCoords, endCoords) { + + var distance = endCoords - startCoords; + + if (Math.abs(distance) > 15) { + // reset opacity and transition duration + this.$outer.addClass('lg-dragging'); + + // move current slide + this.setTranslate(this.$slide.eq(this.index), distance, 0); + + // move next and prev slide with current slide + this.setTranslate($('.lg-prev-slide'), -this.$slide.eq(this.index).width() + distance, 0); + this.setTranslate($('.lg-next-slide'), this.$slide.eq(this.index).width() + distance, 0); + } + }; + + Plugin.prototype.touchEnd = function(distance) { + var _this = this; + + // keep slide animation for any mode while dragg/swipe + if (_this.s.mode !== 'lg-slide') { + _this.$outer.addClass('lg-slide'); + } + + this.$slide.not('.lg-current, .lg-prev-slide, .lg-next-slide').css('opacity', '0'); + + // set transition duration + setTimeout(function() { + _this.$outer.removeClass('lg-dragging'); + if ((distance < 0) && (Math.abs(distance) > _this.s.swipeThreshold)) { + _this.goToNextSlide(true); + } else if ((distance > 0) && (Math.abs(distance) > _this.s.swipeThreshold)) { + _this.goToPrevSlide(true); + } else if (Math.abs(distance) < 5) { + + // Trigger click if distance is less than 5 pix + _this.$el.trigger('onSlideClick.lg'); + } + + _this.$slide.removeAttr('style'); + }); + + // remove slide class once drag/swipe is completed if mode is not slide + setTimeout(function() { + if (!_this.$outer.hasClass('lg-dragging') && _this.s.mode !== 'lg-slide') { + _this.$outer.removeClass('lg-slide'); + } + }, _this.s.speed + 100); + + }; + + Plugin.prototype.enableSwipe = function() { + var _this = this; + var startCoords = 0; + var endCoords = 0; + var isMoved = false; + + if (_this.s.enableSwipe && _this.doCss()) { + + _this.$slide.on('touchstart.lg', function(e) { + if (!_this.$outer.hasClass('lg-zoomed') && !_this.lgBusy) { + e.preventDefault(); + _this.manageSwipeClass(); + startCoords = e.originalEvent.targetTouches[0].pageX; + } + }); + + _this.$slide.on('touchmove.lg', function(e) { + if (!_this.$outer.hasClass('lg-zoomed')) { + e.preventDefault(); + endCoords = e.originalEvent.targetTouches[0].pageX; + _this.touchMove(startCoords, endCoords); + isMoved = true; + } + }); + + _this.$slide.on('touchend.lg', function() { + if (!_this.$outer.hasClass('lg-zoomed')) { + if (isMoved) { + isMoved = false; + _this.touchEnd(endCoords - startCoords); + } else { + _this.$el.trigger('onSlideClick.lg'); + } + } + }); + } + + }; + + Plugin.prototype.enableDrag = function() { + var _this = this; + var startCoords = 0; + var endCoords = 0; + var isDraging = false; + var isMoved = false; + if (_this.s.enableDrag && _this.doCss()) { + _this.$slide.on('mousedown.lg', function(e) { + // execute only on .lg-object + if (!_this.$outer.hasClass('lg-zoomed')) { + if ($(e.target).hasClass('lg-object') || $(e.target).hasClass('lg-video-play')) { + e.preventDefault(); + + if (!_this.lgBusy) { + _this.manageSwipeClass(); + startCoords = e.pageX; + isDraging = true; + + // ** Fix for webkit cursor issue https://code.google.com/p/chromium/issues/detail?id=26723 + _this.$outer.scrollLeft += 1; + _this.$outer.scrollLeft -= 1; + + // * + + _this.$outer.removeClass('lg-grab').addClass('lg-grabbing'); + + _this.$el.trigger('onDragstart.lg'); + } + + } + } + }); + + $(window).on('mousemove.lg', function(e) { + if (isDraging) { + isMoved = true; + endCoords = e.pageX; + _this.touchMove(startCoords, endCoords); + _this.$el.trigger('onDragmove.lg'); + } + }); + + $(window).on('mouseup.lg', function(e) { + if (isMoved) { + isMoved = false; + _this.touchEnd(endCoords - startCoords); + _this.$el.trigger('onDragend.lg'); + } else if ($(e.target).hasClass('lg-object') || $(e.target).hasClass('lg-video-play')) { + _this.$el.trigger('onSlideClick.lg'); + } + + // Prevent execution on click + if (isDraging) { + isDraging = false; + _this.$outer.removeClass('lg-grabbing').addClass('lg-grab'); + } + }); + + } + }; + + Plugin.prototype.manageSwipeClass = function() { + var _touchNext = this.index + 1; + var _touchPrev = this.index - 1; + if (this.s.loop && this.$slide.length > 2) { + if (this.index === 0) { + _touchPrev = this.$slide.length - 1; + } else if (this.index === this.$slide.length - 1) { + _touchNext = 0; + } + } + + this.$slide.removeClass('lg-next-slide lg-prev-slide'); + if (_touchPrev > -1) { + this.$slide.eq(_touchPrev).addClass('lg-prev-slide'); + } + + this.$slide.eq(_touchNext).addClass('lg-next-slide'); + }; + + Plugin.prototype.mousewheel = function() { + var _this = this; + _this.$outer.on('mousewheel.lg', function(e) { + + if (!e.deltaY) { + return; + } + + if (e.deltaY > 0) { + _this.goToPrevSlide(); + } else { + _this.goToNextSlide(); + } + + e.preventDefault(); + }); + + }; + + Plugin.prototype.closeGallery = function() { + + var _this = this; + var mousedown = false; + this.$outer.find('.lg-close').on('click.lg', function() { + _this.destroy(); + }); + + if (_this.s.closable) { + + // If you drag the slide and release outside gallery gets close on chrome + // for preventing this check mousedown and mouseup happened on .lg-item or lg-outer + _this.$outer.on('mousedown.lg', function(e) { + + if ($(e.target).is('.lg-outer') || $(e.target).is('.lg-item ') || $(e.target).is('.lg-img-wrap')) { + mousedown = true; + } else { + mousedown = false; + } + + }); + + _this.$outer.on('mouseup.lg', function(e) { + + if ($(e.target).is('.lg-outer') || $(e.target).is('.lg-item ') || $(e.target).is('.lg-img-wrap') && mousedown) { + if (!_this.$outer.hasClass('lg-dragging')) { + _this.destroy(); + } + } + + }); + + } + + }; + + Plugin.prototype.destroy = function(d) { + + var _this = this; + + if (!d) { + _this.$el.trigger('onBeforeClose.lg'); + $(window).scrollTop(_this.prevScrollTop); + } + + + /** + * if d is false or undefined destroy will only close the gallery + * plugins instance remains with the element + * + * if d is true destroy will completely remove the plugin + */ + + if (d) { + if (!_this.s.dynamic) { + // only when not using dynamic mode is $items a jquery collection + this.$items.off('click.lg click.lgcustom'); + } + + $.removeData(_this.el, 'lightGallery'); + } + + // Unbind all events added by lightGallery + this.$el.off('.lg.tm'); + + // Distroy all lightGallery modules + $.each($.fn.lightGallery.modules, function(key) { + if (_this.modules[key]) { + _this.modules[key].destroy(); + } + }); + + this.lGalleryOn = false; + + clearTimeout(_this.hideBartimeout); + this.hideBartimeout = false; + $(window).off('.lg'); + $('body').removeClass('lg-on lg-from-hash'); + + if (_this.$outer) { + _this.$outer.removeClass('lg-visible'); + } + + $('.lg-backdrop').removeClass('in'); + + setTimeout(function() { + if (_this.$outer) { + _this.$outer.remove(); + } + + $('.lg-backdrop').remove(); + + if (!d) { + _this.$el.trigger('onCloseAfter.lg'); + } + + }, _this.s.backdropDuration + 50); + }; + + $.fn.lightGallery = function(options) { + return this.each(function() { + if (!$.data(this, 'lightGallery')) { + $.data(this, 'lightGallery', new Plugin(this, options)); + } else { + try { + $(this).data('lightGallery').init(); + } catch (err) { + console.error('lightGallery has not initiated properly'); + } + } + }); + }; + + $.fn.lightGallery.modules = {}; + + })(); + + + /** ! lg-thumbnail - v1.1.0 - 2017-08-08 + * http://sachinchoolur.github.io/lightGallery + * Copyright (c) 2017 Sachin N; Licensed GPLv3 + */ + + (function() { + + 'use strict'; + + var defaults = { + thumbnail: true, + + animateThumb: true, + currentPagerPosition: 'middle', + + thumbWidth: 100, + thumbHeight: '80px', + thumbContHeight: 100, + thumbMargin: 5, + + exThumbImage: false, + showThumbByDefault: true, + toogleThumb: true, + pullCaptionUp: true, + + enableThumbDrag: true, + enableThumbSwipe: true, + swipeThreshold: 50, + + loadYoutubeThumbnail: true, + youtubeThumbSize: 1, + + loadVimeoThumbnail: true, + vimeoThumbSize: 'thumbnail_small', + + loadDailymotionThumbnail: true + }; + + var Thumbnail = function(element) { + + // get lightGallery core plugin data + this.core = $(element).data('lightGallery'); + + // extend module default settings with lightGallery core settings + this.core.s = $.extend({}, defaults, this.core.s); + + this.$el = $(element); + this.$thumbOuter = null; + this.thumbOuterWidth = 0; + this.thumbTotalWidth = (this.core.$items.length * (this.core.s.thumbWidth + this.core.s.thumbMargin)); + this.thumbIndex = this.core.index; + + if (this.core.s.animateThumb) { + this.core.s.thumbHeight = '100%'; + } + + // Thumbnail animation value + this.left = 0; + + this.init(); + + return this; + }; + + Thumbnail.prototype.init = function() { + var _this = this; + if (this.core.s.thumbnail && this.core.$items.length > 1) { + if (this.core.s.showThumbByDefault) { + setTimeout(function(){ + _this.core.$outer.addClass('lg-thumb-open'); + }, 700); + } + + if (this.core.s.pullCaptionUp) { + this.core.$outer.addClass('lg-pull-caption-up'); + } + + this.build(); + if (this.core.s.animateThumb && this.core.doCss()) { + if (this.core.s.enableThumbDrag) { + this.enableThumbDrag(); + } + + if (this.core.s.enableThumbSwipe) { + this.enableThumbSwipe(); + } + + this.thumbClickable = false; + } else { + this.thumbClickable = true; + } + + this.toogle(); + this.thumbkeyPress(); + } + }; + + Thumbnail.prototype.build = function() { + var _this = this; + var thumbList = ''; + var vimeoErrorThumbSize = ''; + var $thumb; + var html = '
' + + '
' + + '
' + + '
'; + + switch (this.core.s.vimeoThumbSize) { + case 'thumbnail_large': + vimeoErrorThumbSize = '640'; + break; + case 'thumbnail_medium': + vimeoErrorThumbSize = '200x150'; + break; + case 'thumbnail_small': + vimeoErrorThumbSize = '100x75'; + } + + _this.core.$outer.addClass('lg-has-thumb'); + + _this.core.$outer.find('.lg').append(html); + + _this.$thumbOuter = _this.core.$outer.find('.lg-thumb-outer'); + _this.thumbOuterWidth = _this.$thumbOuter.width(); + + if (_this.core.s.animateThumb) { + _this.core.$outer.find('.lg-thumb').css({ + width: _this.thumbTotalWidth + 'px', + position: 'relative' + }); + } + + if (this.core.s.animateThumb) { + _this.$thumbOuter.css('height', _this.core.s.thumbContHeight + 'px'); + } + + function getThumb(src, thumb, index) { + var isVideo = _this.core.isVideo(src, index) || {}; + var thumbImg; + var vimeoId = ''; + + if (isVideo.youtube || isVideo.vimeo || isVideo.dailymotion) { + if (isVideo.youtube) { + if (_this.core.s.loadYoutubeThumbnail) { + thumbImg = '//img.youtube.com/vi/' + isVideo.youtube[1] + '/' + _this.core.s.youtubeThumbSize + '.jpg'; + } else { + thumbImg = thumb; + } + } else if (isVideo.vimeo) { + if (_this.core.s.loadVimeoThumbnail) { + thumbImg = '//i.vimeocdn.com/video/error_' + vimeoErrorThumbSize + '.jpg'; + vimeoId = isVideo.vimeo[1]; + } else { + thumbImg = thumb; + } + } else if (isVideo.dailymotion) { + if (_this.core.s.loadDailymotionThumbnail) { + thumbImg = '//www.dailymotion.com/thumbnail/video/' + isVideo.dailymotion[1]; + } else { + thumbImg = thumb; + } + } + } else { + thumbImg = thumb; + } + + thumbList += '
'; + vimeoId = ''; + } + + if (_this.core.s.dynamic) { + for (var i = 0; i < _this.core.s.dynamicEl.length; i++) { + getThumb(_this.core.s.dynamicEl[i].src, _this.core.s.dynamicEl[i].thumb, i); + } + } else { + _this.core.$items.each(function(i) { + + if (!_this.core.s.exThumbImage) { + getThumb($(this).attr('href') || $(this).attr('data-src'), $(this).find('img').attr('data-src') || $(this).find('img').attr('src'), i); + } else { + getThumb($(this).attr('href') || $(this).attr('data-src'), $(this).attr(_this.core.s.exThumbImage), i); + } + + }); + } + + _this.core.$outer.find('.lg-thumb').html(thumbList); + + $thumb = _this.core.$outer.find('.lg-thumb-item'); + + // Load vimeo thumbnails + $thumb.each(function() { + var $this = $(this); + var vimeoVideoId = $this.attr('data-vimeo-id'); + + if (vimeoVideoId) { + $.getJSON('//www.vimeo.com/api/v2/video/' + vimeoVideoId + '.json?callback=?', { + format: 'json' + }, function(data) { + $this.find('img').attr('src', data[0][_this.core.s.vimeoThumbSize]); + }); + } + }); + + // manage active class for thumbnail + $thumb.eq(_this.core.index).addClass('active'); + _this.core.$el.on('onBeforeSlide.lg.tm', function() { + $thumb.removeClass('active'); + $thumb.eq(_this.core.index).addClass('active'); + }); + + $thumb.on('click.lg touchend.lg', function() { + var _$this = $(this); + setTimeout(function() { + + // In IE9 and bellow touch does not support + // Go to slide if browser does not support css transitions + if ((_this.thumbClickable && !_this.core.lgBusy) || !_this.core.doCss()) { + _this.core.index = _$this.index(); + _this.core.slide(_this.core.index, false, true, false); + } + }, 50); + }); + + _this.core.$el.on('onBeforeSlide.lg.tm', function() { + _this.animateThumb(_this.core.index); + }); + + $(window).on('resize.lg.thumb orientationchange.lg.thumb', function() { + setTimeout(function() { + _this.animateThumb(_this.core.index); + _this.thumbOuterWidth = _this.$thumbOuter.width(); + }, 200); + }); + + }; + + Thumbnail.prototype.setTranslate = function(value) { + // jQuery supports Automatic CSS prefixing since jQuery 1.8.0 + this.core.$outer.find('.lg-thumb').css({ + transform: 'translate3d(-' + (value) + 'px, 0px, 0px)' + }); + }; + + Thumbnail.prototype.animateThumb = function(index) { + var $thumb = this.core.$outer.find('.lg-thumb'); + if (this.core.s.animateThumb) { + var position; + switch (this.core.s.currentPagerPosition) { + case 'left': + position = 0; + break; + case 'middle': + position = (this.thumbOuterWidth / 2) - (this.core.s.thumbWidth / 2); + break; + case 'right': + position = this.thumbOuterWidth - this.core.s.thumbWidth; + } + this.left = ((this.core.s.thumbWidth + this.core.s.thumbMargin) * index - 1) - position; + if (this.left > (this.thumbTotalWidth - this.thumbOuterWidth)) { + this.left = this.thumbTotalWidth - this.thumbOuterWidth; + } + + if (this.left < 0) { + this.left = 0; + } + + if (this.core.lGalleryOn) { + if (!$thumb.hasClass('on')) { + this.core.$outer.find('.lg-thumb').css('transition-duration', this.core.s.speed + 'ms'); + } + + if (!this.core.doCss()) { + $thumb.animate({ + left: -this.left + 'px' + }, this.core.s.speed); + } + } else { + if (!this.core.doCss()) { + $thumb.css('left', -this.left + 'px'); + } + } + + this.setTranslate(this.left); + + } + }; + + // Enable thumbnail dragging and swiping + Thumbnail.prototype.enableThumbDrag = function() { + + var _this = this; + var startCoords = 0; + var endCoords = 0; + var isDraging = false; + var isMoved = false; + var tempLeft = 0; + + _this.$thumbOuter.addClass('lg-grab'); + + _this.core.$outer.find('.lg-thumb').on('mousedown.lg.thumb', function(e) { + if (_this.thumbTotalWidth > _this.thumbOuterWidth) { + // execute only on .lg-object + e.preventDefault(); + startCoords = e.pageX; + isDraging = true; + + // ** Fix for webkit cursor issue https://code.google.com/p/chromium/issues/detail?id=26723 + _this.core.$outer.scrollLeft += 1; + _this.core.$outer.scrollLeft -= 1; + + // * + _this.thumbClickable = false; + _this.$thumbOuter.removeClass('lg-grab').addClass('lg-grabbing'); + } + }); + + $(window).on('mousemove.lg.thumb', function(e) { + if (isDraging) { + tempLeft = _this.left; + isMoved = true; + endCoords = e.pageX; + + _this.$thumbOuter.addClass('lg-dragging'); + + tempLeft = tempLeft - (endCoords - startCoords); + + if (tempLeft > (_this.thumbTotalWidth - _this.thumbOuterWidth)) { + tempLeft = _this.thumbTotalWidth - _this.thumbOuterWidth; + } + + if (tempLeft < 0) { + tempLeft = 0; + } + + // move current slide + _this.setTranslate(tempLeft); + + } + }); + + $(window).on('mouseup.lg.thumb', function() { + if (isMoved) { + isMoved = false; + _this.$thumbOuter.removeClass('lg-dragging'); + + _this.left = tempLeft; + + if (Math.abs(endCoords - startCoords) < _this.core.s.swipeThreshold) { + _this.thumbClickable = true; + } + + } else { + _this.thumbClickable = true; + } + + if (isDraging) { + isDraging = false; + _this.$thumbOuter.removeClass('lg-grabbing').addClass('lg-grab'); + } + }); + + }; + + Thumbnail.prototype.enableThumbSwipe = function() { + var _this = this; + var startCoords = 0; + var endCoords = 0; + var isMoved = false; + var tempLeft = 0; + + _this.core.$outer.find('.lg-thumb').on('touchstart.lg', function(e) { + if (_this.thumbTotalWidth > _this.thumbOuterWidth) { + e.preventDefault(); + startCoords = e.originalEvent.targetTouches[0].pageX; + _this.thumbClickable = false; + } + }); + + _this.core.$outer.find('.lg-thumb').on('touchmove.lg', function(e) { + if (_this.thumbTotalWidth > _this.thumbOuterWidth) { + e.preventDefault(); + endCoords = e.originalEvent.targetTouches[0].pageX; + isMoved = true; + + _this.$thumbOuter.addClass('lg-dragging'); + + tempLeft = _this.left; + + tempLeft = tempLeft - (endCoords - startCoords); + + if (tempLeft > (_this.thumbTotalWidth - _this.thumbOuterWidth)) { + tempLeft = _this.thumbTotalWidth - _this.thumbOuterWidth; + } + + if (tempLeft < 0) { + tempLeft = 0; + } + + // move current slide + _this.setTranslate(tempLeft); + + } + }); + + _this.core.$outer.find('.lg-thumb').on('touchend.lg', function() { + if (_this.thumbTotalWidth > _this.thumbOuterWidth) { + + if (isMoved) { + isMoved = false; + _this.$thumbOuter.removeClass('lg-dragging'); + if (Math.abs(endCoords - startCoords) < _this.core.s.swipeThreshold) { + _this.thumbClickable = true; + } + + _this.left = tempLeft; + } else { + _this.thumbClickable = true; + } + } else { + _this.thumbClickable = true; + } + }); + + }; + + Thumbnail.prototype.toogle = function() { + var _this = this; + if (_this.core.s.toogleThumb) { + _this.core.$outer.addClass('lg-can-toggle'); + _this.$thumbOuter.append(''); + _this.core.$outer.find('.lg-toogle-thumb').on('click.lg', function() { + _this.core.$outer.toggleClass('lg-thumb-open'); + }); + } + }; + + Thumbnail.prototype.thumbkeyPress = function() { + var _this = this; + $(window).on('keydown.lg.thumb', function(e) { + if (e.keyCode === 38) { + e.preventDefault(); + _this.core.$outer.addClass('lg-thumb-open'); + } else if (e.keyCode === 40) { + e.preventDefault(); + _this.core.$outer.removeClass('lg-thumb-open'); + } + }); + }; + + Thumbnail.prototype.destroy = function() { + if (this.core.s.thumbnail && this.core.$items.length > 1) { + $(window).off('resize.lg.thumb orientationchange.lg.thumb keydown.lg.thumb'); + this.$thumbOuter.remove(); + this.core.$outer.removeClass('lg-has-thumb'); + } + }; + + $.fn.lightGallery.modules.Thumbnail = Thumbnail; + + })(); + + //return module.exports = lib; +}); diff --git a/assets/mask/mask.js b/assets/mask/mask.js index 5edf592..bf1d765 100644 --- a/assets/mask/mask.js +++ b/assets/mask/mask.js @@ -1,6 +1,6 @@ kit.PluginManager.register('mask', function(module, exports, require){ - var $ = require('jquery'); + var $ = require('jQuery'); var ua = navigator.userAgent, iPhone = /iphone/i.test(ua), diff --git a/assets/toolkit/toolkit.js b/assets/toolkit/toolkit.js index 2f1e18e..b702c19 100644 --- a/assets/toolkit/toolkit.js +++ b/assets/toolkit/toolkit.js @@ -1,6 +1,6 @@ kit.PluginManager.register('toolkit', function(module, exports, require, global) { - var $ = require('jquery'); + var $ = require('jQuery'); var __Helper = function () {