|
@@ -0,0 +1,638 @@
|
|
|
+/*! Lity - v2.4.0 - 2019-08-10
|
|
|
+* http://sorgalla.com/lity/
|
|
|
+* Copyright (c) 2015-2019 Jan Sorgalla; Licensed MIT */
|
|
|
+(function(window, factory) {
|
|
|
+ if (typeof define === 'function' && define.amd) {
|
|
|
+ define(['jquery'], function($) {
|
|
|
+ return factory(window, $);
|
|
|
+ });
|
|
|
+ } else if (typeof module === 'object' && typeof module.exports === 'object') {
|
|
|
+ module.exports = factory(window, require('jquery'));
|
|
|
+ } else {
|
|
|
+ window.lity = factory(window, window.jQuery || window.Zepto);
|
|
|
+ }
|
|
|
+}(typeof window !== "undefined" ? window : this, function(window, $) {
|
|
|
+ 'use strict';
|
|
|
+
|
|
|
+ var document = window.document;
|
|
|
+
|
|
|
+ var _win = $(window);
|
|
|
+ var _deferred = $.Deferred;
|
|
|
+ var _html = $('html');
|
|
|
+ var _instances = [];
|
|
|
+
|
|
|
+ var _attrAriaHidden = 'aria-hidden';
|
|
|
+ var _dataAriaHidden = 'lity-' + _attrAriaHidden;
|
|
|
+
|
|
|
+ var _focusableElementsSelector = 'a[href],area[href],input:not([disabled]),select:not([disabled]),textarea:not([disabled]),button:not([disabled]),iframe,object,embed,[contenteditable],[tabindex]:not([tabindex^="-"])';
|
|
|
+
|
|
|
+ var _defaultOptions = {
|
|
|
+ esc: true,
|
|
|
+ handler: null,
|
|
|
+ handlers: {
|
|
|
+ image: imageHandler,
|
|
|
+ inline: inlineHandler,
|
|
|
+ youtube: youtubeHandler,
|
|
|
+ vimeo: vimeoHandler,
|
|
|
+ googlemaps: googlemapsHandler,
|
|
|
+ facebookvideo: facebookvideoHandler,
|
|
|
+ iframe: iframeHandler
|
|
|
+ },
|
|
|
+ template: '<div class="lity" role="dialog" aria-label="Dialog Window (Press escape to close)" tabindex="-1"><div class="lity-wrap" data-lity-close role="document"><div class="lity-loader" aria-hidden="true">Loading...</div><div class="lity-container"><div class="lity-content"></div><button class="lity-close" type="button" aria-label="Close (Press escape to close)" data-lity-close>×</button></div></div></div>'
|
|
|
+ };
|
|
|
+
|
|
|
+ var _imageRegexp = /(^data:image\/)|(\.(png|jpe?g|gif|svg|webp|bmp|ico|tiff?)(\?\S*)?$)/i;
|
|
|
+ var _youtubeRegex = /(youtube(-nocookie)?\.com|youtu\.be)\/(watch\?v=|v\/|u\/|embed\/?)?([\w-]{11})(.*)?/i;
|
|
|
+ var _vimeoRegex = /(vimeo(pro)?.com)\/(?:[^\d]+)?(\d+)\??(.*)?$/;
|
|
|
+ var _googlemapsRegex = /((maps|www)\.)?google\.([^\/\?]+)\/?((maps\/?)?\?)(.*)/i;
|
|
|
+ var _facebookvideoRegex = /(facebook\.com)\/([a-z0-9_-]*)\/videos\/([0-9]*)(.*)?$/i;
|
|
|
+
|
|
|
+ var _transitionEndEvent = (function() {
|
|
|
+ var el = document.createElement('div');
|
|
|
+
|
|
|
+ var transEndEventNames = {
|
|
|
+ WebkitTransition: 'webkitTransitionEnd',
|
|
|
+ MozTransition: 'transitionend',
|
|
|
+ OTransition: 'oTransitionEnd otransitionend',
|
|
|
+ transition: 'transitionend'
|
|
|
+ };
|
|
|
+
|
|
|
+ for (var name in transEndEventNames) {
|
|
|
+ if (el.style[name] !== undefined) {
|
|
|
+ return transEndEventNames[name];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return false;
|
|
|
+ })();
|
|
|
+
|
|
|
+ function transitionEnd(element) {
|
|
|
+ var deferred = _deferred();
|
|
|
+
|
|
|
+ if (!_transitionEndEvent || !element.length) {
|
|
|
+ deferred.resolve();
|
|
|
+ } else {
|
|
|
+ element.one(_transitionEndEvent, deferred.resolve);
|
|
|
+ setTimeout(deferred.resolve, 500);
|
|
|
+ }
|
|
|
+
|
|
|
+ return deferred.promise();
|
|
|
+ }
|
|
|
+
|
|
|
+ function settings(currSettings, key, value) {
|
|
|
+ if (arguments.length === 1) {
|
|
|
+ return $.extend({}, currSettings);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (typeof key === 'string') {
|
|
|
+ if (typeof value === 'undefined') {
|
|
|
+ return typeof currSettings[key] === 'undefined'
|
|
|
+ ? null
|
|
|
+ : currSettings[key];
|
|
|
+ }
|
|
|
+
|
|
|
+ currSettings[key] = value;
|
|
|
+ } else {
|
|
|
+ $.extend(currSettings, key);
|
|
|
+ }
|
|
|
+
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ function parseQueryParams(params) {
|
|
|
+ var pairs = decodeURI(params.split('#')[0]).split('&');
|
|
|
+ var obj = {}, p;
|
|
|
+
|
|
|
+ for (var i = 0, n = pairs.length; i < n; i++) {
|
|
|
+ if (!pairs[i]) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ p = pairs[i].split('=');
|
|
|
+ obj[p[0]] = p[1];
|
|
|
+ }
|
|
|
+
|
|
|
+ return obj;
|
|
|
+ }
|
|
|
+
|
|
|
+ function appendQueryParams(url, params) {
|
|
|
+ return url + (url.indexOf('?') > -1 ? '&' : '?') + $.param(params);
|
|
|
+ }
|
|
|
+
|
|
|
+ function transferHash(originalUrl, newUrl) {
|
|
|
+ var pos = originalUrl.indexOf('#');
|
|
|
+
|
|
|
+ if (-1 === pos) {
|
|
|
+ return newUrl;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (pos > 0) {
|
|
|
+ originalUrl = originalUrl.substr(pos);
|
|
|
+ }
|
|
|
+
|
|
|
+ return newUrl + originalUrl;
|
|
|
+ }
|
|
|
+
|
|
|
+ function error(msg) {
|
|
|
+ return $('<span class="lity-error"/>').append(msg);
|
|
|
+ }
|
|
|
+
|
|
|
+ function imageHandler(target, instance) {
|
|
|
+ var desc = (instance.opener() && instance.opener().data('lity-desc')) || 'Image with no description';
|
|
|
+ var img = $('<img src="' + target + '" alt="' + desc + '"/>');
|
|
|
+ var deferred = _deferred();
|
|
|
+ var failed = function() {
|
|
|
+ deferred.reject(error('Failed loading image'));
|
|
|
+ };
|
|
|
+
|
|
|
+ img
|
|
|
+ .on('load', function() {
|
|
|
+ if (this.naturalWidth === 0) {
|
|
|
+ return failed();
|
|
|
+ }
|
|
|
+
|
|
|
+ deferred.resolve(img);
|
|
|
+ })
|
|
|
+ .on('error', failed)
|
|
|
+ ;
|
|
|
+
|
|
|
+ return deferred.promise();
|
|
|
+ }
|
|
|
+
|
|
|
+ imageHandler.test = function(target) {
|
|
|
+ return _imageRegexp.test(target);
|
|
|
+ };
|
|
|
+
|
|
|
+ function inlineHandler(target, instance) {
|
|
|
+ var el, placeholder, hasHideClass;
|
|
|
+
|
|
|
+ try {
|
|
|
+ el = $(target);
|
|
|
+ } catch (e) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!el.length) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ placeholder = $('<i style="display:none !important"/>');
|
|
|
+ hasHideClass = el.hasClass('lity-hide');
|
|
|
+
|
|
|
+ instance
|
|
|
+ .element()
|
|
|
+ .one('lity:remove', function() {
|
|
|
+ placeholder
|
|
|
+ .before(el)
|
|
|
+ .remove()
|
|
|
+ ;
|
|
|
+
|
|
|
+ if (hasHideClass && !el.closest('.lity-content').length) {
|
|
|
+ el.addClass('lity-hide');
|
|
|
+ }
|
|
|
+ })
|
|
|
+ ;
|
|
|
+
|
|
|
+ return el
|
|
|
+ .removeClass('lity-hide')
|
|
|
+ .after(placeholder)
|
|
|
+ ;
|
|
|
+ }
|
|
|
+
|
|
|
+ function youtubeHandler(target) {
|
|
|
+ var matches = _youtubeRegex.exec(target);
|
|
|
+
|
|
|
+ if (!matches) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ return iframeHandler(
|
|
|
+ transferHash(
|
|
|
+ target,
|
|
|
+ appendQueryParams(
|
|
|
+ 'https://www.youtube' + (matches[2] || '') + '.com/embed/' + matches[4],
|
|
|
+ $.extend(
|
|
|
+ {
|
|
|
+ autoplay: 1
|
|
|
+ },
|
|
|
+ parseQueryParams(matches[5] || '')
|
|
|
+ )
|
|
|
+ )
|
|
|
+ )
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ function vimeoHandler(target) {
|
|
|
+ var matches = _vimeoRegex.exec(target);
|
|
|
+
|
|
|
+ if (!matches) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ return iframeHandler(
|
|
|
+ transferHash(
|
|
|
+ target,
|
|
|
+ appendQueryParams(
|
|
|
+ 'https://player.vimeo.com/video/' + matches[3],
|
|
|
+ $.extend(
|
|
|
+ {
|
|
|
+ autoplay: 1
|
|
|
+ },
|
|
|
+ parseQueryParams(matches[4] || '')
|
|
|
+ )
|
|
|
+ )
|
|
|
+ )
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ function facebookvideoHandler(target) {
|
|
|
+ var matches = _facebookvideoRegex.exec(target);
|
|
|
+
|
|
|
+ if (!matches) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (0 !== target.indexOf('http')) {
|
|
|
+ target = 'https:' + target;
|
|
|
+ }
|
|
|
+
|
|
|
+ return iframeHandler(
|
|
|
+ transferHash(
|
|
|
+ target,
|
|
|
+ appendQueryParams(
|
|
|
+ 'https://www.facebook.com/plugins/video.php?href=' + target,
|
|
|
+ $.extend(
|
|
|
+ {
|
|
|
+ autoplay: 1
|
|
|
+ },
|
|
|
+ parseQueryParams(matches[4] || '')
|
|
|
+ )
|
|
|
+ )
|
|
|
+ )
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ function googlemapsHandler(target) {
|
|
|
+ var matches = _googlemapsRegex.exec(target);
|
|
|
+
|
|
|
+ if (!matches) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ return iframeHandler(
|
|
|
+ transferHash(
|
|
|
+ target,
|
|
|
+ appendQueryParams(
|
|
|
+ 'https://www.google.' + matches[3] + '/maps?' + matches[6],
|
|
|
+ {
|
|
|
+ output: matches[6].indexOf('layer=c') > 0 ? 'svembed' : 'embed'
|
|
|
+ }
|
|
|
+ )
|
|
|
+ )
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ function iframeHandler(target) {
|
|
|
+ return '<div class="lity-iframe-container"><iframe frameborder="0" allowfullscreen allow="autoplay; fullscreen" src="' + target + '"/></div>';
|
|
|
+ }
|
|
|
+
|
|
|
+ function winHeight() {
|
|
|
+ return document.documentElement.clientHeight
|
|
|
+ ? document.documentElement.clientHeight
|
|
|
+ : Math.round(_win.height());
|
|
|
+ }
|
|
|
+
|
|
|
+ function keydown(e) {
|
|
|
+ var current = currentInstance();
|
|
|
+
|
|
|
+ if (!current) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // ESC key
|
|
|
+ if (e.keyCode === 27 && !!current.options('esc')) {
|
|
|
+ current.close();
|
|
|
+ }
|
|
|
+
|
|
|
+ // TAB key
|
|
|
+ if (e.keyCode === 9) {
|
|
|
+ handleTabKey(e, current);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ function handleTabKey(e, instance) {
|
|
|
+ var focusableElements = instance.element().find(_focusableElementsSelector);
|
|
|
+ var focusedIndex = focusableElements.index(document.activeElement);
|
|
|
+
|
|
|
+ if (e.shiftKey && focusedIndex <= 0) {
|
|
|
+ focusableElements.get(focusableElements.length - 1).focus();
|
|
|
+ e.preventDefault();
|
|
|
+ } else if (!e.shiftKey && focusedIndex === focusableElements.length - 1) {
|
|
|
+ focusableElements.get(0).focus();
|
|
|
+ e.preventDefault();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ function resize() {
|
|
|
+ $.each(_instances, function(i, instance) {
|
|
|
+ instance.resize();
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ function registerInstance(instanceToRegister) {
|
|
|
+ if (1 === _instances.unshift(instanceToRegister)) {
|
|
|
+ _html.addClass('lity-active');
|
|
|
+
|
|
|
+ _win
|
|
|
+ .on({
|
|
|
+ resize: resize,
|
|
|
+ keydown: keydown
|
|
|
+ })
|
|
|
+ ;
|
|
|
+ }
|
|
|
+
|
|
|
+ $('body > *').not(instanceToRegister.element())
|
|
|
+ .addClass('lity-hidden')
|
|
|
+ .each(function() {
|
|
|
+ var el = $(this);
|
|
|
+
|
|
|
+ if (undefined !== el.data(_dataAriaHidden)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ el.data(_dataAriaHidden, el.attr(_attrAriaHidden) || null);
|
|
|
+ })
|
|
|
+ .attr(_attrAriaHidden, 'true')
|
|
|
+ ;
|
|
|
+ }
|
|
|
+
|
|
|
+ function removeInstance(instanceToRemove) {
|
|
|
+ var show;
|
|
|
+
|
|
|
+ instanceToRemove
|
|
|
+ .element()
|
|
|
+ .attr(_attrAriaHidden, 'true')
|
|
|
+ ;
|
|
|
+
|
|
|
+ if (1 === _instances.length) {
|
|
|
+ _html.removeClass('lity-active');
|
|
|
+
|
|
|
+ _win
|
|
|
+ .off({
|
|
|
+ resize: resize,
|
|
|
+ keydown: keydown
|
|
|
+ })
|
|
|
+ ;
|
|
|
+ }
|
|
|
+
|
|
|
+ _instances = $.grep(_instances, function(instance) {
|
|
|
+ return instanceToRemove !== instance;
|
|
|
+ });
|
|
|
+
|
|
|
+ if (!!_instances.length) {
|
|
|
+ show = _instances[0].element();
|
|
|
+ } else {
|
|
|
+ show = $('.lity-hidden');
|
|
|
+ }
|
|
|
+
|
|
|
+ show
|
|
|
+ .removeClass('lity-hidden')
|
|
|
+ .each(function() {
|
|
|
+ var el = $(this), oldAttr = el.data(_dataAriaHidden);
|
|
|
+
|
|
|
+ if (!oldAttr) {
|
|
|
+ el.removeAttr(_attrAriaHidden);
|
|
|
+ } else {
|
|
|
+ el.attr(_attrAriaHidden, oldAttr);
|
|
|
+ }
|
|
|
+
|
|
|
+ el.removeData(_dataAriaHidden);
|
|
|
+ })
|
|
|
+ ;
|
|
|
+ }
|
|
|
+
|
|
|
+ function currentInstance() {
|
|
|
+ if (0 === _instances.length) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ return _instances[0];
|
|
|
+ }
|
|
|
+
|
|
|
+ function factory(target, instance, handlers, preferredHandler) {
|
|
|
+ var handler = 'inline', content;
|
|
|
+
|
|
|
+ var currentHandlers = $.extend({}, handlers);
|
|
|
+
|
|
|
+ if (preferredHandler && currentHandlers[preferredHandler]) {
|
|
|
+ content = currentHandlers[preferredHandler](target, instance);
|
|
|
+ handler = preferredHandler;
|
|
|
+ } else {
|
|
|
+ // Run inline and iframe handlers after all other handlers
|
|
|
+ $.each(['inline', 'iframe'], function(i, name) {
|
|
|
+ delete currentHandlers[name];
|
|
|
+
|
|
|
+ currentHandlers[name] = handlers[name];
|
|
|
+ });
|
|
|
+
|
|
|
+ $.each(currentHandlers, function(name, currentHandler) {
|
|
|
+ // Handler might be "removed" by setting callback to null
|
|
|
+ if (!currentHandler) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (
|
|
|
+ currentHandler.test &&
|
|
|
+ !currentHandler.test(target, instance)
|
|
|
+ ) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ content = currentHandler(target, instance);
|
|
|
+
|
|
|
+ if (false !== content) {
|
|
|
+ handler = name;
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ return {handler: handler, content: content || ''};
|
|
|
+ }
|
|
|
+
|
|
|
+ function Lity(target, options, opener, activeElement) {
|
|
|
+ var self = this;
|
|
|
+ var result;
|
|
|
+ var isReady = false;
|
|
|
+ var isClosed = false;
|
|
|
+ var element;
|
|
|
+ var content;
|
|
|
+
|
|
|
+ options = $.extend(
|
|
|
+ {},
|
|
|
+ _defaultOptions,
|
|
|
+ options
|
|
|
+ );
|
|
|
+
|
|
|
+ element = $(options.template);
|
|
|
+
|
|
|
+ // -- API --
|
|
|
+
|
|
|
+ self.element = function() {
|
|
|
+ return element;
|
|
|
+ };
|
|
|
+
|
|
|
+ self.opener = function() {
|
|
|
+ return opener;
|
|
|
+ };
|
|
|
+
|
|
|
+ self.options = $.proxy(settings, self, options);
|
|
|
+ self.handlers = $.proxy(settings, self, options.handlers);
|
|
|
+
|
|
|
+ self.resize = function() {
|
|
|
+ if (!isReady || isClosed) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ content
|
|
|
+ .css('max-height', winHeight() + 'px')
|
|
|
+ .trigger('lity:resize', [self])
|
|
|
+ ;
|
|
|
+ };
|
|
|
+
|
|
|
+ self.close = function() {
|
|
|
+ if (!isReady || isClosed) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ isClosed = true;
|
|
|
+
|
|
|
+ removeInstance(self);
|
|
|
+
|
|
|
+ var deferred = _deferred();
|
|
|
+
|
|
|
+ // We return focus only if the current focus is inside this instance
|
|
|
+ if (
|
|
|
+ activeElement &&
|
|
|
+ (
|
|
|
+ document.activeElement === element[0] ||
|
|
|
+ $.contains(element[0], document.activeElement)
|
|
|
+ )
|
|
|
+ ) {
|
|
|
+ try {
|
|
|
+ activeElement.focus();
|
|
|
+ } catch (e) {
|
|
|
+ // Ignore exceptions, eg. for SVG elements which can't be
|
|
|
+ // focused in IE11
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ content.trigger('lity:close', [self]);
|
|
|
+
|
|
|
+ element
|
|
|
+ .removeClass('lity-opened')
|
|
|
+ .addClass('lity-closed')
|
|
|
+ ;
|
|
|
+
|
|
|
+ transitionEnd(content.add(element))
|
|
|
+ .always(function() {
|
|
|
+ content.trigger('lity:remove', [self]);
|
|
|
+ element.remove();
|
|
|
+ element = undefined;
|
|
|
+ deferred.resolve();
|
|
|
+ })
|
|
|
+ ;
|
|
|
+
|
|
|
+ return deferred.promise();
|
|
|
+ };
|
|
|
+
|
|
|
+ // -- Initialization --
|
|
|
+
|
|
|
+ result = factory(target, self, options.handlers, options.handler);
|
|
|
+
|
|
|
+ element
|
|
|
+ .attr(_attrAriaHidden, 'false')
|
|
|
+ .addClass('lity-loading lity-opened lity-' + result.handler)
|
|
|
+ .appendTo('body')
|
|
|
+ .focus()
|
|
|
+ .on('click', '[data-lity-close]', function(e) {
|
|
|
+ if ($(e.target).is('[data-lity-close]')) {
|
|
|
+ self.close();
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .trigger('lity:open', [self])
|
|
|
+ ;
|
|
|
+
|
|
|
+ registerInstance(self);
|
|
|
+
|
|
|
+ $.when(result.content)
|
|
|
+ .always(ready)
|
|
|
+ ;
|
|
|
+
|
|
|
+ function ready(result) {
|
|
|
+ content = $(result)
|
|
|
+ .css('max-height', winHeight() + 'px')
|
|
|
+ ;
|
|
|
+
|
|
|
+ element
|
|
|
+ .find('.lity-loader')
|
|
|
+ .each(function() {
|
|
|
+ var loader = $(this);
|
|
|
+
|
|
|
+ transitionEnd(loader)
|
|
|
+ .always(function() {
|
|
|
+ loader.remove();
|
|
|
+ })
|
|
|
+ ;
|
|
|
+ })
|
|
|
+ ;
|
|
|
+
|
|
|
+ element
|
|
|
+ .removeClass('lity-loading')
|
|
|
+ .find('.lity-content')
|
|
|
+ .empty()
|
|
|
+ .append(content)
|
|
|
+ ;
|
|
|
+
|
|
|
+ isReady = true;
|
|
|
+
|
|
|
+ content
|
|
|
+ .trigger('lity:ready', [self])
|
|
|
+ ;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ function lity(target, options, opener) {
|
|
|
+ if (!target.preventDefault) {
|
|
|
+ opener = $(opener);
|
|
|
+ } else {
|
|
|
+ target.preventDefault();
|
|
|
+ opener = $(this);
|
|
|
+ target = opener.data('lity-target') || opener.attr('href') || opener.attr('src');
|
|
|
+ }
|
|
|
+
|
|
|
+ var instance = new Lity(
|
|
|
+ target,
|
|
|
+ $.extend(
|
|
|
+ {},
|
|
|
+ opener.data('lity-options') || opener.data('lity'),
|
|
|
+ options
|
|
|
+ ),
|
|
|
+ opener,
|
|
|
+ document.activeElement
|
|
|
+ );
|
|
|
+
|
|
|
+ if (!target.preventDefault) {
|
|
|
+ return instance;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ lity.version = '2.4.0';
|
|
|
+ lity.options = $.proxy(settings, lity, _defaultOptions);
|
|
|
+ lity.handlers = $.proxy(settings, lity, _defaultOptions.handlers);
|
|
|
+ lity.current = currentInstance;
|
|
|
+
|
|
|
+ $(document).on('click.lity', '[data-lity]', lity);
|
|
|
+
|
|
|
+ return lity;
|
|
|
+}));
|