{"version":3,"file":"scripts/chunks/_app_app_scripts_core_views_O84-image-gallery_ts.7f0aec5cc441b13171f1.mjs","mappings":"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","sources":["webpack://rockworld/./app/scripts/core/views/O84-image-gallery.ts","webpack://rockworld/./app/scripts/framework/server-side-views.ts"],"sourcesContent":["/**\r\n * O84 Product image gallery\r\n *\r\n * @author Nicolai Nielsen \r\n * @author Daniel Kvistgaard \r\n */\r\n\r\nimport { ServerView } from '../../framework/server-side-views';\r\nimport Slider from '../../framework/slider';\r\n\r\nconst View = ServerView.extend({\r\n el: '.O84-image-gallery',\r\n\r\n animDuration: 500,\r\n animEasing: 'easeOutQuad',\r\n\r\n onRender() {\r\n this.slider = new Slider({\r\n el: this.el,\r\n thumbnails: true,\r\n thumbnailsParent: this.el.querySelector('.O84-image-gallery__thumbnails__inner'),\r\n });\r\n\r\n this.thumbsParent = this.el.querySelector('.O84-image-gallery__thumbnails');\r\n this.thumbsEl = this.el.querySelector('.slider__thumbnails');\r\n this.thumbsInnerEl = this.el.querySelector('.O84-image-gallery__thumbnails__inner');\r\n\r\n this.prevThumbY = this.thumbsEl ? this._getTranslateY(this.thumbsEl) : 0;\r\n this.slider.on('slide', this.onSlide.bind(this));\r\n\r\n this.thumbsBtn = this.el.querySelector('.js-open-thumbnails');\r\n this.thumbsBtn.addEventListener('click', this.toggleThumbs.bind(this), false);\r\n\r\n window.addEventListener('resize', this.onResize.bind(this), false);\r\n\r\n this.checkThumbsAmount();\r\n this.placeControls();\r\n },\r\n\r\n onResize() {\r\n this.onSlide(false, this.slider.current);\r\n this.checkThumbsAmount();\r\n this.placeControls();\r\n\r\n if (this.thumbsOpen) {\r\n this.checkThumbsHeight();\r\n }\r\n },\r\n\r\n async onSlide(direction, slideIndex) {\r\n if (!this.thumbsEl) {\r\n return;\r\n }\r\n\r\n const activeThumb = this.thumbsEl.querySelectorAll('.slider__thumbnails__item')[slideIndex];\r\n\r\n if (!activeThumb) {\r\n return;\r\n }\r\n\r\n const newThumbY = activeThumb.offsetTop;\r\n\r\n if (newThumbY !== this.prevThumbY) {\r\n this.prevThumbY = newThumbY;\r\n\r\n if (!this.thumbsOpen) {\r\n const Velocity = (await import('velocity-animate')).default;\r\n Velocity.animate(this.thumbsEl, 'stop');\r\n Velocity.animate(\r\n this.thumbsEl,\r\n {\r\n translateY: `${newThumbY * -1}px`,\r\n },\r\n {\r\n duration: this.animDuration,\r\n easing: this.animEasing,\r\n queue: false,\r\n }\r\n );\r\n }\r\n }\r\n\r\n if (this.thumbsOpen) {\r\n this.toggleThumbs();\r\n }\r\n },\r\n\r\n async toggleThumbs(e) {\r\n if (e) {\r\n e.preventDefault();\r\n }\r\n\r\n if (this.isAnimatingThumbs) {\r\n return;\r\n }\r\n\r\n this.isAnimatingThumbs = true;\r\n\r\n const firstInner = this.thumbsInnerEl.getBoundingClientRect();\r\n\r\n if (this.thumbsParent.classList.contains('is-open')) {\r\n this.thumbsOpen = false;\r\n this.thumbsInnerEl.scrollTop = 0;\r\n this.thumbsParent.classList.remove('is-open');\r\n this.thumbsParent.classList.remove('is-open-complete');\r\n this.el.classList.remove('has-thumbs-open');\r\n } else {\r\n this.thumbsOpen = true;\r\n this.thumbsParent.classList.add('is-open');\r\n this.el.classList.add('has-thumbs-open');\r\n }\r\n\r\n this.checkThumbsHeight();\r\n\r\n const lastInner = this.thumbsInnerEl.getBoundingClientRect();\r\n\r\n this.thumbsInnerEl.style.height = `${firstInner.height}px`;\r\n const Velocity = (await import('velocity-animate')).default;\r\n Velocity.animate(\r\n this.thumbsInnerEl,\r\n {\r\n height: `${lastInner.height}px`,\r\n translateZ: 0,\r\n },\r\n {\r\n duration: this.animDuration,\r\n easing: this.animEasing,\r\n queue: false,\r\n complete: () => {\r\n this.thumbsInnerEl.style.height = '';\r\n this.isAnimatingThumbs = false;\r\n\r\n if (this.thumbsOpen) {\r\n this.thumbsParent.classList.add('is-open-complete');\r\n }\r\n },\r\n }\r\n );\r\n\r\n Velocity.animate(\r\n this.thumbsEl,\r\n {\r\n translateY: this.thumbsOpen ? 0 : `${this.prevThumbY * -1}px`,\r\n translateZ: 0,\r\n },\r\n {\r\n duration: this.animDuration,\r\n easing: this.animEasing,\r\n queue: false,\r\n }\r\n );\r\n },\r\n\r\n checkThumbsHeight() {\r\n this.thumbsInnerEl.style.maxHeight = '';\r\n\r\n const sliderHeight = this.el.querySelector('.O84-image-gallery__slider').offsetHeight - 20;\r\n const thumbsHeight = this.thumbsParent.offsetHeight;\r\n\r\n if (thumbsHeight > sliderHeight) {\r\n const innerHeight = this.thumbsInnerEl.offsetHeight;\r\n\r\n this.thumbsInnerEl.style.maxHeight = `${sliderHeight - (thumbsHeight - innerHeight)}px`;\r\n }\r\n },\r\n\r\n checkThumbsAmount() {\r\n if (!this.thumbsEl) {\r\n return;\r\n }\r\n\r\n const thumbItem = this.thumbsEl.querySelector('.slider__thumbnails__item');\r\n const thumbStyling = window.getComputedStyle(thumbItem);\r\n const thumbMarginBottom = parseInt(thumbStyling.getPropertyValue('margin-bottom'), 10);\r\n const thumbItemHeight = thumbItem.offsetHeight;\r\n const thumbsHeight = this.thumbsEl.offsetHeight;\r\n const thumbsInnerHeight = this.thumbsInnerEl.offsetHeight;\r\n\r\n if (\r\n (!this.thumbsOpen && thumbsHeight - thumbMarginBottom <= thumbsInnerHeight) ||\r\n (this.thumbsOpen && thumbItemHeight + thumbMarginBottom >= thumbsInnerHeight)\r\n ) {\r\n if (this.thumbsOpen) {\r\n this.toggleThumbs();\r\n }\r\n\r\n this.thumbsBtn.classList.add('is-hidden');\r\n } else {\r\n this.thumbsBtn.classList.remove('is-hidden');\r\n }\r\n },\r\n\r\n placeControls() {\r\n const controls = this.el.querySelector('.slider__controls');\r\n\r\n if (global.Modernizr && global.Modernizr.mq(`(max-width: ${App.mq.desktop - 1}px)`)) {\r\n if (controls) {\r\n controls.style.right = '';\r\n }\r\n\r\n return;\r\n }\r\n\r\n const thumbsWidth = this.thumbsParent.offsetWidth;\r\n\r\n if (controls) {\r\n controls.style.right = `${thumbsWidth}px`;\r\n }\r\n },\r\n\r\n _getTranslateY(el) {\r\n const { transform } = el.style;\r\n const transformSplitted = transform ? transform.split('(')[1].split(',') : [0, 0];\r\n\r\n return parseFloat(transformSplitted[1]);\r\n },\r\n});\r\n\r\nexport default View;\r\n","/**\r\n * Server-side rendered View\r\n * Binding the Marionette View to all server-side rendered elements\r\n * matching the el selector.\r\n *\r\n * @author Daniel Kvistgaard \r\n */\r\nimport _ from 'underscore';\r\nimport { Marionette } from './vendor';\r\n\r\nconst getNewView = function newView(view, extendView) {\r\n const viewClone = _.clone(view);\r\n\r\n // Creating a new view with the same functionality as this view\r\n const NewView = extendView.extend();\r\n _.extend(NewView.prototype, _.omit(viewClone, 'el'));\r\n\r\n return NewView;\r\n};\r\n\r\nconst ServerView = Marionette.View.extend({\r\n constructor: function constructor(options) {\r\n // If the selector is a string and not an id selector\r\n if (typeof this.el === 'string' && this.el.substr(0, 1) !== '#') {\r\n const elems = document.querySelectorAll(this.el);\r\n const hasViewClass = `has-view--${this.el.replace(/\\s/g, '-').replace(/[.,]/g, '')}`;\r\n\r\n // Stop if no elements are found\r\n if (!elems || elems.length === 0) {\r\n return;\r\n }\r\n\r\n // Loop through all found elements to initialise a new view per element\r\n [].forEach.call(elems, (elem) => {\r\n if (elem.classList.contains(hasViewClass)) {\r\n return;\r\n }\r\n\r\n // Creating a new view with the same functionality as this view\r\n const ElView = getNewView(this, ServerView);\r\n ElView.prototype.el = elem;\r\n\r\n elem.classList.add(hasViewClass);\r\n\r\n // Initialize the new view\r\n new ElView(options); // eslint-disable-line no-new\r\n });\r\n } else {\r\n this.triggerMethod('before:render');\r\n\r\n // Initialize a normal Marionette View\r\n Marionette.View.apply(this, [options]);\r\n\r\n this.triggerMethod('render');\r\n }\r\n },\r\n});\r\n\r\nconst ServerCollection = Marionette.CollectionView.extend({\r\n sort: false,\r\n\r\n constructor: function constructor(options) {\r\n // If the selector is a string and not an id selector\r\n if (typeof this.el === 'string' && this.el.substr(0, 1) !== '#') {\r\n const elems = document.querySelectorAll(this.el);\r\n const hasViewClass = `has-view--${this.el.replace(/\\s/g, '-').replace(/[.,]/g, '')}`;\r\n\r\n // Stop if no elements are found\r\n if (!elems || elems.length === 0) {\r\n return;\r\n }\r\n\r\n // Loop through all found elements to initialise a new view per element\r\n [].forEach.call(elems, (elem) => {\r\n if (elem.classList.contains(hasViewClass)) {\r\n return;\r\n }\r\n\r\n // Creating a new view with the same functionality as this view\r\n const ElView = getNewView(this, ServerCollection);\r\n ElView.prototype.el = elem;\r\n\r\n elem.classList.add(hasViewClass);\r\n\r\n // Initialize the new view\r\n new ElView(options); // eslint-disable-line no-new\r\n });\r\n } else {\r\n this.triggerMethod('before:render');\r\n\r\n // Initialize a normal Marionette CollectionView\r\n Marionette.CollectionView.apply(this, [options]);\r\n\r\n this.triggerMethod('render');\r\n }\r\n },\r\n\r\n _showEmptyView() {\r\n const ChildView = this.childView;\r\n const childEl = _.clone(ChildView.prototype).el;\r\n const children = this.el.querySelectorAll(childEl);\r\n\r\n if (!children) {\r\n Marionette.CollectionView.prototype._showEmptyView.apply(this);\r\n return;\r\n }\r\n\r\n this.triggerMethod('before:render:children', this);\r\n this._startBuffering();\r\n\r\n [].forEach.call(children, (child, index) => {\r\n const View = getNewView(ChildView.prototype, ServerView);\r\n View.prototype.el = child;\r\n\r\n const view = new View();\r\n\r\n this.addChildView(view, index);\r\n });\r\n\r\n this.children._updateLength();\r\n\r\n this._endBuffering();\r\n this.triggerMethod('render:children', this);\r\n },\r\n\r\n buildChildView(child, ChildViewClass, childViewOptions) {\r\n const options = _.extend({ model: child, banana: 'split' }, childViewOptions);\r\n delete ChildViewClass.prototype.el;\r\n\r\n return new ChildViewClass(options);\r\n },\r\n});\r\n\r\nexport { ServerView, ServerCollection };\r\n"],"names":["View","ServerView","extend","el","animDuration","animEasing","onRender","this","slider","Slider","thumbnails","thumbnailsParent","querySelector","thumbsParent","thumbsEl","thumbsInnerEl","prevThumbY","_getTranslateY","on","onSlide","bind","thumbsBtn","addEventListener","toggleThumbs","window","onResize","checkThumbsAmount","placeControls","current","thumbsOpen","checkThumbsHeight","direction","slideIndex","activeThumb","querySelectorAll","newThumbY","offsetTop","Velocity","default","animate","translateY","duration","easing","queue","e","preventDefault","isAnimatingThumbs","firstInner","getBoundingClientRect","classList","contains","scrollTop","remove","add","lastInner","style","height","translateZ","complete","maxHeight","sliderHeight","offsetHeight","thumbsHeight","innerHeight","thumbItem","thumbStyling","getComputedStyle","thumbMarginBottom","parseInt","getPropertyValue","thumbItemHeight","thumbsInnerHeight","controls","global","Modernizr","mq","App","desktop","right","thumbsWidth","offsetWidth","transform","transformSplitted","split","parseFloat","getNewView","view","extendView","viewClone","_","NewView","prototype","Marionette","constructor","options","substr","elems","document","hasViewClass","replace","length","forEach","call","elem","ElView","triggerMethod","apply","ServerCollection","CollectionView","sort","_showEmptyView","ChildView","childView","childEl","children","_startBuffering","child","index","addChildView","_updateLength","_endBuffering","buildChildView","ChildViewClass","childViewOptions","model","banana"],"sourceRoot":""}