From f8c250f85c764985fb4393d487d2eccef79f871b Mon Sep 17 00:00:00 2001 From: slawexxx44 Date: Tue, 21 Aug 2018 14:59:41 +0200 Subject: [PATCH] tranform3d replaced with transformX change is required, since slides goes outside of slider compnent on IE11 and Edge when in slide intersection observer is present. --- dist/jquery.lory.js | 385 +++++++++++++++++------------------ dist/jquery.lory.min.js | 2 +- dist/jquery.lory.min.js.map | 2 +- dist/lory.js | 385 +++++++++++++++++------------------ dist/lory.min.js | 2 +- dist/lory.min.js.map | 2 +- src/lory.js | 7 +- src/utils/detect-prefixes.js | 7 +- 8 files changed, 383 insertions(+), 409 deletions(-) diff --git a/dist/jquery.lory.js b/dist/jquery.lory.js index 8ede7c1..af13247 100644 --- a/dist/jquery.lory.js +++ b/dist/jquery.lory.js @@ -75,33 +75,6 @@ return /******/ (function(modules) { // webpackBootstrap /************************************************************************/ /******/ ([ /* 0 */ -/***/ (function(module, exports) { - -var g; - -// This works in non-strict mode -g = (function() { - return this; -})(); - -try { - // This works if eval is allowed (see CSP) - g = g || Function("return this")() || (1,eval)("this"); -} catch(e) { - // This works if the window reference is available - if(typeof window === "object") - g = window; -} - -// g can still be undefined, but nothing to do about it... -// We return undefined, instead of nothing here, so it's -// easier to handle this case. if(!global) { ...} - -module.exports = g; - - -/***/ }), -/* 1 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -115,15 +88,15 @@ var _extends = Object.assign || function (target) { for (var i = 1; i < argument exports.lory = lory; -var _detectPrefixes = __webpack_require__(2); +var _detectPrefixes = __webpack_require__(1); var _detectPrefixes2 = _interopRequireDefault(_detectPrefixes); -var _detectSupportsPassive = __webpack_require__(3); +var _detectSupportsPassive = __webpack_require__(2); var _detectSupportsPassive2 = _interopRequireDefault(_detectSupportsPassive); -var _dispatchEvent = __webpack_require__(4); +var _dispatchEvent = __webpack_require__(3); var _dispatchEvent2 = _interopRequireDefault(_dispatchEvent); @@ -141,8 +114,8 @@ function lory(slider, opts) { var frameWidth = void 0; var slides = void 0; - /** - * slider DOM elements + /** + * slider DOM elements */ var frame = void 0; var slideContainer = void 0; @@ -155,16 +128,16 @@ function lory(slider, opts) { var options = {}; var touchEventParams = (0, _detectSupportsPassive2.default)() ? { passive: true } : false; - /** - * if object is jQuery convert to native DOM element + /** + * if object is jQuery convert to native DOM element */ if (typeof jQuery !== 'undefined' && slider instanceof jQuery) { slider = slider[0]; } - /** - * private - * set active class to element which is the current slide + /** + * private + * set active class to element which is the current slide */ function setActiveElement(slides, currentIndex) { var _options = options, @@ -180,12 +153,12 @@ function lory(slider, opts) { slides[currentIndex].classList.add(classNameActiveSlide); } - /** - * private - * setupInfinite: function to setup if infinite is set - * - * @param {array} slideArray - * @return {array} array of updated slideContainer elements + /** + * private + * setupInfinite: function to setup if infinite is set + * + * @param {array} slideArray + * @return {array} array of updated slideContainer elements */ function setupInfinite(slideArray) { var _options2 = options, @@ -212,20 +185,20 @@ function lory(slider, opts) { return slice.call(slideContainer.children); } - /** - * [dispatchSliderEvent description] - * @return {[type]} [description] + /** + * [dispatchSliderEvent description] + * @return {[type]} [description] */ function dispatchSliderEvent(phase, type, detail) { (0, _dispatchEvent2.default)(slider, phase + '.lory.' + type, detail); } - /** - * translates to a given position in a given time in milliseconds - * - * @to {number} number in pixels where to translate to - * @duration {number} time in milliseconds for the transistion - * @ease {string} easing css property + /** + * translates to a given position in a given time in milliseconds + * + * @to {number} number in pixels where to translate to + * @duration {number} time in milliseconds for the transistion + * @ease {string} easing css property */ function translate(to, duration, ease) { var style = slideContainer && slideContainer.style; @@ -233,29 +206,24 @@ function lory(slider, opts) { if (style) { style[prefixes.transition + 'TimingFunction'] = ease; style[prefixes.transition + 'Duration'] = duration + 'ms'; - - if (prefixes.hasTranslate3d) { - style[prefixes.transform] = 'translate3d(' + to + 'px, 0, 0)'; - } else { - style[prefixes.transform] = 'translate(' + to + 'px, 0)'; - } + style[prefixes.transform] = 'translateX(' + to + 'px)'; } } - /** - * returns an element's width + /** + * returns an element's width */ function elementWidth(element) { return element.getBoundingClientRect().width || element.offsetWidth; } - /** - * slidefunction called by prev, next & touchend - * - * determine nextIndex and slide to next postion - * under restrictions of the defined options - * - * @direction {boolean} + /** + * slidefunction called by prev, next & touchend + * + * determine nextIndex and slide to next postion + * under restrictions of the defined options + * + * @direction {boolean} */ function slide(nextIndex, direction) { var _options3 = options, @@ -278,8 +246,8 @@ function lory(slider, opts) { nextSlide: nextSlide }); - /** - * Reset control classes + /** + * Reset control classes */ if (prevCtrl) { prevCtrl.classList.remove('disabled'); @@ -318,19 +286,19 @@ function lory(slider, opts) { duration = rewindSpeed; } - /** - * translate to the nextOffset by a defined duration and ease function + /** + * translate to the nextOffset by a defined duration and ease function */ translate(nextOffset, duration, ease); - /** - * update the position with the next position + /** + * update the position with the next position */ position.x = nextOffset; - /** - * update the index with the nextIndex only if - * the offset of the nextIndex is in the range of the maxOffset + /** + * update the index with the nextIndex only if + * the offset of the nextIndex is in the range of the maxOffset */ if (slides[nextIndex].offsetLeft <= maxOffset) { index = nextIndex; @@ -356,9 +324,9 @@ function lory(slider, opts) { setActiveElement(slice.call(slides), index); } - /** - * update classes for next and prev arrows - * based on user settings + /** + * update classes for next and prev arrows + * based on user settings */ if (prevCtrl && !infinite && nextIndex === 0) { prevCtrl.classList.add('disabled'); @@ -373,9 +341,9 @@ function lory(slider, opts) { }); } - /** - * public - * setup function + /** + * public + * setup function */ function setup() { dispatchSliderEvent('before', 'init'); @@ -441,9 +409,9 @@ function lory(slider, opts) { dispatchSliderEvent('after', 'init'); } - /** - * public - * reset function: called on resize + /** + * public + * reset function: called on resize */ function reset() { var _options5 = options, @@ -486,41 +454,41 @@ function lory(slider, opts) { } } - /** - * public - * slideTo: called on clickhandler + /** + * public + * slideTo: called on clickhandler */ function slideTo(index) { slide(index); } - /** - * public - * returnIndex function: called on clickhandler + /** + * public + * returnIndex function: called on clickhandler */ function returnIndex() { return index - options.infinite || 0; } - /** - * public - * prev function: called on clickhandler + /** + * public + * prev function: called on clickhandler */ function prev() { slide(false, false); } - /** - * public - * next function: called on clickhandler + /** + * public + * next function: called on clickhandler */ function next() { slide(false, true); } - /** - * public - * destroy function: called to gracefully destroy the lory instance + /** + * public + * destroy function: called to gracefully destroy the lory instance */ function destroy() { dispatchSliderEvent('before', 'destroy'); @@ -631,33 +599,33 @@ function lory(slider, opts) { } function onTouchend(event) { - /** - * time between touchstart and touchend in milliseconds - * @duration {number} + /** + * time between touchstart and touchend in milliseconds + * @duration {number} */ var duration = touchOffset ? Date.now() - touchOffset.time : undefined; - /** - * is valid if: - * - * -> swipe attempt time is over 300 ms - * and - * -> swipe distance is greater than 25px - * or - * -> swipe distance is more then a third of the swipe area - * - * @isValidSlide {Boolean} + /** + * is valid if: + * + * -> swipe attempt time is over 300 ms + * and + * -> swipe distance is greater than 25px + * or + * -> swipe distance is more then a third of the swipe area + * + * @isValidSlide {Boolean} */ var isValid = Number(duration) < 300 && Math.abs(delta.x) > 25 || Math.abs(delta.x) > frameWidth / 3; - /** - * is out of bounds if: - * - * -> index is 0 and delta x is greater than 0 - * or - * -> index is the last slide and delta is smaller than 0 - * - * @isOutOfBounds {Boolean} + /** + * is out of bounds if: + * + * -> index is 0 and delta x is greater than 0 + * or + * -> index is the last slide and delta is smaller than 0 + * + * @isOutOfBounds {Boolean} */ var isOutOfBounds = !index && delta.x > 0 || index === slides.length - 1 && delta.x < 0; @@ -673,8 +641,8 @@ function lory(slider, opts) { touchOffset = undefined; - /** - * remove eventlisteners after swipe attempt + /** + * remove eventlisteners after swipe attempt */ frame.removeEventListener('touchmove', onTouchmove); frame.removeEventListener('touchend', onTouchend); @@ -719,24 +687,23 @@ function lory(slider, opts) { } /***/ }), -/* 2 */ +/* 1 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -/* WEBPACK VAR INJECTION */(function(global) { + Object.defineProperty(exports, "__esModule", { value: true }); exports.default = detectPrefixes; -/** - * Detecting prefixes for saving time and bytes +/** + * Detecting prefixes for saving time and bytes */ function detectPrefixes() { var transform = void 0; var transition = void 0; var transitionEnd = void 0; - var hasTranslate3d = void 0; (function () { var el = document.createElement('_'); @@ -767,22 +734,19 @@ function detectPrefixes() { } document.body.insertBefore(el, null); - style[transform] = 'translate3d(0, 0, 0)'; - hasTranslate3d = !!global.getComputedStyle(el).getPropertyValue(transform); + style[transform] = 'translateX(0)'; document.body.removeChild(el); })(); return { transform: transform, transition: transition, - transitionEnd: transitionEnd, - hasTranslate3d: hasTranslate3d + transitionEnd: transitionEnd }; } -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0))) /***/ }), -/* 3 */ +/* 2 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -810,7 +774,7 @@ function detectSupportsPassive() { } /***/ }), -/* 4 */ +/* 3 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -821,18 +785,18 @@ Object.defineProperty(exports, "__esModule", { }); exports.default = dispatchEvent; -var _customEvent = __webpack_require__(5); +var _customEvent = __webpack_require__(4); var _customEvent2 = _interopRequireDefault(_customEvent); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -/** - * dispatch custom events - * - * @param {element} el slideshow element - * @param {string} type custom event name - * @param {object} detail custom detail information +/** + * dispatch custom events + * + * @param {element} el slideshow element + * @param {string} type custom event name + * @param {object} detail custom detail information */ function dispatchEvent(target, type, detail) { var event = new _customEvent2.default(type, { @@ -845,7 +809,7 @@ function dispatchEvent(target, type, detail) { } /***/ }), -/* 5 */ +/* 4 */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(global) { @@ -897,7 +861,34 @@ function CustomEvent (type, params) { return e; } -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0))) +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5))) + +/***/ }), +/* 5 */ +/***/ (function(module, exports) { + +var g; + +// This works in non-strict mode +g = (function() { + return this; +})(); + +try { + // This works if eval is allowed (see CSP) + g = g || Function("return this")() || (1,eval)("this"); +} catch(e) { + // This works if the window reference is available + if(typeof window === "object") + g = window; +} + +// g can still be undefined, but nothing to do about it... +// We return undefined, instead of nothing here, so it's +// easier to handle this case. if(!global) { ...} + +module.exports = g; + /***/ }), /* 6 */ @@ -910,103 +901,103 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.default = { - /** - * slides scrolled at once - * @slidesToScroll {Number} + /** + * slides scrolled at once + * @slidesToScroll {Number} */ slidesToScroll: 1, - /** - * time in milliseconds for the animation of a valid slide attempt - * @slideSpeed {Number} + /** + * time in milliseconds for the animation of a valid slide attempt + * @slideSpeed {Number} */ slideSpeed: 300, - /** - * time in milliseconds for the animation of the rewind after the last slide - * @rewindSpeed {Number} + /** + * time in milliseconds for the animation of the rewind after the last slide + * @rewindSpeed {Number} */ rewindSpeed: 600, - /** - * time for the snapBack of the slider if the slide attempt was not valid - * @snapBackSpeed {Number} + /** + * time for the snapBack of the slider if the slide attempt was not valid + * @snapBackSpeed {Number} */ snapBackSpeed: 200, - /** - * Basic easing functions: https://developer.mozilla.org/de/docs/Web/CSS/transition-timing-function - * cubic bezier easing functions: http://easings.net/de - * @ease {String} + /** + * Basic easing functions: https://developer.mozilla.org/de/docs/Web/CSS/transition-timing-function + * cubic bezier easing functions: http://easings.net/de + * @ease {String} */ ease: 'ease', - /** - * if slider reached the last slide, with next click the slider goes back to the startindex. - * use infinite or rewind, not both - * @rewind {Boolean} + /** + * if slider reached the last slide, with next click the slider goes back to the startindex. + * use infinite or rewind, not both + * @rewind {Boolean} */ rewind: false, - /** - * number of visible slides or false - * use infinite or rewind, not both - * @infinite {number} + /** + * number of visible slides or false + * use infinite or rewind, not both + * @infinite {number} */ infinite: false, - /** - * the slide index to show when the slider is initialized. - * @initialIndex {number} + /** + * the slide index to show when the slider is initialized. + * @initialIndex {number} */ initialIndex: 0, - /** - * class name for slider frame - * @classNameFrame {string} + /** + * class name for slider frame + * @classNameFrame {string} */ classNameFrame: 'js_frame', - /** - * class name for slides container - * @classNameSlideContainer {string} + /** + * class name for slides container + * @classNameSlideContainer {string} */ classNameSlideContainer: 'js_slides', - /** - * class name for slider prev control - * @classNamePrevCtrl {string} + /** + * class name for slider prev control + * @classNamePrevCtrl {string} */ classNamePrevCtrl: 'js_prev', - /** - * class name for slider next control - * @classNameNextCtrl {string} + /** + * class name for slider next control + * @classNameNextCtrl {string} */ classNameNextCtrl: 'js_next', - /** - * class name for current active slide - * if emptyString then no class is set - * @classNameActiveSlide {string} + /** + * class name for current active slide + * if emptyString then no class is set + * @classNameActiveSlide {string} */ classNameActiveSlide: 'active', - /** - * enables mouse events for swiping on desktop devices - * @enableMouseEvents {boolean} + /** + * enables mouse events for swiping on desktop devices + * @enableMouseEvents {boolean} */ enableMouseEvents: false, - /** - * window instance - * @window {object} + /** + * window instance + * @window {object} */ window: typeof window !== 'undefined' ? window : null, - /** - * If false, slides lory to the first slide on window resize. - * @rewindOnResize {boolean} + /** + * If false, slides lory to the first slide on window resize. + * @rewindOnResize {boolean} */ rewindOnResize: true }; @@ -1019,7 +1010,7 @@ exports.default = { "use strict"; -var _lory = __webpack_require__(1); +var _lory = __webpack_require__(0); function init($) { $.fn.lory = function (options) { diff --git a/dist/jquery.lory.min.js b/dist/jquery.lory.min.js index ce8de19..9ddf964 100644 --- a/dist/jquery.lory.min.js +++ b/dist/jquery.lory.min.js @@ -1,2 +1,2 @@ -!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var n=t();for(var i in n)("object"==typeof exports?exports:e)[i]=n[i]}}("undefined"!=typeof self?self:this,function(){return function(e){function t(i){if(n[i])return n[i].exports;var o=n[i]={i:i,l:!1,exports:{}};return e[i].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,i){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:i})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=8)}([function(e,t){var n;n=function(){return this}();try{n=n||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t,n){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function o(e,t){function n(e,t){var n=F,i=n.classNameActiveSlide;e.forEach(function(e,t){e.classList.contains(i)&&e.classList.remove(i)}),e[t].classList.add(i)}function i(e){var t=F,n=t.infinite,i=e.slice(0,n),o=e.slice(e.length-n,e.length);return i.forEach(function(e){var t=e.cloneNode(!0);k.appendChild(t)}),o.reverse().forEach(function(e){var t=e.cloneNode(!0);k.insertBefore(t,k.firstChild)}),k.addEventListener(A.transitionEnd,x),m.call(k.children)}function o(t,n,i){(0,u.default)(e,t+".lory."+n,i)}function s(e,t,n){var i=k&&k.style;i&&(i[A.transition+"TimingFunction"]=n,i[A.transition+"Duration"]=t+"ms",A.hasTranslate3d?i[A.transform]="translate3d("+e+"px, 0, 0)":i[A.transform]="translate("+e+"px, 0)")}function d(e){return e.getBoundingClientRect().width||e.offsetWidth}function c(e,t){var i=F,r=i.slideSpeed,a=i.slidesToScroll,d=i.infinite,l=i.rewind,c=i.rewindSpeed,u=i.ease,f=i.classNameActiveSlide,v=r,p=t?D+1:D-1,h=Math.round(_-S);o("before","slide",{index:D,nextSlide:p}),B&&B.classList.remove("disabled"),T&&T.classList.remove("disabled"),"number"!=typeof e&&(e=t?d&&D+2*d!==O.length?D+(d-D%d):D+a:d&&D%d!=0?D-D%d:D-a),e=Math.min(Math.max(e,0),O.length-1),d&&void 0===t&&(e+=d);var b=Math.min(Math.max(-1*O[e].offsetLeft,-1*h),0);l&&Math.abs(M.x)===h&&t&&(b=0,e=0,v=c),s(b,v,u),M.x=b,O[e].offsetLeft<=h&&(D=e),!d||e!==O.length-d&&e!==O.length-O.length%d&&0!==e||(t&&(D=d),t||(D=O.length-2*d),M.x=-1*O[D].offsetLeft,z=function(){s(-1*O[D].offsetLeft,0,void 0)}),f&&n(m.call(O),D),B&&!d&&0===e&&B.classList.add("disabled"),!T||d||l||e+1!==O.length||T.classList.add("disabled"),o("after","slide",{currentSlide:D})}function f(){o("before","init"),A=(0,a.default)(),F=r({},v.default,t);var s=F,d=s.classNameFrame,l=s.classNameSlideContainer,c=s.classNamePrevCtrl,u=s.classNameNextCtrl,f=s.enableMouseEvents,h=s.classNameActiveSlide,b=s.initialIndex;D=b,P=e.getElementsByClassName(d)[0],k=P.getElementsByClassName(l)[0],B=e.getElementsByClassName(c)[0],T=e.getElementsByClassName(u)[0],M={x:k.offsetLeft,y:k.offsetTop},F.infinite?O=i(m.call(k.children)):(O=m.call(k.children),B&&B.classList.add("disabled"),T&&1===O.length&&!F.rewind&&T.classList.add("disabled")),p(),h&&n(O,D),B&&T&&(B.addEventListener("click",y),T.addEventListener("click",E)),P.addEventListener("touchstart",w,I),f&&(P.addEventListener("mousedown",w),P.addEventListener("click",C)),F.window.addEventListener("resize",N),o("after","init")}function p(){var e=F,t=e.infinite,i=e.ease,o=e.rewindSpeed,r=e.rewindOnResize,a=e.classNameActiveSlide,l=e.initialIndex;_=d(k),S=d(P),S===_&&(_=O.reduce(function(e,t){return e+d(t)},0)),r?D=l:(i=null,o=0),t?(s(-1*O[D+t].offsetLeft,0,null),D+=t,M.x=-1*O[D].offsetLeft):(s(-1*O[D].offsetLeft,o,i),M.x=-1*O[D].offsetLeft),a&&n(m.call(O),D)}function h(e){c(e)}function b(){return D-F.infinite||0}function y(){c(!1,!1)}function E(){c(!1,!0)}function L(){o("before","destroy"),P.removeEventListener(A.transitionEnd,x),P.removeEventListener("touchstart",w,I),P.removeEventListener("touchmove",g,I),P.removeEventListener("touchend",j),P.removeEventListener("mousemove",g),P.removeEventListener("mousedown",w),P.removeEventListener("mouseup",j),P.removeEventListener("mouseleave",j),P.removeEventListener("click",C),F.window.removeEventListener("resize",N),B&&B.removeEventListener("click",y),T&&T.removeEventListener("click",E),F.infinite&&Array.apply(null,Array(F.infinite)).forEach(function(){k.removeChild(k.firstChild),k.removeChild(k.lastChild)}),o("after","destroy")}function x(){z&&(z(),z=void 0)}function w(e){var t=F,n=t.enableMouseEvents,i=e.touches?e.touches[0]:e;n&&(P.addEventListener("mousemove",g),P.addEventListener("mouseup",j),P.addEventListener("mouseleave",j)),P.addEventListener("touchmove",g,I),P.addEventListener("touchend",j);var r=i.pageX,s=i.pageY;Q={x:r,y:s,time:Date.now()},X=void 0,R={},o("on","touchstart",{event:e})}function g(e){var t=e.touches?e.touches[0]:e,n=t.pageX,i=t.pageY;R={x:n-Q.x,y:i-Q.y},void 0===X&&(X=!!(X||Math.abs(R.x)25||Math.abs(R.x)>S/3,i=!D&&R.x>0||D===O.length-1&&R.x<0,r=R.x<0;X||(n&&!i?c(!1,r):s(M.x,F.snapBackSpeed)),Q=void 0,P.removeEventListener("touchmove",g),P.removeEventListener("touchend",j),P.removeEventListener("mousemove",g),P.removeEventListener("mouseup",j),P.removeEventListener("mouseleave",j),o("on","touchend",{event:e})}function C(e){R.x&&e.preventDefault()}function N(e){S!==d(P)&&(p(),o("on","resize",{event:e}))}var M=void 0,_=void 0,S=void 0,O=void 0,P=void 0,k=void 0,B=void 0,T=void 0,A=void 0,z=void 0,D=0,F={},I=!!(0,l.default)()&&{passive:!0};"undefined"!=typeof jQuery&&e instanceof jQuery&&(e=e[0]);var Q=void 0,R=void 0,X=void 0;return f(),{setup:f,reset:p,slideTo:h,returnIndex:b,prev:y,next:E,destroy:L}}Object.defineProperty(t,"__esModule",{value:!0});var r=Object.assign||function(e){for(var t=1;t25||Math.abs(X.x)>S/3,i=!D&&X.x>0||D===O.length-1&&X.x<0,r=X.x<0;R||(n&&!i?c(!1,r):s(M.x,F.snapBackSpeed)),Q=void 0,P.removeEventListener("touchmove",g),P.removeEventListener("touchend",j),P.removeEventListener("mousemove",g),P.removeEventListener("mouseup",j),P.removeEventListener("mouseleave",j),o("on","touchend",{event:e})}function C(e){X.x&&e.preventDefault()}function N(e){S!==d(P)&&(p(),o("on","resize",{event:e}))}var M=void 0,_=void 0,S=void 0,O=void 0,P=void 0,k=void 0,B=void 0,T=void 0,A=void 0,z=void 0,D=0,F={},I=!!(0,l.default)()&&{passive:!0};"undefined"!=typeof jQuery&&e instanceof jQuery&&(e=e[0]);var Q=void 0,X=void 0,R=void 0;return f(),{setup:f,reset:p,slideTo:h,returnIndex:b,prev:y,next:E,destroy:L}}Object.defineProperty(t,"__esModule",{value:!0});var r=Object.assign||function(e){for(var t=1;t swipe attempt time is over 300 ms\n * and\n * -> swipe distance is greater than 25px\n * or\n * -> swipe distance is more then a third of the swipe area\n *\n * @isValidSlide {Boolean}\n */\n var isValid = Number(duration) < 300 && Math.abs(delta.x) > 25 || Math.abs(delta.x) > frameWidth / 3;\n\n /**\n * is out of bounds if:\n *\n * -> index is 0 and delta x is greater than 0\n * or\n * -> index is the last slide and delta is smaller than 0\n *\n * @isOutOfBounds {Boolean}\n */\n var isOutOfBounds = !index && delta.x > 0 || index === slides.length - 1 && delta.x < 0;\n\n var direction = delta.x < 0;\n\n if (!isScrolling) {\n if (isValid && !isOutOfBounds) {\n slide(false, direction);\n } else {\n translate(position.x, options.snapBackSpeed);\n }\n }\n\n touchOffset = undefined;\n\n /**\n * remove eventlisteners after swipe attempt\n */\n frame.removeEventListener('touchmove', onTouchmove);\n frame.removeEventListener('touchend', onTouchend);\n frame.removeEventListener('mousemove', onTouchmove);\n frame.removeEventListener('mouseup', onTouchend);\n frame.removeEventListener('mouseleave', onTouchend);\n\n dispatchSliderEvent('on', 'touchend', {\n event: event\n });\n }\n\n function onClick(event) {\n if (delta.x) {\n event.preventDefault();\n }\n }\n\n function onResize(event) {\n if (frameWidth !== elementWidth(frame)) {\n reset();\n\n dispatchSliderEvent('on', 'resize', {\n event: event\n });\n }\n }\n\n // trigger initial setup\n setup();\n\n // expose public api\n return {\n setup: setup,\n reset: reset,\n slideTo: slideTo,\n returnIndex: returnIndex,\n prev: prev,\n next: next,\n destroy: destroy\n };\n}\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(global) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = detectPrefixes;\n/**\n * Detecting prefixes for saving time and bytes\n */\nfunction detectPrefixes() {\n var transform = void 0;\n var transition = void 0;\n var transitionEnd = void 0;\n var hasTranslate3d = void 0;\n\n (function () {\n var el = document.createElement('_');\n var style = el.style;\n\n var prop = void 0;\n\n if (style[prop = 'webkitTransition'] === '') {\n transitionEnd = 'webkitTransitionEnd';\n transition = prop;\n }\n\n if (style[prop = 'transition'] === '') {\n transitionEnd = 'transitionend';\n transition = prop;\n }\n\n if (style[prop = 'webkitTransform'] === '') {\n transform = prop;\n }\n\n if (style[prop = 'msTransform'] === '') {\n transform = prop;\n }\n\n if (style[prop = 'transform'] === '') {\n transform = prop;\n }\n\n document.body.insertBefore(el, null);\n style[transform] = 'translate3d(0, 0, 0)';\n hasTranslate3d = !!global.getComputedStyle(el).getPropertyValue(transform);\n document.body.removeChild(el);\n })();\n\n return {\n transform: transform,\n transition: transition,\n transitionEnd: transitionEnd,\n hasTranslate3d: hasTranslate3d\n };\n}\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0)))\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = detectSupportsPassive;\nfunction detectSupportsPassive() {\n var supportsPassive = false;\n\n try {\n var opts = Object.defineProperty({}, 'passive', {\n get: function get() {\n supportsPassive = true;\n }\n });\n\n window.addEventListener('testPassive', null, opts);\n window.removeEventListener('testPassive', null, opts);\n } catch (e) {}\n\n return supportsPassive;\n}\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = dispatchEvent;\n\nvar _customEvent = __webpack_require__(5);\n\nvar _customEvent2 = _interopRequireDefault(_customEvent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * dispatch custom events\n *\n * @param {element} el slideshow element\n * @param {string} type custom event name\n * @param {object} detail custom detail information\n */\nfunction dispatchEvent(target, type, detail) {\n var event = new _customEvent2.default(type, {\n bubbles: true,\n cancelable: true,\n detail: detail\n });\n\n target.dispatchEvent(event);\n}\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(global) {\nvar NativeCustomEvent = global.CustomEvent;\n\nfunction useNative () {\n try {\n var p = new NativeCustomEvent('cat', { detail: { foo: 'bar' } });\n return 'cat' === p.type && 'bar' === p.detail.foo;\n } catch (e) {\n }\n return false;\n}\n\n/**\n * Cross-browser `CustomEvent` constructor.\n *\n * https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent.CustomEvent\n *\n * @public\n */\n\nmodule.exports = useNative() ? NativeCustomEvent :\n\n// IE >= 9\n'undefined' !== typeof document && 'function' === typeof document.createEvent ? function CustomEvent (type, params) {\n var e = document.createEvent('CustomEvent');\n if (params) {\n e.initCustomEvent(type, params.bubbles, params.cancelable, params.detail);\n } else {\n e.initCustomEvent(type, false, false, void 0);\n }\n return e;\n} :\n\n// IE <= 8\nfunction CustomEvent (type, params) {\n var e = document.createEventObject();\n e.type = type;\n if (params) {\n e.bubbles = Boolean(params.bubbles);\n e.cancelable = Boolean(params.cancelable);\n e.detail = params.detail;\n } else {\n e.bubbles = false;\n e.cancelable = false;\n e.detail = void 0;\n }\n return e;\n}\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0)))\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = {\n /**\n * slides scrolled at once\n * @slidesToScroll {Number}\n */\n slidesToScroll: 1,\n\n /**\n * time in milliseconds for the animation of a valid slide attempt\n * @slideSpeed {Number}\n */\n slideSpeed: 300,\n\n /**\n * time in milliseconds for the animation of the rewind after the last slide\n * @rewindSpeed {Number}\n */\n rewindSpeed: 600,\n\n /**\n * time for the snapBack of the slider if the slide attempt was not valid\n * @snapBackSpeed {Number}\n */\n snapBackSpeed: 200,\n\n /**\n * Basic easing functions: https://developer.mozilla.org/de/docs/Web/CSS/transition-timing-function\n * cubic bezier easing functions: http://easings.net/de\n * @ease {String}\n */\n ease: 'ease',\n\n /**\n * if slider reached the last slide, with next click the slider goes back to the startindex.\n * use infinite or rewind, not both\n * @rewind {Boolean}\n */\n rewind: false,\n\n /**\n * number of visible slides or false\n * use infinite or rewind, not both\n * @infinite {number}\n */\n infinite: false,\n\n /**\n * the slide index to show when the slider is initialized.\n * @initialIndex {number}\n */\n initialIndex: 0,\n\n /**\n * class name for slider frame\n * @classNameFrame {string}\n */\n classNameFrame: 'js_frame',\n\n /**\n * class name for slides container\n * @classNameSlideContainer {string}\n */\n classNameSlideContainer: 'js_slides',\n\n /**\n * class name for slider prev control\n * @classNamePrevCtrl {string}\n */\n classNamePrevCtrl: 'js_prev',\n\n /**\n * class name for slider next control\n * @classNameNextCtrl {string}\n */\n classNameNextCtrl: 'js_next',\n\n /**\n * class name for current active slide\n * if emptyString then no class is set\n * @classNameActiveSlide {string}\n */\n classNameActiveSlide: 'active',\n\n /**\n * enables mouse events for swiping on desktop devices\n * @enableMouseEvents {boolean}\n */\n enableMouseEvents: false,\n\n /**\n * window instance\n * @window {object}\n */\n window: typeof window !== 'undefined' ? window : null,\n\n /**\n * If false, slides lory to the first slide on window resize.\n * @rewindOnResize {boolean}\n */\n rewindOnResize: true\n};\n\n/***/ }),\n/* 7 */,\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _lory = __webpack_require__(1);\n\nfunction init($) {\n $.fn.lory = function (options) {\n return this.each(function () {\n var instanceOptions;\n\n if (!$.data(this, 'lory')) {\n instanceOptions = $.extend({}, options, $(this).data());\n $.data(this, 'lory', (0, _lory.lory)(this, instanceOptions));\n }\n });\n };\n} /* globals jQuery */\n;\n\nif (typeof jQuery !== 'undefined') {\n init(jQuery);\n}\n\n/***/ })\n/******/ ]);\n});\n\n\n// WEBPACK FOOTER //\n// jquery.lory.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 8);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap ccaf8436a8947db96789","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/global.js\n// module id = 0\n// module chunks = 0 1","/* globals jQuery */\n\nimport detectPrefixes from './utils/detect-prefixes.js';\nimport supportsPassive from './utils/detect-supportsPassive';\nimport dispatchEvent from './utils/dispatch-event.js';\nimport defaults from './defaults.js';\n\nconst slice = Array.prototype.slice;\n\nexport function lory (slider, opts) {\n let position;\n let slidesWidth;\n let frameWidth;\n let slides;\n\n /**\n * slider DOM elements\n */\n let frame;\n let slideContainer;\n let prevCtrl;\n let nextCtrl;\n let prefixes;\n let transitionEndCallback;\n\n let index = 0;\n let options = {};\n let touchEventParams = supportsPassive() ? { passive: true } : false;\n\n /**\n * if object is jQuery convert to native DOM element\n */\n if (typeof jQuery !== 'undefined' && slider instanceof jQuery) {\n slider = slider[0];\n }\n\n /**\n * private\n * set active class to element which is the current slide\n */\n function setActiveElement (slides, currentIndex) {\n const {classNameActiveSlide} = options;\n\n slides.forEach((element, index) => {\n if (element.classList.contains(classNameActiveSlide)) {\n element.classList.remove(classNameActiveSlide);\n }\n });\n\n slides[currentIndex].classList.add(classNameActiveSlide);\n }\n\n /**\n * private\n * setupInfinite: function to setup if infinite is set\n *\n * @param {array} slideArray\n * @return {array} array of updated slideContainer elements\n */\n function setupInfinite (slideArray) {\n const {infinite} = options;\n\n const front = slideArray.slice(0, infinite);\n const back = slideArray.slice(slideArray.length - infinite, slideArray.length);\n\n front.forEach(function (element) {\n const cloned = element.cloneNode(true);\n\n slideContainer.appendChild(cloned);\n });\n\n back.reverse()\n .forEach(function (element) {\n const cloned = element.cloneNode(true);\n\n slideContainer.insertBefore(cloned, slideContainer.firstChild);\n });\n\n slideContainer.addEventListener(prefixes.transitionEnd, onTransitionEnd);\n\n return slice.call(slideContainer.children);\n }\n\n /**\n * [dispatchSliderEvent description]\n * @return {[type]} [description]\n */\n function dispatchSliderEvent (phase, type, detail) {\n dispatchEvent(slider, `${phase}.lory.${type}`, detail);\n }\n\n /**\n * translates to a given position in a given time in milliseconds\n *\n * @to {number} number in pixels where to translate to\n * @duration {number} time in milliseconds for the transistion\n * @ease {string} easing css property\n */\n function translate (to, duration, ease) {\n const style = slideContainer && slideContainer.style;\n\n if (style) {\n style[prefixes.transition + 'TimingFunction'] = ease;\n style[prefixes.transition + 'Duration'] = duration + 'ms';\n\n if (prefixes.hasTranslate3d) {\n style[prefixes.transform] = 'translate3d(' + to + 'px, 0, 0)';\n } else {\n style[prefixes.transform] = 'translate(' + to + 'px, 0)';\n }\n }\n }\n\n /**\n * returns an element's width\n */\n function elementWidth (element) {\n return element.getBoundingClientRect().width || element.offsetWidth;\n }\n\n /**\n * slidefunction called by prev, next & touchend\n *\n * determine nextIndex and slide to next postion\n * under restrictions of the defined options\n *\n * @direction {boolean}\n */\n function slide (nextIndex, direction) {\n const {\n slideSpeed,\n slidesToScroll,\n infinite,\n rewind,\n rewindSpeed,\n ease,\n classNameActiveSlide\n } = options;\n\n let duration = slideSpeed;\n\n const nextSlide = direction ? index + 1 : index - 1;\n const maxOffset = Math.round(slidesWidth - frameWidth);\n\n dispatchSliderEvent('before', 'slide', {\n index,\n nextSlide\n });\n\n /**\n * Reset control classes\n */\n if (prevCtrl) {\n prevCtrl.classList.remove('disabled');\n }\n if (nextCtrl) {\n nextCtrl.classList.remove('disabled');\n }\n\n if (typeof nextIndex !== 'number') {\n if (direction) {\n if (infinite && index + (infinite * 2) !== slides.length) {\n nextIndex = index + (infinite - index % infinite);\n } else {\n nextIndex = index + slidesToScroll;\n }\n } else {\n if (infinite && index % infinite !== 0) {\n nextIndex = index - index % infinite;\n } else {\n nextIndex = index - slidesToScroll;\n }\n }\n }\n\n nextIndex = Math.min(Math.max(nextIndex, 0), slides.length - 1);\n\n if (infinite && direction === undefined) {\n nextIndex += infinite;\n }\n\n let nextOffset = Math.min(Math.max(slides[nextIndex].offsetLeft * -1, maxOffset * -1), 0);\n\n if (rewind && Math.abs(position.x) === maxOffset && direction) {\n nextOffset = 0;\n nextIndex = 0;\n duration = rewindSpeed;\n }\n\n /**\n * translate to the nextOffset by a defined duration and ease function\n */\n translate(nextOffset, duration, ease);\n\n /**\n * update the position with the next position\n */\n position.x = nextOffset;\n\n /**\n * update the index with the nextIndex only if\n * the offset of the nextIndex is in the range of the maxOffset\n */\n if (slides[nextIndex].offsetLeft <= maxOffset) {\n index = nextIndex;\n }\n\n if (infinite && (nextIndex === slides.length - infinite ||\n nextIndex === slides.length - slides.length % infinite || nextIndex === 0)) {\n if (direction) {\n index = infinite;\n }\n\n if (!direction) {\n index = slides.length - (infinite * 2);\n }\n\n position.x = slides[index].offsetLeft * -1;\n\n transitionEndCallback = function () {\n translate(slides[index].offsetLeft * -1, 0, undefined);\n };\n }\n\n if (classNameActiveSlide) {\n setActiveElement(slice.call(slides), index);\n }\n\n /**\n * update classes for next and prev arrows\n * based on user settings\n */\n if (prevCtrl && !infinite && nextIndex === 0) {\n prevCtrl.classList.add('disabled');\n }\n\n if (nextCtrl && !infinite && !rewind && ((nextIndex + 1) === slides.length)) {\n nextCtrl.classList.add('disabled');\n }\n\n dispatchSliderEvent('after', 'slide', {\n currentSlide: index\n });\n }\n\n /**\n * public\n * setup function\n */\n function setup () {\n dispatchSliderEvent('before', 'init');\n\n prefixes = detectPrefixes();\n options = {...defaults, ...opts};\n\n const {\n classNameFrame,\n classNameSlideContainer,\n classNamePrevCtrl,\n classNameNextCtrl,\n enableMouseEvents,\n classNameActiveSlide,\n initialIndex\n } = options;\n\n index = initialIndex;\n frame = slider.getElementsByClassName(classNameFrame)[0];\n slideContainer = frame.getElementsByClassName(classNameSlideContainer)[0];\n prevCtrl = slider.getElementsByClassName(classNamePrevCtrl)[0];\n nextCtrl = slider.getElementsByClassName(classNameNextCtrl)[0];\n\n position = {\n x: slideContainer.offsetLeft,\n y: slideContainer.offsetTop\n };\n\n if (options.infinite) {\n slides = setupInfinite(slice.call(slideContainer.children));\n } else {\n slides = slice.call(slideContainer.children);\n\n if (prevCtrl) {\n prevCtrl.classList.add('disabled');\n }\n\n if (nextCtrl && (slides.length === 1) && !options.rewind) {\n nextCtrl.classList.add('disabled');\n }\n }\n\n reset();\n\n if (classNameActiveSlide) {\n setActiveElement(slides, index);\n }\n\n if (prevCtrl && nextCtrl) {\n prevCtrl.addEventListener('click', prev);\n nextCtrl.addEventListener('click', next);\n }\n\n frame.addEventListener('touchstart', onTouchstart, touchEventParams);\n\n if (enableMouseEvents) {\n frame.addEventListener('mousedown', onTouchstart);\n frame.addEventListener('click', onClick);\n }\n\n options.window.addEventListener('resize', onResize);\n\n dispatchSliderEvent('after', 'init');\n }\n\n /**\n * public\n * reset function: called on resize\n */\n function reset () {\n var {infinite, ease, rewindSpeed, rewindOnResize, classNameActiveSlide, initialIndex} = options;\n\n slidesWidth = elementWidth(slideContainer);\n frameWidth = elementWidth(frame);\n\n if (frameWidth === slidesWidth) {\n slidesWidth = slides.reduce(function (previousValue, slide) {\n return previousValue + elementWidth(slide);\n }, 0);\n }\n\n if (rewindOnResize) {\n index = initialIndex;\n } else {\n ease = null;\n rewindSpeed = 0;\n }\n\n if (infinite) {\n translate(slides[index + infinite].offsetLeft * -1, 0, null);\n\n index = index + infinite;\n position.x = slides[index].offsetLeft * -1;\n } else {\n translate(slides[index].offsetLeft * -1, rewindSpeed, ease);\n position.x = slides[index].offsetLeft * -1;\n }\n\n if (classNameActiveSlide) {\n setActiveElement(slice.call(slides), index);\n }\n }\n\n /**\n * public\n * slideTo: called on clickhandler\n */\n function slideTo (index) {\n slide(index);\n }\n\n /**\n * public\n * returnIndex function: called on clickhandler\n */\n function returnIndex () {\n return index - options.infinite || 0;\n }\n\n /**\n * public\n * prev function: called on clickhandler\n */\n function prev () {\n slide(false, false);\n }\n\n /**\n * public\n * next function: called on clickhandler\n */\n function next () {\n slide(false, true);\n }\n\n /**\n * public\n * destroy function: called to gracefully destroy the lory instance\n */\n function destroy () {\n dispatchSliderEvent('before', 'destroy');\n\n // remove event listeners\n frame.removeEventListener(prefixes.transitionEnd, onTransitionEnd);\n frame.removeEventListener('touchstart', onTouchstart, touchEventParams);\n frame.removeEventListener('touchmove', onTouchmove, touchEventParams);\n frame.removeEventListener('touchend', onTouchend);\n frame.removeEventListener('mousemove', onTouchmove);\n frame.removeEventListener('mousedown', onTouchstart);\n frame.removeEventListener('mouseup', onTouchend);\n frame.removeEventListener('mouseleave', onTouchend);\n frame.removeEventListener('click', onClick);\n\n options.window.removeEventListener('resize', onResize);\n\n if (prevCtrl) {\n prevCtrl.removeEventListener('click', prev);\n }\n\n if (nextCtrl) {\n nextCtrl.removeEventListener('click', next);\n }\n\n // remove cloned slides if infinite is set\n if (options.infinite) {\n Array.apply(null, Array(options.infinite)).forEach(function () {\n slideContainer.removeChild(slideContainer.firstChild);\n slideContainer.removeChild(slideContainer.lastChild);\n });\n }\n\n dispatchSliderEvent('after', 'destroy');\n }\n\n // event handling\n\n let touchOffset;\n let delta;\n let isScrolling;\n\n function onTransitionEnd () {\n if (transitionEndCallback) {\n transitionEndCallback();\n\n transitionEndCallback = undefined;\n }\n }\n\n function onTouchstart (event) {\n const {enableMouseEvents} = options;\n const touches = event.touches ? event.touches[0] : event;\n\n if (enableMouseEvents) {\n frame.addEventListener('mousemove', onTouchmove);\n frame.addEventListener('mouseup', onTouchend);\n frame.addEventListener('mouseleave', onTouchend);\n }\n\n frame.addEventListener('touchmove', onTouchmove, touchEventParams);\n frame.addEventListener('touchend', onTouchend);\n\n const {pageX, pageY} = touches;\n\n touchOffset = {\n x: pageX,\n y: pageY,\n time: Date.now()\n };\n\n isScrolling = undefined;\n\n delta = {};\n\n dispatchSliderEvent('on', 'touchstart', {\n event\n });\n }\n\n function onTouchmove (event) {\n const touches = event.touches ? event.touches[0] : event;\n const {pageX, pageY} = touches;\n\n delta = {\n x: pageX - touchOffset.x,\n y: pageY - touchOffset.y\n };\n\n if (typeof isScrolling === 'undefined') {\n isScrolling = !!(isScrolling || Math.abs(delta.x) < Math.abs(delta.y));\n }\n\n if (!isScrolling && touchOffset) {\n translate(position.x + delta.x, 0, null);\n }\n\n // may be\n dispatchSliderEvent('on', 'touchmove', {\n event\n });\n }\n\n function onTouchend (event) {\n /**\n * time between touchstart and touchend in milliseconds\n * @duration {number}\n */\n const duration = touchOffset ? Date.now() - touchOffset.time : undefined;\n\n /**\n * is valid if:\n *\n * -> swipe attempt time is over 300 ms\n * and\n * -> swipe distance is greater than 25px\n * or\n * -> swipe distance is more then a third of the swipe area\n *\n * @isValidSlide {Boolean}\n */\n const isValid = Number(duration) < 300 &&\n Math.abs(delta.x) > 25 ||\n Math.abs(delta.x) > frameWidth / 3;\n\n /**\n * is out of bounds if:\n *\n * -> index is 0 and delta x is greater than 0\n * or\n * -> index is the last slide and delta is smaller than 0\n *\n * @isOutOfBounds {Boolean}\n */\n const isOutOfBounds = !index && delta.x > 0 ||\n index === slides.length - 1 && delta.x < 0;\n\n const direction = delta.x < 0;\n\n if (!isScrolling) {\n if (isValid && !isOutOfBounds) {\n slide(false, direction);\n } else {\n translate(position.x, options.snapBackSpeed);\n }\n }\n\n touchOffset = undefined;\n\n /**\n * remove eventlisteners after swipe attempt\n */\n frame.removeEventListener('touchmove', onTouchmove);\n frame.removeEventListener('touchend', onTouchend);\n frame.removeEventListener('mousemove', onTouchmove);\n frame.removeEventListener('mouseup', onTouchend);\n frame.removeEventListener('mouseleave', onTouchend);\n\n dispatchSliderEvent('on', 'touchend', {\n event\n });\n }\n\n function onClick (event) {\n if (delta.x) {\n event.preventDefault();\n }\n }\n\n function onResize (event) {\n if (frameWidth !== elementWidth(frame)) {\n reset();\n\n dispatchSliderEvent('on', 'resize', {\n event\n });\n }\n }\n\n // trigger initial setup\n setup();\n\n // expose public api\n return {\n setup,\n reset,\n slideTo,\n returnIndex,\n prev,\n next,\n destroy\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/lory.js","/**\n * Detecting prefixes for saving time and bytes\n */\nexport default function detectPrefixes () {\n let transform;\n let transition;\n let transitionEnd;\n let hasTranslate3d;\n\n (function () {\n let el = document.createElement('_');\n let style = el.style;\n\n let prop;\n\n if (style[prop = 'webkitTransition'] === '') {\n transitionEnd = 'webkitTransitionEnd';\n transition = prop;\n }\n\n if (style[prop = 'transition'] === '') {\n transitionEnd = 'transitionend';\n transition = prop;\n }\n\n if (style[prop = 'webkitTransform'] === '') {\n transform = prop;\n }\n\n if (style[prop = 'msTransform'] === '') {\n transform = prop;\n }\n\n if (style[prop = 'transform'] === '') {\n transform = prop;\n }\n\n document.body.insertBefore(el, null);\n style[transform] = 'translate3d(0, 0, 0)';\n hasTranslate3d = !!global.getComputedStyle(el).getPropertyValue(transform);\n document.body.removeChild(el);\n }());\n\n return {\n transform,\n transition,\n transitionEnd,\n hasTranslate3d\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/detect-prefixes.js","export default function detectSupportsPassive () {\n let supportsPassive = false;\n\n try {\n let opts = Object.defineProperty({}, 'passive', {\n get () {\n supportsPassive = true;\n }\n });\n\n window.addEventListener('testPassive', null, opts);\n window.removeEventListener('testPassive', null, opts);\n } catch (e) {}\n\n return supportsPassive;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/detect-supportsPassive.js","import CustomEvent from 'custom-event';\n\n/**\n * dispatch custom events\n *\n * @param {element} el slideshow element\n * @param {string} type custom event name\n * @param {object} detail custom detail information\n */\nexport default function dispatchEvent (target, type, detail) {\n let event = new CustomEvent(\n type,\n {\n bubbles: true,\n cancelable: true,\n detail: detail\n }\n );\n\n target.dispatchEvent(event);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/dispatch-event.js","\nvar NativeCustomEvent = global.CustomEvent;\n\nfunction useNative () {\n try {\n var p = new NativeCustomEvent('cat', { detail: { foo: 'bar' } });\n return 'cat' === p.type && 'bar' === p.detail.foo;\n } catch (e) {\n }\n return false;\n}\n\n/**\n * Cross-browser `CustomEvent` constructor.\n *\n * https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent.CustomEvent\n *\n * @public\n */\n\nmodule.exports = useNative() ? NativeCustomEvent :\n\n// IE >= 9\n'undefined' !== typeof document && 'function' === typeof document.createEvent ? function CustomEvent (type, params) {\n var e = document.createEvent('CustomEvent');\n if (params) {\n e.initCustomEvent(type, params.bubbles, params.cancelable, params.detail);\n } else {\n e.initCustomEvent(type, false, false, void 0);\n }\n return e;\n} :\n\n// IE <= 8\nfunction CustomEvent (type, params) {\n var e = document.createEventObject();\n e.type = type;\n if (params) {\n e.bubbles = Boolean(params.bubbles);\n e.cancelable = Boolean(params.cancelable);\n e.detail = params.detail;\n } else {\n e.bubbles = false;\n e.cancelable = false;\n e.detail = void 0;\n }\n return e;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/custom-event/index.js\n// module id = 5\n// module chunks = 0 1","export default {\n /**\n * slides scrolled at once\n * @slidesToScroll {Number}\n */\n slidesToScroll: 1,\n\n /**\n * time in milliseconds for the animation of a valid slide attempt\n * @slideSpeed {Number}\n */\n slideSpeed: 300,\n\n /**\n * time in milliseconds for the animation of the rewind after the last slide\n * @rewindSpeed {Number}\n */\n rewindSpeed: 600,\n\n /**\n * time for the snapBack of the slider if the slide attempt was not valid\n * @snapBackSpeed {Number}\n */\n snapBackSpeed: 200,\n\n /**\n * Basic easing functions: https://developer.mozilla.org/de/docs/Web/CSS/transition-timing-function\n * cubic bezier easing functions: http://easings.net/de\n * @ease {String}\n */\n ease: 'ease',\n\n /**\n * if slider reached the last slide, with next click the slider goes back to the startindex.\n * use infinite or rewind, not both\n * @rewind {Boolean}\n */\n rewind: false,\n\n /**\n * number of visible slides or false\n * use infinite or rewind, not both\n * @infinite {number}\n */\n infinite: false,\n\n /**\n * the slide index to show when the slider is initialized.\n * @initialIndex {number}\n */\n initialIndex: 0,\n\n /**\n * class name for slider frame\n * @classNameFrame {string}\n */\n classNameFrame: 'js_frame',\n\n /**\n * class name for slides container\n * @classNameSlideContainer {string}\n */\n classNameSlideContainer: 'js_slides',\n\n /**\n * class name for slider prev control\n * @classNamePrevCtrl {string}\n */\n classNamePrevCtrl: 'js_prev',\n\n /**\n * class name for slider next control\n * @classNameNextCtrl {string}\n */\n classNameNextCtrl: 'js_next',\n\n /**\n * class name for current active slide\n * if emptyString then no class is set\n * @classNameActiveSlide {string}\n */\n classNameActiveSlide: 'active',\n\n /**\n * enables mouse events for swiping on desktop devices\n * @enableMouseEvents {boolean}\n */\n enableMouseEvents: false,\n\n /**\n * window instance\n * @window {object}\n */\n window: typeof window !== 'undefined' ? window : null,\n\n /**\n * If false, slides lory to the first slide on window resize.\n * @rewindOnResize {boolean}\n */\n rewindOnResize: true\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/defaults.js","/* globals jQuery */\nimport {lory} from './lory.js';\n\nfunction init ($) {\n $.fn.lory = function (options) {\n return this.each(function () {\n var instanceOptions;\n\n if (!$.data(this, 'lory')) {\n instanceOptions = $.extend({}, options, $(this).data());\n $.data(this, 'lory', lory(this, instanceOptions));\n }\n });\n };\n};\n\nif (typeof (jQuery) !== 'undefined') {\n init(jQuery);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/jquery.lory.js"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///jquery.lory.min.js","webpack:///webpack/bootstrap 903dc4782db5c772efd4","webpack:///./src/lory.js","webpack:///./src/utils/detect-prefixes.js","webpack:///./src/utils/detect-supportsPassive.js","webpack:///./src/utils/dispatch-event.js","webpack:///./node_modules/custom-event/index.js","webpack:///(webpack)/buildin/global.js","webpack:///./src/defaults.js","webpack:///./src/jquery.lory.js"],"names":["root","factory","exports","module","define","amd","a","i","self","this","modules","__webpack_require__","moduleId","installedModules","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","_interopRequireDefault","obj","default","lory","slider","opts","setActiveElement","slides","currentIndex","_options","options","classNameActiveSlide","forEach","element","index","classList","contains","remove","add","setupInfinite","slideArray","_options2","infinite","front","slice","back","length","cloned","cloneNode","slideContainer","appendChild","reverse","insertBefore","firstChild","addEventListener","prefixes","transitionEnd","onTransitionEnd","children","dispatchSliderEvent","phase","type","detail","_dispatchEvent2","translate","to","duration","ease","style","transition","transform","elementWidth","getBoundingClientRect","width","offsetWidth","slide","nextIndex","direction","_options3","slideSpeed","slidesToScroll","rewind","rewindSpeed","nextSlide","maxOffset","Math","round","slidesWidth","frameWidth","prevCtrl","nextCtrl","min","max","undefined","nextOffset","offsetLeft","abs","position","x","transitionEndCallback","currentSlide","setup","_detectPrefixes2","defaults","_options4","classNameFrame","classNameSlideContainer","classNamePrevCtrl","classNameNextCtrl","enableMouseEvents","initialIndex","frame","getElementsByClassName","y","offsetTop","reset","prev","next","onTouchstart","touchEventParams","onClick","window","onResize","_options5","rewindOnResize","reduce","previousValue","slideTo","returnIndex","destroy","removeEventListener","onTouchmove","onTouchend","Array","apply","removeChild","lastChild","event","_options6","touches","pageX","pageY","touchOffset","time","Date","now","isScrolling","delta","isValid","Number","isOutOfBounds","snapBackSpeed","preventDefault","_detectSupportsPassive2","passive","jQuery","value","_extends","assign","target","arguments","source","key","_detectPrefixes","_detectSupportsPassive","_dispatchEvent","_defaults","_defaults2","detectPrefixes","el","document","createElement","prop","body","detectSupportsPassive","supportsPassive","e","dispatchEvent","CustomEvent","bubbles","cancelable","_customEvent","_customEvent2","global","NativeCustomEvent","foo","createEvent","params","initCustomEvent","createEventObject","Boolean","g","Function","eval","_lory","$","fn","each","instanceOptions","data","extend"],"mappings":"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","file":"jquery.lory.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 8);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; /* globals jQuery */\n\nexports.lory = lory;\n\nvar _detectPrefixes = __webpack_require__(1);\n\nvar _detectPrefixes2 = _interopRequireDefault(_detectPrefixes);\n\nvar _detectSupportsPassive = __webpack_require__(2);\n\nvar _detectSupportsPassive2 = _interopRequireDefault(_detectSupportsPassive);\n\nvar _dispatchEvent = __webpack_require__(3);\n\nvar _dispatchEvent2 = _interopRequireDefault(_dispatchEvent);\n\nvar _defaults = __webpack_require__(6);\n\nvar _defaults2 = _interopRequireDefault(_defaults);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar slice = Array.prototype.slice;\n\nfunction lory(slider, opts) {\n var position = void 0;\n var slidesWidth = void 0;\n var frameWidth = void 0;\n var slides = void 0;\n\n /**\r\n * slider DOM elements\r\n */\n var frame = void 0;\n var slideContainer = void 0;\n var prevCtrl = void 0;\n var nextCtrl = void 0;\n var prefixes = void 0;\n var transitionEndCallback = void 0;\n\n var index = 0;\n var options = {};\n var touchEventParams = (0, _detectSupportsPassive2.default)() ? { passive: true } : false;\n\n /**\r\n * if object is jQuery convert to native DOM element\r\n */\n if (typeof jQuery !== 'undefined' && slider instanceof jQuery) {\n slider = slider[0];\n }\n\n /**\r\n * private\r\n * set active class to element which is the current slide\r\n */\n function setActiveElement(slides, currentIndex) {\n var _options = options,\n classNameActiveSlide = _options.classNameActiveSlide;\n\n\n slides.forEach(function (element, index) {\n if (element.classList.contains(classNameActiveSlide)) {\n element.classList.remove(classNameActiveSlide);\n }\n });\n\n slides[currentIndex].classList.add(classNameActiveSlide);\n }\n\n /**\r\n * private\r\n * setupInfinite: function to setup if infinite is set\r\n *\r\n * @param {array} slideArray\r\n * @return {array} array of updated slideContainer elements\r\n */\n function setupInfinite(slideArray) {\n var _options2 = options,\n infinite = _options2.infinite;\n\n\n var front = slideArray.slice(0, infinite);\n var back = slideArray.slice(slideArray.length - infinite, slideArray.length);\n\n front.forEach(function (element) {\n var cloned = element.cloneNode(true);\n\n slideContainer.appendChild(cloned);\n });\n\n back.reverse().forEach(function (element) {\n var cloned = element.cloneNode(true);\n\n slideContainer.insertBefore(cloned, slideContainer.firstChild);\n });\n\n slideContainer.addEventListener(prefixes.transitionEnd, onTransitionEnd);\n\n return slice.call(slideContainer.children);\n }\n\n /**\r\n * [dispatchSliderEvent description]\r\n * @return {[type]} [description]\r\n */\n function dispatchSliderEvent(phase, type, detail) {\n (0, _dispatchEvent2.default)(slider, phase + '.lory.' + type, detail);\n }\n\n /**\r\n * translates to a given position in a given time in milliseconds\r\n *\r\n * @to {number} number in pixels where to translate to\r\n * @duration {number} time in milliseconds for the transistion\r\n * @ease {string} easing css property\r\n */\n function translate(to, duration, ease) {\n var style = slideContainer && slideContainer.style;\n\n if (style) {\n style[prefixes.transition + 'TimingFunction'] = ease;\n style[prefixes.transition + 'Duration'] = duration + 'ms';\n style[prefixes.transform] = 'translateX(' + to + 'px)';\n }\n }\n\n /**\r\n * returns an element's width\r\n */\n function elementWidth(element) {\n return element.getBoundingClientRect().width || element.offsetWidth;\n }\n\n /**\r\n * slidefunction called by prev, next & touchend\r\n *\r\n * determine nextIndex and slide to next postion\r\n * under restrictions of the defined options\r\n *\r\n * @direction {boolean}\r\n */\n function slide(nextIndex, direction) {\n var _options3 = options,\n slideSpeed = _options3.slideSpeed,\n slidesToScroll = _options3.slidesToScroll,\n infinite = _options3.infinite,\n rewind = _options3.rewind,\n rewindSpeed = _options3.rewindSpeed,\n ease = _options3.ease,\n classNameActiveSlide = _options3.classNameActiveSlide;\n\n\n var duration = slideSpeed;\n\n var nextSlide = direction ? index + 1 : index - 1;\n var maxOffset = Math.round(slidesWidth - frameWidth);\n\n dispatchSliderEvent('before', 'slide', {\n index: index,\n nextSlide: nextSlide\n });\n\n /**\r\n * Reset control classes\r\n */\n if (prevCtrl) {\n prevCtrl.classList.remove('disabled');\n }\n if (nextCtrl) {\n nextCtrl.classList.remove('disabled');\n }\n\n if (typeof nextIndex !== 'number') {\n if (direction) {\n if (infinite && index + infinite * 2 !== slides.length) {\n nextIndex = index + (infinite - index % infinite);\n } else {\n nextIndex = index + slidesToScroll;\n }\n } else {\n if (infinite && index % infinite !== 0) {\n nextIndex = index - index % infinite;\n } else {\n nextIndex = index - slidesToScroll;\n }\n }\n }\n\n nextIndex = Math.min(Math.max(nextIndex, 0), slides.length - 1);\n\n if (infinite && direction === undefined) {\n nextIndex += infinite;\n }\n\n var nextOffset = Math.min(Math.max(slides[nextIndex].offsetLeft * -1, maxOffset * -1), 0);\n\n if (rewind && Math.abs(position.x) === maxOffset && direction) {\n nextOffset = 0;\n nextIndex = 0;\n duration = rewindSpeed;\n }\n\n /**\r\n * translate to the nextOffset by a defined duration and ease function\r\n */\n translate(nextOffset, duration, ease);\n\n /**\r\n * update the position with the next position\r\n */\n position.x = nextOffset;\n\n /**\r\n * update the index with the nextIndex only if\r\n * the offset of the nextIndex is in the range of the maxOffset\r\n */\n if (slides[nextIndex].offsetLeft <= maxOffset) {\n index = nextIndex;\n }\n\n if (infinite && (nextIndex === slides.length - infinite || nextIndex === slides.length - slides.length % infinite || nextIndex === 0)) {\n if (direction) {\n index = infinite;\n }\n\n if (!direction) {\n index = slides.length - infinite * 2;\n }\n\n position.x = slides[index].offsetLeft * -1;\n\n transitionEndCallback = function transitionEndCallback() {\n translate(slides[index].offsetLeft * -1, 0, undefined);\n };\n }\n\n if (classNameActiveSlide) {\n setActiveElement(slice.call(slides), index);\n }\n\n /**\r\n * update classes for next and prev arrows\r\n * based on user settings\r\n */\n if (prevCtrl && !infinite && nextIndex === 0) {\n prevCtrl.classList.add('disabled');\n }\n\n if (nextCtrl && !infinite && !rewind && nextIndex + 1 === slides.length) {\n nextCtrl.classList.add('disabled');\n }\n\n dispatchSliderEvent('after', 'slide', {\n currentSlide: index\n });\n }\n\n /**\r\n * public\r\n * setup function\r\n */\n function setup() {\n dispatchSliderEvent('before', 'init');\n\n prefixes = (0, _detectPrefixes2.default)();\n options = _extends({}, _defaults2.default, opts);\n\n var _options4 = options,\n classNameFrame = _options4.classNameFrame,\n classNameSlideContainer = _options4.classNameSlideContainer,\n classNamePrevCtrl = _options4.classNamePrevCtrl,\n classNameNextCtrl = _options4.classNameNextCtrl,\n enableMouseEvents = _options4.enableMouseEvents,\n classNameActiveSlide = _options4.classNameActiveSlide,\n initialIndex = _options4.initialIndex;\n\n\n index = initialIndex;\n frame = slider.getElementsByClassName(classNameFrame)[0];\n slideContainer = frame.getElementsByClassName(classNameSlideContainer)[0];\n prevCtrl = slider.getElementsByClassName(classNamePrevCtrl)[0];\n nextCtrl = slider.getElementsByClassName(classNameNextCtrl)[0];\n\n position = {\n x: slideContainer.offsetLeft,\n y: slideContainer.offsetTop\n };\n\n if (options.infinite) {\n slides = setupInfinite(slice.call(slideContainer.children));\n } else {\n slides = slice.call(slideContainer.children);\n\n if (prevCtrl) {\n prevCtrl.classList.add('disabled');\n }\n\n if (nextCtrl && slides.length === 1 && !options.rewind) {\n nextCtrl.classList.add('disabled');\n }\n }\n\n reset();\n\n if (classNameActiveSlide) {\n setActiveElement(slides, index);\n }\n\n if (prevCtrl && nextCtrl) {\n prevCtrl.addEventListener('click', prev);\n nextCtrl.addEventListener('click', next);\n }\n\n frame.addEventListener('touchstart', onTouchstart, touchEventParams);\n\n if (enableMouseEvents) {\n frame.addEventListener('mousedown', onTouchstart);\n frame.addEventListener('click', onClick);\n }\n\n options.window.addEventListener('resize', onResize);\n\n dispatchSliderEvent('after', 'init');\n }\n\n /**\r\n * public\r\n * reset function: called on resize\r\n */\n function reset() {\n var _options5 = options,\n infinite = _options5.infinite,\n ease = _options5.ease,\n rewindSpeed = _options5.rewindSpeed,\n rewindOnResize = _options5.rewindOnResize,\n classNameActiveSlide = _options5.classNameActiveSlide,\n initialIndex = _options5.initialIndex;\n\n\n slidesWidth = elementWidth(slideContainer);\n frameWidth = elementWidth(frame);\n\n if (frameWidth === slidesWidth) {\n slidesWidth = slides.reduce(function (previousValue, slide) {\n return previousValue + elementWidth(slide);\n }, 0);\n }\n\n if (rewindOnResize) {\n index = initialIndex;\n } else {\n ease = null;\n rewindSpeed = 0;\n }\n\n if (infinite) {\n translate(slides[index + infinite].offsetLeft * -1, 0, null);\n\n index = index + infinite;\n position.x = slides[index].offsetLeft * -1;\n } else {\n translate(slides[index].offsetLeft * -1, rewindSpeed, ease);\n position.x = slides[index].offsetLeft * -1;\n }\n\n if (classNameActiveSlide) {\n setActiveElement(slice.call(slides), index);\n }\n }\n\n /**\r\n * public\r\n * slideTo: called on clickhandler\r\n */\n function slideTo(index) {\n slide(index);\n }\n\n /**\r\n * public\r\n * returnIndex function: called on clickhandler\r\n */\n function returnIndex() {\n return index - options.infinite || 0;\n }\n\n /**\r\n * public\r\n * prev function: called on clickhandler\r\n */\n function prev() {\n slide(false, false);\n }\n\n /**\r\n * public\r\n * next function: called on clickhandler\r\n */\n function next() {\n slide(false, true);\n }\n\n /**\r\n * public\r\n * destroy function: called to gracefully destroy the lory instance\r\n */\n function destroy() {\n dispatchSliderEvent('before', 'destroy');\n\n // remove event listeners\n frame.removeEventListener(prefixes.transitionEnd, onTransitionEnd);\n frame.removeEventListener('touchstart', onTouchstart, touchEventParams);\n frame.removeEventListener('touchmove', onTouchmove, touchEventParams);\n frame.removeEventListener('touchend', onTouchend);\n frame.removeEventListener('mousemove', onTouchmove);\n frame.removeEventListener('mousedown', onTouchstart);\n frame.removeEventListener('mouseup', onTouchend);\n frame.removeEventListener('mouseleave', onTouchend);\n frame.removeEventListener('click', onClick);\n\n options.window.removeEventListener('resize', onResize);\n\n if (prevCtrl) {\n prevCtrl.removeEventListener('click', prev);\n }\n\n if (nextCtrl) {\n nextCtrl.removeEventListener('click', next);\n }\n\n // remove cloned slides if infinite is set\n if (options.infinite) {\n Array.apply(null, Array(options.infinite)).forEach(function () {\n slideContainer.removeChild(slideContainer.firstChild);\n slideContainer.removeChild(slideContainer.lastChild);\n });\n }\n\n dispatchSliderEvent('after', 'destroy');\n }\n\n // event handling\n\n var touchOffset = void 0;\n var delta = void 0;\n var isScrolling = void 0;\n\n function onTransitionEnd() {\n if (transitionEndCallback) {\n transitionEndCallback();\n\n transitionEndCallback = undefined;\n }\n }\n\n function onTouchstart(event) {\n var _options6 = options,\n enableMouseEvents = _options6.enableMouseEvents;\n\n var touches = event.touches ? event.touches[0] : event;\n\n if (enableMouseEvents) {\n frame.addEventListener('mousemove', onTouchmove);\n frame.addEventListener('mouseup', onTouchend);\n frame.addEventListener('mouseleave', onTouchend);\n }\n\n frame.addEventListener('touchmove', onTouchmove, touchEventParams);\n frame.addEventListener('touchend', onTouchend);\n\n var pageX = touches.pageX,\n pageY = touches.pageY;\n\n\n touchOffset = {\n x: pageX,\n y: pageY,\n time: Date.now()\n };\n\n isScrolling = undefined;\n\n delta = {};\n\n dispatchSliderEvent('on', 'touchstart', {\n event: event\n });\n }\n\n function onTouchmove(event) {\n var touches = event.touches ? event.touches[0] : event;\n var pageX = touches.pageX,\n pageY = touches.pageY;\n\n\n delta = {\n x: pageX - touchOffset.x,\n y: pageY - touchOffset.y\n };\n\n if (typeof isScrolling === 'undefined') {\n isScrolling = !!(isScrolling || Math.abs(delta.x) < Math.abs(delta.y));\n }\n\n if (!isScrolling && touchOffset) {\n translate(position.x + delta.x, 0, null);\n }\n\n // may be\n dispatchSliderEvent('on', 'touchmove', {\n event: event\n });\n }\n\n function onTouchend(event) {\n /**\r\n * time between touchstart and touchend in milliseconds\r\n * @duration {number}\r\n */\n var duration = touchOffset ? Date.now() - touchOffset.time : undefined;\n\n /**\r\n * is valid if:\r\n *\r\n * -> swipe attempt time is over 300 ms\r\n * and\r\n * -> swipe distance is greater than 25px\r\n * or\r\n * -> swipe distance is more then a third of the swipe area\r\n *\r\n * @isValidSlide {Boolean}\r\n */\n var isValid = Number(duration) < 300 && Math.abs(delta.x) > 25 || Math.abs(delta.x) > frameWidth / 3;\n\n /**\r\n * is out of bounds if:\r\n *\r\n * -> index is 0 and delta x is greater than 0\r\n * or\r\n * -> index is the last slide and delta is smaller than 0\r\n *\r\n * @isOutOfBounds {Boolean}\r\n */\n var isOutOfBounds = !index && delta.x > 0 || index === slides.length - 1 && delta.x < 0;\n\n var direction = delta.x < 0;\n\n if (!isScrolling) {\n if (isValid && !isOutOfBounds) {\n slide(false, direction);\n } else {\n translate(position.x, options.snapBackSpeed);\n }\n }\n\n touchOffset = undefined;\n\n /**\r\n * remove eventlisteners after swipe attempt\r\n */\n frame.removeEventListener('touchmove', onTouchmove);\n frame.removeEventListener('touchend', onTouchend);\n frame.removeEventListener('mousemove', onTouchmove);\n frame.removeEventListener('mouseup', onTouchend);\n frame.removeEventListener('mouseleave', onTouchend);\n\n dispatchSliderEvent('on', 'touchend', {\n event: event\n });\n }\n\n function onClick(event) {\n if (delta.x) {\n event.preventDefault();\n }\n }\n\n function onResize(event) {\n if (frameWidth !== elementWidth(frame)) {\n reset();\n\n dispatchSliderEvent('on', 'resize', {\n event: event\n });\n }\n }\n\n // trigger initial setup\n setup();\n\n // expose public api\n return {\n setup: setup,\n reset: reset,\n slideTo: slideTo,\n returnIndex: returnIndex,\n prev: prev,\n next: next,\n destroy: destroy\n };\n}\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = detectPrefixes;\n/**\r\n * Detecting prefixes for saving time and bytes\r\n */\nfunction detectPrefixes() {\n var transform = void 0;\n var transition = void 0;\n var transitionEnd = void 0;\n\n (function () {\n var el = document.createElement('_');\n var style = el.style;\n\n var prop = void 0;\n\n if (style[prop = 'webkitTransition'] === '') {\n transitionEnd = 'webkitTransitionEnd';\n transition = prop;\n }\n\n if (style[prop = 'transition'] === '') {\n transitionEnd = 'transitionend';\n transition = prop;\n }\n\n if (style[prop = 'webkitTransform'] === '') {\n transform = prop;\n }\n\n if (style[prop = 'msTransform'] === '') {\n transform = prop;\n }\n\n if (style[prop = 'transform'] === '') {\n transform = prop;\n }\n\n document.body.insertBefore(el, null);\n style[transform] = 'translateX(0)';\n document.body.removeChild(el);\n })();\n\n return {\n transform: transform,\n transition: transition,\n transitionEnd: transitionEnd\n };\n}\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = detectSupportsPassive;\nfunction detectSupportsPassive() {\n var supportsPassive = false;\n\n try {\n var opts = Object.defineProperty({}, 'passive', {\n get: function get() {\n supportsPassive = true;\n }\n });\n\n window.addEventListener('testPassive', null, opts);\n window.removeEventListener('testPassive', null, opts);\n } catch (e) {}\n\n return supportsPassive;\n}\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = dispatchEvent;\n\nvar _customEvent = __webpack_require__(4);\n\nvar _customEvent2 = _interopRequireDefault(_customEvent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\r\n * dispatch custom events\r\n *\r\n * @param {element} el slideshow element\r\n * @param {string} type custom event name\r\n * @param {object} detail custom detail information\r\n */\nfunction dispatchEvent(target, type, detail) {\n var event = new _customEvent2.default(type, {\n bubbles: true,\n cancelable: true,\n detail: detail\n });\n\n target.dispatchEvent(event);\n}\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(global) {\nvar NativeCustomEvent = global.CustomEvent;\n\nfunction useNative () {\n try {\n var p = new NativeCustomEvent('cat', { detail: { foo: 'bar' } });\n return 'cat' === p.type && 'bar' === p.detail.foo;\n } catch (e) {\n }\n return false;\n}\n\n/**\n * Cross-browser `CustomEvent` constructor.\n *\n * https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent.CustomEvent\n *\n * @public\n */\n\nmodule.exports = useNative() ? NativeCustomEvent :\n\n// IE >= 9\n'undefined' !== typeof document && 'function' === typeof document.createEvent ? function CustomEvent (type, params) {\n var e = document.createEvent('CustomEvent');\n if (params) {\n e.initCustomEvent(type, params.bubbles, params.cancelable, params.detail);\n } else {\n e.initCustomEvent(type, false, false, void 0);\n }\n return e;\n} :\n\n// IE <= 8\nfunction CustomEvent (type, params) {\n var e = document.createEventObject();\n e.type = type;\n if (params) {\n e.bubbles = Boolean(params.bubbles);\n e.cancelable = Boolean(params.cancelable);\n e.detail = params.detail;\n } else {\n e.bubbles = false;\n e.cancelable = false;\n e.detail = void 0;\n }\n return e;\n}\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports) {\n\nvar g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = {\n /**\r\n * slides scrolled at once\r\n * @slidesToScroll {Number}\r\n */\n slidesToScroll: 1,\n\n /**\r\n * time in milliseconds for the animation of a valid slide attempt\r\n * @slideSpeed {Number}\r\n */\n slideSpeed: 300,\n\n /**\r\n * time in milliseconds for the animation of the rewind after the last slide\r\n * @rewindSpeed {Number}\r\n */\n rewindSpeed: 600,\n\n /**\r\n * time for the snapBack of the slider if the slide attempt was not valid\r\n * @snapBackSpeed {Number}\r\n */\n snapBackSpeed: 200,\n\n /**\r\n * Basic easing functions: https://developer.mozilla.org/de/docs/Web/CSS/transition-timing-function\r\n * cubic bezier easing functions: http://easings.net/de\r\n * @ease {String}\r\n */\n ease: 'ease',\n\n /**\r\n * if slider reached the last slide, with next click the slider goes back to the startindex.\r\n * use infinite or rewind, not both\r\n * @rewind {Boolean}\r\n */\n rewind: false,\n\n /**\r\n * number of visible slides or false\r\n * use infinite or rewind, not both\r\n * @infinite {number}\r\n */\n infinite: false,\n\n /**\r\n * the slide index to show when the slider is initialized.\r\n * @initialIndex {number}\r\n */\n initialIndex: 0,\n\n /**\r\n * class name for slider frame\r\n * @classNameFrame {string}\r\n */\n classNameFrame: 'js_frame',\n\n /**\r\n * class name for slides container\r\n * @classNameSlideContainer {string}\r\n */\n classNameSlideContainer: 'js_slides',\n\n /**\r\n * class name for slider prev control\r\n * @classNamePrevCtrl {string}\r\n */\n classNamePrevCtrl: 'js_prev',\n\n /**\r\n * class name for slider next control\r\n * @classNameNextCtrl {string}\r\n */\n classNameNextCtrl: 'js_next',\n\n /**\r\n * class name for current active slide\r\n * if emptyString then no class is set\r\n * @classNameActiveSlide {string}\r\n */\n classNameActiveSlide: 'active',\n\n /**\r\n * enables mouse events for swiping on desktop devices\r\n * @enableMouseEvents {boolean}\r\n */\n enableMouseEvents: false,\n\n /**\r\n * window instance\r\n * @window {object}\r\n */\n window: typeof window !== 'undefined' ? window : null,\n\n /**\r\n * If false, slides lory to the first slide on window resize.\r\n * @rewindOnResize {boolean}\r\n */\n rewindOnResize: true\n};\n\n/***/ }),\n/* 7 */,\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _lory = __webpack_require__(0);\n\nfunction init($) {\n $.fn.lory = function (options) {\n return this.each(function () {\n var instanceOptions;\n\n if (!$.data(this, 'lory')) {\n instanceOptions = $.extend({}, options, $(this).data());\n $.data(this, 'lory', (0, _lory.lory)(this, instanceOptions));\n }\n });\n };\n} /* globals jQuery */\n;\n\nif (typeof jQuery !== 'undefined') {\n init(jQuery);\n}\n\n/***/ })\n/******/ ]);\n});\n\n\n// WEBPACK FOOTER //\n// jquery.lory.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 8);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 903dc4782db5c772efd4","/* globals jQuery */\r\n\r\nimport detectPrefixes from './utils/detect-prefixes.js';\r\nimport supportsPassive from './utils/detect-supportsPassive';\r\nimport dispatchEvent from './utils/dispatch-event.js';\r\nimport defaults from './defaults.js';\r\n\r\nconst slice = Array.prototype.slice;\r\n\r\nexport function lory (slider, opts) {\r\n let position;\r\n let slidesWidth;\r\n let frameWidth;\r\n let slides;\r\n\r\n /**\r\n * slider DOM elements\r\n */\r\n let frame;\r\n let slideContainer;\r\n let prevCtrl;\r\n let nextCtrl;\r\n let prefixes;\r\n let transitionEndCallback;\r\n\r\n let index = 0;\r\n let options = {};\r\n let touchEventParams = supportsPassive() ? { passive: true } : false;\r\n\r\n /**\r\n * if object is jQuery convert to native DOM element\r\n */\r\n if (typeof jQuery !== 'undefined' && slider instanceof jQuery) {\r\n slider = slider[0];\r\n }\r\n\r\n /**\r\n * private\r\n * set active class to element which is the current slide\r\n */\r\n function setActiveElement (slides, currentIndex) {\r\n const {classNameActiveSlide} = options;\r\n\r\n slides.forEach((element, index) => {\r\n if (element.classList.contains(classNameActiveSlide)) {\r\n element.classList.remove(classNameActiveSlide);\r\n }\r\n });\r\n\r\n slides[currentIndex].classList.add(classNameActiveSlide);\r\n }\r\n\r\n /**\r\n * private\r\n * setupInfinite: function to setup if infinite is set\r\n *\r\n * @param {array} slideArray\r\n * @return {array} array of updated slideContainer elements\r\n */\r\n function setupInfinite (slideArray) {\r\n const {infinite} = options;\r\n\r\n const front = slideArray.slice(0, infinite);\r\n const back = slideArray.slice(slideArray.length - infinite, slideArray.length);\r\n\r\n front.forEach(function (element) {\r\n const cloned = element.cloneNode(true);\r\n\r\n slideContainer.appendChild(cloned);\r\n });\r\n\r\n back.reverse()\r\n .forEach(function (element) {\r\n const cloned = element.cloneNode(true);\r\n\r\n slideContainer.insertBefore(cloned, slideContainer.firstChild);\r\n });\r\n\r\n slideContainer.addEventListener(prefixes.transitionEnd, onTransitionEnd);\r\n\r\n return slice.call(slideContainer.children);\r\n }\r\n\r\n /**\r\n * [dispatchSliderEvent description]\r\n * @return {[type]} [description]\r\n */\r\n function dispatchSliderEvent (phase, type, detail) {\r\n dispatchEvent(slider, `${phase}.lory.${type}`, detail);\r\n }\r\n\r\n /**\r\n * translates to a given position in a given time in milliseconds\r\n *\r\n * @to {number} number in pixels where to translate to\r\n * @duration {number} time in milliseconds for the transistion\r\n * @ease {string} easing css property\r\n */\r\n function translate (to, duration, ease) {\r\n const style = slideContainer && slideContainer.style;\r\n\r\n if (style) {\r\n style[prefixes.transition + 'TimingFunction'] = ease;\r\n style[prefixes.transition + 'Duration'] = duration + 'ms';\r\n style[prefixes.transform] = 'translateX(' + to + 'px)';\r\n }\r\n }\r\n\r\n /**\r\n * returns an element's width\r\n */\r\n function elementWidth (element) {\r\n return element.getBoundingClientRect().width || element.offsetWidth;\r\n }\r\n\r\n /**\r\n * slidefunction called by prev, next & touchend\r\n *\r\n * determine nextIndex and slide to next postion\r\n * under restrictions of the defined options\r\n *\r\n * @direction {boolean}\r\n */\r\n function slide (nextIndex, direction) {\r\n const {\r\n slideSpeed,\r\n slidesToScroll,\r\n infinite,\r\n rewind,\r\n rewindSpeed,\r\n ease,\r\n classNameActiveSlide\r\n } = options;\r\n\r\n let duration = slideSpeed;\r\n\r\n const nextSlide = direction ? index + 1 : index - 1;\r\n const maxOffset = Math.round(slidesWidth - frameWidth);\r\n\r\n dispatchSliderEvent('before', 'slide', {\r\n index,\r\n nextSlide\r\n });\r\n\r\n /**\r\n * Reset control classes\r\n */\r\n if (prevCtrl) {\r\n prevCtrl.classList.remove('disabled');\r\n }\r\n if (nextCtrl) {\r\n nextCtrl.classList.remove('disabled');\r\n }\r\n\r\n if (typeof nextIndex !== 'number') {\r\n if (direction) {\r\n if (infinite && index + (infinite * 2) !== slides.length) {\r\n nextIndex = index + (infinite - index % infinite);\r\n } else {\r\n nextIndex = index + slidesToScroll;\r\n }\r\n } else {\r\n if (infinite && index % infinite !== 0) {\r\n nextIndex = index - index % infinite;\r\n } else {\r\n nextIndex = index - slidesToScroll;\r\n }\r\n }\r\n }\r\n\r\n nextIndex = Math.min(Math.max(nextIndex, 0), slides.length - 1);\r\n\r\n if (infinite && direction === undefined) {\r\n nextIndex += infinite;\r\n }\r\n\r\n let nextOffset = Math.min(Math.max(slides[nextIndex].offsetLeft * -1, maxOffset * -1), 0);\r\n\r\n if (rewind && Math.abs(position.x) === maxOffset && direction) {\r\n nextOffset = 0;\r\n nextIndex = 0;\r\n duration = rewindSpeed;\r\n }\r\n\r\n /**\r\n * translate to the nextOffset by a defined duration and ease function\r\n */\r\n translate(nextOffset, duration, ease);\r\n\r\n /**\r\n * update the position with the next position\r\n */\r\n position.x = nextOffset;\r\n\r\n /**\r\n * update the index with the nextIndex only if\r\n * the offset of the nextIndex is in the range of the maxOffset\r\n */\r\n if (slides[nextIndex].offsetLeft <= maxOffset) {\r\n index = nextIndex;\r\n }\r\n\r\n if (infinite && (nextIndex === slides.length - infinite ||\r\n nextIndex === slides.length - slides.length % infinite || nextIndex === 0)) {\r\n if (direction) {\r\n index = infinite;\r\n }\r\n\r\n if (!direction) {\r\n index = slides.length - (infinite * 2);\r\n }\r\n\r\n position.x = slides[index].offsetLeft * -1;\r\n\r\n transitionEndCallback = function () {\r\n translate(slides[index].offsetLeft * -1, 0, undefined);\r\n };\r\n }\r\n\r\n if (classNameActiveSlide) {\r\n setActiveElement(slice.call(slides), index);\r\n }\r\n\r\n /**\r\n * update classes for next and prev arrows\r\n * based on user settings\r\n */\r\n if (prevCtrl && !infinite && nextIndex === 0) {\r\n prevCtrl.classList.add('disabled');\r\n }\r\n\r\n if (nextCtrl && !infinite && !rewind && ((nextIndex + 1) === slides.length)) {\r\n nextCtrl.classList.add('disabled');\r\n }\r\n\r\n dispatchSliderEvent('after', 'slide', {\r\n currentSlide: index\r\n });\r\n }\r\n\r\n /**\r\n * public\r\n * setup function\r\n */\r\n function setup () {\r\n dispatchSliderEvent('before', 'init');\r\n\r\n prefixes = detectPrefixes();\r\n options = {...defaults, ...opts};\r\n\r\n const {\r\n classNameFrame,\r\n classNameSlideContainer,\r\n classNamePrevCtrl,\r\n classNameNextCtrl,\r\n enableMouseEvents,\r\n classNameActiveSlide,\r\n initialIndex\r\n } = options;\r\n\r\n index = initialIndex;\r\n frame = slider.getElementsByClassName(classNameFrame)[0];\r\n slideContainer = frame.getElementsByClassName(classNameSlideContainer)[0];\r\n prevCtrl = slider.getElementsByClassName(classNamePrevCtrl)[0];\r\n nextCtrl = slider.getElementsByClassName(classNameNextCtrl)[0];\r\n\r\n position = {\r\n x: slideContainer.offsetLeft,\r\n y: slideContainer.offsetTop\r\n };\r\n\r\n if (options.infinite) {\r\n slides = setupInfinite(slice.call(slideContainer.children));\r\n } else {\r\n slides = slice.call(slideContainer.children);\r\n\r\n if (prevCtrl) {\r\n prevCtrl.classList.add('disabled');\r\n }\r\n\r\n if (nextCtrl && (slides.length === 1) && !options.rewind) {\r\n nextCtrl.classList.add('disabled');\r\n }\r\n }\r\n\r\n reset();\r\n\r\n if (classNameActiveSlide) {\r\n setActiveElement(slides, index);\r\n }\r\n\r\n if (prevCtrl && nextCtrl) {\r\n prevCtrl.addEventListener('click', prev);\r\n nextCtrl.addEventListener('click', next);\r\n }\r\n\r\n frame.addEventListener('touchstart', onTouchstart, touchEventParams);\r\n\r\n if (enableMouseEvents) {\r\n frame.addEventListener('mousedown', onTouchstart);\r\n frame.addEventListener('click', onClick);\r\n }\r\n\r\n options.window.addEventListener('resize', onResize);\r\n\r\n dispatchSliderEvent('after', 'init');\r\n }\r\n\r\n /**\r\n * public\r\n * reset function: called on resize\r\n */\r\n function reset () {\r\n var {infinite, ease, rewindSpeed, rewindOnResize, classNameActiveSlide, initialIndex} = options;\r\n\r\n slidesWidth = elementWidth(slideContainer);\r\n frameWidth = elementWidth(frame);\r\n\r\n if (frameWidth === slidesWidth) {\r\n slidesWidth = slides.reduce(function (previousValue, slide) {\r\n return previousValue + elementWidth(slide);\r\n }, 0);\r\n }\r\n\r\n if (rewindOnResize) {\r\n index = initialIndex;\r\n } else {\r\n ease = null;\r\n rewindSpeed = 0;\r\n }\r\n\r\n if (infinite) {\r\n translate(slides[index + infinite].offsetLeft * -1, 0, null);\r\n\r\n index = index + infinite;\r\n position.x = slides[index].offsetLeft * -1;\r\n } else {\r\n translate(slides[index].offsetLeft * -1, rewindSpeed, ease);\r\n position.x = slides[index].offsetLeft * -1;\r\n }\r\n\r\n if (classNameActiveSlide) {\r\n setActiveElement(slice.call(slides), index);\r\n }\r\n }\r\n\r\n /**\r\n * public\r\n * slideTo: called on clickhandler\r\n */\r\n function slideTo (index) {\r\n slide(index);\r\n }\r\n\r\n /**\r\n * public\r\n * returnIndex function: called on clickhandler\r\n */\r\n function returnIndex () {\r\n return index - options.infinite || 0;\r\n }\r\n\r\n /**\r\n * public\r\n * prev function: called on clickhandler\r\n */\r\n function prev () {\r\n slide(false, false);\r\n }\r\n\r\n /**\r\n * public\r\n * next function: called on clickhandler\r\n */\r\n function next () {\r\n slide(false, true);\r\n }\r\n\r\n /**\r\n * public\r\n * destroy function: called to gracefully destroy the lory instance\r\n */\r\n function destroy () {\r\n dispatchSliderEvent('before', 'destroy');\r\n\r\n // remove event listeners\r\n frame.removeEventListener(prefixes.transitionEnd, onTransitionEnd);\r\n frame.removeEventListener('touchstart', onTouchstart, touchEventParams);\r\n frame.removeEventListener('touchmove', onTouchmove, touchEventParams);\r\n frame.removeEventListener('touchend', onTouchend);\r\n frame.removeEventListener('mousemove', onTouchmove);\r\n frame.removeEventListener('mousedown', onTouchstart);\r\n frame.removeEventListener('mouseup', onTouchend);\r\n frame.removeEventListener('mouseleave', onTouchend);\r\n frame.removeEventListener('click', onClick);\r\n\r\n options.window.removeEventListener('resize', onResize);\r\n\r\n if (prevCtrl) {\r\n prevCtrl.removeEventListener('click', prev);\r\n }\r\n\r\n if (nextCtrl) {\r\n nextCtrl.removeEventListener('click', next);\r\n }\r\n\r\n // remove cloned slides if infinite is set\r\n if (options.infinite) {\r\n Array.apply(null, Array(options.infinite)).forEach(function () {\r\n slideContainer.removeChild(slideContainer.firstChild);\r\n slideContainer.removeChild(slideContainer.lastChild);\r\n });\r\n }\r\n\r\n dispatchSliderEvent('after', 'destroy');\r\n }\r\n\r\n // event handling\r\n\r\n let touchOffset;\r\n let delta;\r\n let isScrolling;\r\n\r\n function onTransitionEnd () {\r\n if (transitionEndCallback) {\r\n transitionEndCallback();\r\n\r\n transitionEndCallback = undefined;\r\n }\r\n }\r\n\r\n function onTouchstart (event) {\r\n const {enableMouseEvents} = options;\r\n const touches = event.touches ? event.touches[0] : event;\r\n\r\n if (enableMouseEvents) {\r\n frame.addEventListener('mousemove', onTouchmove);\r\n frame.addEventListener('mouseup', onTouchend);\r\n frame.addEventListener('mouseleave', onTouchend);\r\n }\r\n\r\n frame.addEventListener('touchmove', onTouchmove, touchEventParams);\r\n frame.addEventListener('touchend', onTouchend);\r\n\r\n const {pageX, pageY} = touches;\r\n\r\n touchOffset = {\r\n x: pageX,\r\n y: pageY,\r\n time: Date.now()\r\n };\r\n\r\n isScrolling = undefined;\r\n\r\n delta = {};\r\n\r\n dispatchSliderEvent('on', 'touchstart', {\r\n event\r\n });\r\n }\r\n\r\n function onTouchmove (event) {\r\n const touches = event.touches ? event.touches[0] : event;\r\n const {pageX, pageY} = touches;\r\n\r\n delta = {\r\n x: pageX - touchOffset.x,\r\n y: pageY - touchOffset.y\r\n };\r\n\r\n if (typeof isScrolling === 'undefined') {\r\n isScrolling = !!(isScrolling || Math.abs(delta.x) < Math.abs(delta.y));\r\n }\r\n\r\n if (!isScrolling && touchOffset) {\r\n translate(position.x + delta.x, 0, null);\r\n }\r\n\r\n // may be\r\n dispatchSliderEvent('on', 'touchmove', {\r\n event\r\n });\r\n }\r\n\r\n function onTouchend (event) {\r\n /**\r\n * time between touchstart and touchend in milliseconds\r\n * @duration {number}\r\n */\r\n const duration = touchOffset ? Date.now() - touchOffset.time : undefined;\r\n\r\n /**\r\n * is valid if:\r\n *\r\n * -> swipe attempt time is over 300 ms\r\n * and\r\n * -> swipe distance is greater than 25px\r\n * or\r\n * -> swipe distance is more then a third of the swipe area\r\n *\r\n * @isValidSlide {Boolean}\r\n */\r\n const isValid = Number(duration) < 300 &&\r\n Math.abs(delta.x) > 25 ||\r\n Math.abs(delta.x) > frameWidth / 3;\r\n\r\n /**\r\n * is out of bounds if:\r\n *\r\n * -> index is 0 and delta x is greater than 0\r\n * or\r\n * -> index is the last slide and delta is smaller than 0\r\n *\r\n * @isOutOfBounds {Boolean}\r\n */\r\n const isOutOfBounds = !index && delta.x > 0 ||\r\n index === slides.length - 1 && delta.x < 0;\r\n\r\n const direction = delta.x < 0;\r\n\r\n if (!isScrolling) {\r\n if (isValid && !isOutOfBounds) {\r\n slide(false, direction);\r\n } else {\r\n translate(position.x, options.snapBackSpeed);\r\n }\r\n }\r\n\r\n touchOffset = undefined;\r\n\r\n /**\r\n * remove eventlisteners after swipe attempt\r\n */\r\n frame.removeEventListener('touchmove', onTouchmove);\r\n frame.removeEventListener('touchend', onTouchend);\r\n frame.removeEventListener('mousemove', onTouchmove);\r\n frame.removeEventListener('mouseup', onTouchend);\r\n frame.removeEventListener('mouseleave', onTouchend);\r\n\r\n dispatchSliderEvent('on', 'touchend', {\r\n event\r\n });\r\n }\r\n\r\n function onClick (event) {\r\n if (delta.x) {\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n function onResize (event) {\r\n if (frameWidth !== elementWidth(frame)) {\r\n reset();\r\n\r\n dispatchSliderEvent('on', 'resize', {\r\n event\r\n });\r\n }\r\n }\r\n\r\n // trigger initial setup\r\n setup();\r\n\r\n // expose public api\r\n return {\r\n setup,\r\n reset,\r\n slideTo,\r\n returnIndex,\r\n prev,\r\n next,\r\n destroy\r\n };\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/lory.js","/**\r\n * Detecting prefixes for saving time and bytes\r\n */\r\nexport default function detectPrefixes () {\r\n let transform;\r\n let transition;\r\n let transitionEnd;\r\n\r\n (function () {\r\n let el = document.createElement('_');\r\n let style = el.style;\r\n\r\n let prop;\r\n\r\n if (style[prop = 'webkitTransition'] === '') {\r\n transitionEnd = 'webkitTransitionEnd';\r\n transition = prop;\r\n }\r\n\r\n if (style[prop = 'transition'] === '') {\r\n transitionEnd = 'transitionend';\r\n transition = prop;\r\n }\r\n\r\n if (style[prop = 'webkitTransform'] === '') {\r\n transform = prop;\r\n }\r\n\r\n if (style[prop = 'msTransform'] === '') {\r\n transform = prop;\r\n }\r\n\r\n if (style[prop = 'transform'] === '') {\r\n transform = prop;\r\n }\r\n\r\n document.body.insertBefore(el, null);\r\n style[transform] = 'translateX(0)';\r\n document.body.removeChild(el);\r\n }());\r\n\r\n return {\r\n transform,\r\n transition,\r\n transitionEnd\r\n };\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/detect-prefixes.js","export default function detectSupportsPassive () {\r\n let supportsPassive = false;\r\n\r\n try {\r\n let opts = Object.defineProperty({}, 'passive', {\r\n get () {\r\n supportsPassive = true;\r\n }\r\n });\r\n\r\n window.addEventListener('testPassive', null, opts);\r\n window.removeEventListener('testPassive', null, opts);\r\n } catch (e) {}\r\n\r\n return supportsPassive;\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/detect-supportsPassive.js","import CustomEvent from 'custom-event';\r\n\r\n/**\r\n * dispatch custom events\r\n *\r\n * @param {element} el slideshow element\r\n * @param {string} type custom event name\r\n * @param {object} detail custom detail information\r\n */\r\nexport default function dispatchEvent (target, type, detail) {\r\n let event = new CustomEvent(\r\n type,\r\n {\r\n bubbles: true,\r\n cancelable: true,\r\n detail: detail\r\n }\r\n );\r\n\r\n target.dispatchEvent(event);\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/dispatch-event.js","\nvar NativeCustomEvent = global.CustomEvent;\n\nfunction useNative () {\n try {\n var p = new NativeCustomEvent('cat', { detail: { foo: 'bar' } });\n return 'cat' === p.type && 'bar' === p.detail.foo;\n } catch (e) {\n }\n return false;\n}\n\n/**\n * Cross-browser `CustomEvent` constructor.\n *\n * https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent.CustomEvent\n *\n * @public\n */\n\nmodule.exports = useNative() ? NativeCustomEvent :\n\n// IE >= 9\n'undefined' !== typeof document && 'function' === typeof document.createEvent ? function CustomEvent (type, params) {\n var e = document.createEvent('CustomEvent');\n if (params) {\n e.initCustomEvent(type, params.bubbles, params.cancelable, params.detail);\n } else {\n e.initCustomEvent(type, false, false, void 0);\n }\n return e;\n} :\n\n// IE <= 8\nfunction CustomEvent (type, params) {\n var e = document.createEventObject();\n e.type = type;\n if (params) {\n e.bubbles = Boolean(params.bubbles);\n e.cancelable = Boolean(params.cancelable);\n e.detail = params.detail;\n } else {\n e.bubbles = false;\n e.cancelable = false;\n e.detail = void 0;\n }\n return e;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/custom-event/index.js\n// module id = 4\n// module chunks = 0 1","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/global.js\n// module id = 5\n// module chunks = 0 1","export default {\r\n /**\r\n * slides scrolled at once\r\n * @slidesToScroll {Number}\r\n */\r\n slidesToScroll: 1,\r\n\r\n /**\r\n * time in milliseconds for the animation of a valid slide attempt\r\n * @slideSpeed {Number}\r\n */\r\n slideSpeed: 300,\r\n\r\n /**\r\n * time in milliseconds for the animation of the rewind after the last slide\r\n * @rewindSpeed {Number}\r\n */\r\n rewindSpeed: 600,\r\n\r\n /**\r\n * time for the snapBack of the slider if the slide attempt was not valid\r\n * @snapBackSpeed {Number}\r\n */\r\n snapBackSpeed: 200,\r\n\r\n /**\r\n * Basic easing functions: https://developer.mozilla.org/de/docs/Web/CSS/transition-timing-function\r\n * cubic bezier easing functions: http://easings.net/de\r\n * @ease {String}\r\n */\r\n ease: 'ease',\r\n\r\n /**\r\n * if slider reached the last slide, with next click the slider goes back to the startindex.\r\n * use infinite or rewind, not both\r\n * @rewind {Boolean}\r\n */\r\n rewind: false,\r\n\r\n /**\r\n * number of visible slides or false\r\n * use infinite or rewind, not both\r\n * @infinite {number}\r\n */\r\n infinite: false,\r\n\r\n /**\r\n * the slide index to show when the slider is initialized.\r\n * @initialIndex {number}\r\n */\r\n initialIndex: 0,\r\n\r\n /**\r\n * class name for slider frame\r\n * @classNameFrame {string}\r\n */\r\n classNameFrame: 'js_frame',\r\n\r\n /**\r\n * class name for slides container\r\n * @classNameSlideContainer {string}\r\n */\r\n classNameSlideContainer: 'js_slides',\r\n\r\n /**\r\n * class name for slider prev control\r\n * @classNamePrevCtrl {string}\r\n */\r\n classNamePrevCtrl: 'js_prev',\r\n\r\n /**\r\n * class name for slider next control\r\n * @classNameNextCtrl {string}\r\n */\r\n classNameNextCtrl: 'js_next',\r\n\r\n /**\r\n * class name for current active slide\r\n * if emptyString then no class is set\r\n * @classNameActiveSlide {string}\r\n */\r\n classNameActiveSlide: 'active',\r\n\r\n /**\r\n * enables mouse events for swiping on desktop devices\r\n * @enableMouseEvents {boolean}\r\n */\r\n enableMouseEvents: false,\r\n\r\n /**\r\n * window instance\r\n * @window {object}\r\n */\r\n window: typeof window !== 'undefined' ? window : null,\r\n\r\n /**\r\n * If false, slides lory to the first slide on window resize.\r\n * @rewindOnResize {boolean}\r\n */\r\n rewindOnResize: true\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/defaults.js","/* globals jQuery */\r\nimport {lory} from './lory.js';\r\n\r\nfunction init ($) {\r\n $.fn.lory = function (options) {\r\n return this.each(function () {\r\n var instanceOptions;\r\n\r\n if (!$.data(this, 'lory')) {\r\n instanceOptions = $.extend({}, options, $(this).data());\r\n $.data(this, 'lory', lory(this, instanceOptions));\r\n }\r\n });\r\n };\r\n};\r\n\r\nif (typeof (jQuery) !== 'undefined') {\r\n init(jQuery);\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/jquery.lory.js"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/lory.js b/dist/lory.js index b35805f..3477bfe 100644 --- a/dist/lory.js +++ b/dist/lory.js @@ -75,33 +75,6 @@ return /******/ (function(modules) { // webpackBootstrap /************************************************************************/ /******/ ([ /* 0 */ -/***/ (function(module, exports) { - -var g; - -// This works in non-strict mode -g = (function() { - return this; -})(); - -try { - // This works if eval is allowed (see CSP) - g = g || Function("return this")() || (1,eval)("this"); -} catch(e) { - // This works if the window reference is available - if(typeof window === "object") - g = window; -} - -// g can still be undefined, but nothing to do about it... -// We return undefined, instead of nothing here, so it's -// easier to handle this case. if(!global) { ...} - -module.exports = g; - - -/***/ }), -/* 1 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -115,15 +88,15 @@ var _extends = Object.assign || function (target) { for (var i = 1; i < argument exports.lory = lory; -var _detectPrefixes = __webpack_require__(2); +var _detectPrefixes = __webpack_require__(1); var _detectPrefixes2 = _interopRequireDefault(_detectPrefixes); -var _detectSupportsPassive = __webpack_require__(3); +var _detectSupportsPassive = __webpack_require__(2); var _detectSupportsPassive2 = _interopRequireDefault(_detectSupportsPassive); -var _dispatchEvent = __webpack_require__(4); +var _dispatchEvent = __webpack_require__(3); var _dispatchEvent2 = _interopRequireDefault(_dispatchEvent); @@ -141,8 +114,8 @@ function lory(slider, opts) { var frameWidth = void 0; var slides = void 0; - /** - * slider DOM elements + /** + * slider DOM elements */ var frame = void 0; var slideContainer = void 0; @@ -155,16 +128,16 @@ function lory(slider, opts) { var options = {}; var touchEventParams = (0, _detectSupportsPassive2.default)() ? { passive: true } : false; - /** - * if object is jQuery convert to native DOM element + /** + * if object is jQuery convert to native DOM element */ if (typeof jQuery !== 'undefined' && slider instanceof jQuery) { slider = slider[0]; } - /** - * private - * set active class to element which is the current slide + /** + * private + * set active class to element which is the current slide */ function setActiveElement(slides, currentIndex) { var _options = options, @@ -180,12 +153,12 @@ function lory(slider, opts) { slides[currentIndex].classList.add(classNameActiveSlide); } - /** - * private - * setupInfinite: function to setup if infinite is set - * - * @param {array} slideArray - * @return {array} array of updated slideContainer elements + /** + * private + * setupInfinite: function to setup if infinite is set + * + * @param {array} slideArray + * @return {array} array of updated slideContainer elements */ function setupInfinite(slideArray) { var _options2 = options, @@ -212,20 +185,20 @@ function lory(slider, opts) { return slice.call(slideContainer.children); } - /** - * [dispatchSliderEvent description] - * @return {[type]} [description] + /** + * [dispatchSliderEvent description] + * @return {[type]} [description] */ function dispatchSliderEvent(phase, type, detail) { (0, _dispatchEvent2.default)(slider, phase + '.lory.' + type, detail); } - /** - * translates to a given position in a given time in milliseconds - * - * @to {number} number in pixels where to translate to - * @duration {number} time in milliseconds for the transistion - * @ease {string} easing css property + /** + * translates to a given position in a given time in milliseconds + * + * @to {number} number in pixels where to translate to + * @duration {number} time in milliseconds for the transistion + * @ease {string} easing css property */ function translate(to, duration, ease) { var style = slideContainer && slideContainer.style; @@ -233,29 +206,24 @@ function lory(slider, opts) { if (style) { style[prefixes.transition + 'TimingFunction'] = ease; style[prefixes.transition + 'Duration'] = duration + 'ms'; - - if (prefixes.hasTranslate3d) { - style[prefixes.transform] = 'translate3d(' + to + 'px, 0, 0)'; - } else { - style[prefixes.transform] = 'translate(' + to + 'px, 0)'; - } + style[prefixes.transform] = 'translateX(' + to + 'px)'; } } - /** - * returns an element's width + /** + * returns an element's width */ function elementWidth(element) { return element.getBoundingClientRect().width || element.offsetWidth; } - /** - * slidefunction called by prev, next & touchend - * - * determine nextIndex and slide to next postion - * under restrictions of the defined options - * - * @direction {boolean} + /** + * slidefunction called by prev, next & touchend + * + * determine nextIndex and slide to next postion + * under restrictions of the defined options + * + * @direction {boolean} */ function slide(nextIndex, direction) { var _options3 = options, @@ -278,8 +246,8 @@ function lory(slider, opts) { nextSlide: nextSlide }); - /** - * Reset control classes + /** + * Reset control classes */ if (prevCtrl) { prevCtrl.classList.remove('disabled'); @@ -318,19 +286,19 @@ function lory(slider, opts) { duration = rewindSpeed; } - /** - * translate to the nextOffset by a defined duration and ease function + /** + * translate to the nextOffset by a defined duration and ease function */ translate(nextOffset, duration, ease); - /** - * update the position with the next position + /** + * update the position with the next position */ position.x = nextOffset; - /** - * update the index with the nextIndex only if - * the offset of the nextIndex is in the range of the maxOffset + /** + * update the index with the nextIndex only if + * the offset of the nextIndex is in the range of the maxOffset */ if (slides[nextIndex].offsetLeft <= maxOffset) { index = nextIndex; @@ -356,9 +324,9 @@ function lory(slider, opts) { setActiveElement(slice.call(slides), index); } - /** - * update classes for next and prev arrows - * based on user settings + /** + * update classes for next and prev arrows + * based on user settings */ if (prevCtrl && !infinite && nextIndex === 0) { prevCtrl.classList.add('disabled'); @@ -373,9 +341,9 @@ function lory(slider, opts) { }); } - /** - * public - * setup function + /** + * public + * setup function */ function setup() { dispatchSliderEvent('before', 'init'); @@ -441,9 +409,9 @@ function lory(slider, opts) { dispatchSliderEvent('after', 'init'); } - /** - * public - * reset function: called on resize + /** + * public + * reset function: called on resize */ function reset() { var _options5 = options, @@ -486,41 +454,41 @@ function lory(slider, opts) { } } - /** - * public - * slideTo: called on clickhandler + /** + * public + * slideTo: called on clickhandler */ function slideTo(index) { slide(index); } - /** - * public - * returnIndex function: called on clickhandler + /** + * public + * returnIndex function: called on clickhandler */ function returnIndex() { return index - options.infinite || 0; } - /** - * public - * prev function: called on clickhandler + /** + * public + * prev function: called on clickhandler */ function prev() { slide(false, false); } - /** - * public - * next function: called on clickhandler + /** + * public + * next function: called on clickhandler */ function next() { slide(false, true); } - /** - * public - * destroy function: called to gracefully destroy the lory instance + /** + * public + * destroy function: called to gracefully destroy the lory instance */ function destroy() { dispatchSliderEvent('before', 'destroy'); @@ -631,33 +599,33 @@ function lory(slider, opts) { } function onTouchend(event) { - /** - * time between touchstart and touchend in milliseconds - * @duration {number} + /** + * time between touchstart and touchend in milliseconds + * @duration {number} */ var duration = touchOffset ? Date.now() - touchOffset.time : undefined; - /** - * is valid if: - * - * -> swipe attempt time is over 300 ms - * and - * -> swipe distance is greater than 25px - * or - * -> swipe distance is more then a third of the swipe area - * - * @isValidSlide {Boolean} + /** + * is valid if: + * + * -> swipe attempt time is over 300 ms + * and + * -> swipe distance is greater than 25px + * or + * -> swipe distance is more then a third of the swipe area + * + * @isValidSlide {Boolean} */ var isValid = Number(duration) < 300 && Math.abs(delta.x) > 25 || Math.abs(delta.x) > frameWidth / 3; - /** - * is out of bounds if: - * - * -> index is 0 and delta x is greater than 0 - * or - * -> index is the last slide and delta is smaller than 0 - * - * @isOutOfBounds {Boolean} + /** + * is out of bounds if: + * + * -> index is 0 and delta x is greater than 0 + * or + * -> index is the last slide and delta is smaller than 0 + * + * @isOutOfBounds {Boolean} */ var isOutOfBounds = !index && delta.x > 0 || index === slides.length - 1 && delta.x < 0; @@ -673,8 +641,8 @@ function lory(slider, opts) { touchOffset = undefined; - /** - * remove eventlisteners after swipe attempt + /** + * remove eventlisteners after swipe attempt */ frame.removeEventListener('touchmove', onTouchmove); frame.removeEventListener('touchend', onTouchend); @@ -719,24 +687,23 @@ function lory(slider, opts) { } /***/ }), -/* 2 */ +/* 1 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -/* WEBPACK VAR INJECTION */(function(global) { + Object.defineProperty(exports, "__esModule", { value: true }); exports.default = detectPrefixes; -/** - * Detecting prefixes for saving time and bytes +/** + * Detecting prefixes for saving time and bytes */ function detectPrefixes() { var transform = void 0; var transition = void 0; var transitionEnd = void 0; - var hasTranslate3d = void 0; (function () { var el = document.createElement('_'); @@ -767,22 +734,19 @@ function detectPrefixes() { } document.body.insertBefore(el, null); - style[transform] = 'translate3d(0, 0, 0)'; - hasTranslate3d = !!global.getComputedStyle(el).getPropertyValue(transform); + style[transform] = 'translateX(0)'; document.body.removeChild(el); })(); return { transform: transform, transition: transition, - transitionEnd: transitionEnd, - hasTranslate3d: hasTranslate3d + transitionEnd: transitionEnd }; } -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0))) /***/ }), -/* 3 */ +/* 2 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -810,7 +774,7 @@ function detectSupportsPassive() { } /***/ }), -/* 4 */ +/* 3 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -821,18 +785,18 @@ Object.defineProperty(exports, "__esModule", { }); exports.default = dispatchEvent; -var _customEvent = __webpack_require__(5); +var _customEvent = __webpack_require__(4); var _customEvent2 = _interopRequireDefault(_customEvent); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -/** - * dispatch custom events - * - * @param {element} el slideshow element - * @param {string} type custom event name - * @param {object} detail custom detail information +/** + * dispatch custom events + * + * @param {element} el slideshow element + * @param {string} type custom event name + * @param {object} detail custom detail information */ function dispatchEvent(target, type, detail) { var event = new _customEvent2.default(type, { @@ -845,7 +809,7 @@ function dispatchEvent(target, type, detail) { } /***/ }), -/* 5 */ +/* 4 */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(global) { @@ -897,7 +861,34 @@ function CustomEvent (type, params) { return e; } -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0))) +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5))) + +/***/ }), +/* 5 */ +/***/ (function(module, exports) { + +var g; + +// This works in non-strict mode +g = (function() { + return this; +})(); + +try { + // This works if eval is allowed (see CSP) + g = g || Function("return this")() || (1,eval)("this"); +} catch(e) { + // This works if the window reference is available + if(typeof window === "object") + g = window; +} + +// g can still be undefined, but nothing to do about it... +// We return undefined, instead of nothing here, so it's +// easier to handle this case. if(!global) { ...} + +module.exports = g; + /***/ }), /* 6 */ @@ -910,103 +901,103 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.default = { - /** - * slides scrolled at once - * @slidesToScroll {Number} + /** + * slides scrolled at once + * @slidesToScroll {Number} */ slidesToScroll: 1, - /** - * time in milliseconds for the animation of a valid slide attempt - * @slideSpeed {Number} + /** + * time in milliseconds for the animation of a valid slide attempt + * @slideSpeed {Number} */ slideSpeed: 300, - /** - * time in milliseconds for the animation of the rewind after the last slide - * @rewindSpeed {Number} + /** + * time in milliseconds for the animation of the rewind after the last slide + * @rewindSpeed {Number} */ rewindSpeed: 600, - /** - * time for the snapBack of the slider if the slide attempt was not valid - * @snapBackSpeed {Number} + /** + * time for the snapBack of the slider if the slide attempt was not valid + * @snapBackSpeed {Number} */ snapBackSpeed: 200, - /** - * Basic easing functions: https://developer.mozilla.org/de/docs/Web/CSS/transition-timing-function - * cubic bezier easing functions: http://easings.net/de - * @ease {String} + /** + * Basic easing functions: https://developer.mozilla.org/de/docs/Web/CSS/transition-timing-function + * cubic bezier easing functions: http://easings.net/de + * @ease {String} */ ease: 'ease', - /** - * if slider reached the last slide, with next click the slider goes back to the startindex. - * use infinite or rewind, not both - * @rewind {Boolean} + /** + * if slider reached the last slide, with next click the slider goes back to the startindex. + * use infinite or rewind, not both + * @rewind {Boolean} */ rewind: false, - /** - * number of visible slides or false - * use infinite or rewind, not both - * @infinite {number} + /** + * number of visible slides or false + * use infinite or rewind, not both + * @infinite {number} */ infinite: false, - /** - * the slide index to show when the slider is initialized. - * @initialIndex {number} + /** + * the slide index to show when the slider is initialized. + * @initialIndex {number} */ initialIndex: 0, - /** - * class name for slider frame - * @classNameFrame {string} + /** + * class name for slider frame + * @classNameFrame {string} */ classNameFrame: 'js_frame', - /** - * class name for slides container - * @classNameSlideContainer {string} + /** + * class name for slides container + * @classNameSlideContainer {string} */ classNameSlideContainer: 'js_slides', - /** - * class name for slider prev control - * @classNamePrevCtrl {string} + /** + * class name for slider prev control + * @classNamePrevCtrl {string} */ classNamePrevCtrl: 'js_prev', - /** - * class name for slider next control - * @classNameNextCtrl {string} + /** + * class name for slider next control + * @classNameNextCtrl {string} */ classNameNextCtrl: 'js_next', - /** - * class name for current active slide - * if emptyString then no class is set - * @classNameActiveSlide {string} + /** + * class name for current active slide + * if emptyString then no class is set + * @classNameActiveSlide {string} */ classNameActiveSlide: 'active', - /** - * enables mouse events for swiping on desktop devices - * @enableMouseEvents {boolean} + /** + * enables mouse events for swiping on desktop devices + * @enableMouseEvents {boolean} */ enableMouseEvents: false, - /** - * window instance - * @window {object} + /** + * window instance + * @window {object} */ window: typeof window !== 'undefined' ? window : null, - /** - * If false, slides lory to the first slide on window resize. - * @rewindOnResize {boolean} + /** + * If false, slides lory to the first slide on window resize. + * @rewindOnResize {boolean} */ rewindOnResize: true }; @@ -1015,7 +1006,7 @@ exports.default = { /* 7 */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(1); +module.exports = __webpack_require__(0); /***/ }) diff --git a/dist/lory.min.js b/dist/lory.min.js index 2c9ba0d..ea46a0a 100644 --- a/dist/lory.min.js +++ b/dist/lory.min.js @@ -1,2 +1,2 @@ -!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var n=t();for(var i in n)("object"==typeof exports?exports:e)[i]=n[i]}}("undefined"!=typeof self?self:this,function(){return function(e){function t(i){if(n[i])return n[i].exports;var o=n[i]={i:i,l:!1,exports:{}};return e[i].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,i){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:i})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=7)}([function(e,t){var n;n=function(){return this}();try{n=n||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t,n){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function o(e,t){function n(e,t){var n=F,i=n.classNameActiveSlide;e.forEach(function(e,t){e.classList.contains(i)&&e.classList.remove(i)}),e[t].classList.add(i)}function i(e){var t=F,n=t.infinite,i=e.slice(0,n),o=e.slice(e.length-n,e.length);return i.forEach(function(e){var t=e.cloneNode(!0);k.appendChild(t)}),o.reverse().forEach(function(e){var t=e.cloneNode(!0);k.insertBefore(t,k.firstChild)}),k.addEventListener(A.transitionEnd,x),m.call(k.children)}function o(t,n,i){(0,u.default)(e,t+".lory."+n,i)}function s(e,t,n){var i=k&&k.style;i&&(i[A.transition+"TimingFunction"]=n,i[A.transition+"Duration"]=t+"ms",A.hasTranslate3d?i[A.transform]="translate3d("+e+"px, 0, 0)":i[A.transform]="translate("+e+"px, 0)")}function d(e){return e.getBoundingClientRect().width||e.offsetWidth}function c(e,t){var i=F,r=i.slideSpeed,a=i.slidesToScroll,d=i.infinite,l=i.rewind,c=i.rewindSpeed,u=i.ease,f=i.classNameActiveSlide,v=r,p=t?D+1:D-1,h=Math.round(_-S);o("before","slide",{index:D,nextSlide:p}),B&&B.classList.remove("disabled"),T&&T.classList.remove("disabled"),"number"!=typeof e&&(e=t?d&&D+2*d!==O.length?D+(d-D%d):D+a:d&&D%d!=0?D-D%d:D-a),e=Math.min(Math.max(e,0),O.length-1),d&&void 0===t&&(e+=d);var b=Math.min(Math.max(-1*O[e].offsetLeft,-1*h),0);l&&Math.abs(M.x)===h&&t&&(b=0,e=0,v=c),s(b,v,u),M.x=b,O[e].offsetLeft<=h&&(D=e),!d||e!==O.length-d&&e!==O.length-O.length%d&&0!==e||(t&&(D=d),t||(D=O.length-2*d),M.x=-1*O[D].offsetLeft,z=function(){s(-1*O[D].offsetLeft,0,void 0)}),f&&n(m.call(O),D),B&&!d&&0===e&&B.classList.add("disabled"),!T||d||l||e+1!==O.length||T.classList.add("disabled"),o("after","slide",{currentSlide:D})}function f(){o("before","init"),A=(0,a.default)(),F=r({},v.default,t);var s=F,d=s.classNameFrame,l=s.classNameSlideContainer,c=s.classNamePrevCtrl,u=s.classNameNextCtrl,f=s.enableMouseEvents,h=s.classNameActiveSlide,b=s.initialIndex;D=b,P=e.getElementsByClassName(d)[0],k=P.getElementsByClassName(l)[0],B=e.getElementsByClassName(c)[0],T=e.getElementsByClassName(u)[0],M={x:k.offsetLeft,y:k.offsetTop},F.infinite?O=i(m.call(k.children)):(O=m.call(k.children),B&&B.classList.add("disabled"),T&&1===O.length&&!F.rewind&&T.classList.add("disabled")),p(),h&&n(O,D),B&&T&&(B.addEventListener("click",E),T.addEventListener("click",y)),P.addEventListener("touchstart",w,I),f&&(P.addEventListener("mousedown",w),P.addEventListener("click",N)),F.window.addEventListener("resize",j),o("after","init")}function p(){var e=F,t=e.infinite,i=e.ease,o=e.rewindSpeed,r=e.rewindOnResize,a=e.classNameActiveSlide,l=e.initialIndex;_=d(k),S=d(P),S===_&&(_=O.reduce(function(e,t){return e+d(t)},0)),r?D=l:(i=null,o=0),t?(s(-1*O[D+t].offsetLeft,0,null),D+=t,M.x=-1*O[D].offsetLeft):(s(-1*O[D].offsetLeft,o,i),M.x=-1*O[D].offsetLeft),a&&n(m.call(O),D)}function h(e){c(e)}function b(){return D-F.infinite||0}function E(){c(!1,!1)}function y(){c(!1,!0)}function L(){o("before","destroy"),P.removeEventListener(A.transitionEnd,x),P.removeEventListener("touchstart",w,I),P.removeEventListener("touchmove",g,I),P.removeEventListener("touchend",C),P.removeEventListener("mousemove",g),P.removeEventListener("mousedown",w),P.removeEventListener("mouseup",C),P.removeEventListener("mouseleave",C),P.removeEventListener("click",N),F.window.removeEventListener("resize",j),B&&B.removeEventListener("click",E),T&&T.removeEventListener("click",y),F.infinite&&Array.apply(null,Array(F.infinite)).forEach(function(){k.removeChild(k.firstChild),k.removeChild(k.lastChild)}),o("after","destroy")}function x(){z&&(z(),z=void 0)}function w(e){var t=F,n=t.enableMouseEvents,i=e.touches?e.touches[0]:e;n&&(P.addEventListener("mousemove",g),P.addEventListener("mouseup",C),P.addEventListener("mouseleave",C)),P.addEventListener("touchmove",g,I),P.addEventListener("touchend",C);var r=i.pageX,s=i.pageY;R={x:r,y:s,time:Date.now()},X=void 0,Q={},o("on","touchstart",{event:e})}function g(e){var t=e.touches?e.touches[0]:e,n=t.pageX,i=t.pageY;Q={x:n-R.x,y:i-R.y},void 0===X&&(X=!!(X||Math.abs(Q.x)25||Math.abs(Q.x)>S/3,i=!D&&Q.x>0||D===O.length-1&&Q.x<0,r=Q.x<0;X||(n&&!i?c(!1,r):s(M.x,F.snapBackSpeed)),R=void 0,P.removeEventListener("touchmove",g),P.removeEventListener("touchend",C),P.removeEventListener("mousemove",g),P.removeEventListener("mouseup",C),P.removeEventListener("mouseleave",C),o("on","touchend",{event:e})}function N(e){Q.x&&e.preventDefault()}function j(e){S!==d(P)&&(p(),o("on","resize",{event:e}))}var M=void 0,_=void 0,S=void 0,O=void 0,P=void 0,k=void 0,B=void 0,T=void 0,A=void 0,z=void 0,D=0,F={},I=!!(0,l.default)()&&{passive:!0};"undefined"!=typeof jQuery&&e instanceof jQuery&&(e=e[0]);var R=void 0,Q=void 0,X=void 0;return f(),{setup:f,reset:p,slideTo:h,returnIndex:b,prev:E,next:y,destroy:L}}Object.defineProperty(t,"__esModule",{value:!0});var r=Object.assign||function(e){for(var t=1;t25||Math.abs(R.x)>S/3,i=!D&&R.x>0||D===O.length-1&&R.x<0,r=R.x<0;Q||(n&&!i?c(!1,r):s(M.x,F.snapBackSpeed)),X=void 0,P.removeEventListener("touchmove",g),P.removeEventListener("touchend",C),P.removeEventListener("mousemove",g),P.removeEventListener("mouseup",C),P.removeEventListener("mouseleave",C),o("on","touchend",{event:e})}function N(e){R.x&&e.preventDefault()}function j(e){S!==d(P)&&(p(),o("on","resize",{event:e}))}var M=void 0,_=void 0,S=void 0,O=void 0,P=void 0,k=void 0,B=void 0,T=void 0,A=void 0,z=void 0,D=0,F={},I=!!(0,l.default)()&&{passive:!0};"undefined"!=typeof jQuery&&e instanceof jQuery&&(e=e[0]);var X=void 0,R=void 0,Q=void 0;return f(),{setup:f,reset:p,slideTo:b,returnIndex:h,prev:E,next:y,destroy:L}}Object.defineProperty(t,"__esModule",{value:!0});var r=Object.assign||function(e){for(var t=1;t swipe attempt time is over 300 ms\n * and\n * -> swipe distance is greater than 25px\n * or\n * -> swipe distance is more then a third of the swipe area\n *\n * @isValidSlide {Boolean}\n */\n var isValid = Number(duration) < 300 && Math.abs(delta.x) > 25 || Math.abs(delta.x) > frameWidth / 3;\n\n /**\n * is out of bounds if:\n *\n * -> index is 0 and delta x is greater than 0\n * or\n * -> index is the last slide and delta is smaller than 0\n *\n * @isOutOfBounds {Boolean}\n */\n var isOutOfBounds = !index && delta.x > 0 || index === slides.length - 1 && delta.x < 0;\n\n var direction = delta.x < 0;\n\n if (!isScrolling) {\n if (isValid && !isOutOfBounds) {\n slide(false, direction);\n } else {\n translate(position.x, options.snapBackSpeed);\n }\n }\n\n touchOffset = undefined;\n\n /**\n * remove eventlisteners after swipe attempt\n */\n frame.removeEventListener('touchmove', onTouchmove);\n frame.removeEventListener('touchend', onTouchend);\n frame.removeEventListener('mousemove', onTouchmove);\n frame.removeEventListener('mouseup', onTouchend);\n frame.removeEventListener('mouseleave', onTouchend);\n\n dispatchSliderEvent('on', 'touchend', {\n event: event\n });\n }\n\n function onClick(event) {\n if (delta.x) {\n event.preventDefault();\n }\n }\n\n function onResize(event) {\n if (frameWidth !== elementWidth(frame)) {\n reset();\n\n dispatchSliderEvent('on', 'resize', {\n event: event\n });\n }\n }\n\n // trigger initial setup\n setup();\n\n // expose public api\n return {\n setup: setup,\n reset: reset,\n slideTo: slideTo,\n returnIndex: returnIndex,\n prev: prev,\n next: next,\n destroy: destroy\n };\n}\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(global) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = detectPrefixes;\n/**\n * Detecting prefixes for saving time and bytes\n */\nfunction detectPrefixes() {\n var transform = void 0;\n var transition = void 0;\n var transitionEnd = void 0;\n var hasTranslate3d = void 0;\n\n (function () {\n var el = document.createElement('_');\n var style = el.style;\n\n var prop = void 0;\n\n if (style[prop = 'webkitTransition'] === '') {\n transitionEnd = 'webkitTransitionEnd';\n transition = prop;\n }\n\n if (style[prop = 'transition'] === '') {\n transitionEnd = 'transitionend';\n transition = prop;\n }\n\n if (style[prop = 'webkitTransform'] === '') {\n transform = prop;\n }\n\n if (style[prop = 'msTransform'] === '') {\n transform = prop;\n }\n\n if (style[prop = 'transform'] === '') {\n transform = prop;\n }\n\n document.body.insertBefore(el, null);\n style[transform] = 'translate3d(0, 0, 0)';\n hasTranslate3d = !!global.getComputedStyle(el).getPropertyValue(transform);\n document.body.removeChild(el);\n })();\n\n return {\n transform: transform,\n transition: transition,\n transitionEnd: transitionEnd,\n hasTranslate3d: hasTranslate3d\n };\n}\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0)))\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = detectSupportsPassive;\nfunction detectSupportsPassive() {\n var supportsPassive = false;\n\n try {\n var opts = Object.defineProperty({}, 'passive', {\n get: function get() {\n supportsPassive = true;\n }\n });\n\n window.addEventListener('testPassive', null, opts);\n window.removeEventListener('testPassive', null, opts);\n } catch (e) {}\n\n return supportsPassive;\n}\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = dispatchEvent;\n\nvar _customEvent = __webpack_require__(5);\n\nvar _customEvent2 = _interopRequireDefault(_customEvent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * dispatch custom events\n *\n * @param {element} el slideshow element\n * @param {string} type custom event name\n * @param {object} detail custom detail information\n */\nfunction dispatchEvent(target, type, detail) {\n var event = new _customEvent2.default(type, {\n bubbles: true,\n cancelable: true,\n detail: detail\n });\n\n target.dispatchEvent(event);\n}\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(global) {\nvar NativeCustomEvent = global.CustomEvent;\n\nfunction useNative () {\n try {\n var p = new NativeCustomEvent('cat', { detail: { foo: 'bar' } });\n return 'cat' === p.type && 'bar' === p.detail.foo;\n } catch (e) {\n }\n return false;\n}\n\n/**\n * Cross-browser `CustomEvent` constructor.\n *\n * https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent.CustomEvent\n *\n * @public\n */\n\nmodule.exports = useNative() ? NativeCustomEvent :\n\n// IE >= 9\n'undefined' !== typeof document && 'function' === typeof document.createEvent ? function CustomEvent (type, params) {\n var e = document.createEvent('CustomEvent');\n if (params) {\n e.initCustomEvent(type, params.bubbles, params.cancelable, params.detail);\n } else {\n e.initCustomEvent(type, false, false, void 0);\n }\n return e;\n} :\n\n// IE <= 8\nfunction CustomEvent (type, params) {\n var e = document.createEventObject();\n e.type = type;\n if (params) {\n e.bubbles = Boolean(params.bubbles);\n e.cancelable = Boolean(params.cancelable);\n e.detail = params.detail;\n } else {\n e.bubbles = false;\n e.cancelable = false;\n e.detail = void 0;\n }\n return e;\n}\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0)))\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = {\n /**\n * slides scrolled at once\n * @slidesToScroll {Number}\n */\n slidesToScroll: 1,\n\n /**\n * time in milliseconds for the animation of a valid slide attempt\n * @slideSpeed {Number}\n */\n slideSpeed: 300,\n\n /**\n * time in milliseconds for the animation of the rewind after the last slide\n * @rewindSpeed {Number}\n */\n rewindSpeed: 600,\n\n /**\n * time for the snapBack of the slider if the slide attempt was not valid\n * @snapBackSpeed {Number}\n */\n snapBackSpeed: 200,\n\n /**\n * Basic easing functions: https://developer.mozilla.org/de/docs/Web/CSS/transition-timing-function\n * cubic bezier easing functions: http://easings.net/de\n * @ease {String}\n */\n ease: 'ease',\n\n /**\n * if slider reached the last slide, with next click the slider goes back to the startindex.\n * use infinite or rewind, not both\n * @rewind {Boolean}\n */\n rewind: false,\n\n /**\n * number of visible slides or false\n * use infinite or rewind, not both\n * @infinite {number}\n */\n infinite: false,\n\n /**\n * the slide index to show when the slider is initialized.\n * @initialIndex {number}\n */\n initialIndex: 0,\n\n /**\n * class name for slider frame\n * @classNameFrame {string}\n */\n classNameFrame: 'js_frame',\n\n /**\n * class name for slides container\n * @classNameSlideContainer {string}\n */\n classNameSlideContainer: 'js_slides',\n\n /**\n * class name for slider prev control\n * @classNamePrevCtrl {string}\n */\n classNamePrevCtrl: 'js_prev',\n\n /**\n * class name for slider next control\n * @classNameNextCtrl {string}\n */\n classNameNextCtrl: 'js_next',\n\n /**\n * class name for current active slide\n * if emptyString then no class is set\n * @classNameActiveSlide {string}\n */\n classNameActiveSlide: 'active',\n\n /**\n * enables mouse events for swiping on desktop devices\n * @enableMouseEvents {boolean}\n */\n enableMouseEvents: false,\n\n /**\n * window instance\n * @window {object}\n */\n window: typeof window !== 'undefined' ? window : null,\n\n /**\n * If false, slides lory to the first slide on window resize.\n * @rewindOnResize {boolean}\n */\n rewindOnResize: true\n};\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(1);\n\n\n/***/ })\n/******/ ]);\n});\n\n\n// WEBPACK FOOTER //\n// lory.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 7);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap ccaf8436a8947db96789","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/global.js\n// module id = 0\n// module chunks = 0 1","/* globals jQuery */\n\nimport detectPrefixes from './utils/detect-prefixes.js';\nimport supportsPassive from './utils/detect-supportsPassive';\nimport dispatchEvent from './utils/dispatch-event.js';\nimport defaults from './defaults.js';\n\nconst slice = Array.prototype.slice;\n\nexport function lory (slider, opts) {\n let position;\n let slidesWidth;\n let frameWidth;\n let slides;\n\n /**\n * slider DOM elements\n */\n let frame;\n let slideContainer;\n let prevCtrl;\n let nextCtrl;\n let prefixes;\n let transitionEndCallback;\n\n let index = 0;\n let options = {};\n let touchEventParams = supportsPassive() ? { passive: true } : false;\n\n /**\n * if object is jQuery convert to native DOM element\n */\n if (typeof jQuery !== 'undefined' && slider instanceof jQuery) {\n slider = slider[0];\n }\n\n /**\n * private\n * set active class to element which is the current slide\n */\n function setActiveElement (slides, currentIndex) {\n const {classNameActiveSlide} = options;\n\n slides.forEach((element, index) => {\n if (element.classList.contains(classNameActiveSlide)) {\n element.classList.remove(classNameActiveSlide);\n }\n });\n\n slides[currentIndex].classList.add(classNameActiveSlide);\n }\n\n /**\n * private\n * setupInfinite: function to setup if infinite is set\n *\n * @param {array} slideArray\n * @return {array} array of updated slideContainer elements\n */\n function setupInfinite (slideArray) {\n const {infinite} = options;\n\n const front = slideArray.slice(0, infinite);\n const back = slideArray.slice(slideArray.length - infinite, slideArray.length);\n\n front.forEach(function (element) {\n const cloned = element.cloneNode(true);\n\n slideContainer.appendChild(cloned);\n });\n\n back.reverse()\n .forEach(function (element) {\n const cloned = element.cloneNode(true);\n\n slideContainer.insertBefore(cloned, slideContainer.firstChild);\n });\n\n slideContainer.addEventListener(prefixes.transitionEnd, onTransitionEnd);\n\n return slice.call(slideContainer.children);\n }\n\n /**\n * [dispatchSliderEvent description]\n * @return {[type]} [description]\n */\n function dispatchSliderEvent (phase, type, detail) {\n dispatchEvent(slider, `${phase}.lory.${type}`, detail);\n }\n\n /**\n * translates to a given position in a given time in milliseconds\n *\n * @to {number} number in pixels where to translate to\n * @duration {number} time in milliseconds for the transistion\n * @ease {string} easing css property\n */\n function translate (to, duration, ease) {\n const style = slideContainer && slideContainer.style;\n\n if (style) {\n style[prefixes.transition + 'TimingFunction'] = ease;\n style[prefixes.transition + 'Duration'] = duration + 'ms';\n\n if (prefixes.hasTranslate3d) {\n style[prefixes.transform] = 'translate3d(' + to + 'px, 0, 0)';\n } else {\n style[prefixes.transform] = 'translate(' + to + 'px, 0)';\n }\n }\n }\n\n /**\n * returns an element's width\n */\n function elementWidth (element) {\n return element.getBoundingClientRect().width || element.offsetWidth;\n }\n\n /**\n * slidefunction called by prev, next & touchend\n *\n * determine nextIndex and slide to next postion\n * under restrictions of the defined options\n *\n * @direction {boolean}\n */\n function slide (nextIndex, direction) {\n const {\n slideSpeed,\n slidesToScroll,\n infinite,\n rewind,\n rewindSpeed,\n ease,\n classNameActiveSlide\n } = options;\n\n let duration = slideSpeed;\n\n const nextSlide = direction ? index + 1 : index - 1;\n const maxOffset = Math.round(slidesWidth - frameWidth);\n\n dispatchSliderEvent('before', 'slide', {\n index,\n nextSlide\n });\n\n /**\n * Reset control classes\n */\n if (prevCtrl) {\n prevCtrl.classList.remove('disabled');\n }\n if (nextCtrl) {\n nextCtrl.classList.remove('disabled');\n }\n\n if (typeof nextIndex !== 'number') {\n if (direction) {\n if (infinite && index + (infinite * 2) !== slides.length) {\n nextIndex = index + (infinite - index % infinite);\n } else {\n nextIndex = index + slidesToScroll;\n }\n } else {\n if (infinite && index % infinite !== 0) {\n nextIndex = index - index % infinite;\n } else {\n nextIndex = index - slidesToScroll;\n }\n }\n }\n\n nextIndex = Math.min(Math.max(nextIndex, 0), slides.length - 1);\n\n if (infinite && direction === undefined) {\n nextIndex += infinite;\n }\n\n let nextOffset = Math.min(Math.max(slides[nextIndex].offsetLeft * -1, maxOffset * -1), 0);\n\n if (rewind && Math.abs(position.x) === maxOffset && direction) {\n nextOffset = 0;\n nextIndex = 0;\n duration = rewindSpeed;\n }\n\n /**\n * translate to the nextOffset by a defined duration and ease function\n */\n translate(nextOffset, duration, ease);\n\n /**\n * update the position with the next position\n */\n position.x = nextOffset;\n\n /**\n * update the index with the nextIndex only if\n * the offset of the nextIndex is in the range of the maxOffset\n */\n if (slides[nextIndex].offsetLeft <= maxOffset) {\n index = nextIndex;\n }\n\n if (infinite && (nextIndex === slides.length - infinite ||\n nextIndex === slides.length - slides.length % infinite || nextIndex === 0)) {\n if (direction) {\n index = infinite;\n }\n\n if (!direction) {\n index = slides.length - (infinite * 2);\n }\n\n position.x = slides[index].offsetLeft * -1;\n\n transitionEndCallback = function () {\n translate(slides[index].offsetLeft * -1, 0, undefined);\n };\n }\n\n if (classNameActiveSlide) {\n setActiveElement(slice.call(slides), index);\n }\n\n /**\n * update classes for next and prev arrows\n * based on user settings\n */\n if (prevCtrl && !infinite && nextIndex === 0) {\n prevCtrl.classList.add('disabled');\n }\n\n if (nextCtrl && !infinite && !rewind && ((nextIndex + 1) === slides.length)) {\n nextCtrl.classList.add('disabled');\n }\n\n dispatchSliderEvent('after', 'slide', {\n currentSlide: index\n });\n }\n\n /**\n * public\n * setup function\n */\n function setup () {\n dispatchSliderEvent('before', 'init');\n\n prefixes = detectPrefixes();\n options = {...defaults, ...opts};\n\n const {\n classNameFrame,\n classNameSlideContainer,\n classNamePrevCtrl,\n classNameNextCtrl,\n enableMouseEvents,\n classNameActiveSlide,\n initialIndex\n } = options;\n\n index = initialIndex;\n frame = slider.getElementsByClassName(classNameFrame)[0];\n slideContainer = frame.getElementsByClassName(classNameSlideContainer)[0];\n prevCtrl = slider.getElementsByClassName(classNamePrevCtrl)[0];\n nextCtrl = slider.getElementsByClassName(classNameNextCtrl)[0];\n\n position = {\n x: slideContainer.offsetLeft,\n y: slideContainer.offsetTop\n };\n\n if (options.infinite) {\n slides = setupInfinite(slice.call(slideContainer.children));\n } else {\n slides = slice.call(slideContainer.children);\n\n if (prevCtrl) {\n prevCtrl.classList.add('disabled');\n }\n\n if (nextCtrl && (slides.length === 1) && !options.rewind) {\n nextCtrl.classList.add('disabled');\n }\n }\n\n reset();\n\n if (classNameActiveSlide) {\n setActiveElement(slides, index);\n }\n\n if (prevCtrl && nextCtrl) {\n prevCtrl.addEventListener('click', prev);\n nextCtrl.addEventListener('click', next);\n }\n\n frame.addEventListener('touchstart', onTouchstart, touchEventParams);\n\n if (enableMouseEvents) {\n frame.addEventListener('mousedown', onTouchstart);\n frame.addEventListener('click', onClick);\n }\n\n options.window.addEventListener('resize', onResize);\n\n dispatchSliderEvent('after', 'init');\n }\n\n /**\n * public\n * reset function: called on resize\n */\n function reset () {\n var {infinite, ease, rewindSpeed, rewindOnResize, classNameActiveSlide, initialIndex} = options;\n\n slidesWidth = elementWidth(slideContainer);\n frameWidth = elementWidth(frame);\n\n if (frameWidth === slidesWidth) {\n slidesWidth = slides.reduce(function (previousValue, slide) {\n return previousValue + elementWidth(slide);\n }, 0);\n }\n\n if (rewindOnResize) {\n index = initialIndex;\n } else {\n ease = null;\n rewindSpeed = 0;\n }\n\n if (infinite) {\n translate(slides[index + infinite].offsetLeft * -1, 0, null);\n\n index = index + infinite;\n position.x = slides[index].offsetLeft * -1;\n } else {\n translate(slides[index].offsetLeft * -1, rewindSpeed, ease);\n position.x = slides[index].offsetLeft * -1;\n }\n\n if (classNameActiveSlide) {\n setActiveElement(slice.call(slides), index);\n }\n }\n\n /**\n * public\n * slideTo: called on clickhandler\n */\n function slideTo (index) {\n slide(index);\n }\n\n /**\n * public\n * returnIndex function: called on clickhandler\n */\n function returnIndex () {\n return index - options.infinite || 0;\n }\n\n /**\n * public\n * prev function: called on clickhandler\n */\n function prev () {\n slide(false, false);\n }\n\n /**\n * public\n * next function: called on clickhandler\n */\n function next () {\n slide(false, true);\n }\n\n /**\n * public\n * destroy function: called to gracefully destroy the lory instance\n */\n function destroy () {\n dispatchSliderEvent('before', 'destroy');\n\n // remove event listeners\n frame.removeEventListener(prefixes.transitionEnd, onTransitionEnd);\n frame.removeEventListener('touchstart', onTouchstart, touchEventParams);\n frame.removeEventListener('touchmove', onTouchmove, touchEventParams);\n frame.removeEventListener('touchend', onTouchend);\n frame.removeEventListener('mousemove', onTouchmove);\n frame.removeEventListener('mousedown', onTouchstart);\n frame.removeEventListener('mouseup', onTouchend);\n frame.removeEventListener('mouseleave', onTouchend);\n frame.removeEventListener('click', onClick);\n\n options.window.removeEventListener('resize', onResize);\n\n if (prevCtrl) {\n prevCtrl.removeEventListener('click', prev);\n }\n\n if (nextCtrl) {\n nextCtrl.removeEventListener('click', next);\n }\n\n // remove cloned slides if infinite is set\n if (options.infinite) {\n Array.apply(null, Array(options.infinite)).forEach(function () {\n slideContainer.removeChild(slideContainer.firstChild);\n slideContainer.removeChild(slideContainer.lastChild);\n });\n }\n\n dispatchSliderEvent('after', 'destroy');\n }\n\n // event handling\n\n let touchOffset;\n let delta;\n let isScrolling;\n\n function onTransitionEnd () {\n if (transitionEndCallback) {\n transitionEndCallback();\n\n transitionEndCallback = undefined;\n }\n }\n\n function onTouchstart (event) {\n const {enableMouseEvents} = options;\n const touches = event.touches ? event.touches[0] : event;\n\n if (enableMouseEvents) {\n frame.addEventListener('mousemove', onTouchmove);\n frame.addEventListener('mouseup', onTouchend);\n frame.addEventListener('mouseleave', onTouchend);\n }\n\n frame.addEventListener('touchmove', onTouchmove, touchEventParams);\n frame.addEventListener('touchend', onTouchend);\n\n const {pageX, pageY} = touches;\n\n touchOffset = {\n x: pageX,\n y: pageY,\n time: Date.now()\n };\n\n isScrolling = undefined;\n\n delta = {};\n\n dispatchSliderEvent('on', 'touchstart', {\n event\n });\n }\n\n function onTouchmove (event) {\n const touches = event.touches ? event.touches[0] : event;\n const {pageX, pageY} = touches;\n\n delta = {\n x: pageX - touchOffset.x,\n y: pageY - touchOffset.y\n };\n\n if (typeof isScrolling === 'undefined') {\n isScrolling = !!(isScrolling || Math.abs(delta.x) < Math.abs(delta.y));\n }\n\n if (!isScrolling && touchOffset) {\n translate(position.x + delta.x, 0, null);\n }\n\n // may be\n dispatchSliderEvent('on', 'touchmove', {\n event\n });\n }\n\n function onTouchend (event) {\n /**\n * time between touchstart and touchend in milliseconds\n * @duration {number}\n */\n const duration = touchOffset ? Date.now() - touchOffset.time : undefined;\n\n /**\n * is valid if:\n *\n * -> swipe attempt time is over 300 ms\n * and\n * -> swipe distance is greater than 25px\n * or\n * -> swipe distance is more then a third of the swipe area\n *\n * @isValidSlide {Boolean}\n */\n const isValid = Number(duration) < 300 &&\n Math.abs(delta.x) > 25 ||\n Math.abs(delta.x) > frameWidth / 3;\n\n /**\n * is out of bounds if:\n *\n * -> index is 0 and delta x is greater than 0\n * or\n * -> index is the last slide and delta is smaller than 0\n *\n * @isOutOfBounds {Boolean}\n */\n const isOutOfBounds = !index && delta.x > 0 ||\n index === slides.length - 1 && delta.x < 0;\n\n const direction = delta.x < 0;\n\n if (!isScrolling) {\n if (isValid && !isOutOfBounds) {\n slide(false, direction);\n } else {\n translate(position.x, options.snapBackSpeed);\n }\n }\n\n touchOffset = undefined;\n\n /**\n * remove eventlisteners after swipe attempt\n */\n frame.removeEventListener('touchmove', onTouchmove);\n frame.removeEventListener('touchend', onTouchend);\n frame.removeEventListener('mousemove', onTouchmove);\n frame.removeEventListener('mouseup', onTouchend);\n frame.removeEventListener('mouseleave', onTouchend);\n\n dispatchSliderEvent('on', 'touchend', {\n event\n });\n }\n\n function onClick (event) {\n if (delta.x) {\n event.preventDefault();\n }\n }\n\n function onResize (event) {\n if (frameWidth !== elementWidth(frame)) {\n reset();\n\n dispatchSliderEvent('on', 'resize', {\n event\n });\n }\n }\n\n // trigger initial setup\n setup();\n\n // expose public api\n return {\n setup,\n reset,\n slideTo,\n returnIndex,\n prev,\n next,\n destroy\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/lory.js","/**\n * Detecting prefixes for saving time and bytes\n */\nexport default function detectPrefixes () {\n let transform;\n let transition;\n let transitionEnd;\n let hasTranslate3d;\n\n (function () {\n let el = document.createElement('_');\n let style = el.style;\n\n let prop;\n\n if (style[prop = 'webkitTransition'] === '') {\n transitionEnd = 'webkitTransitionEnd';\n transition = prop;\n }\n\n if (style[prop = 'transition'] === '') {\n transitionEnd = 'transitionend';\n transition = prop;\n }\n\n if (style[prop = 'webkitTransform'] === '') {\n transform = prop;\n }\n\n if (style[prop = 'msTransform'] === '') {\n transform = prop;\n }\n\n if (style[prop = 'transform'] === '') {\n transform = prop;\n }\n\n document.body.insertBefore(el, null);\n style[transform] = 'translate3d(0, 0, 0)';\n hasTranslate3d = !!global.getComputedStyle(el).getPropertyValue(transform);\n document.body.removeChild(el);\n }());\n\n return {\n transform,\n transition,\n transitionEnd,\n hasTranslate3d\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/detect-prefixes.js","export default function detectSupportsPassive () {\n let supportsPassive = false;\n\n try {\n let opts = Object.defineProperty({}, 'passive', {\n get () {\n supportsPassive = true;\n }\n });\n\n window.addEventListener('testPassive', null, opts);\n window.removeEventListener('testPassive', null, opts);\n } catch (e) {}\n\n return supportsPassive;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/detect-supportsPassive.js","import CustomEvent from 'custom-event';\n\n/**\n * dispatch custom events\n *\n * @param {element} el slideshow element\n * @param {string} type custom event name\n * @param {object} detail custom detail information\n */\nexport default function dispatchEvent (target, type, detail) {\n let event = new CustomEvent(\n type,\n {\n bubbles: true,\n cancelable: true,\n detail: detail\n }\n );\n\n target.dispatchEvent(event);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/dispatch-event.js","\nvar NativeCustomEvent = global.CustomEvent;\n\nfunction useNative () {\n try {\n var p = new NativeCustomEvent('cat', { detail: { foo: 'bar' } });\n return 'cat' === p.type && 'bar' === p.detail.foo;\n } catch (e) {\n }\n return false;\n}\n\n/**\n * Cross-browser `CustomEvent` constructor.\n *\n * https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent.CustomEvent\n *\n * @public\n */\n\nmodule.exports = useNative() ? NativeCustomEvent :\n\n// IE >= 9\n'undefined' !== typeof document && 'function' === typeof document.createEvent ? function CustomEvent (type, params) {\n var e = document.createEvent('CustomEvent');\n if (params) {\n e.initCustomEvent(type, params.bubbles, params.cancelable, params.detail);\n } else {\n e.initCustomEvent(type, false, false, void 0);\n }\n return e;\n} :\n\n// IE <= 8\nfunction CustomEvent (type, params) {\n var e = document.createEventObject();\n e.type = type;\n if (params) {\n e.bubbles = Boolean(params.bubbles);\n e.cancelable = Boolean(params.cancelable);\n e.detail = params.detail;\n } else {\n e.bubbles = false;\n e.cancelable = false;\n e.detail = void 0;\n }\n return e;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/custom-event/index.js\n// module id = 5\n// module chunks = 0 1","export default {\n /**\n * slides scrolled at once\n * @slidesToScroll {Number}\n */\n slidesToScroll: 1,\n\n /**\n * time in milliseconds for the animation of a valid slide attempt\n * @slideSpeed {Number}\n */\n slideSpeed: 300,\n\n /**\n * time in milliseconds for the animation of the rewind after the last slide\n * @rewindSpeed {Number}\n */\n rewindSpeed: 600,\n\n /**\n * time for the snapBack of the slider if the slide attempt was not valid\n * @snapBackSpeed {Number}\n */\n snapBackSpeed: 200,\n\n /**\n * Basic easing functions: https://developer.mozilla.org/de/docs/Web/CSS/transition-timing-function\n * cubic bezier easing functions: http://easings.net/de\n * @ease {String}\n */\n ease: 'ease',\n\n /**\n * if slider reached the last slide, with next click the slider goes back to the startindex.\n * use infinite or rewind, not both\n * @rewind {Boolean}\n */\n rewind: false,\n\n /**\n * number of visible slides or false\n * use infinite or rewind, not both\n * @infinite {number}\n */\n infinite: false,\n\n /**\n * the slide index to show when the slider is initialized.\n * @initialIndex {number}\n */\n initialIndex: 0,\n\n /**\n * class name for slider frame\n * @classNameFrame {string}\n */\n classNameFrame: 'js_frame',\n\n /**\n * class name for slides container\n * @classNameSlideContainer {string}\n */\n classNameSlideContainer: 'js_slides',\n\n /**\n * class name for slider prev control\n * @classNamePrevCtrl {string}\n */\n classNamePrevCtrl: 'js_prev',\n\n /**\n * class name for slider next control\n * @classNameNextCtrl {string}\n */\n classNameNextCtrl: 'js_next',\n\n /**\n * class name for current active slide\n * if emptyString then no class is set\n * @classNameActiveSlide {string}\n */\n classNameActiveSlide: 'active',\n\n /**\n * enables mouse events for swiping on desktop devices\n * @enableMouseEvents {boolean}\n */\n enableMouseEvents: false,\n\n /**\n * window instance\n * @window {object}\n */\n window: typeof window !== 'undefined' ? window : null,\n\n /**\n * If false, slides lory to the first slide on window resize.\n * @rewindOnResize {boolean}\n */\n rewindOnResize: true\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/defaults.js"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///lory.min.js","webpack:///webpack/bootstrap 903dc4782db5c772efd4","webpack:///./src/lory.js","webpack:///./src/utils/detect-prefixes.js","webpack:///./src/utils/detect-supportsPassive.js","webpack:///./src/utils/dispatch-event.js","webpack:///./node_modules/custom-event/index.js","webpack:///(webpack)/buildin/global.js","webpack:///./src/defaults.js"],"names":["root","factory","exports","module","define","amd","a","i","self","this","modules","__webpack_require__","moduleId","installedModules","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","_interopRequireDefault","obj","default","lory","slider","opts","setActiveElement","slides","currentIndex","_options","options","classNameActiveSlide","forEach","element","index","classList","contains","remove","add","setupInfinite","slideArray","_options2","infinite","front","slice","back","length","cloned","cloneNode","slideContainer","appendChild","reverse","insertBefore","firstChild","addEventListener","prefixes","transitionEnd","onTransitionEnd","children","dispatchSliderEvent","phase","type","detail","_dispatchEvent2","translate","to","duration","ease","style","transition","transform","elementWidth","getBoundingClientRect","width","offsetWidth","slide","nextIndex","direction","_options3","slideSpeed","slidesToScroll","rewind","rewindSpeed","nextSlide","maxOffset","Math","round","slidesWidth","frameWidth","prevCtrl","nextCtrl","min","max","undefined","nextOffset","offsetLeft","abs","position","x","transitionEndCallback","currentSlide","setup","_detectPrefixes2","defaults","_options4","classNameFrame","classNameSlideContainer","classNamePrevCtrl","classNameNextCtrl","enableMouseEvents","initialIndex","frame","getElementsByClassName","y","offsetTop","reset","prev","next","onTouchstart","touchEventParams","onClick","window","onResize","_options5","rewindOnResize","reduce","previousValue","slideTo","returnIndex","destroy","removeEventListener","onTouchmove","onTouchend","Array","apply","removeChild","lastChild","event","_options6","touches","pageX","pageY","touchOffset","time","Date","now","isScrolling","delta","isValid","Number","isOutOfBounds","snapBackSpeed","preventDefault","_detectSupportsPassive2","passive","jQuery","value","_extends","assign","target","arguments","source","key","_detectPrefixes","_detectSupportsPassive","_dispatchEvent","_defaults","_defaults2","detectPrefixes","el","document","createElement","prop","body","detectSupportsPassive","supportsPassive","e","dispatchEvent","CustomEvent","bubbles","cancelable","_customEvent","_customEvent2","global","NativeCustomEvent","foo","createEvent","params","initCustomEvent","createEventObject","Boolean","g","Function","eval"],"mappings":"CAAA,SAAAA,EAAAC,GACA,mBAAAC,UAAA,gBAAAC,QACAA,OAAAD,QAAAD,QACA,sBAAAG,gBAAAC,IACAD,UAAAH,OACA,CACA,GAAAK,GAAAL,GACA,QAAAM,KAAAD,IAAA,gBAAAJ,iBAAAF,GAAAO,GAAAD,EAAAC,KAEC,mBAAAC,WAAAC,KAAA,WACD,MCAgB,UAAUC,GCN1B,QAAAC,GAAAC,GAGA,GAAAC,EAAAD,GACA,MAAAC,GAAAD,GAAAV,OAGA,IAAAC,GAAAU,EAAAD,IACAL,EAAAK,EACAE,GAAA,EACAZ,WAUA,OANAQ,GAAAE,GAAAG,KAAAZ,EAAAD,QAAAC,IAAAD,QAAAS,GAGAR,EAAAW,GAAA,EAGAX,EAAAD,QAvBA,GAAAW,KA4DA,OAhCAF,GAAAK,EAAAN,EAGAC,EAAAM,EAAAJ,EAGAF,EAAAO,EAAA,SAAAhB,EAAAiB,EAAAC,GACAT,EAAAU,EAAAnB,EAAAiB,IACAG,OAAAC,eAAArB,EAAAiB,GACAK,cAAA,EACAC,YAAA,EACAC,IAAAN,KAMAT,EAAAgB,EAAA,SAAAxB,GACA,GAAAiB,GAAAjB,KAAAyB,WACA,WAA2B,MAAAzB,GAAA,SAC3B,WAAiC,MAAAA,GAEjC,OADAQ,GAAAO,EAAAE,EAAA,IAAAA,GACAA,GAIAT,EAAAU,EAAA,SAAAQ,EAAAC,GAAsD,MAAAR,QAAAS,UAAAC,eAAAjB,KAAAc,EAAAC,IAGtDnB,EAAAsB,EAAA,GAGAtB,IAAAuB,EAAA,KDgBM,SAAU/B,EAAQD,EAASS,GAEjC,YA2BA,SAASwB,GAAuBC,GAAO,MAAOA,IAAOA,EAAIR,WAAaQ,GAAQC,QAASD,GEjGhF,QAASE,GAAMC,EAAQC,GA+B1B,QAASC,GAAkBC,EAAQC,GAAc,GAAAC,GACdC,EAAxBC,EADsCF,EACtCE,oBAEPJ,GAAOK,QAAQ,SAACC,EAASC,GACjBD,EAAQE,UAAUC,SAASL,IAC3BE,EAAQE,UAAUE,OAAON,KAIjCJ,EAAOC,GAAcO,UAAUG,IAAIP,GAUvC,QAASQ,GAAeC,GAAY,GAAAC,GACbX,EAAZY,EADyBD,EACzBC,SAEDC,EAAQH,EAAWI,MAAM,EAAGF,GAC5BG,EAAQL,EAAWI,MAAMJ,EAAWM,OAASJ,EAAUF,EAAWM,OAiBxE,OAfAH,GAAMX,QAAQ,SAAUC,GACpB,GAAMc,GAASd,EAAQe,WAAU,EAEjCC,GAAeC,YAAYH,KAG/BF,EAAKM,UACAnB,QAAQ,SAAUC,GACf,GAAMc,GAASd,EAAQe,WAAU,EAEjCC,GAAeG,aAAaL,EAAQE,EAAeI,cAG3DJ,EAAeK,iBAAiBC,EAASC,cAAeC,GAEjDb,EAAM5C,KAAKiD,EAAeS,UAOrC,QAASC,GAAqBC,EAAOC,EAAMC,IACvC,EAAAC,EAAAzC,SAAcE,EAAWoC,EAAzB,SAAuCC,EAAQC,GAUnD,QAASE,GAAWC,EAAIC,EAAUC,GAC9B,GAAMC,GAAQnB,GAAkBA,EAAemB,KAE3CA,KACAA,EAAMb,EAASc,WAAa,kBAAoBF,EAChDC,EAAMb,EAASc,WAAa,YAAcH,EAAW,KACrDE,EAAMb,EAASe,WAAa,cAAgBL,EAAK,OAOzD,QAASM,GAActC,GACnB,MAAOA,GAAQuC,wBAAwBC,OAASxC,EAAQyC,YAW5D,QAASC,GAAOC,EAAWC,GAAW,GAAAC,GAS9BhD,EAPAiD,EAF8BD,EAE9BC,WACAC,EAH8BF,EAG9BE,eACAtC,EAJ8BoC,EAI9BpC,SACAuC,EAL8BH,EAK9BG,OACAC,EAN8BJ,EAM9BI,YACAf,EAP8BW,EAO9BX,KACApC,EAR8B+C,EAQ9B/C,qBAGAmC,EAAWa,EAETI,EAAYN,EAAY3C,EAAQ,EAAIA,EAAQ,EAC5CkD,EAAYC,KAAKC,MAAMC,EAAcC,EAE3C7B,GAAoB,SAAU,SAC1BzB,QACAiD,cAMAM,GACAA,EAAStD,UAAUE,OAAO,YAE1BqD,GACAA,EAASvD,UAAUE,OAAO,YAGL,gBAAduC,KAGDA,EAFFC,EACEnC,GAAYR,EAAoB,EAAXQ,IAAkBf,EAAOmB,OAClCZ,GAASQ,EAAWR,EAAQQ,GAE5BR,EAAQ8C,EAGpBtC,GAAYR,EAAQQ,GAAa,EACrBR,EAAQA,EAAQQ,EAEhBR,EAAQ8C,GAK9BJ,EAAYS,KAAKM,IAAIN,KAAKO,IAAIhB,EAAW,GAAIjD,EAAOmB,OAAS,GAEzDJ,OAA0BmD,KAAdhB,IACZD,GAAalC,EAGjB,IAAIoD,GAAaT,KAAKM,IAAIN,KAAKO,KAAoC,EAAhCjE,EAAOiD,GAAWmB,YAA8B,EAAbX,GAAiB,EAEnFH,IAAUI,KAAKW,IAAIC,EAASC,KAAOd,GAAaP,IAChDiB,EAAa,EACblB,EAAY,EACZV,EAAWgB,GAMflB,EAAU8B,EAAY5B,EAAUC,GAKhC8B,EAASC,EAAIJ,EAMTnE,EAAOiD,GAAWmB,YAAcX,IAChClD,EAAQ0C,IAGRlC,GAAakC,IAAcjD,EAAOmB,OAASJ,GAC3CkC,IAAcjD,EAAOmB,OAASnB,EAAOmB,OAASJ,GAA0B,IAAdkC,IACtDC,IACA3C,EAAQQ,GAGPmC,IACD3C,EAAQP,EAAOmB,OAAqB,EAAXJ,GAG7BuD,EAASC,GAAgC,EAA5BvE,EAAOO,GAAO6D,WAE3BI,EAAwB,WACpBnC,GAAsC,EAA5BrC,EAAOO,GAAO6D,WAAiB,MAAGF,MAIhD9D,GACAL,EAAiBkB,EAAM5C,KAAK2B,GAASO,GAOrCuD,IAAa/C,GAA0B,IAAdkC,GACzBa,EAAStD,UAAUG,IAAI,aAGvBoD,GAAahD,GAAauC,GAAYL,EAAY,IAAOjD,EAAOmB,QAChE4C,EAASvD,UAAUG,IAAI,YAG3BqB,EAAoB,QAAS,SACzByC,aAAclE,IAQtB,QAASmE,KACL1C,EAAoB,SAAU,QAE9BJ,GAAW,EAAA+C,EAAAhF,WACXQ,OAAcyE,UAAa9E,EAJb,IAAA+E,GAcV1E,EAPA2E,EAPUD,EAOVC,eACAC,EARUF,EAQVE,wBACAC,EATUH,EASVG,kBACAC,EAVUJ,EAUVI,kBACAC,EAXUL,EAWVK,kBACA9E,EAZUyE,EAYVzE,qBACA+E,EAbUN,EAaVM,YAGJ5E,GAAQ4E,EACRC,EAAQvF,EAAOwF,uBAAuBP,GAAgB,GACtDxD,EAAiB8D,EAAMC,uBAAuBN,GAAyB,GACvEjB,EAAWjE,EAAOwF,uBAAuBL,GAAmB,GAC5DjB,EAAWlE,EAAOwF,uBAAuBJ,GAAmB,GAE5DX,GACIC,EAAGjD,EAAe8C,WAClBkB,EAAGhE,EAAeiE,WAGlBpF,EAAQY,SACRf,EAASY,EAAcK,EAAM5C,KAAKiD,EAAeS,YAEjD/B,EAASiB,EAAM5C,KAAKiD,EAAeS,UAE/B+B,GACAA,EAAStD,UAAUG,IAAI,YAGvBoD,GAA+B,IAAlB/D,EAAOmB,SAAkBhB,EAAQmD,QAC9CS,EAASvD,UAAUG,IAAI,aAI/B6E,IAEIpF,GACAL,EAAiBC,EAAQO,GAGzBuD,GAAYC,IACZD,EAASnC,iBAAiB,QAAS8D,GACnC1B,EAASpC,iBAAiB,QAAS+D,IAGvCN,EAAMzD,iBAAiB,aAAcgE,EAAcC,GAE/CV,IACAE,EAAMzD,iBAAiB,YAAagE,GACpCP,EAAMzD,iBAAiB,QAASkE,IAGpC1F,EAAQ2F,OAAOnE,iBAAiB,SAAUoE,GAE1C/D,EAAoB,QAAS,QAOjC,QAASwD,KAAS,GAAAQ,GAC0E7F,EAAnFY,EADSiF,EACTjF,SAAUyB,EADDwD,EACCxD,KAAMe,EADPyC,EACOzC,YAAa0C,EADpBD,EACoBC,eAAgB7F,EADpC4F,EACoC5F,qBAAsB+E,EAD1Da,EAC0Db,YAExEvB,GAAchB,EAAatB,GAC3BuC,EAAajB,EAAawC,GAEtBvB,IAAeD,IACfA,EAAc5D,EAAOkG,OAAO,SAAUC,EAAenD,GACjD,MAAOmD,GAAgBvD,EAAaI,IACrC,IAGHiD,EACA1F,EAAQ4E,GAER3C,EAAO,KACPe,EAAc,GAGdxC,GACAsB,GAAiD,EAAvCrC,EAAOO,EAAQQ,GAAUqD,WAAiB,EAAG,MAEvD7D,GAAgBQ,EAChBuD,EAASC,GAAgC,EAA5BvE,EAAOO,GAAO6D,aAE3B/B,GAAsC,EAA5BrC,EAAOO,GAAO6D,WAAiBb,EAAaf,GACtD8B,EAASC,GAAgC,EAA5BvE,EAAOO,GAAO6D,YAG3BhE,GACAL,EAAiBkB,EAAM5C,KAAK2B,GAASO,GAQ7C,QAAS6F,GAAS7F,GACdyC,EAAMzC,GAOV,QAAS8F,KACL,MAAO9F,GAAQJ,EAAQY,UAAY,EAOvC,QAAS0E,KACLzC,GAAM,GAAO,GAOjB,QAAS0C,KACL1C,GAAM,GAAO,GAOjB,QAASsD,KACLtE,EAAoB,SAAU,WAG9BoD,EAAMmB,oBAAoB3E,EAASC,cAAeC,GAClDsD,EAAMmB,oBAAoB,aAAcZ,EAAcC,GACtDR,EAAMmB,oBAAoB,YAAaC,EAAaZ,GACpDR,EAAMmB,oBAAoB,WAAYE,GACtCrB,EAAMmB,oBAAoB,YAAaC,GACvCpB,EAAMmB,oBAAoB,YAAaZ,GACvCP,EAAMmB,oBAAoB,UAAWE,GACrCrB,EAAMmB,oBAAoB,aAAcE,GACxCrB,EAAMmB,oBAAoB,QAASV,GAEnC1F,EAAQ2F,OAAOS,oBAAoB,SAAUR,GAEzCjC,GACAA,EAASyC,oBAAoB,QAASd,GAGtC1B,GACAA,EAASwC,oBAAoB,QAASb,GAItCvF,EAAQY,UACR2F,MAAMC,MAAM,KAAMD,MAAMvG,EAAQY,WAAWV,QAAQ,WAC/CiB,EAAesF,YAAYtF,EAAeI,YAC1CJ,EAAesF,YAAYtF,EAAeuF,aAIlD7E,EAAoB,QAAS,WASjC,QAASF,KACD0C,IACAA,IAEAA,MAAwBN,IAIhC,QAASyB,GAAcmB,GAAO,GAAAC,GACE5G,EAArB+E,EADmB6B,EACnB7B,kBACD8B,EAAUF,EAAME,QAAUF,EAAME,QAAQ,GAAKF,CAE/C5B,KACAE,EAAMzD,iBAAiB,YAAa6E,GACpCpB,EAAMzD,iBAAiB,UAAW8E,GAClCrB,EAAMzD,iBAAiB,aAAc8E,IAGzCrB,EAAMzD,iBAAiB,YAAa6E,EAAaZ,GACjDR,EAAMzD,iBAAiB,WAAY8E,EAXT,IAanBQ,GAAgBD,EAAhBC,MAAOC,EAASF,EAATE,KAEdC,IACI5C,EAAG0C,EACH3B,EAAG4B,EACHE,KAAMC,KAAKC,OAGfC,MAAcrD,GAEdsD,KAEAxF,EAAoB,KAAM,cACtB8E,UAIR,QAASN,GAAaM,GAClB,GAAME,GAAUF,EAAME,QAAUF,EAAME,QAAQ,GAAKF,EAC5CG,EAAgBD,EAAhBC,MAAOC,EAASF,EAATE,KAEdM,IACIjD,EAAG0C,EAAQE,EAAY5C,EACvBe,EAAG4B,EAAQC,EAAY7B,OAGA,KAAhBiC,IACPA,KAAiBA,GAAe7D,KAAKW,IAAImD,EAAMjD,GAAKb,KAAKW,IAAImD,EAAMlC,MAGlEiC,GAAeJ,GAChB9E,EAAUiC,EAASC,EAAIiD,EAAMjD,EAAG,EAAG,MAIvCvC,EAAoB,KAAM,aACtB8E,UAIR,QAASL,GAAYK,GAKjB,GAAMvE,GAAW4E,EAAcE,KAAKC,MAAQH,EAAYC,SAAOlD,GAazDuD,EAAUC,OAAOnF,GAAY,KAC/BmB,KAAKW,IAAImD,EAAMjD,GAAK,IACpBb,KAAKW,IAAImD,EAAMjD,GAAKV,EAAa,EAW/B8D,GAAiBpH,GAASiH,EAAMjD,EAAI,GACtChE,IAAUP,EAAOmB,OAAS,GAAKqG,EAAMjD,EAAI,EAEvCrB,EAAYsE,EAAMjD,EAAI,CAEvBgD,KACGE,IAAYE,EACZ3E,GAAM,EAAOE,GAEbb,EAAUiC,EAASC,EAAGpE,EAAQyH,gBAItCT,MAAcjD,GAKdkB,EAAMmB,oBAAoB,YAAaC,GACvCpB,EAAMmB,oBAAoB,WAAYE,GACtCrB,EAAMmB,oBAAoB,YAAaC,GACvCpB,EAAMmB,oBAAoB,UAAWE,GACrCrB,EAAMmB,oBAAoB,aAAcE,GAExCzE,EAAoB,KAAM,YACtB8E,UAIR,QAASjB,GAASiB,GACVU,EAAMjD,GACNuC,EAAMe,iBAId,QAAS9B,GAAUe,GACXjD,IAAejB,EAAawC,KAC5BI,IAEAxD,EAAoB,KAAM,UACtB8E,WAjiBZ,GAAIxC,UACAV,SACAC,SACA7D,SAKAoF,SACA9D,SACAwC,SACAC,SACAnC,SACA4C,SAEAjE,EAAU,EACVJ,KACAyF,KAAmB,EAAAkC,EAAAnI,aAAsBoI,SAAS,EAKhC,oBAAXC,SAA0BnI,YAAkBmI,UACnDnI,EAASA,EAAO,GAkYpB,IAAIsH,UACAK,SACAD,QA+IJ,OAHA7C,MAIIA,QACAc,QACAY,UACAC,cACAZ,OACAC,OACAY,WFzeR1H,OAAOC,eAAerB,EAAS,cAC3ByK,OAAO,GAGX,IAAIC,GAAWtJ,OAAOuJ,QAAU,SAAUC,GAAU,IAAK,GAAIvK,GAAI,EAAGA,EAAIwK,UAAUlH,OAAQtD,IAAK,CAAE,GAAIyK,GAASD,UAAUxK,EAAI,KAAK,GAAI0K,KAAOD,GAAc1J,OAAOS,UAAUC,eAAejB,KAAKiK,EAAQC,KAAQH,EAAOG,GAAOD,EAAOC,IAAY,MAAOH,GAEvP5K,GE/EgBoC,MAPhB,IAAA4I,GAAAvK,EAAA,GF0FI0G,EAAmBlF,EAAuB+I,GEzF9CC,EAAAxK,EAAA,GF6FI6J,EAA0BrI,EAAuBgJ,GE5FrDC,EAAAzK,EAAA,GFgGImE,EAAkB3C,EAAuBiJ,GE/F7CC,EAAA1K,EAAA,GFmGI2K,EAAanJ,EAAuBkJ,GEjGlC1H,EAAQyF,MAAMrH,UAAU4B,OF2qBxB,SAAUxD,EAAQD,EAASS,GAEjC,YGjrBe,SAAS4K,KACpB,GAAIlG,UACAD,SACAb,QAmCJ,OAjCC,YACG,GAAIiH,GAAKC,SAASC,cAAc,KAC5BvG,EAAQqG,EAAGrG,MAEXwG,QAEqC,MAArCxG,EAAMwG,EAAO,sBACbpH,EAAgB,sBAChBa,EAAauG,GAGkB,KAA/BxG,EAAMwG,EAAO,gBACbpH,EAAgB,gBAChBa,EAAauG,GAGuB,KAApCxG,EAAMwG,EAAO,qBACbtG,EAAYsG,GAGoB,KAAhCxG,EAAMwG,EAAO,iBACbtG,EAAYsG,GAGkB,KAA9BxG,EAAMwG,EAAO,eACbtG,EAAYsG,GAGhBF,SAASG,KAAKzH,aAAaqH,EAAI,MAC/BrG,EAAME,GAAa,gBACnBoG,SAASG,KAAKtC,YAAYkC,OAI1BnG,YACAD,aACAb,iBH2oBRjD,OAAOC,eAAerB,EAAS,cAC3ByK,OAAO,IAEXzK,EAAQmC,QGvrBgBkJ,GH0uBlB,SAAUpL,EAAQD,EAASS,GAEjC,YI/uBe,SAASkL,KACpB,GAAIC,IAAkB,CAEtB,KACI,GAAItJ,GAAOlB,OAAOC,kBAAmB,WACjCG,IAD4C,WAExCoK,GAAkB,IAI1BtD,QAAOnE,iBAAiB,cAAe,KAAM7B,GAC7CgG,OAAOS,oBAAoB,cAAe,KAAMzG,GAClD,MAAOuJ,IAET,MAAOD,GJouBXxK,OAAOC,eAAerB,EAAS,cAC3ByK,OAAO,IAEXzK,EAAQmC,QIrvBgBwJ,GJywBlB,SAAU1L,EAAQD,EAASS,GAEjC,YKlwBe,SAASqL,GAAelB,EAAQlG,EAAMC,GACjD,GAAI2E,GAAQ,GAAIyC,WACZrH,GAEIsH,SAAS,EACTC,YAAY,EACZtH,OAAQA,GAIhBiG,GAAOkB,cAAcxC,GL2vBzBlI,OAAOC,eAAerB,EAAS,cAC3ByK,OAAO,IAEXzK,EAAQmC,QKxwBgB2J,CATxB,IAAAI,GAAAzL,EAAA,GLqxBI0L,EAEJ,SAAgCjK,GAAO,MAAOA,IAAOA,EAAIR,WAAaQ,GAAQC,QAASD,IAF5CgK,IAuBrC,SAAUjM,EAAQD,EAASS,IAEL,SAAS2L,GM7yBrC,GAAAC,GAAAD,EAAAL,WAmBA9L,GAAAD,QAjBA,WACA,IACA,GAAA+B,GAAA,GAAAsK,GAAA,OAA0C1H,QAAU2H,IAAA,QACpD,eAAAvK,EAAA2C,MAAA,QAAA3C,EAAA4C,OAAA2H,IACG,MAAAT,IAEH,YAWAQ,EAGA,mBAAAd,WAAA,kBAAAA,UAAAgB,YAAA,SAAA7H,EAAA8H,GACA,GAAAX,GAAAN,SAAAgB,YAAA,cAMA,OALAC,GACAX,EAAAY,gBAAA/H,EAAA8H,EAAAR,QAAAQ,EAAAP,WAAAO,EAAA7H,QAEAkH,EAAAY,gBAAA/H,GAAA,aAEAmH,GAIA,SAAAnH,EAAA8H,GACA,GAAAX,GAAAN,SAAAmB,mBAWA,OAVAb,GAAAnH,OACA8H,GACAX,EAAAG,QAAAW,QAAAH,EAAAR,SACAH,EAAAI,WAAAU,QAAAH,EAAAP,YACAJ,EAAAlH,OAAA6H,EAAA7H,SAEAkH,EAAAG,SAAA,EACAH,EAAAI,YAAA,EACAJ,EAAAlH,WAAA,IAEAkH,KNizB6BhL,KAAKb,EAASS,EAAoB,KAIzD,SAAUR,EAAQD,GOn2BxB,GAAA4M,EAGAA,GAAA,WACA,MAAArM,QAGA,KAEAqM,KAAAC,SAAA,qBAAAC,MAAA,QACC,MAAAjB,GAED,gBAAAvD,UACAsE,EAAAtE,QAOArI,EAAAD,QAAA4M,GP02BM,SAAU3M,EAAQD,EAASS,GAEjC,YAGAW,QAAOC,eAAerB,EAAS,cAC7ByK,OAAO,IAETzK,EAAQmC,SQj4BJ0D,eAAgB,EAMhBD,WAAY,IAMZG,YAAa,IAMbqE,cAAe,IAOfpF,KAAM,OAONc,QAAQ,EAORvC,UAAU,EAMVoE,aAAc,EAMdL,eAAgB,WAMhBC,wBAAyB,YAMzBC,kBAAmB,UAMnBC,kBAAmB,UAOnB7E,qBAAsB,SAMtB8E,mBAAmB,EAMnBY,OAA0B,mBAAXA,QAAyBA,OAAS,KAMjDG,gBAAgB,IR24Bd,SAAUxI,EAAQD,EAASS,GAEjCR,EAAOD,QAAUS,EAAoB","file":"lory.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 7);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; /* globals jQuery */\n\nexports.lory = lory;\n\nvar _detectPrefixes = __webpack_require__(1);\n\nvar _detectPrefixes2 = _interopRequireDefault(_detectPrefixes);\n\nvar _detectSupportsPassive = __webpack_require__(2);\n\nvar _detectSupportsPassive2 = _interopRequireDefault(_detectSupportsPassive);\n\nvar _dispatchEvent = __webpack_require__(3);\n\nvar _dispatchEvent2 = _interopRequireDefault(_dispatchEvent);\n\nvar _defaults = __webpack_require__(6);\n\nvar _defaults2 = _interopRequireDefault(_defaults);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar slice = Array.prototype.slice;\n\nfunction lory(slider, opts) {\n var position = void 0;\n var slidesWidth = void 0;\n var frameWidth = void 0;\n var slides = void 0;\n\n /**\r\n * slider DOM elements\r\n */\n var frame = void 0;\n var slideContainer = void 0;\n var prevCtrl = void 0;\n var nextCtrl = void 0;\n var prefixes = void 0;\n var transitionEndCallback = void 0;\n\n var index = 0;\n var options = {};\n var touchEventParams = (0, _detectSupportsPassive2.default)() ? { passive: true } : false;\n\n /**\r\n * if object is jQuery convert to native DOM element\r\n */\n if (typeof jQuery !== 'undefined' && slider instanceof jQuery) {\n slider = slider[0];\n }\n\n /**\r\n * private\r\n * set active class to element which is the current slide\r\n */\n function setActiveElement(slides, currentIndex) {\n var _options = options,\n classNameActiveSlide = _options.classNameActiveSlide;\n\n\n slides.forEach(function (element, index) {\n if (element.classList.contains(classNameActiveSlide)) {\n element.classList.remove(classNameActiveSlide);\n }\n });\n\n slides[currentIndex].classList.add(classNameActiveSlide);\n }\n\n /**\r\n * private\r\n * setupInfinite: function to setup if infinite is set\r\n *\r\n * @param {array} slideArray\r\n * @return {array} array of updated slideContainer elements\r\n */\n function setupInfinite(slideArray) {\n var _options2 = options,\n infinite = _options2.infinite;\n\n\n var front = slideArray.slice(0, infinite);\n var back = slideArray.slice(slideArray.length - infinite, slideArray.length);\n\n front.forEach(function (element) {\n var cloned = element.cloneNode(true);\n\n slideContainer.appendChild(cloned);\n });\n\n back.reverse().forEach(function (element) {\n var cloned = element.cloneNode(true);\n\n slideContainer.insertBefore(cloned, slideContainer.firstChild);\n });\n\n slideContainer.addEventListener(prefixes.transitionEnd, onTransitionEnd);\n\n return slice.call(slideContainer.children);\n }\n\n /**\r\n * [dispatchSliderEvent description]\r\n * @return {[type]} [description]\r\n */\n function dispatchSliderEvent(phase, type, detail) {\n (0, _dispatchEvent2.default)(slider, phase + '.lory.' + type, detail);\n }\n\n /**\r\n * translates to a given position in a given time in milliseconds\r\n *\r\n * @to {number} number in pixels where to translate to\r\n * @duration {number} time in milliseconds for the transistion\r\n * @ease {string} easing css property\r\n */\n function translate(to, duration, ease) {\n var style = slideContainer && slideContainer.style;\n\n if (style) {\n style[prefixes.transition + 'TimingFunction'] = ease;\n style[prefixes.transition + 'Duration'] = duration + 'ms';\n style[prefixes.transform] = 'translateX(' + to + 'px)';\n }\n }\n\n /**\r\n * returns an element's width\r\n */\n function elementWidth(element) {\n return element.getBoundingClientRect().width || element.offsetWidth;\n }\n\n /**\r\n * slidefunction called by prev, next & touchend\r\n *\r\n * determine nextIndex and slide to next postion\r\n * under restrictions of the defined options\r\n *\r\n * @direction {boolean}\r\n */\n function slide(nextIndex, direction) {\n var _options3 = options,\n slideSpeed = _options3.slideSpeed,\n slidesToScroll = _options3.slidesToScroll,\n infinite = _options3.infinite,\n rewind = _options3.rewind,\n rewindSpeed = _options3.rewindSpeed,\n ease = _options3.ease,\n classNameActiveSlide = _options3.classNameActiveSlide;\n\n\n var duration = slideSpeed;\n\n var nextSlide = direction ? index + 1 : index - 1;\n var maxOffset = Math.round(slidesWidth - frameWidth);\n\n dispatchSliderEvent('before', 'slide', {\n index: index,\n nextSlide: nextSlide\n });\n\n /**\r\n * Reset control classes\r\n */\n if (prevCtrl) {\n prevCtrl.classList.remove('disabled');\n }\n if (nextCtrl) {\n nextCtrl.classList.remove('disabled');\n }\n\n if (typeof nextIndex !== 'number') {\n if (direction) {\n if (infinite && index + infinite * 2 !== slides.length) {\n nextIndex = index + (infinite - index % infinite);\n } else {\n nextIndex = index + slidesToScroll;\n }\n } else {\n if (infinite && index % infinite !== 0) {\n nextIndex = index - index % infinite;\n } else {\n nextIndex = index - slidesToScroll;\n }\n }\n }\n\n nextIndex = Math.min(Math.max(nextIndex, 0), slides.length - 1);\n\n if (infinite && direction === undefined) {\n nextIndex += infinite;\n }\n\n var nextOffset = Math.min(Math.max(slides[nextIndex].offsetLeft * -1, maxOffset * -1), 0);\n\n if (rewind && Math.abs(position.x) === maxOffset && direction) {\n nextOffset = 0;\n nextIndex = 0;\n duration = rewindSpeed;\n }\n\n /**\r\n * translate to the nextOffset by a defined duration and ease function\r\n */\n translate(nextOffset, duration, ease);\n\n /**\r\n * update the position with the next position\r\n */\n position.x = nextOffset;\n\n /**\r\n * update the index with the nextIndex only if\r\n * the offset of the nextIndex is in the range of the maxOffset\r\n */\n if (slides[nextIndex].offsetLeft <= maxOffset) {\n index = nextIndex;\n }\n\n if (infinite && (nextIndex === slides.length - infinite || nextIndex === slides.length - slides.length % infinite || nextIndex === 0)) {\n if (direction) {\n index = infinite;\n }\n\n if (!direction) {\n index = slides.length - infinite * 2;\n }\n\n position.x = slides[index].offsetLeft * -1;\n\n transitionEndCallback = function transitionEndCallback() {\n translate(slides[index].offsetLeft * -1, 0, undefined);\n };\n }\n\n if (classNameActiveSlide) {\n setActiveElement(slice.call(slides), index);\n }\n\n /**\r\n * update classes for next and prev arrows\r\n * based on user settings\r\n */\n if (prevCtrl && !infinite && nextIndex === 0) {\n prevCtrl.classList.add('disabled');\n }\n\n if (nextCtrl && !infinite && !rewind && nextIndex + 1 === slides.length) {\n nextCtrl.classList.add('disabled');\n }\n\n dispatchSliderEvent('after', 'slide', {\n currentSlide: index\n });\n }\n\n /**\r\n * public\r\n * setup function\r\n */\n function setup() {\n dispatchSliderEvent('before', 'init');\n\n prefixes = (0, _detectPrefixes2.default)();\n options = _extends({}, _defaults2.default, opts);\n\n var _options4 = options,\n classNameFrame = _options4.classNameFrame,\n classNameSlideContainer = _options4.classNameSlideContainer,\n classNamePrevCtrl = _options4.classNamePrevCtrl,\n classNameNextCtrl = _options4.classNameNextCtrl,\n enableMouseEvents = _options4.enableMouseEvents,\n classNameActiveSlide = _options4.classNameActiveSlide,\n initialIndex = _options4.initialIndex;\n\n\n index = initialIndex;\n frame = slider.getElementsByClassName(classNameFrame)[0];\n slideContainer = frame.getElementsByClassName(classNameSlideContainer)[0];\n prevCtrl = slider.getElementsByClassName(classNamePrevCtrl)[0];\n nextCtrl = slider.getElementsByClassName(classNameNextCtrl)[0];\n\n position = {\n x: slideContainer.offsetLeft,\n y: slideContainer.offsetTop\n };\n\n if (options.infinite) {\n slides = setupInfinite(slice.call(slideContainer.children));\n } else {\n slides = slice.call(slideContainer.children);\n\n if (prevCtrl) {\n prevCtrl.classList.add('disabled');\n }\n\n if (nextCtrl && slides.length === 1 && !options.rewind) {\n nextCtrl.classList.add('disabled');\n }\n }\n\n reset();\n\n if (classNameActiveSlide) {\n setActiveElement(slides, index);\n }\n\n if (prevCtrl && nextCtrl) {\n prevCtrl.addEventListener('click', prev);\n nextCtrl.addEventListener('click', next);\n }\n\n frame.addEventListener('touchstart', onTouchstart, touchEventParams);\n\n if (enableMouseEvents) {\n frame.addEventListener('mousedown', onTouchstart);\n frame.addEventListener('click', onClick);\n }\n\n options.window.addEventListener('resize', onResize);\n\n dispatchSliderEvent('after', 'init');\n }\n\n /**\r\n * public\r\n * reset function: called on resize\r\n */\n function reset() {\n var _options5 = options,\n infinite = _options5.infinite,\n ease = _options5.ease,\n rewindSpeed = _options5.rewindSpeed,\n rewindOnResize = _options5.rewindOnResize,\n classNameActiveSlide = _options5.classNameActiveSlide,\n initialIndex = _options5.initialIndex;\n\n\n slidesWidth = elementWidth(slideContainer);\n frameWidth = elementWidth(frame);\n\n if (frameWidth === slidesWidth) {\n slidesWidth = slides.reduce(function (previousValue, slide) {\n return previousValue + elementWidth(slide);\n }, 0);\n }\n\n if (rewindOnResize) {\n index = initialIndex;\n } else {\n ease = null;\n rewindSpeed = 0;\n }\n\n if (infinite) {\n translate(slides[index + infinite].offsetLeft * -1, 0, null);\n\n index = index + infinite;\n position.x = slides[index].offsetLeft * -1;\n } else {\n translate(slides[index].offsetLeft * -1, rewindSpeed, ease);\n position.x = slides[index].offsetLeft * -1;\n }\n\n if (classNameActiveSlide) {\n setActiveElement(slice.call(slides), index);\n }\n }\n\n /**\r\n * public\r\n * slideTo: called on clickhandler\r\n */\n function slideTo(index) {\n slide(index);\n }\n\n /**\r\n * public\r\n * returnIndex function: called on clickhandler\r\n */\n function returnIndex() {\n return index - options.infinite || 0;\n }\n\n /**\r\n * public\r\n * prev function: called on clickhandler\r\n */\n function prev() {\n slide(false, false);\n }\n\n /**\r\n * public\r\n * next function: called on clickhandler\r\n */\n function next() {\n slide(false, true);\n }\n\n /**\r\n * public\r\n * destroy function: called to gracefully destroy the lory instance\r\n */\n function destroy() {\n dispatchSliderEvent('before', 'destroy');\n\n // remove event listeners\n frame.removeEventListener(prefixes.transitionEnd, onTransitionEnd);\n frame.removeEventListener('touchstart', onTouchstart, touchEventParams);\n frame.removeEventListener('touchmove', onTouchmove, touchEventParams);\n frame.removeEventListener('touchend', onTouchend);\n frame.removeEventListener('mousemove', onTouchmove);\n frame.removeEventListener('mousedown', onTouchstart);\n frame.removeEventListener('mouseup', onTouchend);\n frame.removeEventListener('mouseleave', onTouchend);\n frame.removeEventListener('click', onClick);\n\n options.window.removeEventListener('resize', onResize);\n\n if (prevCtrl) {\n prevCtrl.removeEventListener('click', prev);\n }\n\n if (nextCtrl) {\n nextCtrl.removeEventListener('click', next);\n }\n\n // remove cloned slides if infinite is set\n if (options.infinite) {\n Array.apply(null, Array(options.infinite)).forEach(function () {\n slideContainer.removeChild(slideContainer.firstChild);\n slideContainer.removeChild(slideContainer.lastChild);\n });\n }\n\n dispatchSliderEvent('after', 'destroy');\n }\n\n // event handling\n\n var touchOffset = void 0;\n var delta = void 0;\n var isScrolling = void 0;\n\n function onTransitionEnd() {\n if (transitionEndCallback) {\n transitionEndCallback();\n\n transitionEndCallback = undefined;\n }\n }\n\n function onTouchstart(event) {\n var _options6 = options,\n enableMouseEvents = _options6.enableMouseEvents;\n\n var touches = event.touches ? event.touches[0] : event;\n\n if (enableMouseEvents) {\n frame.addEventListener('mousemove', onTouchmove);\n frame.addEventListener('mouseup', onTouchend);\n frame.addEventListener('mouseleave', onTouchend);\n }\n\n frame.addEventListener('touchmove', onTouchmove, touchEventParams);\n frame.addEventListener('touchend', onTouchend);\n\n var pageX = touches.pageX,\n pageY = touches.pageY;\n\n\n touchOffset = {\n x: pageX,\n y: pageY,\n time: Date.now()\n };\n\n isScrolling = undefined;\n\n delta = {};\n\n dispatchSliderEvent('on', 'touchstart', {\n event: event\n });\n }\n\n function onTouchmove(event) {\n var touches = event.touches ? event.touches[0] : event;\n var pageX = touches.pageX,\n pageY = touches.pageY;\n\n\n delta = {\n x: pageX - touchOffset.x,\n y: pageY - touchOffset.y\n };\n\n if (typeof isScrolling === 'undefined') {\n isScrolling = !!(isScrolling || Math.abs(delta.x) < Math.abs(delta.y));\n }\n\n if (!isScrolling && touchOffset) {\n translate(position.x + delta.x, 0, null);\n }\n\n // may be\n dispatchSliderEvent('on', 'touchmove', {\n event: event\n });\n }\n\n function onTouchend(event) {\n /**\r\n * time between touchstart and touchend in milliseconds\r\n * @duration {number}\r\n */\n var duration = touchOffset ? Date.now() - touchOffset.time : undefined;\n\n /**\r\n * is valid if:\r\n *\r\n * -> swipe attempt time is over 300 ms\r\n * and\r\n * -> swipe distance is greater than 25px\r\n * or\r\n * -> swipe distance is more then a third of the swipe area\r\n *\r\n * @isValidSlide {Boolean}\r\n */\n var isValid = Number(duration) < 300 && Math.abs(delta.x) > 25 || Math.abs(delta.x) > frameWidth / 3;\n\n /**\r\n * is out of bounds if:\r\n *\r\n * -> index is 0 and delta x is greater than 0\r\n * or\r\n * -> index is the last slide and delta is smaller than 0\r\n *\r\n * @isOutOfBounds {Boolean}\r\n */\n var isOutOfBounds = !index && delta.x > 0 || index === slides.length - 1 && delta.x < 0;\n\n var direction = delta.x < 0;\n\n if (!isScrolling) {\n if (isValid && !isOutOfBounds) {\n slide(false, direction);\n } else {\n translate(position.x, options.snapBackSpeed);\n }\n }\n\n touchOffset = undefined;\n\n /**\r\n * remove eventlisteners after swipe attempt\r\n */\n frame.removeEventListener('touchmove', onTouchmove);\n frame.removeEventListener('touchend', onTouchend);\n frame.removeEventListener('mousemove', onTouchmove);\n frame.removeEventListener('mouseup', onTouchend);\n frame.removeEventListener('mouseleave', onTouchend);\n\n dispatchSliderEvent('on', 'touchend', {\n event: event\n });\n }\n\n function onClick(event) {\n if (delta.x) {\n event.preventDefault();\n }\n }\n\n function onResize(event) {\n if (frameWidth !== elementWidth(frame)) {\n reset();\n\n dispatchSliderEvent('on', 'resize', {\n event: event\n });\n }\n }\n\n // trigger initial setup\n setup();\n\n // expose public api\n return {\n setup: setup,\n reset: reset,\n slideTo: slideTo,\n returnIndex: returnIndex,\n prev: prev,\n next: next,\n destroy: destroy\n };\n}\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = detectPrefixes;\n/**\r\n * Detecting prefixes for saving time and bytes\r\n */\nfunction detectPrefixes() {\n var transform = void 0;\n var transition = void 0;\n var transitionEnd = void 0;\n\n (function () {\n var el = document.createElement('_');\n var style = el.style;\n\n var prop = void 0;\n\n if (style[prop = 'webkitTransition'] === '') {\n transitionEnd = 'webkitTransitionEnd';\n transition = prop;\n }\n\n if (style[prop = 'transition'] === '') {\n transitionEnd = 'transitionend';\n transition = prop;\n }\n\n if (style[prop = 'webkitTransform'] === '') {\n transform = prop;\n }\n\n if (style[prop = 'msTransform'] === '') {\n transform = prop;\n }\n\n if (style[prop = 'transform'] === '') {\n transform = prop;\n }\n\n document.body.insertBefore(el, null);\n style[transform] = 'translateX(0)';\n document.body.removeChild(el);\n })();\n\n return {\n transform: transform,\n transition: transition,\n transitionEnd: transitionEnd\n };\n}\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = detectSupportsPassive;\nfunction detectSupportsPassive() {\n var supportsPassive = false;\n\n try {\n var opts = Object.defineProperty({}, 'passive', {\n get: function get() {\n supportsPassive = true;\n }\n });\n\n window.addEventListener('testPassive', null, opts);\n window.removeEventListener('testPassive', null, opts);\n } catch (e) {}\n\n return supportsPassive;\n}\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = dispatchEvent;\n\nvar _customEvent = __webpack_require__(4);\n\nvar _customEvent2 = _interopRequireDefault(_customEvent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\r\n * dispatch custom events\r\n *\r\n * @param {element} el slideshow element\r\n * @param {string} type custom event name\r\n * @param {object} detail custom detail information\r\n */\nfunction dispatchEvent(target, type, detail) {\n var event = new _customEvent2.default(type, {\n bubbles: true,\n cancelable: true,\n detail: detail\n });\n\n target.dispatchEvent(event);\n}\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(global) {\nvar NativeCustomEvent = global.CustomEvent;\n\nfunction useNative () {\n try {\n var p = new NativeCustomEvent('cat', { detail: { foo: 'bar' } });\n return 'cat' === p.type && 'bar' === p.detail.foo;\n } catch (e) {\n }\n return false;\n}\n\n/**\n * Cross-browser `CustomEvent` constructor.\n *\n * https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent.CustomEvent\n *\n * @public\n */\n\nmodule.exports = useNative() ? NativeCustomEvent :\n\n// IE >= 9\n'undefined' !== typeof document && 'function' === typeof document.createEvent ? function CustomEvent (type, params) {\n var e = document.createEvent('CustomEvent');\n if (params) {\n e.initCustomEvent(type, params.bubbles, params.cancelable, params.detail);\n } else {\n e.initCustomEvent(type, false, false, void 0);\n }\n return e;\n} :\n\n// IE <= 8\nfunction CustomEvent (type, params) {\n var e = document.createEventObject();\n e.type = type;\n if (params) {\n e.bubbles = Boolean(params.bubbles);\n e.cancelable = Boolean(params.cancelable);\n e.detail = params.detail;\n } else {\n e.bubbles = false;\n e.cancelable = false;\n e.detail = void 0;\n }\n return e;\n}\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports) {\n\nvar g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = {\n /**\r\n * slides scrolled at once\r\n * @slidesToScroll {Number}\r\n */\n slidesToScroll: 1,\n\n /**\r\n * time in milliseconds for the animation of a valid slide attempt\r\n * @slideSpeed {Number}\r\n */\n slideSpeed: 300,\n\n /**\r\n * time in milliseconds for the animation of the rewind after the last slide\r\n * @rewindSpeed {Number}\r\n */\n rewindSpeed: 600,\n\n /**\r\n * time for the snapBack of the slider if the slide attempt was not valid\r\n * @snapBackSpeed {Number}\r\n */\n snapBackSpeed: 200,\n\n /**\r\n * Basic easing functions: https://developer.mozilla.org/de/docs/Web/CSS/transition-timing-function\r\n * cubic bezier easing functions: http://easings.net/de\r\n * @ease {String}\r\n */\n ease: 'ease',\n\n /**\r\n * if slider reached the last slide, with next click the slider goes back to the startindex.\r\n * use infinite or rewind, not both\r\n * @rewind {Boolean}\r\n */\n rewind: false,\n\n /**\r\n * number of visible slides or false\r\n * use infinite or rewind, not both\r\n * @infinite {number}\r\n */\n infinite: false,\n\n /**\r\n * the slide index to show when the slider is initialized.\r\n * @initialIndex {number}\r\n */\n initialIndex: 0,\n\n /**\r\n * class name for slider frame\r\n * @classNameFrame {string}\r\n */\n classNameFrame: 'js_frame',\n\n /**\r\n * class name for slides container\r\n * @classNameSlideContainer {string}\r\n */\n classNameSlideContainer: 'js_slides',\n\n /**\r\n * class name for slider prev control\r\n * @classNamePrevCtrl {string}\r\n */\n classNamePrevCtrl: 'js_prev',\n\n /**\r\n * class name for slider next control\r\n * @classNameNextCtrl {string}\r\n */\n classNameNextCtrl: 'js_next',\n\n /**\r\n * class name for current active slide\r\n * if emptyString then no class is set\r\n * @classNameActiveSlide {string}\r\n */\n classNameActiveSlide: 'active',\n\n /**\r\n * enables mouse events for swiping on desktop devices\r\n * @enableMouseEvents {boolean}\r\n */\n enableMouseEvents: false,\n\n /**\r\n * window instance\r\n * @window {object}\r\n */\n window: typeof window !== 'undefined' ? window : null,\n\n /**\r\n * If false, slides lory to the first slide on window resize.\r\n * @rewindOnResize {boolean}\r\n */\n rewindOnResize: true\n};\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(0);\n\n\n/***/ })\n/******/ ]);\n});\n\n\n// WEBPACK FOOTER //\n// lory.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 7);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 903dc4782db5c772efd4","/* globals jQuery */\r\n\r\nimport detectPrefixes from './utils/detect-prefixes.js';\r\nimport supportsPassive from './utils/detect-supportsPassive';\r\nimport dispatchEvent from './utils/dispatch-event.js';\r\nimport defaults from './defaults.js';\r\n\r\nconst slice = Array.prototype.slice;\r\n\r\nexport function lory (slider, opts) {\r\n let position;\r\n let slidesWidth;\r\n let frameWidth;\r\n let slides;\r\n\r\n /**\r\n * slider DOM elements\r\n */\r\n let frame;\r\n let slideContainer;\r\n let prevCtrl;\r\n let nextCtrl;\r\n let prefixes;\r\n let transitionEndCallback;\r\n\r\n let index = 0;\r\n let options = {};\r\n let touchEventParams = supportsPassive() ? { passive: true } : false;\r\n\r\n /**\r\n * if object is jQuery convert to native DOM element\r\n */\r\n if (typeof jQuery !== 'undefined' && slider instanceof jQuery) {\r\n slider = slider[0];\r\n }\r\n\r\n /**\r\n * private\r\n * set active class to element which is the current slide\r\n */\r\n function setActiveElement (slides, currentIndex) {\r\n const {classNameActiveSlide} = options;\r\n\r\n slides.forEach((element, index) => {\r\n if (element.classList.contains(classNameActiveSlide)) {\r\n element.classList.remove(classNameActiveSlide);\r\n }\r\n });\r\n\r\n slides[currentIndex].classList.add(classNameActiveSlide);\r\n }\r\n\r\n /**\r\n * private\r\n * setupInfinite: function to setup if infinite is set\r\n *\r\n * @param {array} slideArray\r\n * @return {array} array of updated slideContainer elements\r\n */\r\n function setupInfinite (slideArray) {\r\n const {infinite} = options;\r\n\r\n const front = slideArray.slice(0, infinite);\r\n const back = slideArray.slice(slideArray.length - infinite, slideArray.length);\r\n\r\n front.forEach(function (element) {\r\n const cloned = element.cloneNode(true);\r\n\r\n slideContainer.appendChild(cloned);\r\n });\r\n\r\n back.reverse()\r\n .forEach(function (element) {\r\n const cloned = element.cloneNode(true);\r\n\r\n slideContainer.insertBefore(cloned, slideContainer.firstChild);\r\n });\r\n\r\n slideContainer.addEventListener(prefixes.transitionEnd, onTransitionEnd);\r\n\r\n return slice.call(slideContainer.children);\r\n }\r\n\r\n /**\r\n * [dispatchSliderEvent description]\r\n * @return {[type]} [description]\r\n */\r\n function dispatchSliderEvent (phase, type, detail) {\r\n dispatchEvent(slider, `${phase}.lory.${type}`, detail);\r\n }\r\n\r\n /**\r\n * translates to a given position in a given time in milliseconds\r\n *\r\n * @to {number} number in pixels where to translate to\r\n * @duration {number} time in milliseconds for the transistion\r\n * @ease {string} easing css property\r\n */\r\n function translate (to, duration, ease) {\r\n const style = slideContainer && slideContainer.style;\r\n\r\n if (style) {\r\n style[prefixes.transition + 'TimingFunction'] = ease;\r\n style[prefixes.transition + 'Duration'] = duration + 'ms';\r\n style[prefixes.transform] = 'translateX(' + to + 'px)';\r\n }\r\n }\r\n\r\n /**\r\n * returns an element's width\r\n */\r\n function elementWidth (element) {\r\n return element.getBoundingClientRect().width || element.offsetWidth;\r\n }\r\n\r\n /**\r\n * slidefunction called by prev, next & touchend\r\n *\r\n * determine nextIndex and slide to next postion\r\n * under restrictions of the defined options\r\n *\r\n * @direction {boolean}\r\n */\r\n function slide (nextIndex, direction) {\r\n const {\r\n slideSpeed,\r\n slidesToScroll,\r\n infinite,\r\n rewind,\r\n rewindSpeed,\r\n ease,\r\n classNameActiveSlide\r\n } = options;\r\n\r\n let duration = slideSpeed;\r\n\r\n const nextSlide = direction ? index + 1 : index - 1;\r\n const maxOffset = Math.round(slidesWidth - frameWidth);\r\n\r\n dispatchSliderEvent('before', 'slide', {\r\n index,\r\n nextSlide\r\n });\r\n\r\n /**\r\n * Reset control classes\r\n */\r\n if (prevCtrl) {\r\n prevCtrl.classList.remove('disabled');\r\n }\r\n if (nextCtrl) {\r\n nextCtrl.classList.remove('disabled');\r\n }\r\n\r\n if (typeof nextIndex !== 'number') {\r\n if (direction) {\r\n if (infinite && index + (infinite * 2) !== slides.length) {\r\n nextIndex = index + (infinite - index % infinite);\r\n } else {\r\n nextIndex = index + slidesToScroll;\r\n }\r\n } else {\r\n if (infinite && index % infinite !== 0) {\r\n nextIndex = index - index % infinite;\r\n } else {\r\n nextIndex = index - slidesToScroll;\r\n }\r\n }\r\n }\r\n\r\n nextIndex = Math.min(Math.max(nextIndex, 0), slides.length - 1);\r\n\r\n if (infinite && direction === undefined) {\r\n nextIndex += infinite;\r\n }\r\n\r\n let nextOffset = Math.min(Math.max(slides[nextIndex].offsetLeft * -1, maxOffset * -1), 0);\r\n\r\n if (rewind && Math.abs(position.x) === maxOffset && direction) {\r\n nextOffset = 0;\r\n nextIndex = 0;\r\n duration = rewindSpeed;\r\n }\r\n\r\n /**\r\n * translate to the nextOffset by a defined duration and ease function\r\n */\r\n translate(nextOffset, duration, ease);\r\n\r\n /**\r\n * update the position with the next position\r\n */\r\n position.x = nextOffset;\r\n\r\n /**\r\n * update the index with the nextIndex only if\r\n * the offset of the nextIndex is in the range of the maxOffset\r\n */\r\n if (slides[nextIndex].offsetLeft <= maxOffset) {\r\n index = nextIndex;\r\n }\r\n\r\n if (infinite && (nextIndex === slides.length - infinite ||\r\n nextIndex === slides.length - slides.length % infinite || nextIndex === 0)) {\r\n if (direction) {\r\n index = infinite;\r\n }\r\n\r\n if (!direction) {\r\n index = slides.length - (infinite * 2);\r\n }\r\n\r\n position.x = slides[index].offsetLeft * -1;\r\n\r\n transitionEndCallback = function () {\r\n translate(slides[index].offsetLeft * -1, 0, undefined);\r\n };\r\n }\r\n\r\n if (classNameActiveSlide) {\r\n setActiveElement(slice.call(slides), index);\r\n }\r\n\r\n /**\r\n * update classes for next and prev arrows\r\n * based on user settings\r\n */\r\n if (prevCtrl && !infinite && nextIndex === 0) {\r\n prevCtrl.classList.add('disabled');\r\n }\r\n\r\n if (nextCtrl && !infinite && !rewind && ((nextIndex + 1) === slides.length)) {\r\n nextCtrl.classList.add('disabled');\r\n }\r\n\r\n dispatchSliderEvent('after', 'slide', {\r\n currentSlide: index\r\n });\r\n }\r\n\r\n /**\r\n * public\r\n * setup function\r\n */\r\n function setup () {\r\n dispatchSliderEvent('before', 'init');\r\n\r\n prefixes = detectPrefixes();\r\n options = {...defaults, ...opts};\r\n\r\n const {\r\n classNameFrame,\r\n classNameSlideContainer,\r\n classNamePrevCtrl,\r\n classNameNextCtrl,\r\n enableMouseEvents,\r\n classNameActiveSlide,\r\n initialIndex\r\n } = options;\r\n\r\n index = initialIndex;\r\n frame = slider.getElementsByClassName(classNameFrame)[0];\r\n slideContainer = frame.getElementsByClassName(classNameSlideContainer)[0];\r\n prevCtrl = slider.getElementsByClassName(classNamePrevCtrl)[0];\r\n nextCtrl = slider.getElementsByClassName(classNameNextCtrl)[0];\r\n\r\n position = {\r\n x: slideContainer.offsetLeft,\r\n y: slideContainer.offsetTop\r\n };\r\n\r\n if (options.infinite) {\r\n slides = setupInfinite(slice.call(slideContainer.children));\r\n } else {\r\n slides = slice.call(slideContainer.children);\r\n\r\n if (prevCtrl) {\r\n prevCtrl.classList.add('disabled');\r\n }\r\n\r\n if (nextCtrl && (slides.length === 1) && !options.rewind) {\r\n nextCtrl.classList.add('disabled');\r\n }\r\n }\r\n\r\n reset();\r\n\r\n if (classNameActiveSlide) {\r\n setActiveElement(slides, index);\r\n }\r\n\r\n if (prevCtrl && nextCtrl) {\r\n prevCtrl.addEventListener('click', prev);\r\n nextCtrl.addEventListener('click', next);\r\n }\r\n\r\n frame.addEventListener('touchstart', onTouchstart, touchEventParams);\r\n\r\n if (enableMouseEvents) {\r\n frame.addEventListener('mousedown', onTouchstart);\r\n frame.addEventListener('click', onClick);\r\n }\r\n\r\n options.window.addEventListener('resize', onResize);\r\n\r\n dispatchSliderEvent('after', 'init');\r\n }\r\n\r\n /**\r\n * public\r\n * reset function: called on resize\r\n */\r\n function reset () {\r\n var {infinite, ease, rewindSpeed, rewindOnResize, classNameActiveSlide, initialIndex} = options;\r\n\r\n slidesWidth = elementWidth(slideContainer);\r\n frameWidth = elementWidth(frame);\r\n\r\n if (frameWidth === slidesWidth) {\r\n slidesWidth = slides.reduce(function (previousValue, slide) {\r\n return previousValue + elementWidth(slide);\r\n }, 0);\r\n }\r\n\r\n if (rewindOnResize) {\r\n index = initialIndex;\r\n } else {\r\n ease = null;\r\n rewindSpeed = 0;\r\n }\r\n\r\n if (infinite) {\r\n translate(slides[index + infinite].offsetLeft * -1, 0, null);\r\n\r\n index = index + infinite;\r\n position.x = slides[index].offsetLeft * -1;\r\n } else {\r\n translate(slides[index].offsetLeft * -1, rewindSpeed, ease);\r\n position.x = slides[index].offsetLeft * -1;\r\n }\r\n\r\n if (classNameActiveSlide) {\r\n setActiveElement(slice.call(slides), index);\r\n }\r\n }\r\n\r\n /**\r\n * public\r\n * slideTo: called on clickhandler\r\n */\r\n function slideTo (index) {\r\n slide(index);\r\n }\r\n\r\n /**\r\n * public\r\n * returnIndex function: called on clickhandler\r\n */\r\n function returnIndex () {\r\n return index - options.infinite || 0;\r\n }\r\n\r\n /**\r\n * public\r\n * prev function: called on clickhandler\r\n */\r\n function prev () {\r\n slide(false, false);\r\n }\r\n\r\n /**\r\n * public\r\n * next function: called on clickhandler\r\n */\r\n function next () {\r\n slide(false, true);\r\n }\r\n\r\n /**\r\n * public\r\n * destroy function: called to gracefully destroy the lory instance\r\n */\r\n function destroy () {\r\n dispatchSliderEvent('before', 'destroy');\r\n\r\n // remove event listeners\r\n frame.removeEventListener(prefixes.transitionEnd, onTransitionEnd);\r\n frame.removeEventListener('touchstart', onTouchstart, touchEventParams);\r\n frame.removeEventListener('touchmove', onTouchmove, touchEventParams);\r\n frame.removeEventListener('touchend', onTouchend);\r\n frame.removeEventListener('mousemove', onTouchmove);\r\n frame.removeEventListener('mousedown', onTouchstart);\r\n frame.removeEventListener('mouseup', onTouchend);\r\n frame.removeEventListener('mouseleave', onTouchend);\r\n frame.removeEventListener('click', onClick);\r\n\r\n options.window.removeEventListener('resize', onResize);\r\n\r\n if (prevCtrl) {\r\n prevCtrl.removeEventListener('click', prev);\r\n }\r\n\r\n if (nextCtrl) {\r\n nextCtrl.removeEventListener('click', next);\r\n }\r\n\r\n // remove cloned slides if infinite is set\r\n if (options.infinite) {\r\n Array.apply(null, Array(options.infinite)).forEach(function () {\r\n slideContainer.removeChild(slideContainer.firstChild);\r\n slideContainer.removeChild(slideContainer.lastChild);\r\n });\r\n }\r\n\r\n dispatchSliderEvent('after', 'destroy');\r\n }\r\n\r\n // event handling\r\n\r\n let touchOffset;\r\n let delta;\r\n let isScrolling;\r\n\r\n function onTransitionEnd () {\r\n if (transitionEndCallback) {\r\n transitionEndCallback();\r\n\r\n transitionEndCallback = undefined;\r\n }\r\n }\r\n\r\n function onTouchstart (event) {\r\n const {enableMouseEvents} = options;\r\n const touches = event.touches ? event.touches[0] : event;\r\n\r\n if (enableMouseEvents) {\r\n frame.addEventListener('mousemove', onTouchmove);\r\n frame.addEventListener('mouseup', onTouchend);\r\n frame.addEventListener('mouseleave', onTouchend);\r\n }\r\n\r\n frame.addEventListener('touchmove', onTouchmove, touchEventParams);\r\n frame.addEventListener('touchend', onTouchend);\r\n\r\n const {pageX, pageY} = touches;\r\n\r\n touchOffset = {\r\n x: pageX,\r\n y: pageY,\r\n time: Date.now()\r\n };\r\n\r\n isScrolling = undefined;\r\n\r\n delta = {};\r\n\r\n dispatchSliderEvent('on', 'touchstart', {\r\n event\r\n });\r\n }\r\n\r\n function onTouchmove (event) {\r\n const touches = event.touches ? event.touches[0] : event;\r\n const {pageX, pageY} = touches;\r\n\r\n delta = {\r\n x: pageX - touchOffset.x,\r\n y: pageY - touchOffset.y\r\n };\r\n\r\n if (typeof isScrolling === 'undefined') {\r\n isScrolling = !!(isScrolling || Math.abs(delta.x) < Math.abs(delta.y));\r\n }\r\n\r\n if (!isScrolling && touchOffset) {\r\n translate(position.x + delta.x, 0, null);\r\n }\r\n\r\n // may be\r\n dispatchSliderEvent('on', 'touchmove', {\r\n event\r\n });\r\n }\r\n\r\n function onTouchend (event) {\r\n /**\r\n * time between touchstart and touchend in milliseconds\r\n * @duration {number}\r\n */\r\n const duration = touchOffset ? Date.now() - touchOffset.time : undefined;\r\n\r\n /**\r\n * is valid if:\r\n *\r\n * -> swipe attempt time is over 300 ms\r\n * and\r\n * -> swipe distance is greater than 25px\r\n * or\r\n * -> swipe distance is more then a third of the swipe area\r\n *\r\n * @isValidSlide {Boolean}\r\n */\r\n const isValid = Number(duration) < 300 &&\r\n Math.abs(delta.x) > 25 ||\r\n Math.abs(delta.x) > frameWidth / 3;\r\n\r\n /**\r\n * is out of bounds if:\r\n *\r\n * -> index is 0 and delta x is greater than 0\r\n * or\r\n * -> index is the last slide and delta is smaller than 0\r\n *\r\n * @isOutOfBounds {Boolean}\r\n */\r\n const isOutOfBounds = !index && delta.x > 0 ||\r\n index === slides.length - 1 && delta.x < 0;\r\n\r\n const direction = delta.x < 0;\r\n\r\n if (!isScrolling) {\r\n if (isValid && !isOutOfBounds) {\r\n slide(false, direction);\r\n } else {\r\n translate(position.x, options.snapBackSpeed);\r\n }\r\n }\r\n\r\n touchOffset = undefined;\r\n\r\n /**\r\n * remove eventlisteners after swipe attempt\r\n */\r\n frame.removeEventListener('touchmove', onTouchmove);\r\n frame.removeEventListener('touchend', onTouchend);\r\n frame.removeEventListener('mousemove', onTouchmove);\r\n frame.removeEventListener('mouseup', onTouchend);\r\n frame.removeEventListener('mouseleave', onTouchend);\r\n\r\n dispatchSliderEvent('on', 'touchend', {\r\n event\r\n });\r\n }\r\n\r\n function onClick (event) {\r\n if (delta.x) {\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n function onResize (event) {\r\n if (frameWidth !== elementWidth(frame)) {\r\n reset();\r\n\r\n dispatchSliderEvent('on', 'resize', {\r\n event\r\n });\r\n }\r\n }\r\n\r\n // trigger initial setup\r\n setup();\r\n\r\n // expose public api\r\n return {\r\n setup,\r\n reset,\r\n slideTo,\r\n returnIndex,\r\n prev,\r\n next,\r\n destroy\r\n };\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/lory.js","/**\r\n * Detecting prefixes for saving time and bytes\r\n */\r\nexport default function detectPrefixes () {\r\n let transform;\r\n let transition;\r\n let transitionEnd;\r\n\r\n (function () {\r\n let el = document.createElement('_');\r\n let style = el.style;\r\n\r\n let prop;\r\n\r\n if (style[prop = 'webkitTransition'] === '') {\r\n transitionEnd = 'webkitTransitionEnd';\r\n transition = prop;\r\n }\r\n\r\n if (style[prop = 'transition'] === '') {\r\n transitionEnd = 'transitionend';\r\n transition = prop;\r\n }\r\n\r\n if (style[prop = 'webkitTransform'] === '') {\r\n transform = prop;\r\n }\r\n\r\n if (style[prop = 'msTransform'] === '') {\r\n transform = prop;\r\n }\r\n\r\n if (style[prop = 'transform'] === '') {\r\n transform = prop;\r\n }\r\n\r\n document.body.insertBefore(el, null);\r\n style[transform] = 'translateX(0)';\r\n document.body.removeChild(el);\r\n }());\r\n\r\n return {\r\n transform,\r\n transition,\r\n transitionEnd\r\n };\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/detect-prefixes.js","export default function detectSupportsPassive () {\r\n let supportsPassive = false;\r\n\r\n try {\r\n let opts = Object.defineProperty({}, 'passive', {\r\n get () {\r\n supportsPassive = true;\r\n }\r\n });\r\n\r\n window.addEventListener('testPassive', null, opts);\r\n window.removeEventListener('testPassive', null, opts);\r\n } catch (e) {}\r\n\r\n return supportsPassive;\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/detect-supportsPassive.js","import CustomEvent from 'custom-event';\r\n\r\n/**\r\n * dispatch custom events\r\n *\r\n * @param {element} el slideshow element\r\n * @param {string} type custom event name\r\n * @param {object} detail custom detail information\r\n */\r\nexport default function dispatchEvent (target, type, detail) {\r\n let event = new CustomEvent(\r\n type,\r\n {\r\n bubbles: true,\r\n cancelable: true,\r\n detail: detail\r\n }\r\n );\r\n\r\n target.dispatchEvent(event);\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/dispatch-event.js","\nvar NativeCustomEvent = global.CustomEvent;\n\nfunction useNative () {\n try {\n var p = new NativeCustomEvent('cat', { detail: { foo: 'bar' } });\n return 'cat' === p.type && 'bar' === p.detail.foo;\n } catch (e) {\n }\n return false;\n}\n\n/**\n * Cross-browser `CustomEvent` constructor.\n *\n * https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent.CustomEvent\n *\n * @public\n */\n\nmodule.exports = useNative() ? NativeCustomEvent :\n\n// IE >= 9\n'undefined' !== typeof document && 'function' === typeof document.createEvent ? function CustomEvent (type, params) {\n var e = document.createEvent('CustomEvent');\n if (params) {\n e.initCustomEvent(type, params.bubbles, params.cancelable, params.detail);\n } else {\n e.initCustomEvent(type, false, false, void 0);\n }\n return e;\n} :\n\n// IE <= 8\nfunction CustomEvent (type, params) {\n var e = document.createEventObject();\n e.type = type;\n if (params) {\n e.bubbles = Boolean(params.bubbles);\n e.cancelable = Boolean(params.cancelable);\n e.detail = params.detail;\n } else {\n e.bubbles = false;\n e.cancelable = false;\n e.detail = void 0;\n }\n return e;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/custom-event/index.js\n// module id = 4\n// module chunks = 0 1","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/global.js\n// module id = 5\n// module chunks = 0 1","export default {\r\n /**\r\n * slides scrolled at once\r\n * @slidesToScroll {Number}\r\n */\r\n slidesToScroll: 1,\r\n\r\n /**\r\n * time in milliseconds for the animation of a valid slide attempt\r\n * @slideSpeed {Number}\r\n */\r\n slideSpeed: 300,\r\n\r\n /**\r\n * time in milliseconds for the animation of the rewind after the last slide\r\n * @rewindSpeed {Number}\r\n */\r\n rewindSpeed: 600,\r\n\r\n /**\r\n * time for the snapBack of the slider if the slide attempt was not valid\r\n * @snapBackSpeed {Number}\r\n */\r\n snapBackSpeed: 200,\r\n\r\n /**\r\n * Basic easing functions: https://developer.mozilla.org/de/docs/Web/CSS/transition-timing-function\r\n * cubic bezier easing functions: http://easings.net/de\r\n * @ease {String}\r\n */\r\n ease: 'ease',\r\n\r\n /**\r\n * if slider reached the last slide, with next click the slider goes back to the startindex.\r\n * use infinite or rewind, not both\r\n * @rewind {Boolean}\r\n */\r\n rewind: false,\r\n\r\n /**\r\n * number of visible slides or false\r\n * use infinite or rewind, not both\r\n * @infinite {number}\r\n */\r\n infinite: false,\r\n\r\n /**\r\n * the slide index to show when the slider is initialized.\r\n * @initialIndex {number}\r\n */\r\n initialIndex: 0,\r\n\r\n /**\r\n * class name for slider frame\r\n * @classNameFrame {string}\r\n */\r\n classNameFrame: 'js_frame',\r\n\r\n /**\r\n * class name for slides container\r\n * @classNameSlideContainer {string}\r\n */\r\n classNameSlideContainer: 'js_slides',\r\n\r\n /**\r\n * class name for slider prev control\r\n * @classNamePrevCtrl {string}\r\n */\r\n classNamePrevCtrl: 'js_prev',\r\n\r\n /**\r\n * class name for slider next control\r\n * @classNameNextCtrl {string}\r\n */\r\n classNameNextCtrl: 'js_next',\r\n\r\n /**\r\n * class name for current active slide\r\n * if emptyString then no class is set\r\n * @classNameActiveSlide {string}\r\n */\r\n classNameActiveSlide: 'active',\r\n\r\n /**\r\n * enables mouse events for swiping on desktop devices\r\n * @enableMouseEvents {boolean}\r\n */\r\n enableMouseEvents: false,\r\n\r\n /**\r\n * window instance\r\n * @window {object}\r\n */\r\n window: typeof window !== 'undefined' ? window : null,\r\n\r\n /**\r\n * If false, slides lory to the first slide on window resize.\r\n * @rewindOnResize {boolean}\r\n */\r\n rewindOnResize: true\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/defaults.js"],"sourceRoot":""} \ No newline at end of file diff --git a/src/lory.js b/src/lory.js index 79409da..7a6dd9d 100755 --- a/src/lory.js +++ b/src/lory.js @@ -102,12 +102,7 @@ export function lory (slider, opts) { if (style) { style[prefixes.transition + 'TimingFunction'] = ease; style[prefixes.transition + 'Duration'] = duration + 'ms'; - - if (prefixes.hasTranslate3d) { - style[prefixes.transform] = 'translate3d(' + to + 'px, 0, 0)'; - } else { - style[prefixes.transform] = 'translate(' + to + 'px, 0)'; - } + style[prefixes.transform] = 'translateX(' + to + 'px)'; } } diff --git a/src/utils/detect-prefixes.js b/src/utils/detect-prefixes.js index 9c453be..96b81ed 100644 --- a/src/utils/detect-prefixes.js +++ b/src/utils/detect-prefixes.js @@ -5,7 +5,6 @@ export default function detectPrefixes () { let transform; let transition; let transitionEnd; - let hasTranslate3d; (function () { let el = document.createElement('_'); @@ -36,15 +35,13 @@ export default function detectPrefixes () { } document.body.insertBefore(el, null); - style[transform] = 'translate3d(0, 0, 0)'; - hasTranslate3d = !!global.getComputedStyle(el).getPropertyValue(transform); + style[transform] = 'translateX(0)'; document.body.removeChild(el); }()); return { transform, transition, - transitionEnd, - hasTranslate3d + transitionEnd }; }