From 410cbdcf1ace51eff69bc32bd623bcca675051e1 Mon Sep 17 00:00:00 2001 From: Dennis Morhardt Date: Thu, 5 Jul 2018 17:10:59 +0200 Subject: [PATCH] fix: make disabled class on prev/next configurable --- README.md | 10 ++ dist/jquery.lory.js | 316 ++++++++++++++++++------------------ dist/jquery.lory.min.js | 2 +- dist/jquery.lory.min.js.map | 2 +- dist/lory.js | 316 ++++++++++++++++++------------------ dist/lory.min.js | 2 +- dist/lory.min.js.map | 2 +- src/lory.js | 18 +- 8 files changed, 349 insertions(+), 319 deletions(-) diff --git a/README.md b/README.md index 4e3e774..5154945 100644 --- a/README.md +++ b/README.md @@ -308,6 +308,16 @@ li { class name for slider next control default: 'js_next' + + classNameDisabledPrevCtrl + class name for slider previous control then disabled + default: 'disabled' + + + classNameDisabledNextCtrl + class name for slider next control then disabled + default: 'disabled' + ## Events diff --git a/dist/jquery.lory.js b/dist/jquery.lory.js index af13247..33546f8 100644 --- a/dist/jquery.lory.js +++ b/dist/jquery.lory.js @@ -114,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; @@ -128,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, @@ -153,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, @@ -185,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; @@ -210,20 +210,20 @@ function lory(slider, opts) { } } - /** - * 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, @@ -233,7 +233,11 @@ function lory(slider, opts) { rewind = _options3.rewind, rewindSpeed = _options3.rewindSpeed, ease = _options3.ease, - classNameActiveSlide = _options3.classNameActiveSlide; + classNameActiveSlide = _options3.classNameActiveSlide, + _options3$classNameDi = _options3.classNameDisabledNextCtrl, + classNameDisabledNextCtrl = _options3$classNameDi === undefined ? 'disabled' : _options3$classNameDi, + _options3$classNameDi2 = _options3.classNameDisabledPrevCtrl, + classNameDisabledPrevCtrl = _options3$classNameDi2 === undefined ? 'disabled' : _options3$classNameDi2; var duration = slideSpeed; @@ -246,14 +250,14 @@ function lory(slider, opts) { nextSlide: nextSlide }); - /** - * Reset control classes + /** + * Reset control classes */ if (prevCtrl) { - prevCtrl.classList.remove('disabled'); + prevCtrl.classList.remove(classNameDisabledPrevCtrl); } if (nextCtrl) { - nextCtrl.classList.remove('disabled'); + nextCtrl.classList.remove(classNameDisabledNextCtrl); } if (typeof nextIndex !== 'number') { @@ -286,19 +290,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; @@ -324,16 +328,16 @@ 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'); + prevCtrl.classList.add(classNameDisabledPrevCtrl); } if (nextCtrl && !infinite && !rewind && nextIndex + 1 === slides.length) { - nextCtrl.classList.add('disabled'); + nextCtrl.classList.add(classNameDisabledNextCtrl); } dispatchSliderEvent('after', 'slide', { @@ -341,9 +345,9 @@ function lory(slider, opts) { }); } - /** - * public - * setup function + /** + * public + * setup function */ function setup() { dispatchSliderEvent('before', 'init'); @@ -356,6 +360,10 @@ function lory(slider, opts) { classNameSlideContainer = _options4.classNameSlideContainer, classNamePrevCtrl = _options4.classNamePrevCtrl, classNameNextCtrl = _options4.classNameNextCtrl, + _options4$classNameDi = _options4.classNameDisabledNextCtrl, + classNameDisabledNextCtrl = _options4$classNameDi === undefined ? 'disabled' : _options4$classNameDi, + _options4$classNameDi2 = _options4.classNameDisabledPrevCtrl, + classNameDisabledPrevCtrl = _options4$classNameDi2 === undefined ? 'disabled' : _options4$classNameDi2, enableMouseEvents = _options4.enableMouseEvents, classNameActiveSlide = _options4.classNameActiveSlide, initialIndex = _options4.initialIndex; @@ -378,11 +386,11 @@ function lory(slider, opts) { slides = slice.call(slideContainer.children); if (prevCtrl) { - prevCtrl.classList.add('disabled'); + prevCtrl.classList.add(classNameDisabledPrevCtrl); } if (nextCtrl && slides.length === 1 && !options.rewind) { - nextCtrl.classList.add('disabled'); + nextCtrl.classList.add(classNameDisabledNextCtrl); } } @@ -409,9 +417,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, @@ -454,41 +462,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'); @@ -599,33 +607,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; @@ -641,8 +649,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); @@ -697,8 +705,8 @@ 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; @@ -791,12 +799,12 @@ 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, { @@ -901,103 +909,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 }; diff --git a/dist/jquery.lory.min.js b/dist/jquery.lory.min.js index 9ddf964..067417c 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,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",i[A.transform]="translateX("+e+"px)")}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()},R=void 0,X={},o("on","touchstart",{event:e})}function g(e){var t=e.touches?e.touches[0]:e,n=t.pageX,i=t.pageY;X={x:n-Q.x,y:i-Q.y},void 0===R&&(R=!!(R||Math.abs(X.x)25||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;t25||Math.abs(X.x)>S/3,i=!z&&X.x>0||z===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",N),P.removeEventListener("touchend",g),P.removeEventListener("mousemove",N),P.removeEventListener("mouseup",g),P.removeEventListener("mouseleave",g),o("on","touchend",{event:e})}function C(e){X.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,D=void 0,z=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\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 +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///jquery.lory.min.js","webpack:///webpack/bootstrap 196f6afdc24826d4cce3","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","_options3$classNameDi","classNameDisabledNextCtrl","undefined","_options3$classNameDi2","classNameDisabledPrevCtrl","nextSlide","maxOffset","Math","round","slidesWidth","frameWidth","prevCtrl","nextCtrl","min","max","nextOffset","offsetLeft","abs","position","x","transitionEndCallback","currentSlide","setup","_detectPrefixes2","_options4","classNameFrame","classNameSlideContainer","classNamePrevCtrl","classNameNextCtrl","_options4$classNameDi","_options4$classNameDi2","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","_customEvent2","bubbles","cancelable","_customEvent","global","NativeCustomEvent","CustomEvent","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 /**\n * slider DOM elements\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 /**\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 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 /**\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 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 /**\n * [dispatchSliderEvent description]\n * @return {[type]} [description]\n */\n function dispatchSliderEvent(phase, type, detail) {\n (0, _dispatchEvent2.default)(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 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 /**\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 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 _options3$classNameDi = _options3.classNameDisabledNextCtrl,\n classNameDisabledNextCtrl = _options3$classNameDi === undefined ? 'disabled' : _options3$classNameDi,\n _options3$classNameDi2 = _options3.classNameDisabledPrevCtrl,\n classNameDisabledPrevCtrl = _options3$classNameDi2 === undefined ? 'disabled' : _options3$classNameDi2;\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 /**\n * Reset control classes\n */\n if (prevCtrl) {\n prevCtrl.classList.remove(classNameDisabledPrevCtrl);\n }\n if (nextCtrl) {\n nextCtrl.classList.remove(classNameDisabledNextCtrl);\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 /**\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 || 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 /**\n * update classes for next and prev arrows\n * based on user settings\n */\n if (prevCtrl && !infinite && nextIndex === 0) {\n prevCtrl.classList.add(classNameDisabledPrevCtrl);\n }\n\n if (nextCtrl && !infinite && !rewind && nextIndex + 1 === slides.length) {\n nextCtrl.classList.add(classNameDisabledNextCtrl);\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 = (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 _options4$classNameDi = _options4.classNameDisabledNextCtrl,\n classNameDisabledNextCtrl = _options4$classNameDi === undefined ? 'disabled' : _options4$classNameDi,\n _options4$classNameDi2 = _options4.classNameDisabledPrevCtrl,\n classNameDisabledPrevCtrl = _options4$classNameDi2 === undefined ? 'disabled' : _options4$classNameDi2,\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(classNameDisabledPrevCtrl);\n }\n\n if (nextCtrl && slides.length === 1 && !options.rewind) {\n nextCtrl.classList.add(classNameDisabledNextCtrl);\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 _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 /**\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 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 /**\n * time between touchstart and touchend in milliseconds\n * @duration {number}\n */\n var 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 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/* 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/**\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\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/**\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/* 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 /**\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__(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 196f6afdc24826d4cce3","/* 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 style[prefixes.transform] = 'translateX(' + to + 'px)';\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 classNameDisabledNextCtrl = 'disabled',\n classNameDisabledPrevCtrl = 'disabled'\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(classNameDisabledPrevCtrl);\n }\n if (nextCtrl) {\n nextCtrl.classList.remove(classNameDisabledNextCtrl);\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(classNameDisabledPrevCtrl);\n }\n\n if (nextCtrl && !infinite && !rewind && ((nextIndex + 1) === slides.length)) {\n nextCtrl.classList.add(classNameDisabledNextCtrl);\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 classNameDisabledNextCtrl = 'disabled',\n classNameDisabledPrevCtrl = 'disabled',\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(classNameDisabledPrevCtrl);\n }\n\n if (nextCtrl && (slides.length === 1) && !options.rewind) {\n nextCtrl.classList.add(classNameDisabledNextCtrl);\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\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] = 'translateX(0)';\n document.body.removeChild(el);\n }());\n\n return {\n transform,\n transition,\n transitionEnd\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 = 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 {\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 diff --git a/dist/lory.js b/dist/lory.js index 3477bfe..e421890 100644 --- a/dist/lory.js +++ b/dist/lory.js @@ -114,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; @@ -128,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, @@ -153,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, @@ -185,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; @@ -210,20 +210,20 @@ function lory(slider, opts) { } } - /** - * 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, @@ -233,7 +233,11 @@ function lory(slider, opts) { rewind = _options3.rewind, rewindSpeed = _options3.rewindSpeed, ease = _options3.ease, - classNameActiveSlide = _options3.classNameActiveSlide; + classNameActiveSlide = _options3.classNameActiveSlide, + _options3$classNameDi = _options3.classNameDisabledNextCtrl, + classNameDisabledNextCtrl = _options3$classNameDi === undefined ? 'disabled' : _options3$classNameDi, + _options3$classNameDi2 = _options3.classNameDisabledPrevCtrl, + classNameDisabledPrevCtrl = _options3$classNameDi2 === undefined ? 'disabled' : _options3$classNameDi2; var duration = slideSpeed; @@ -246,14 +250,14 @@ function lory(slider, opts) { nextSlide: nextSlide }); - /** - * Reset control classes + /** + * Reset control classes */ if (prevCtrl) { - prevCtrl.classList.remove('disabled'); + prevCtrl.classList.remove(classNameDisabledPrevCtrl); } if (nextCtrl) { - nextCtrl.classList.remove('disabled'); + nextCtrl.classList.remove(classNameDisabledNextCtrl); } if (typeof nextIndex !== 'number') { @@ -286,19 +290,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; @@ -324,16 +328,16 @@ 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'); + prevCtrl.classList.add(classNameDisabledPrevCtrl); } if (nextCtrl && !infinite && !rewind && nextIndex + 1 === slides.length) { - nextCtrl.classList.add('disabled'); + nextCtrl.classList.add(classNameDisabledNextCtrl); } dispatchSliderEvent('after', 'slide', { @@ -341,9 +345,9 @@ function lory(slider, opts) { }); } - /** - * public - * setup function + /** + * public + * setup function */ function setup() { dispatchSliderEvent('before', 'init'); @@ -356,6 +360,10 @@ function lory(slider, opts) { classNameSlideContainer = _options4.classNameSlideContainer, classNamePrevCtrl = _options4.classNamePrevCtrl, classNameNextCtrl = _options4.classNameNextCtrl, + _options4$classNameDi = _options4.classNameDisabledNextCtrl, + classNameDisabledNextCtrl = _options4$classNameDi === undefined ? 'disabled' : _options4$classNameDi, + _options4$classNameDi2 = _options4.classNameDisabledPrevCtrl, + classNameDisabledPrevCtrl = _options4$classNameDi2 === undefined ? 'disabled' : _options4$classNameDi2, enableMouseEvents = _options4.enableMouseEvents, classNameActiveSlide = _options4.classNameActiveSlide, initialIndex = _options4.initialIndex; @@ -378,11 +386,11 @@ function lory(slider, opts) { slides = slice.call(slideContainer.children); if (prevCtrl) { - prevCtrl.classList.add('disabled'); + prevCtrl.classList.add(classNameDisabledPrevCtrl); } if (nextCtrl && slides.length === 1 && !options.rewind) { - nextCtrl.classList.add('disabled'); + nextCtrl.classList.add(classNameDisabledNextCtrl); } } @@ -409,9 +417,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, @@ -454,41 +462,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'); @@ -599,33 +607,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; @@ -641,8 +649,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); @@ -697,8 +705,8 @@ 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; @@ -791,12 +799,12 @@ 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, { @@ -901,103 +909,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 }; diff --git a/dist/lory.min.js b/dist/lory.min.js index ea46a0a..bb2016f 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,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",i[A.transform]="translateX("+e+"px)")}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,b=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 h=Math.min(Math.max(-1*O[e].offsetLeft,-1*b),0);l&&Math.abs(M.x)===b&&t&&(h=0,e=0,v=c),s(h,v,u),M.x=h,O[e].offsetLeft<=b&&(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,b=s.classNameActiveSlide,h=s.initialIndex;D=h,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(),b&&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 b(e){c(e)}function h(){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;X={x:r,y:s,time:Date.now()},Q=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-X.x,y:i-X.y},void 0===Q&&(Q=!!(Q||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;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;t25||Math.abs(R.x)>S/3,i=!z&&R.x>0||z===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",N),P.removeEventListener("touchend",g),P.removeEventListener("mousemove",N),P.removeEventListener("mouseup",g),P.removeEventListener("mouseleave",g),o("on","touchend",{event:e})}function C(e){R.x&&e.preventDefault()}function j(e){S!==l(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,D=void 0,z=0,F={},I=!!(0,d.default)()&&{passive:!0};"undefined"!=typeof jQuery&&e instanceof jQuery&&(e=e[0]);var X=void 0,R=void 0,Q=void 0;return v(),{setup:v,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\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 +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///lory.min.js","webpack:///webpack/bootstrap 196f6afdc24826d4cce3","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","_options3$classNameDi","classNameDisabledNextCtrl","undefined","_options3$classNameDi2","classNameDisabledPrevCtrl","nextSlide","maxOffset","Math","round","slidesWidth","frameWidth","prevCtrl","nextCtrl","min","max","nextOffset","offsetLeft","abs","position","x","transitionEndCallback","currentSlide","setup","_detectPrefixes2","_options4","classNameFrame","classNameSlideContainer","classNamePrevCtrl","classNameNextCtrl","_options4$classNameDi","_options4$classNameDi2","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","_customEvent2","bubbles","cancelable","_customEvent","global","NativeCustomEvent","CustomEvent","foo","createEvent","params","initCustomEvent","createEventObject","Boolean","g","Function","eval"],"mappings":"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","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 /**\n * slider DOM elements\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 /**\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 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 /**\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 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 /**\n * [dispatchSliderEvent description]\n * @return {[type]} [description]\n */\n function dispatchSliderEvent(phase, type, detail) {\n (0, _dispatchEvent2.default)(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 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 /**\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 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 _options3$classNameDi = _options3.classNameDisabledNextCtrl,\n classNameDisabledNextCtrl = _options3$classNameDi === undefined ? 'disabled' : _options3$classNameDi,\n _options3$classNameDi2 = _options3.classNameDisabledPrevCtrl,\n classNameDisabledPrevCtrl = _options3$classNameDi2 === undefined ? 'disabled' : _options3$classNameDi2;\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 /**\n * Reset control classes\n */\n if (prevCtrl) {\n prevCtrl.classList.remove(classNameDisabledPrevCtrl);\n }\n if (nextCtrl) {\n nextCtrl.classList.remove(classNameDisabledNextCtrl);\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 /**\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 || 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 /**\n * update classes for next and prev arrows\n * based on user settings\n */\n if (prevCtrl && !infinite && nextIndex === 0) {\n prevCtrl.classList.add(classNameDisabledPrevCtrl);\n }\n\n if (nextCtrl && !infinite && !rewind && nextIndex + 1 === slides.length) {\n nextCtrl.classList.add(classNameDisabledNextCtrl);\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 = (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 _options4$classNameDi = _options4.classNameDisabledNextCtrl,\n classNameDisabledNextCtrl = _options4$classNameDi === undefined ? 'disabled' : _options4$classNameDi,\n _options4$classNameDi2 = _options4.classNameDisabledPrevCtrl,\n classNameDisabledPrevCtrl = _options4$classNameDi2 === undefined ? 'disabled' : _options4$classNameDi2,\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(classNameDisabledPrevCtrl);\n }\n\n if (nextCtrl && slides.length === 1 && !options.rewind) {\n nextCtrl.classList.add(classNameDisabledNextCtrl);\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 _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 /**\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 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 /**\n * time between touchstart and touchend in milliseconds\n * @duration {number}\n */\n var 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 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/* 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/**\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\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/**\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/* 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 /**\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__(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 196f6afdc24826d4cce3","/* 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 style[prefixes.transform] = 'translateX(' + to + 'px)';\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 classNameDisabledNextCtrl = 'disabled',\n classNameDisabledPrevCtrl = 'disabled'\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(classNameDisabledPrevCtrl);\n }\n if (nextCtrl) {\n nextCtrl.classList.remove(classNameDisabledNextCtrl);\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(classNameDisabledPrevCtrl);\n }\n\n if (nextCtrl && !infinite && !rewind && ((nextIndex + 1) === slides.length)) {\n nextCtrl.classList.add(classNameDisabledNextCtrl);\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 classNameDisabledNextCtrl = 'disabled',\n classNameDisabledPrevCtrl = 'disabled',\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(classNameDisabledPrevCtrl);\n }\n\n if (nextCtrl && (slides.length === 1) && !options.rewind) {\n nextCtrl.classList.add(classNameDisabledNextCtrl);\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\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] = 'translateX(0)';\n document.body.removeChild(el);\n }());\n\n return {\n transform,\n transition,\n transitionEnd\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 = 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 {\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 diff --git a/src/lory.js b/src/lory.js index 7a6dd9d..4fbe878 100755 --- a/src/lory.js +++ b/src/lory.js @@ -129,7 +129,9 @@ export function lory (slider, opts) { rewind, rewindSpeed, ease, - classNameActiveSlide + classNameActiveSlide, + classNameDisabledNextCtrl = 'disabled', + classNameDisabledPrevCtrl = 'disabled' } = options; let duration = slideSpeed; @@ -146,10 +148,10 @@ export function lory (slider, opts) { * Reset control classes */ if (prevCtrl) { - prevCtrl.classList.remove('disabled'); + prevCtrl.classList.remove(classNameDisabledPrevCtrl); } if (nextCtrl) { - nextCtrl.classList.remove('disabled'); + nextCtrl.classList.remove(classNameDisabledNextCtrl); } if (typeof nextIndex !== 'number') { @@ -226,11 +228,11 @@ export function lory (slider, opts) { * based on user settings */ if (prevCtrl && !infinite && nextIndex === 0) { - prevCtrl.classList.add('disabled'); + prevCtrl.classList.add(classNameDisabledPrevCtrl); } if (nextCtrl && !infinite && !rewind && ((nextIndex + 1) === slides.length)) { - nextCtrl.classList.add('disabled'); + nextCtrl.classList.add(classNameDisabledNextCtrl); } dispatchSliderEvent('after', 'slide', { @@ -253,6 +255,8 @@ export function lory (slider, opts) { classNameSlideContainer, classNamePrevCtrl, classNameNextCtrl, + classNameDisabledNextCtrl = 'disabled', + classNameDisabledPrevCtrl = 'disabled', enableMouseEvents, classNameActiveSlide, initialIndex @@ -275,11 +279,11 @@ export function lory (slider, opts) { slides = slice.call(slideContainer.children); if (prevCtrl) { - prevCtrl.classList.add('disabled'); + prevCtrl.classList.add(classNameDisabledPrevCtrl); } if (nextCtrl && (slides.length === 1) && !options.rewind) { - nextCtrl.classList.add('disabled'); + nextCtrl.classList.add(classNameDisabledNextCtrl); } }