{"version":3,"file":"slider-article.js","names":["a1ArticleSlider","SesoSlider","constructor","selector","this","el","container","HTMLElement","document","getElementById","querySelector","slider","undefined","animator","slides","querySelectorAll","anchors","buttonNext","buttonPrev","scrollIndicator","events","params","sliderVisibleWidth","slideWidth","slideTotal","position","positionMax","trackingStartX","trackingEndX","trackingDirection","translateX","posX","lastPosX","amplitude","velocity","firstTimestamp","lastTimestamp","ticker","isClick","hasMoved","isEasing","isInitialized","noSliderClass","sliderInitializedClass","length","bindEvents","destroy","resize","preventDefault","event","dispatchEvent","typeArg","customEventInit","bubbles","cancelable","detail","window","CustomEvent","on","touchStart","touchEnd","goToNext","goToPrev","_this","i","item","delayLocationChange","_target","href","setPosition","target","type","callback","key","_key","Math","random","toString","substring","listeners","_listener","call","push","addEventListener","off","_removeByType","removeEventListener","splice","Object","keys","startTracking","stopTracking","setInterval","track","bind","eventCoords","x","translateValues","touchMove","clearInterval","now","Date","timeElapsed","delta","v","moveTo","rightBorder","style","transform","targetX","requestAnimation","snapPosition","exp","xMin","snap","myX","ceil","floor","requestAnimationFrame","setTimeout","location","element","getComputedStyle","matrix","webkitTransform","mozTransform","y","z","matrixType","includes","matrixValues","match","split","parseInt","indexOf","touch","targetTouches","changedTouches","clientX","clientY","xTarget","setAttribute","removeAttribute","left","getBoundingClientRect","width","slideVisibleTotal","sliderNeeded","create","classList","remove","add","forEach","fragment"],"sources":["slider-article.js"],"mappings":"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","sourcesContent":["/* Based on https://github.com/jabes/snap-touch */\nif(typeof a1ArticleSlider === 'undefined') {\n const SesoSlider = class {\n\n constructor(selector) {\n this.el = {};\n this.el.container = selector instanceof HTMLElement\n ? selector\n : (\n document.getElementById(selector) ||\n document.querySelector(selector)\n );\n this.el.slider = this.el.container ? this.el.container\n : undefined;\n this.el.animator = this.el.container ? this.el.container.querySelector('.animator')\n : undefined;\n this.el.slides = this.el.animator ? this.el.animator.querySelectorAll('.item')\n : [];\n this.el.anchors = this.el.animator ? this.el.animator.querySelectorAll('a[href]')\n : [];\n this.el.buttonNext = this.el.container ? this.el.container.querySelector('button.next')\n : undefined;\n this.el.buttonPrev = this.el.container ? this.el.container.querySelector('button.prev')\n : undefined;\n this.el.scrollIndicator = this.el.container ? this.el.container.querySelector('.scroll-indicator .indicator')\n : undefined;\n\n this.events = {};\n\n this.params = {\n sliderVisibleWidth: undefined,\n slideWidth: undefined,\n slideTotal: undefined,\n position: 0,\n positionMax: undefined,\n trackingStartX: undefined,\n trackingEndX: undefined,\n trackingDirection: undefined,\n translateX: 0,\n posX: 0,\n lastPosX: 0,\n amplitude: undefined,\n velocity: undefined,\n firstTimestamp: undefined,\n lastTimestamp: undefined,\n ticker: undefined,\n isClick: undefined,\n hasMoved: undefined,\n isEasing: undefined,\n isInitialized: undefined,\n noSliderClass: 'no-slider',\n sliderInitializedClass: 'slider-initialized'\n };\n\n if (this.el.container && this.el.slides.length >= 0) {\n this.bindEvents();\n // reset on init\n this.destroy();\n this.resize();\n }\n }\n\n preventDefault(event) {\n event.preventDefault();\n return false;\n }\n\n dispatchEvent(typeArg, customEventInit = { bubbles: false, cancelable: false, detail: null }) {\n const event = new window.CustomEvent(typeArg, customEventInit);\n this.el.container.dispatchEvent(event);\n return event;\n }\n\n bindEvents() {\n this.on(this.el.animator, 'dragstart', this.preventDefault);\n this.on(this.el.animator, 'touchstart', this.touchStart);\n this.on(this.el.animator, 'mousedown', this.touchStart);\n this.on(this.el.animator, 'touchend', this.touchEnd);\n //this.on(this.el.animator, 'mouseup', this.stopTracking);\n\n // Add event listeners to buttons (next/prev)\n this.on(this.el.buttonNext, 'click', this.goToNext);\n this.on(this.el.buttonPrev, 'click', this.goToPrev);\n\n // Add event listener for keydown (arrow left/right moves)\n // this.on(this.el.container.closest('.a1-slider-product'), 'keydown', this.keyboardMove);\n\n var _this = this;\n for (var i = 0; i < this.el.anchors.length; i++) {\n this.on(this.el.anchors.item(i), 'click', function (event) {\n _this.preventDefault(event);\n if (_this.params.isClick) {\n _this.delayLocationChange(event._target.href);\n }\n });\n }\n\n this.on(window, 'resize', this.resize);\n }\n\n goToNext(event) {\n event.preventDefault();\n this.setPosition(this.params.position + 1);\n }\n\n goToPrev(event) {\n event.preventDefault();\n this.setPosition(this.params.position - 1);\n }\n\n /*\n keyboardMove(event) {\n if (event.code == 'ArrowRight' && this.params.position < this.params.positionMax) {\n this.goToNext(event);\n } else if (event.code == 'ArrowLeft' && this.params.position > 0) {\n this.goToPrev(event);\n }\n }\n */\n\n on(target, type, callback) {\n const key = target._key || Math.random().toString(36).substring(7);\n target._key = key;\n if (!this.events[key]) {\n this.events[key] = {};\n }\n if (!this.events[key][type]) {\n this.events[key][type] = {\n target: target,\n listeners: [],\n };\n }\n const _listener = (event) => {\n event._key = key;\n event._target = target;\n callback.call(this, event);\n };\n this.events[key][type].listeners.push(_listener);\n target.addEventListener(type, _listener);\n }\n\n off(target, type = null) {\n const key = target._key;\n const _removeByType = (key, type) => {\n const target = this.events[key][type].target;\n const listeners = this.events[key][type].listeners;\n for (let i = 0; i < listeners.length; i++) {\n target.removeEventListener(type, listeners[i]);\n this.events[key][type].listeners.splice(i, 1);\n }\n if (this.events[key][type].listeners.length === 0) {\n delete this.events[key][type];\n }\n if (Object.keys(this.events[key]).length === 0) {\n delete this.events[key];\n }\n };\n if (this.events[key]) {\n if (type) {\n _removeByType(key, type);\n } else {\n const events = this.events[key];\n for (let type in events) {\n if (events[type]) {\n _removeByType(key, type);\n }\n }\n }\n }\n }\n\n startTracking(event) {\n if (this.params.ticker) {\n this.stopTracking();\n }\n this.params.ticker = window.setInterval(this.track.bind(this), 100);\n\n this.params.trackingStartX = this.eventCoords(event, 'startTracking').x;\n this.params.translateX = this.translateValues(this.el.animator).x;\n\n this.on(document, 'touchmove', this.touchMove);\n this.on(document, 'mousemove', this.touchMove);\n this.on(document, 'touchend', this.touchEnd);\n this.on(document, 'mouseup', this.touchEnd);\n this.dispatchEvent('SesoSlider.trackingStart');\n }\n\n stopTracking() {\n window.clearInterval(this.params.ticker);\n delete this.params.ticker;\n\n this.off(document);\n this.dispatchEvent('SesoSlider.trackingEnd');\n }\n\n track() {\n var now = Date.now();\n var timeElapsed = now - this.params.lastTimestamp;\n var delta = this.params.posX - this.params.lastPosX;\n var v = 1000 * delta / (1 + timeElapsed);\n this.params.velocity = 0.8 * (v + 0.2) * this.params.velocity;\n this.dispatchEvent('SesoSlider.tracking', {\n bubbles: false,\n cancelable: false,\n detail: {\n now: now,\n delta: delta,\n velocity: this.params.velocity,\n posX: this.params.posX,\n lastPosX: this.params.lastPosX,\n lastTimestamp: this.params.lastTimestamp\n }\n });\n this.params.lastPosX = this.params.posX;\n this.params.lastTimestamp = now;\n }\n\n touchStart(event) {\n this.params.velocity = 0;\n this.params.amplitude = 0;\n this.params.posX = this.params.posX || 0;\n this.params.lastPosX = this.params.posX;\n this.params.firstTimestamp = Date.now();\n this.params.lastTimestamp = this.params.firstTimestamp;\n this.params.trackingStartX = this.eventCoords(event, 'touchStart').x;\n this.params.isEasing = false;\n this.params.isClick = false;\n this.params.hasMoved = false;\n this.startTracking(event);\n }\n\n touchMove(event) {\n if (this.params.isInitialized) {\n const delta = this.eventCoords(event, 'toucheMove').x - this.params.trackingStartX;\n this.params.trackingDirection = (delta >= 0) ? 'right' : 'left';\n\n // move left/right\n if (delta > 20 || delta < -20) {\n // check left and right border\n let moveTo = delta + this.params.translateX;\n if (moveTo > 0) {\n moveTo = 0;\n }\n const rightBorder = (this.params.trackingEndX - this.params.sliderVisibleWidth) * -1;\n if (moveTo < rightBorder) {\n moveTo = rightBorder;\n }\n\n // move slider left/right\n this.el.animator.style.transform = 'translate(' + moveTo + 'px, 0)';\n }\n }\n }\n\n touchEnd(event) {\n this.stopTracking();\n this.params.amplitude = this.params.targetX - this.params.posX;\n this.params.lastTimestamp = Date.now();\n\n if (this.params.isInitialized) {\n this.requestAnimation(this.snapPosition);\n }\n // IE and FF fire click events on drag/swipe, so we need to decide if click behaviour should be honoured\n var timeElapsed = this.params.lastTimestamp - this.params.firstTimestamp;\n this.params.isClick = !this.params.hasMoved && timeElapsed < 300;\n }\n\n snapPosition() {\n var timeConstant = 325;\n var timeElapsed = Date.now() - this.params.lastTimestamp;\n var delta = -this.params.amplitude * Math.exp(-timeElapsed / timeConstant);\n var xMin = this.params.slideWidth * -(this.params.slideTotal - 1);\n var xMax = 0;\n this.params.isEasing = this.params.posX > xMin && this.params.posX < xMax && (delta > 20 || delta < -20);\n\n const snap = this.params.slideWidth;\n const myX = this.translateValues(this.el.animator).x * -1;\n let position = 0;\n if (this.params.trackingDirection == 'left') {\n position = (Math.ceil(myX / snap) * snap) / this.params.slideWidth;\n } else {\n position = (Math.floor(myX / snap) * snap) / this.params.slideWidth;\n }\n this.setPosition(position, 'snapPosition');\n }\n\n requestAnimation(callback) {\n callback = callback.bind(this);\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(callback);\n } else {\n window.setTimeout(callback, 10);\n }\n }\n\n delayLocationChange(href) {\n var setLocation = function setLocation(href) {\n if (this.params.isEasing) {\n this.delayLocationChange(href);\n } else {\n window.location.href = href;\n }\n };\n window.setTimeout(setLocation.bind(this, href), 50);\n }\n\n translateValues(element) {\n const style = window.getComputedStyle(element);\n const matrix = style['transform'] || style.webkitTransform || style.mozTransform\n\n // No transform property. Simply return 0 values.\n if (matrix === 'none' || typeof matrix === 'undefined') {\n return {\n x: 0,\n y: 0,\n z: 0\n }\n }\n\n // Can either be 2d or 3d transform\n const matrixType = matrix.includes('3d') ? '3d' : '2d'\n const matrixValues = matrix.match(/matrix.*\\((.+)\\)/)[1].split(', ')\n\n // 2d matrices have 6 values\n // Last 2 values are X and Y.\n // 2d matrices does not have Z value.\n if (matrixType === '2d') {\n return {\n x: parseInt(matrixValues[4]),\n y: parseInt(matrixValues[5]),\n z: 0\n }\n }\n\n // 3d matrices have 16 values\n // The 13th, 14th, and 15th values are X, Y, and Z\n if (matrixType === '3d') {\n return {\n x: parseInt(matrixValues[12]),\n y: parseInt(matrixValues[13]),\n z: parseInt(matrixValues[14])\n }\n }\n\n return {\n x: 0,\n y: 0,\n z: 0\n }\n }\n\n eventCoords(event) {\n const touchEvents = ['touchmove', 'touchstart', 'touchend'];\n const isTouchEvent = touchEvents.indexOf(event.type) > -1;\n if (isTouchEvent) {\n let touch = event.targetTouches[0] || event.changedTouches[0];\n return {\n x: touch.clientX,\n y: touch.clientY,\n };\n } else {\n return {\n x: event.clientX,\n y: event.clientY,\n };\n }\n }\n\n setPosition(position) {\n if (position > this.params.positionMax) {\n this.params.position = this.params.positionMax;\n } else {\n this.params.position = (position < 0) ? 0 : position;\n }\n\n const xTarget = this.params.position * this.params.slideWidth * -1;\n this.el.animator.style.transform = 'translate(' + xTarget + 'px, 0)';\n this.params.hasMoved = true;\n\n // Take care of buttons\n if (position == 0) {\n this.el.buttonPrev.setAttribute('disabled', 'disabled');\n } else {\n this.el.buttonPrev.removeAttribute('disabled');\n }\n if (position == this.params.positionMax) {\n this.el.buttonNext.setAttribute('disabled', 'disabled');\n } else {\n this.el.buttonNext.removeAttribute('disabled');\n }\n\n // Take care of scroll indicator\n this.el.scrollIndicator.style.left = position * (100 / (this.params.positionMax + 1)) + '%';\n\n this.dispatchEvent('SesoSlider.positionChanged', {\n bubbles: false,\n cancelable: false,\n detail: {\n posX: this.params.posX\n }\n });\n }\n\n resize() {\n this.params.sliderVisibleWidth = this.el.slider.getBoundingClientRect().width;\n this.params.slideWidth = this.el.slides.item(0).getBoundingClientRect().width;\n this.params.slideTotal = this.el.slides.length;\n this.params.slideVisibleTotal = Math.floor(this.el.animator.getBoundingClientRect().width / this.params.slideWidth);\n this.params.positionMax = this.params.slideTotal - this.params.slideVisibleTotal;\n this.params.trackingEndX = this.params.slideWidth * this.params.slideTotal;\n\n let sliderNeeded = this.params.sliderVisibleWidth > (this.params.slideWidth * this.params.slideTotal) ? true : false;\n\n // check if slider is needed\n if (sliderNeeded && this.params.isInitialized) {\n // if all slides are visible and slider was created -> destroy slider\n this.destroy();\n } else if (!sliderNeeded && !this.params.isInitialized) {\n // if not all slides are visible and slider is not created -> create\n this.create();\n } else if (this.params.isInitialized) {\n // if not all slides are visible and slider is created -> reposition\n this.setPosition(this.params.position, 'resize');\n }\n\n // Set scroll indicator width\n this.el.scrollIndicator.style.width = 100 / (this.params.positionMax + 1) + '%';\n\n this.dispatchEvent('SesoSlider.resized', {\n bubbles: false,\n cancelable: false,\n detail: {\n slideWidth: this.params.slideWidth,\n slideTotal: this.params.slideTotal,\n }\n });\n }\n\n create() {\n // show controls\n this.el.container.classList.remove(this.params.noSliderClass);\n\n // set slider position\n this.setPosition(this.params.position, 'resize');\n\n // initialze\n this.params.isInitialized = true;\n this.el.slider.classList.add(this.params.sliderInitializedClass);\n this.dispatchEvent('SesoSlider.created');\n }\n\n destroy() {\n // hide controls\n this.el.container.classList.add(this.params.noSliderClass);\n\n // reset slider position\n this.el.animator.style.transform = 'translate(0, 0)';\n\n // destroy\n this.params.isInitialized = false;\n this.el.slider.classList.remove(this.params.sliderInitializedClass);\n this.dispatchEvent('SesoSlider.destroyed');\n }\n }\n\n if (typeof window !== 'undefined') {\n window.a1ArticleSlider = SesoSlider;\n }\n\n window.addEventListener('load', (event) => {\n // slider article\n document.querySelectorAll('a1-fragment[name=\"slider-article\"]').forEach(function (fragment) {\n window.a1ArticleSlider = new SesoSlider(fragment.querySelector('.slider'));\n });\n });\n}\n"]}