{"version":3,"sources":["webpack://umbro-global/./src/assets/scripts/components/filters.js","webpack://umbro-global/./src/assets/scripts/components/stories.js"],"names":["countActiveFilters","$form","querySelectorAll","length","indicateActiveFilters","$counts","document","count","strings","single","getAttribute","multiple","selected","string","forEach","$count","i","$applyButton","getClosest","$openButton","text","textContent","pushIntoHistory","queryString","newUrl","window","location","protocol","host","pathname","history","pushState","path","toggleControls","$header","querySelector","activeClass","classList","remove","add","bindFormSubmit","$inputs","$filter","$button","loadingClass","batch","addEventListener","e","preventDefault","navViewport","aboveBreakpoint","delay","then","updateFilters","formData","serialize","fetch","response","ok","Error","statusText","handleError","json","data","Promise","resolve","handleSuccess","handleFilterSuccess","bindFilters","$input","action","checked","trackEvent","pageName","requestSubmit","bindFormInput","bindFormClear","init","registerPlugins","CustomEase","ScrollToPlugin","bindNav","animateStories","$stories","gsap","transform","autoAlpha","duration","stagger","ease","clearProps","onComplete","animatingClass","$animatingStories","$story","removeAnimatingClass","imageSuffix","width","height","webp","getPictureMarkup","image","url","alt","mobileMarkup","buildStoryMarkup","uniform","fullGrid","leftOver","items","remainder","Array","fill","item","push","blank","map","story","storyMarkup","button","description","heading","video","link","getVideoMarkup","join","emptyBeforeInject","markup","emptyElement","removeAttribute","insertAdjacentHTML","initLazyload","initPseudo","initTracking","setAttribute","moreUrl","style","display","hasMore","updateUI","bindLoadStories","endpoint"],"mappings":"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","file":"scripts/chunks/14.29534a16ebfe3b08113a.js","sourcesContent":["import 'form-request-submit-polyfill';\r\nimport { ScrollToPlugin } from 'gsap/all';\r\nimport CustomEase from './../vendor/gsap-ease';\r\nimport { getClosest, aboveBreakpoint, fadeElement, emptyElement, serialize, registerPlugins } from './../global/utils';\r\nimport delay from './../global/delay';\r\nimport { bindNav } from './../global/nav';\r\nimport { handleSuccess } from './stories';\r\nimport initLazyload from './../global/lazyload';\r\nimport initPseudo from './../global/pseudo';\r\nimport { init as initTracking, trackEvent } from './../global/tracking';\r\n\r\nconst countActiveFilters = ($form) => $form ? $form.querySelectorAll('input:checked').length : null;\r\n\r\nconst indicateActiveFilters = ($form) => {\r\n\r\n const $counts = document.querySelectorAll('[data-filter-count]');\r\n const count = countActiveFilters($form);\r\n const strings = {\r\n single: $counts[0].getAttribute('data-filter-single'),\r\n multiple: $counts[0].getAttribute('data-filter-multiple'),\r\n selected: $counts[0].getAttribute('data-filter-selected')\r\n }\r\n\r\n let string = (count === 0) ? strings.multiple : `${count} ${strings.multiple}`;\r\n\r\n if (count === 1) string = `1 ${strings.single}`;\r\n\r\n $counts.forEach(($count, i) => {\r\n\r\n const $applyButton = getClosest($count, '.filter__apply');\r\n const $openButton = getClosest($count, '.filter__open');\r\n let text = string;\r\n\r\n if (!$applyButton && count > 0) text += ` ${strings.selected}`;\r\n\r\n if ($openButton && count === 0) text = strings.single;\r\n\r\n $count.textContent = text;\r\n\r\n });\r\n\r\n return $counts;\r\n\r\n}\r\n\r\nconst pushIntoHistory = (queryString) => {\r\n\r\n const newUrl = `${window.location.protocol}//${window.location.host + window.location.pathname + queryString}`;\r\n\r\n if (history.pushState) {\r\n\r\n window.history.pushState({ path: newUrl }, '', newUrl);\r\n\r\n return newUrl;\r\n\r\n }\r\n\r\n return false;\r\n\r\n}\r\n\r\nconst handleError = (response, $filter, loadingClass) => {\r\n\r\n $filter.classList.remove(loadingClass);\r\n throw new Error(response.statusText);\r\n\r\n return response.statusText;\r\n\r\n}\r\n\r\nconst handleFilterSuccess = (data, batch, $button, loadingClass, formData, $filter) => {\r\n\r\n return new Promise((resolve) => {\r\n\r\n handleSuccess(data, batch, $button, loadingClass, false, true).then(() => {\r\n\r\n $filter.classList.remove(loadingClass);\r\n\r\n (formData.length)\r\n ? pushIntoHistory('?' + formData)\r\n : pushIntoHistory('');\r\n\r\n resolve($filter);\r\n\r\n })\r\n\r\n });\r\n\r\n}\r\n\r\nconst toggleControls = ($form) => {\r\n\r\n const $header = $form.querySelector('[data-filter-header]');\r\n const count = countActiveFilters($form);\r\n const activeClass = 'filter__header--active';\r\n\r\n (count === 0)\r\n ? $header.classList.remove(activeClass)\r\n : $header.classList.add(activeClass);\r\n\r\n return count;\r\n\r\n}\r\n\r\nconst updateFilters = ($form, $filter, loadingClass) => {\r\n\r\n const count = countActiveFilters($form);\r\n const navViewport = aboveBreakpoint('nav');\r\n\r\n $filter.classList.add(loadingClass);\r\n\r\n toggleControls($form);\r\n\r\n (navViewport && count === 0)\r\n ? delay(300).then(() => indicateActiveFilters($form))\r\n : indicateActiveFilters($form);\r\n\r\n return count;\r\n\r\n}\r\n\r\nconst bindFormSubmit = ($form, $inputs) => {\r\n\r\n const $filter = document.querySelector('[data-filter]');\r\n const $button = document.querySelector('[data-stories-load]');\r\n const endpoint = '/api/stories/by-category/';\r\n const loadingClass = 'filter--loading';\r\n\r\n let batch = 1;\r\n\r\n $form.addEventListener('submit', (e) => {\r\n\r\n e.preventDefault();\r\n\r\n updateFilters($form, $filter, loadingClass);\r\n\r\n const formData = serialize($inputs);\r\n\r\n fetch(`${endpoint}?${formData}`)\r\n .then((response) => {\r\n\r\n if (!response.ok) handleError(response, $filter, loadingClass);\r\n\r\n return response.json().then((data) => handleFilterSuccess(data, batch, $button, loadingClass, formData, $filter).then(() => batch++));\r\n\r\n });\r\n\r\n return true;\r\n\r\n });\r\n\r\n}\r\n\r\nconst bindFormInput = ($form, $inputs) => {\r\n\r\n $inputs.forEach(($input) => {\r\n\r\n $input.addEventListener('change', (e) => {\r\n\r\n let action = ($input.checked) ? 'Add' : 'Remove';\r\n\r\n action += ' Filter';\r\n\r\n trackEvent('Stories', action, window.pageName);\r\n\r\n $form.requestSubmit();\r\n\r\n return $input;\r\n\r\n });\r\n\r\n });\r\n\r\n}\r\n\r\nconst bindFormClear = ($form, $inputs) => {\r\n\r\n const $clear = $form.querySelector('[data-filter-clear]');\r\n\r\n $clear.addEventListener('click', (e) => {\r\n\r\n $inputs.forEach(($input) => {\r\n\r\n $input.checked = false;\r\n\r\n return $input;\r\n\r\n });\r\n\r\n });\r\n\r\n}\r\n\r\nconst bindFilters = () => {\r\n\r\n const $form = document.querySelector('[data-target=\"filter-menu\"]');\r\n\r\n if (!$form) return false;\r\n\r\n const $inputs = $form.querySelectorAll('input');\r\n const navViewport = aboveBreakpoint('nav');\r\n\r\n indicateActiveFilters($form);\r\n\r\n bindFormSubmit($form, $inputs);\r\n bindFormInput($form, $inputs);\r\n bindFormClear($form, $inputs);\r\n\r\n if (navViewport) toggleControls($form, true);\r\n\r\n return $inputs;\r\n\r\n}\r\n\r\nconst init = () => {\r\n\r\n registerPlugins([CustomEase, ScrollToPlugin]).then(() => {\r\n\r\n bindNav('filter-menu', 'filter');\r\n bindFilters();\r\n\r\n });\r\n\r\n}\r\n\r\nexport {\r\n init\r\n};\r\n","import { gsap } from 'gsap';\r\nimport { emptyElement } from './../global/utils';\r\nimport initLazyload from './../global/lazyload';\r\nimport initPseudo from './../global/pseudo';\r\nimport { init as initTracking } from './../global/tracking';\r\n\r\nconst removeAnimatingClass = (batch) => {\r\n\r\n const animatingClass = 'story--animating';\r\n const $animatingStories = document.querySelectorAll(`[data-story-batch=\"${batch}\"].${animatingClass}`);\r\n\r\n $animatingStories.forEach(($story, i) => $story.classList.remove(animatingClass));\r\n\r\n return $animatingStories;\r\n\r\n}\r\n\r\nconst animateStories = (batch) => {\r\n\r\n const $stories = `[data-story-batch=\"${batch}\"]`;\r\n\r\n gsap.fromTo($stories, {\r\n transform: 'translateY(10px)',\r\n autoAlpha: 0.001\r\n }, {\r\n transform: 'translateY(0)',\r\n autoAlpha: 0.999,\r\n duration: 0.4,\r\n stagger: 0.025,\r\n ease: 'power2',\r\n clearProps: 'transform,opacity,visibility',\r\n onComplete: () => removeAnimatingClass(batch)\r\n });\r\n\r\n return batch;\r\n\r\n}\r\n\r\nconst imageSuffix = (width, height, webp = false) => `&width=${width}&height=${height}${webp && '&format=webp'}`;\r\n\r\nconst getPictureMarkup = (image, i) => {\r\n\r\n const { url, alt } = image;\r\n const mobileMarkup = `\r\n \r\n \r\n `;\r\n\r\n let pictureMarkup;\r\n\r\n if (i === 0 || i === 1) {\r\n\r\n pictureMarkup = `\r\n \r\n ${mobileMarkup}\r\n \r\n \r\n \r\n \r\n \"${alt}\"\r\n \r\n `;\r\n\r\n } else if (i === 6 || i === 7 || i === 8) {\r\n\r\n pictureMarkup = `\r\n \r\n ${mobileMarkup}\r\n \r\n \r\n \r\n \r\n \"${alt}\"\r\n \r\n `;\r\n\r\n } else {\r\n\r\n pictureMarkup = `\r\n \r\n ${mobileMarkup}\r\n \r\n \r\n \r\n \r\n \"${alt}\"\r\n \r\n `;\r\n\r\n }\r\n\r\n return pictureMarkup;\r\n\r\n}\r\n\r\nconst getVideoMarkup = (video) => {\r\n\r\n const videoMarkup = (video) ? `\r\n \r\n ` : '';\r\n\r\n return videoMarkup;\r\n\r\n}\r\n\r\nconst buildStoryMarkup = (data, batch, uniform) => {\r\n\r\n return new Promise((resolve) => {\r\n\r\n const fullGrid = (uniform) ? 12 : 13;\r\n const leftOver = ((data.items.length + fullGrid) % fullGrid);\r\n const remainder = (leftOver !== 0) ? (fullGrid - leftOver) : 0;\r\n\r\n Array(remainder).fill().forEach((item, i) => data.items.push({ blank: true }));\r\n\r\n const markup = data.items.map((story, i) => {\r\n\r\n let storyMarkup;\r\n\r\n if (story.blank) {\r\n\r\n storyMarkup = `\r\n
\r\n

Placeholder

\r\n
\r\n `;\r\n\r\n } else {\r\n\r\n const { button, description, heading, image, video, link } = story;\r\n storyMarkup = `\r\n
\r\n ${(uniform) ? getPictureMarkup(image, true) : getPictureMarkup(image, i)}\r\n ${getVideoMarkup(video)}\r\n \r\n
\r\n

${heading}

\r\n ${description ? '

' + description + '

' : ''}\r\n ${button ? '' + button.text + '' : ''}\r\n
\r\n
\r\n
\r\n `;\r\n\r\n }\r\n\r\n return storyMarkup;\r\n\r\n }).join('');\r\n\r\n resolve(markup);\r\n\r\n });\r\n\r\n}\r\n\r\nconst handleError = (response, $button, loadingClass) => {\r\n\r\n $button.classList.remove(loadingClass);\r\n throw new Error(response.statusText);\r\n\r\n return response.statusText;\r\n\r\n}\r\n\r\nconst handleSuccess = (data, batch, $button, loadingClass, uniform, emptyBeforeInject = false) => {\r\n\r\n return new Promise((resolve) => {\r\n\r\n const $stories = document.querySelector('[data-stories-grid]');\r\n\r\n const updateUI = (markup) => {\r\n\r\n if (emptyBeforeInject) emptyElement($stories);\r\n\r\n $button.removeAttribute('disabled');\r\n $button.classList.remove(loadingClass);\r\n $stories.insertAdjacentHTML('beforeend', markup);\r\n\r\n initLazyload();\r\n animateStories(batch);\r\n initPseudo();\r\n initTracking();\r\n\r\n $button.setAttribute('data-url', data.moreUrl);\r\n $button.style.display = (data.hasMore) ? 'block' : 'none';\r\n\r\n return $stories;\r\n\r\n }\r\n\r\n buildStoryMarkup(data, batch, uniform).then((markup) => resolve(updateUI(markup)));\r\n\r\n });\r\n\r\n}\r\n\r\nconst bindLoadStories = () => {\r\n\r\n const $button = document.querySelector('[data-stories-load]');\r\n\r\n if (!$button) return false;\r\n\r\n const loadingClass = 'block-button--loading';\r\n\r\n let batch = 1;\r\n\r\n $button.addEventListener('click', (e) => {\r\n\r\n const endpoint = $button.getAttribute('data-url');\r\n\r\n $button.setAttribute('disabled', 'disabled');\r\n $button.classList.add(loadingClass);\r\n\r\n fetch(endpoint)\r\n .then((response) => {\r\n\r\n if (!response.ok) handleError(response, $button, loadingClass);\r\n\r\n return response.json().then((data) => handleSuccess(data, batch, $button, loadingClass, true, false).then(() => batch++));\r\n\r\n });\r\n\r\n });\r\n\r\n}\r\n\r\nconst init = () => {\r\n\r\n bindLoadStories();\r\n\r\n}\r\n\r\nexport {\r\n init,\r\n handleSuccess\r\n};\r\n"],"sourceRoot":""}