{"version":3,"file":"carousel.js","mappings":"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","sources":["webpack://bm3giraffe/./WebRoot/js/util.ts","webpack://bm3giraffe/webpack/bootstrap","webpack://bm3giraffe/webpack/runtime/define property getters","webpack://bm3giraffe/webpack/runtime/hasOwnProperty shorthand","webpack://bm3giraffe/webpack/runtime/make namespace object","webpack://bm3giraffe/./WebRoot/js/carousel.ts"],"sourcesContent":["function first(selector: string, root?: Element) : T {\r\n const foundElement = (root || document).querySelector(selector);\r\n if (!foundElement) {\r\n throw new Error(`element '${selector}' was not found.`);\r\n } else {\r\n return foundElement as T;\r\n }\r\n}\r\n\r\nfunction tryFirst(selector: string, root?: Element): T | null {\r\n const foundElement = (root || document).querySelector(selector);\r\n if (!foundElement) {\r\n console.warn(`element '${selector}' was not found.`);\r\n }\r\n return foundElement;\r\n}\r\n\r\nfunction all(selector: string, root?: Element): Array {\r\n return Array.from((root || document).querySelectorAll(selector));\r\n}\r\n\r\n\r\nexport {\r\n first,\r\n tryFirst,\r\n all\r\n}","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { all, tryFirst } from './util';\n\nclass Carousel {\n\n private readonly carousel: HTMLDivElement\n private readonly images: Array\n private readonly leftArrow: SVGElement | null\n private readonly rightArrow: SVGElement | null\n\n private currentImageIndex: number\n private currentlyFadingOutRight: boolean\n private currentlyFadingOutLeft: boolean\n private canClick: boolean\n private swipeDone: boolean\n private initialX: number\n\n constructor(carouselContainer: HTMLDivElement) {\n this.carousel = carouselContainer;\n this.currentImageIndex = 0;\n this.currentlyFadingOutRight = false;\n this.currentlyFadingOutLeft = false;\n this.canClick = true;\n this.initialX = 0;\n this.swipeDone = false;\n\n this.leftArrow = tryFirst('.left', carouselContainer);\n this.rightArrow = tryFirst('.right', carouselContainer);\n this.images = all('.carousel__image', carouselContainer);\n\n this.initArrows();\n this.initSwipe();\n this.initTouchStart();\n this.initTouchEnd();\n }\n\n nextImage(assignIndex: boolean) {\n const originalIndex = this.currentImageIndex;\n if (this.currentImageIndex == 0) {\n this.currentImageIndex = this.images.length - 1;\n } else {\n this.currentImageIndex = this.currentImageIndex - 1;\n }\n\n const img = this.images[this.currentImageIndex];\n this.currentImageIndex = !assignIndex ? originalIndex : this.currentImageIndex;\n return img;\n }\n\n prevImage(assignIndex: boolean) {\n const originalIndex = this.currentImageIndex;\n\n if (this.currentImageIndex == this.images.length - 1) {\n this.currentImageIndex = 0;\n } else {\n this.currentImageIndex = this.currentImageIndex + 1;\n }\n\n const img = this.images[this.currentImageIndex];\n this.currentImageIndex = !assignIndex ? originalIndex : this.currentImageIndex;\n return img;\n }\n\n currentImage() {\n const currentImages = Array.from(this.carousel.getElementsByClassName('current'));\n if (currentImages.length) {\n return currentImages[0];\n } else {\n throw new Error('no current image exists..?');\n }\n }\n\n clearFade(clearLeft: boolean) {\n const className =\n clearLeft\n ? 'carousel__image--to-left'\n : 'carousel__image--to-right'\n\n all('.carousel__image').forEach(i => i.classList.remove(className));\n }\n\n clearFadeLeft() {\n this.clearFade(true);\n }\n\n clearFadeRight() {\n this.clearFade(false);\n }\n\n fadeOut(toLeft: boolean) {\n const fadeOut = toLeft ? this.prevImage(false) : this.nextImage(false);\n const fadeOutClassName = toLeft ? 'carousel__image--to-left' : 'carousel__image--to-right';\n fadeOut.classList.add(fadeOutClassName);\n\n if (toLeft) {\n this.currentlyFadingOutLeft = true;\n if (this.currentlyFadingOutRight) {\n this.clearFadeRight();\n }\n } else {\n this.currentlyFadingOutRight = true;\n if (this.currentlyFadingOutLeft) {\n this.clearFadeLeft();\n }\n }\n\n setTimeout(() => {\n if (toLeft) {\n this.currentlyFadingOutLeft = false;\n } else {\n this.currentlyFadingOutRight = false;\n }\n fadeOut.classList.remove(fadeOutClassName);\n }, 998);\n }\n\n fadeOutRight() {\n this.fadeOut(false)\n }\n\n fadeOutLeft() {\n this.fadeOut(true);\n }\n\n arrowClickEvent = (swipeLeft: boolean) => {\n if (this.canClick) {\n const currentImage = this.currentImage();\n const nextImage = swipeLeft ? this.nextImage(true) : this.prevImage(true);\n\n currentImage.classList.remove('current');\n nextImage.classList.add('current');\n this.fadeOutLeft();\n\n if (swipeLeft) {\n this.fadeOutLeft();\n } else {\n this.fadeOutRight();\n }\n\n this.canClick = false;\n setTimeout(() => {\n this.canClick = true;\n }, 300);\n }\n }\n\n rightArrowClickEvent = () => {\n this.arrowClickEvent(false);\n }\n\n leftArrowClickEvent = () => {\n this.arrowClickEvent(true);\n }\n\n initArrows() {\n if (this.rightArrow) {\n this.rightArrow.addEventListener('click', this.rightArrowClickEvent);\n }\n if (this.leftArrow) {\n this.leftArrow.addEventListener('click', this.leftArrowClickEvent);\n }\n }\n\n swipeEventHandler = (e: TouchEvent) => {\n if (e.touches && e.touches.length) {\n if (!this.swipeDone) {\n const touch = e.touches[0];\n const distance = touch.clientX - this.initialX;\n\n if (distance > 30) {\n this.rightArrowClickEvent();\n this.swipeDone = true;\n } else if (distance < -30) {\n this.swipeDone = true;\n this.leftArrowClickEvent();\n }\n }\n }\n }\n\n initSwipe() {\n this.carousel.addEventListener('touchmove', this.swipeEventHandler);\n }\n\n touchStartEventHandler = (e: TouchEvent) => {\n if (e.touches && e.touches.length) {\n this.initialX = e.touches[0].clientX;\n document.body.classList.add('prevent-scroll-on-body');\n setTimeout(() => {\n document.body.classList.remove('prevent-scroll-on-body')\n }, 100);\n }\n }\n\n initTouchStart() {\n this.carousel.addEventListener('touchstart', this.touchStartEventHandler);\n }\n\n touchEndEventHandler = () => {\n this.swipeDone = false;\n }\n\n initTouchEnd() {\n this.carousel.addEventListener('touchend', this.touchEndEventHandler);\n }\n}\n\n(() => all('.carousel').forEach(c => new Carousel(c)))();"],"names":["first","selector","root","foundElement","document","querySelector","Error","tryFirst","console","warn","all","Array","from","querySelectorAll","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","__webpack_modules__","d","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","value","Carousel","constructor","carouselContainer","arrowClickEvent","swipeLeft","this","canClick","currentImage","nextImage","prevImage","classList","remove","add","fadeOutLeft","fadeOutRight","setTimeout","rightArrowClickEvent","leftArrowClickEvent","swipeEventHandler","e","touches","length","swipeDone","distance","clientX","initialX","touchStartEventHandler","body","touchEndEventHandler","carousel","currentImageIndex","currentlyFadingOutRight","currentlyFadingOutLeft","leftArrow","rightArrow","images","initArrows","initSwipe","initTouchStart","initTouchEnd","assignIndex","originalIndex","img","currentImages","getElementsByClassName","clearFade","clearLeft","className","forEach","i","clearFadeLeft","clearFadeRight","fadeOut","toLeft","fadeOutClassName","addEventListener","c"],"sourceRoot":""}