{"version":3,"sources":["webpack:///./js/utils/index.js","webpack:///./js/components/init-video-thumb-carousel.js","webpack:///./node_modules/when-dom-ready/dist/index.es2015.js"],"names":["getCultureFromPage","document","querySelector","value","getNodeIdFromPage","getTwoLetterCountryCode","split","toLowerCase","IsUsingIE","navigator","appName","userAgent","match","$","browser","msie","firstOrDefault","array","filterCondition","Array","isArray","length","results","filter","getOffset","element","docElem","win","rect","doc","elem","getBoundingClientRect","width","height","getClientRects","ownerDocument","window","documentElement","top","pageYOffset","clientTop","left","pageXOffset","clientLeft","__webpack_require__","d","__webpack_exports__","ThumbCarousel","carousel","controls","carouselVideo","_this","this","_classCallCheck","thumb","from","querySelectorAll","axis","getAttribute","WidthChange","settings","container","speed","nav","loop","controlsContainer","default","_objectSpread","items","gutter","responsive","600","768","996","1366","mq","matches","slider","tns","matchMedia","addListener","play","forEach","item","addEventListener","handleClick","video","handleVideo","Video","langCode","subtitles","_this2","_defineProperty","iframe","src","concat","classList","contains","add","whenDomReady","then","containers","substring","loadedStates","cb","Promise","resolve","done","setTimeout","indexOf","readyState","resume","val"],"mappings":"4FAAO,SAASA,IACd,OAAOC,SAASC,cAAc,oBAAoBC,MAG7C,SAASC,IACd,OAAOH,SAASC,cAAc,eAAeC,MAGxC,SAASE,IAGd,OAFoBL,IAEDM,MAAM,KAAK,GAAGC,cAuC5B,SAASC,IAEd,SACuB,+BAArBC,UAAUC,SACPD,UAAUE,UAAUC,MAAM,YAAcH,UAAUE,UAAUC,MAAM,eAC/C,IAAdC,EAAEC,SAA6C,GAAlBD,EAAEC,QAAQC,MA8B5C,SAASC,EAAeC,EAAOC,GACpC,IAAKC,MAAMC,QAAQH,GACjB,OAAO,KAGT,GAAqB,IAAjBA,EAAMI,OACR,OAAO,KAGT,IAAMC,EAAUL,EAAMM,OAAOL,GAE7B,OAAuB,IAAnBI,EAAQD,OACH,KAGFC,EAAQ,GAgCV,SAASE,EAAUC,GACxB,IAAIC,EACFC,EACAC,EACAC,EACAC,EAAOL,EAET,GAAKK,EAOL,OAHAF,EAAOE,EAAKC,yBAGHC,OAASJ,EAAKK,QAAUH,EAAKI,iBAAiBb,QACrDQ,EAAMC,EAAKK,cACXR,EAAMS,OACNV,EAAUG,EAAIQ,gBAEP,CACLC,IAAKV,EAAKU,IAAMX,EAAIY,YAAcb,EAAQc,UAC1CC,KAAMb,EAAKa,KAAOd,EAAIe,YAAchB,EAAQiB,kBAPhD,EAlJFC,EAAAC,EAAAC,EAAA,sBAAA9C,IAAA4C,EAAAC,EAAAC,EAAA,sBAAA1C,IAAAwC,EAAAC,EAAAC,EAAA,sBAAAzC,IAAAuC,EAAAC,EAAAC,EAAA,sBAAAtC,IAAAoC,EAAAC,EAAAC,EAAA,sBAAA9B,IAAA4B,EAAAC,EAAAC,EAAA,sBAAAtB,80BCKMuB,EACJ,SAAAA,EAAYC,EAAUC,EAAUC,GAAe,IAAAC,EAAAC,KAgF7C,GAhF6CC,EAAAD,KAAAL,GAC7CK,KAAKJ,SAAWA,EAChBI,KAAKH,SAAWA,EAChBG,KAAKF,cAAgBA,EACrBE,KAAKE,MAAQnC,MAAMoC,KAAKH,KAAKJ,SAASQ,iBAAiB,uBACvDJ,KAAKK,KAAOL,KAAKJ,SAASU,aAAa,oBAEvCN,KAAKO,YAAc,aAGnBP,KAAKQ,SAAW,CACdC,UAAWT,KAAKJ,SAChBc,MAAO,IACPb,UAAU,EACVc,KAAK,EACLC,MAAM,EACNC,kBAAmBb,KAAKH,SACxBQ,KAAM,cAIRL,KAAKc,QAALC,EAAA,GACKf,KAAKQ,SADV,CAEEQ,MAAO,EACPC,OAAQ,GACRC,WAAY,CACVC,IAAK,CACHH,MAAO,EACPC,OAAQ,IAEVG,IAAK,CACHJ,MAAO,GAETK,IAAK,CACHL,MAAO,GAETM,KAAM,CACJN,MAAO,MAKK,aAAdhB,KAAKK,KAEPL,KAAKO,YAAc,SAAAgB,GACbA,EAAGC,QAELzB,EAAK0B,OAASC,YAAGX,EAAA,GACZhB,EAAKS,SADO,CAEfQ,MAAO,EACPC,OAAQ,GACRZ,KAAMN,EAAKM,KACXa,WAAY,CACVE,IAAK,CACHJ,MAAO,GAETK,IAAK,CACHL,MAAO,GAETM,KAAM,CACJN,MAAO,OAMbjB,EAAK0B,OAASC,YAAGX,EAAA,GACZhB,EAAKe,WAOdd,KAAKyB,OAASC,YAAGX,EAAA,GACZf,KAAKc,UAKRa,WAAY,CACd,IAAMJ,EAAKvC,OAAO2C,WAAW,sBAC7BJ,EAAGK,YAAY5B,KAAKO,aACpBP,KAAKO,YAAYgB,GAGnBvB,KAAKyB,OAAOI,OAEZ7B,KAAKE,MAAM4B,QAAQ,SAAAC,GACjBA,EAAKC,iBAAiB,QAAS,kBAAMjC,EAAKD,cAAcmC,YAAYF,OAGtE/B,KAAKF,cAAcoC,MAAMF,iBAAiB,QAAS,kBAAMjC,EAAKD,cAAcqC,iBAI1EC,EACJ,SAAAA,EAAYF,EAAOG,EAAUC,GAAW,IAAAC,EAAAvC,KAAAC,EAAAD,KAAAoC,GAAAI,EAAAxC,KAAA,cAO1B,SAAA+B,GAEZQ,EAAKE,OAAOC,IAAZ,GAAAC,OAAqBZ,EAAKzB,aAAa,oBAAvC,kBAAAqC,OAA2EJ,EAAKF,SAAhF,kBAAAM,OACEJ,EAAKF,SADP,oBAAAM,OAEmBJ,EAAKD,WAGnBC,EAAKL,MAAMU,UAAUC,SAAS,mBACjCN,EAAKL,MAAMU,UAAUE,IAAI,oBAfWN,EAAAxC,KAAA,cAmB1B,WACRuC,EAAKL,MAAMU,UAAUC,SAAS,oBAKlCN,EAAKL,MAAMU,UAAUE,IAAI,kBAGzBP,EAAKE,OAAOC,IAAZ,GAAAC,OAAqBJ,EAAKE,OAAOC,IAAjC,kBAAAC,OAAqDJ,EAAKF,SAA1D,kBAAAM,OAAmFJ,EAAKF,SAAxF,oBAAAM,OAAmHJ,EAAKD,cA3BxHtC,KAAKqC,SAAWA,EAChBrC,KAAKsC,UAAYA,EACjBtC,KAAKkC,MAAQA,EACblC,KAAKyC,OAASzC,KAAKkC,MAAMpF,cAAc,WA2D3CiG,cAAeC,KA/Bf,WAEE,IAAMC,EAAalF,MAAMoC,KAAKtD,SAASuD,iBAAiB,2BAExD,GAA0B,IAAtB6C,EAAWhF,OAAf,CAIA,IACMoE,EADczF,cACSsG,UAAU,EAAG,GAE1CD,EAAWnB,QAAQ,SAAArB,GACjB,IAAM6B,EAAY7B,EAAUH,aAAa,0BAGnCV,EAAWa,EAAU3D,cAAc,+BAGnC+C,EAAWY,EAAU3D,cAAc,yBAGnCoF,EAAQzB,EAAU3D,cAAc,gBAGhCgD,EAAgB,IAAIsC,EAAMF,EAAOG,EAAUC,GAGjD,IAAI3C,EAAcC,EAAUC,EAAUC,yCC/J1C,IAAAqD,EAAA,2BAGAJ,EAAA,SAAAK,EAAA3E,GACA,WAAA4E,QAAA,SAAAC,GAEAF,GAAA,mBAAAA,IACA3E,EAAA2E,EACAA,EAAA,MAIA3E,KAAAO,OAAAnC,SAGA,IAAA0G,EAAA,WACA,OAAAD,OAAAF,GAAAI,WAAAJ,OAKA,IAAAD,EAAAM,QAAAhF,EAAAiF,YACAH,IAEA9E,EAAAuD,iBAAA,mBAAAuB,MAMAR,EAAAY,OAAA,SAAAlF,GACA,gBAAAmF,GACA,OAAAb,EAAAtE,GAAAuE,KAAA,WACA,OAAAY,MAKelE,EAAA","file":"video-thumb-carousel-ae43cc73d462a9b068ba.js","sourcesContent":["export function getCultureFromPage() {\r\n return document.querySelector('.js-culture-code').value;\r\n}\r\n\r\nexport function getNodeIdFromPage() {\r\n return document.querySelector('.js-node-id').value;\r\n}\r\n\r\nexport function getTwoLetterCountryCode() {\r\n const cultureCode = getCultureFromPage();\r\n\r\n return cultureCode.split('-')[1].toLowerCase();\r\n}\r\n\r\nexport function getCached(key) {\r\n try {\r\n const json = sessionStorage.getItem(key);\r\n if (json === '' || json === null || json === undefined) {\r\n return false;\r\n }\r\n return JSON.parse(json);\r\n } catch (error) {\r\n // eslint-disable-next-line\r\n console.log('sessionstorage not supported');\r\n return null;\r\n }\r\n}\r\n\r\nexport function setCached(key, object) {\r\n try {\r\n const json = JSON.stringify(object);\r\n sessionStorage.setItem(key, json);\r\n } catch (error) {\r\n // eslint-disable-next-line\r\n console.log('sessionstorage not supported');\r\n }\r\n}\r\n\r\nexport function clearCache(key) {\r\n try {\r\n sessionStorage.removeItem(key);\r\n } catch (error) {\r\n // eslint-disable-next-line\r\n console.log('sessionstorage not supported');\r\n }\r\n}\r\n\r\n/**\r\n * Checks if the current client is IE.\r\n */\r\nexport function IsUsingIE() {\r\n /* eslint-disable */\r\n if (\r\n navigator.appName == 'Microsoft Internet Explorer' ||\r\n !!(navigator.userAgent.match(/Trident/) || navigator.userAgent.match(/rv:11/)) ||\r\n (typeof $.browser !== 'undefined' && $.browser.msie == 1)\r\n ) {\r\n return true;\r\n }\r\n /* eslint-enable */\r\n return false;\r\n}\r\n\r\n/**\r\n * Returns the given nodelist as an array of nodes\r\n * @param {NodeList} nodes\r\n */\r\nexport function nodeListToArray(nodes) {\r\n return Array.prototype.slice.call(nodes);\r\n}\r\n\r\n/**\r\n * @param {Object} object\r\n * @param {string} key\r\n * @return {any} value\r\n */\r\nexport function getParameterCaseInsensitive(object, key) {\r\n return object[Object.keys(object).find(k => k.toLowerCase() === key.toLowerCase())];\r\n}\r\n\r\n/**\r\n * Returns the first matched item in the array, if not found then it returns null\r\n * @param {Array} array\r\n * @param {Function} filterCondition\r\n */\r\nexport function firstOrDefault(array, filterCondition) {\r\n if (!Array.isArray(array)) {\r\n return null;\r\n }\r\n\r\n if (array.length === 0) {\r\n return null;\r\n }\r\n\r\n const results = array.filter(filterCondition);\r\n\r\n if (results.length === 0) {\r\n return null;\r\n }\r\n\r\n return results[0];\r\n}\r\n\r\n/* eslint-disable */\r\nexport function distance(lat1, lon1, lat2, lon2, unit) {\r\n if (lat1 == lat2 && lon1 == lon2) {\r\n return 0;\r\n } else {\r\n var radlat1 = (Math.PI * lat1) / 180;\r\n var radlat2 = (Math.PI * lat2) / 180;\r\n var theta = lon1 - lon2;\r\n var radtheta = (Math.PI * theta) / 180;\r\n var dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);\r\n if (dist > 1) {\r\n dist = 1;\r\n }\r\n dist = Math.acos(dist);\r\n dist = (dist * 180) / Math.PI;\r\n dist = dist * 60 * 1.1515;\r\n if (unit == 'K') {\r\n dist = dist * 1.609344;\r\n }\r\n if (unit == 'N') {\r\n dist = dist * 0.8684;\r\n }\r\n return dist;\r\n }\r\n}\r\n/* eslint-enable */\r\n\r\n/* eslint-disable */\r\n// This is the decompiled jQuery getOffset() function\r\nexport function getOffset(element) {\r\n var docElem,\r\n win,\r\n rect,\r\n doc,\r\n elem = element;\r\n\r\n if (!elem) {\r\n return;\r\n }\r\n\r\n rect = elem.getBoundingClientRect();\r\n\r\n // Make sure element is not hidden (display: none) or disconnected\r\n if (rect.width || rect.height || elem.getClientRects().length) {\r\n doc = elem.ownerDocument;\r\n win = window;\r\n docElem = doc.documentElement;\r\n\r\n return {\r\n top: rect.top + win.pageYOffset - docElem.clientTop,\r\n left: rect.left + win.pageXOffset - docElem.clientLeft,\r\n };\r\n }\r\n}\r\n/* eslint-enable */\r\n\r\n/** Groups the given array using the given expression */\r\nexport function groupBy(array, expression) {\r\n const map = new Map();\r\n Array.forEach(array, item => {\r\n const key = expression(item);\r\n const collection = map.get(key);\r\n if (!collection) {\r\n map.set(key, [item]);\r\n } else {\r\n collection.push(item);\r\n }\r\n });\r\n return map;\r\n}\r\n\r\n/**\r\n * Checks if the given rectangles intersect\r\n * @param rectA\r\n * @param rectB\r\n */\r\nexport function intersects(rectA, rectB) {\r\n return !(rectB.left >= rectA.right || rectB.right <= rectA.left || rectB.top >= rectA.bottom || rectB.bottom <= rectA.top);\r\n}\r\n","import whenDomReady from 'when-dom-ready';\r\nimport { tns } from 'tiny-slider/src/tiny-slider';\r\n\r\nimport { getCultureFromPage } from '@utils';\r\n\r\nclass ThumbCarousel {\r\n constructor(carousel, controls, carouselVideo) {\r\n this.carousel = carousel;\r\n this.controls = controls;\r\n this.carouselVideo = carouselVideo;\r\n this.thumb = Array.from(this.carousel.querySelectorAll('.js-ds-video-thumb'));\r\n this.axis = this.carousel.getAttribute('data-slider-axis');\r\n\r\n this.WidthChange = () => {};\r\n\r\n // Shared settings.\r\n this.settings = {\r\n container: this.carousel,\r\n speed: 500,\r\n controls: true,\r\n nav: false,\r\n loop: false,\r\n controlsContainer: this.controls,\r\n axis: 'horizontal',\r\n };\r\n\r\n // Default settings: default or WidthChange query else statement.\r\n this.default = {\r\n ...this.settings,\r\n items: 1,\r\n gutter: 14,\r\n responsive: {\r\n 600: {\r\n items: 2,\r\n gutter: 36,\r\n },\r\n 768: {\r\n items: 3,\r\n },\r\n 996: {\r\n items: 4,\r\n },\r\n 1366: {\r\n items: 5,\r\n },\r\n },\r\n };\r\n\r\n if (this.axis === 'vertical') {\r\n // Media query change.\r\n this.WidthChange = mq => {\r\n if (mq.matches) {\r\n // Vertical slider settings.\r\n this.slider = tns({\r\n ...this.settings,\r\n items: 2,\r\n gutter: 20,\r\n axis: this.axis,\r\n responsive: {\r\n 768: {\r\n items: 2,\r\n },\r\n 996: {\r\n items: 3,\r\n },\r\n 1366: {\r\n items: 4,\r\n },\r\n },\r\n });\r\n } else {\r\n // Change to default slider settings.\r\n this.slider = tns({\r\n ...this.default,\r\n });\r\n }\r\n };\r\n } else {\r\n // Default slider settings.\r\n // TODO: this needs to work properly on resize\r\n this.slider = tns({\r\n ...this.default,\r\n });\r\n }\r\n\r\n // Media query event handler.\r\n if (matchMedia) {\r\n const mq = window.matchMedia('(min-width: 768px)');\r\n mq.addListener(this.WidthChange);\r\n this.WidthChange(mq);\r\n }\r\n\r\n this.slider.play();\r\n\r\n this.thumb.forEach(item => {\r\n item.addEventListener('click', () => this.carouselVideo.handleClick(item));\r\n });\r\n\r\n this.carouselVideo.video.addEventListener('click', () => this.carouselVideo.handleVideo());\r\n }\r\n}\r\n\r\nclass Video {\r\n constructor(video, langCode, subtitles) {\r\n this.langCode = langCode;\r\n this.subtitles = subtitles;\r\n this.video = video;\r\n this.iframe = this.video.querySelector('iframe');\r\n }\r\n\r\n handleClick = item => {\r\n // Set youtube iframe src to allow autoplay.\r\n this.iframe.src = `${item.getAttribute('data-youtube-src')}autoplay=1&hl=${this.langCode}&cc_lang_pref=${\r\n this.langCode\r\n }&cc_load_policy=${this.subtitles}`;\r\n\r\n // Add class to remove thumbnail overlay.\r\n if (!this.video.classList.contains('hide-thumbnail')) {\r\n this.video.classList.add('hide-thumbnail');\r\n }\r\n };\r\n\r\n handleVideo = () => {\r\n if (this.video.classList.contains('hide-thumbnail')) {\r\n return;\r\n }\r\n\r\n // Add class to remove thumbnail overlay.\r\n this.video.classList.add('hide-thumbnail');\r\n\r\n // Add autoplay to src.\r\n this.iframe.src = `${this.iframe.src}autoplay=1&hl=${this.langCode}&cc_lang_pref=${this.langCode}&cc_load_policy=${this.subtitles}`;\r\n };\r\n}\r\n\r\nfunction initialize() {\r\n // Get list of containers.\r\n const containers = Array.from(document.querySelectorAll('.js-ds-video-container'));\r\n\r\n if (containers.length === 0) {\r\n return;\r\n }\r\n\r\n const cultureCode = getCultureFromPage();\r\n const langCode = cultureCode.substring(0, 2);\r\n\r\n containers.forEach(container => {\r\n const subtitles = container.getAttribute('data-youtube-subtitles');\r\n\r\n // Get carousel in container.\r\n const carousel = container.querySelector('.js-ds-video-thumb-carousel');\r\n\r\n // Get controls in container.\r\n const controls = container.querySelector('.js-ds-video-controls');\r\n\r\n // Get video in container.\r\n const video = container.querySelector('.js-ds-video');\r\n\r\n // Create a new instance of Video class.\r\n const carouselVideo = new Video(video, langCode, subtitles);\r\n\r\n // eslint-disable-next-line no-new\r\n new ThumbCarousel(carousel, controls, carouselVideo);\r\n });\r\n}\r\n\r\nwhenDomReady().then(initialize);\r\n","/* eslint no-void: \"off\" */\n\n// Loaded ready states\nvar loadedStates = ['interactive', 'complete'];\n\n// Return Promise\nvar whenDomReady = function whenDomReady(cb, doc) {\n\treturn new Promise(function (resolve) {\n\t\t// Allow doc to be passed in as the lone first param\n\t\tif (cb && typeof cb !== 'function') {\n\t\t\tdoc = cb;\n\t\t\tcb = null;\n\t\t}\n\n\t\t// Use global document if we don't have one\n\t\tdoc = doc || window.document;\n\n\t\t// Handle DOM load\n\t\tvar done = function done() {\n\t\t\treturn resolve(void (cb && setTimeout(cb)));\n\t\t};\n\n\t\t// Resolve now if DOM has already loaded\n\t\t// Otherwise wait for DOMContentLoaded\n\t\tif (loadedStates.indexOf(doc.readyState) !== -1) {\n\t\t\tdone();\n\t\t} else {\n\t\t\tdoc.addEventListener('DOMContentLoaded', done);\n\t\t}\n\t});\n};\n\n// Promise chain helper\nwhenDomReady.resume = function (doc) {\n\treturn function (val) {\n\t\treturn whenDomReady(doc).then(function () {\n\t\t\treturn val;\n\t\t});\n\t};\n};\n\nexport default whenDomReady;\n//# sourceMappingURL=index.es2015.js.map\n"],"sourceRoot":""}