{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./app/webpack/javascripts/lib/helpers.js","webpack:///./node_modules/rails-ujs/lib/assets/compiled/rails-ujs.js","webpack:///./config/webpack/.modernizrrc.js","webpack:///./app/webpack/images/application/template/arrow-down.png","webpack:///./app/webpack/images/application/template/arrow-left.png","webpack:///./app/webpack/images/application/template/arrow-right.png","webpack:///./app/webpack/images/application/template/arrow-up.png","webpack:///./app/webpack/images/application/template/download.png","webpack:///./app/webpack/images/application/template/select-arrow-down.png","webpack:///./app/webpack/images/application/template/tick.png","webpack:///(webpack)/buildin/module.js","webpack:///./node_modules/lazysizes/lazysizes.js","webpack:///./app/webpack/images/application/favicon/logo.png","webpack:///./app/webpack/images/application/favicon/safari-pinned-tab.svg","webpack:///./app/webpack/images/application/placeholder/placeholder-16x9.jpg","webpack:///./app/webpack/images/application/placeholder/placeholder-1x1.jpg","webpack:///./app/webpack/images/application/placeholder/placeholder-1x1_5.jpg","webpack:///./app/webpack/images/application/placeholder/placeholder-2x1.jpg","webpack:///./node_modules/process/browser.js","webpack:///./app/webpack/images/application/placeholder/placeholder-32x9.jpg","webpack:///./app/webpack/images/application/placeholder/placeholder-3x2.jpg","webpack:///./app/webpack/images/application/placeholder/placeholder-3x4.jpg","webpack:///./app/webpack/images/application/placeholder/placeholder-8x9.jpg","webpack:///./app/webpack/images/application/schema/logo.png","webpack:///./app/webpack/images/application/social_sharing/facebook.png","webpack:///./app/webpack/images/application/social_sharing/twitter.png","webpack:///./app/webpack/images/application/template/SAF-email-footer.png","webpack:///./app/webpack/images/application/template/SAF-email-header.png","webpack:///./app/webpack/images/application/template/basket.svg","webpack:///./app/webpack/images/application/template/cta_bread_01.svg","webpack:///./app/webpack/images/application/template/cta_meat_01.svg","webpack:///./app/webpack/images/application/template/email.svg","webpack:///./app/webpack/images/application/template/icon--download.svg","webpack:///./app/webpack/images/application/template/icon--link-external.svg","webpack:///./app/webpack/images/application/template/icon--map-marker_smaller.svg","webpack:///./app/webpack/images/application/template/insta.svg","webpack:///./app/webpack/images/application/template/logo.svg","webpack:///./app/webpack/images/application/template/logos/fdq.png","webpack:///./app/webpack/images/application/template/logos/icsa.png","webpack:///./app/webpack/images/application/template/logos/miele.png","webpack:///./app/webpack/images/application/template/logos/nottstrent.png","webpack:///./app/webpack/images/application/template/logos/placeholder-logo-square.png","webpack:///./app/webpack/images/application/template/logos/placeholder-logo-tall.png","webpack:///./app/webpack/images/application/template/logos/placeholder-logo-wide.png","webpack:///./app/webpack/images/application/template/logos/visitengland.png","webpack:///./app/webpack/images/application/template/map-pin.png","webpack:///./app/webpack/images/application/template/menu.svg","webpack:///./app/webpack/images/application/template/placeholder.png","webpack:///./app/webpack/images/application/template/quotemark.svg","webpack:///./app/webpack/images/application/template/search.svg","webpack:///./app/webpack/images/application/template/spacer.gif","webpack:///./app/webpack/images/application/template/stripe_logo.svg","webpack:///./app/webpack/javascripts/lib/ie11-polyfills/element-qsa-scope.js","webpack:///./app/webpack/javascripts/lib/ie11-polyfills/nodelist-foreach.js","webpack:///./app/webpack/javascripts/lib/ie11-polyfills/closest.js","webpack:///./app/webpack/javascripts/lib/ie11-polyfills/es6-promise-auto.js","webpack:///./app/webpack/javascripts/lib/ie11-polyfills/find-index.js","webpack:///./app/webpack/javascripts/lib/ie11-polyfills/find.js","webpack:///./app/webpack/javascripts/lib/ie11-polyfills/string-replaceall.js","webpack:///./node_modules/lazysizes/plugins/object-fit/ls.object-fit.js","webpack:///./app/webpack/images/application sync ^\\.\\/.*$","webpack:///./app/webpack/images/application/template/arrow-down.svg","webpack:///./app/webpack/images/application/template/arrow-left.svg","webpack:///./app/webpack/images/application/template/arrow-right.svg","webpack:///./app/webpack/images/application/template/arrow-up.svg","webpack:///./app/webpack/images/application/template/download.svg","webpack:///./app/webpack/images/application/template/select-arrow-down.svg","webpack:///./app/webpack/images/application/template/tick.svg","webpack:///./app/webpack/javascripts/lib/cookie-disclaimer.js","webpack:///./app/webpack/javascripts/application/add-user-agent-classes.js","webpack:///./app/webpack/javascripts/application/header/console.js","webpack:///./app/webpack/javascripts/application/header/navigation.js","webpack:///./app/webpack/javascripts/application/header/menu-button.js","webpack:///./app/webpack/javascripts/application/header.js","webpack:///./app/webpack/javascripts/application/search.js","webpack:///./app/webpack/javascripts/application/sticky-nav.js","webpack:///./node_modules/@glidejs/glide/dist/glide.esm.js","webpack:///./app/webpack/javascripts/application/hero-slider.js","webpack:///./app/webpack/javascripts/application/gallery-slider.js","webpack:///./app/webpack/javascripts/application/share-bar.js","webpack:///./app/webpack/javascripts/application/equal-height-cells.js","webpack:///./app/webpack/javascripts/lib/modal.js","webpack:///./app/webpack/javascripts/application/modals.js","webpack:///./app/webpack/javascripts/application/table-fade.js","webpack:///./app/webpack/javascripts/application/fake-upload-input.js","webpack:///./app/webpack/javascripts/application/focus-outlines.js","webpack:///./app/webpack/javascripts/application/instagram-widget.js","webpack:///./app/webpack/javascripts/application/collapsible-product-section.js","webpack:///./app/webpack/packs/application/application.js","webpack:///(webpack)/buildin/global.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","Helpers","cb","document","readyState","addEventListener","array","callback","scope","length","el","className","classList","add","hasClass","remove","replace","RegExp","toggle","classes","split","existingIndex","indexOf","splice","push","join","contains","RegEx","test","debounce","func","wait","immediate","timeout","context","this","args","arguments","clearTimeout","setTimeout","apply","_typeof","iterator","obj","constructor","Rails","linkClickSelector","buttonClickSelector","selector","exclude","inputChangeSelector","formSubmitSelector","formInputClickSelector","formDisableSelector","formEnableSelector","fileInputSelector","linkDisableSelector","buttonDisableSelector","nonce","loadCSPNonce","ref","querySelector","content","cspNonce","Element","matches","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","element","getData","setData","$","Array","slice","querySelectorAll","csrfParam","csrfToken","meta","CSRFProtection","xhr","token","setRequestHeader","refreshCSRFTokens","param","forEach","input","CustomEvent","fire","preventDefault","window","event","params","evt","createEvent","initCustomEvent","bubbles","cancelable","detail","Event","result","defaultPrevented","data","dispatchEvent","stopEverything","e","target","stopPropagation","stopImmediatePropagation","delegate","eventType","handler","parentNode","AcceptHeaders","createXHR","prepareOptions","processResponse","text","html","xml","json","script","ajax","options","response","responseText","getResponseHeader","Math","floor","status","success","statusText","error","complete","beforeSend","XMLHttpRequest","OPENED","send","url","location","href","type","toUpperCase","dataType","accept","done","open","crossDomain","withCredentials","onreadystatechange","DONE","parser","match","JSON","parse","createElement","setAttribute","head","appendChild","removeChild","DOMParser","parseFromString","isCrossDomain","originAnchor","urlAnchor","protocol","host","toArray","serializeElement","additionalParam","inputs","elements","disabled","option","selected","checked","map","encodeURIComponent","formElements","form","filter","allowAction","handleConfirm","answer","message","getAttribute","confirm","disableFormElement","disableFormElements","disableLinkElement","enableFormElement","enableFormElements","enableLinkElement","handleDisabledElement","enableElement","disableElement","replacement","innerHTML","originalText","removeEventListener","handleMethod","formContent","method","action","style","display","body","click","isRemote","handleRemote","button","enctype","FormData","append","formSubmitButtonClick","formNoValidate","preventInsignificantClick","insignificantMetaClick","metaKey","ctrlKey","jQuery","rails","Error","ajaxPrefilter","originalOptions","start","_rails_loaded","hadGlobal","oldGlobal","Modernizr","scriptGlobalObject","undefined","tests","ModernizrProto","_version","_config","_q","on","self","addTest","fn","addAsyncTest","docElement","documentElement","isSVG","nodeName","toLowerCase","featureNames","feature","aliasIdx","nameIdx","featureNameSplit","featureIdx","aliases","Boolean","testRunner","classPrefix","baseVal","enableJSClass","reJS","enableClasses","setClasses","webpackPolyfill","deprecate","paths","children","factory","lazySizes","Date","lazysizes","lazySizesCfg","prop","lazySizesDefaults","lazyClass","loadedClass","loadingClass","preloadClass","errorClass","autosizesClass","srcAttr","srcsetAttr","sizesAttr","minSize","customMedia","init","expFactor","hFac","loadMode","loadHidden","ricTimeout","throttleDelay","lazySizesConfig","lazysizesConfig","getElementsByClassName","cfg","noSupport","docElem","supportPicture","HTMLPictureElement","requestAnimationFrame","requestIdleCallback","regPicture","loadEvents","regClassCache","ele","cls","addClass","trim","removeClass","reg","addRemoveLoadEvents","dom","triggerEvent","elem","noBubbles","noCancelable","instance","initEvent","updatePolyfill","full","polyfill","picturefill","pf","src","reevaluate","getCSS","getComputedStyle","getWidth","parent","width","offsetWidth","_lazysizesWidth","rAF","firstFns","secondFns","fns","run","runFns","running","waiting","shift","rafBatch","queue","hidden","_lsFlush","rAFIt","simple","that","timestamp","later","last","now","loader","regImg","regIframe","supportScroll","navigator","userAgent","currentExpand","isLoading","lowRuns","resetPreloading","isVisible","isBodyHidden","isNestedVisible","elemExpand","outerRect","visible","eLtop","eLbottom","eLleft","eLright","offsetParent","getBoundingClientRect","left","right","top","bottom","checkElements","eLlen","rect","autoLoadElem","loadedSomething","elemNegativeExpand","elemExpandVal","beforeExpandVal","defaultExpand","preloadExpand","lazyloadElems","_lazyRace","prematureUnveil","unveilElement","expand","clientHeight","clientWidth","_defEx","eLvW","innerWidth","elvH","innerHeight","isCompleted","preloadElems","preloadAfterLoad","throttledCheckElements","lastTime","gDelay","rICTimeout","idleCallback","isPriority","delay","throttle","switchLoadingClass","_lazyCache","rafSwitchLoadingClass","rafedSwitchLoadingClass","handleSources","source","sourceSrcset","lazyUnveil","isAuto","sizes","isImg","srcset","isPicture","firesLoad","resetPreloadingTimer","getElementsByTagName","contentWindow","changeIframeSrc","isLoaded","naturalWidth","loading","autoSizer","updateElem","afterScroll","altLoadmodeScrollListner","onload","started","_","persisted","loadingElements","img","MutationObserver","observe","childList","subtree","attributes","setInterval","checkElems","unveil","_aLSL","sizeElement","sources","len","dataAttr","getSizeElement","debouncedUpdateElementsSizes","autosizesElems","uP","aC","rC","hC","gW","cachedSetTimeout","cachedClearTimeout","process","defaultSetTimout","defaultClearTimeout","runTimeout","fun","currentQueue","draining","queueIndex","cleanUpNextTick","concat","drainQueue","marker","runClearTimeout","Item","noop","nextTick","title","browser","env","argv","version","versions","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","dir","umask","ElementPrototype","querySelectorWithScope","selectors","querySelectorAllWithScope","matchesWithScope","closest","closestWithScope","qsa","hasScope","attr","random","elementOrNodeList","removeAttribute","NodeList","parentElement","nodeType","a","N","Q","V","x","_state","z","T","_result","j","h","w","b","resolve","Z","A","S","_label","y","TypeError","then","g","_onerror","E","X","_subscribers","u","tt","L","isArray","toString","U","W","R","B","G","H","WebKitMutationObserver","I","J","Uint8ClampedArray","importScripts","MessageChannel","createTextNode","characterData","port1","onmessage","port2","postMessage","Function","require","runOnLoop","runOnContext","f","substring","et","_instanceConstructor","promise","_remaining","_enumerate","_eachEntry","_settledAt","nt","_willSettleAt","Y","M","q","all","race","reject","_setScheduler","_setAsap","_asap","global","Promise","cast","findIndex","thisArg","size","find","String","replaceAll","str","newStr","globalInstall","initialEvent","cloneElementClass","fitSupport","regCssFit","regCssPosition","blankSrc","regBgUrlEscape","positionDefaults","center","initFix","config","switchClassesAdded","addedSrc","styleElement","styleElementStyle","lazysizesCfg","onChange","currentSrc","backgroundImage","stringify","rafedOnChange","_lazysizesParentFit","fit","hideElement","container","prev","previousElementSibling","position","visibility","removePrevClone","objectFitClass","generateStyleClass","cloneNode","curSrc","backgroundRepeat","backgroundPosition","backgroundSize","_objectFitPolyfilledDisplay","insertBefore","onRead","fontFamily","objectFit","objectPosition","getObject","webpackContext","req","id","webpackContextResolve","code","keys","CookieDisclaimer","classForBody","templateHtml","days","expires","date","setTime","getTime","toGMTString","cookie","nameEQ","ca","charAt","div","readCookie","firstChild","getElementById","onclick","writeCookie","AddUserAgentClasses","ua","edge","parseInt","Console","Navigation","headerObject","rootList","childNavToggleSelector","translationForAriaLabelShow","translationForAriaLabelHide","touchDevice","initialiseList","initialiseTouchEvents","initialiseEscapeKey","elementA","elementB","list","level","initialiseListItemToggleClicks","initialiseListItemAutoRevealOnMouseEnter","initialiseAnySubLists","currentList","currentLevel","listItem","subList","log","listItemToggle","hideListItemSubList","viewportSituationDesktop","collapseAnyExpandedNavOfOtherParents","showListItemSubList","passive","handleMouseEnteredListItem","handleMouseLeftListItem","viewportSituationMobile","link","blur","touchHandler","handleInitialTouchDetected","pointerEvents","handleSubsequentTouchDetected","closestNav","collapseAnyExpandedNav","exceptThoseWithSameRootListItemAs","elementsHaveSameRootListItem","currentListItem","theEvent","keyCode","MenuButton","menuToggle","slidingNav","navSlideHideTimer","initialiseMenuButtonClickActions","menuVisibleOnMobile","hideMenuOnMobile","showMenuOnMobile","showTabbableElements","trapTabbing","addSlidingNavOverlay","hideTabbableElements","unTrapTabbing","removeSlidingNavOverlay","Header","headerSelector","menuToggleSelector","slidingNavOverlayClasses","breakpoint","navigationRootListSelector","tabTrappableItemsWrapperSelector","tabTrappableItemsSelectors","translationsSelector","translationAttributeForAriaLabelShow","translationAttributeForAriaLabelHide","headerElement","navigationRootList","tabTrappableItemsWrapper","menuButton","translationsElement","navigation","viewportSituation","monitorViewportWidthAndAlterDisplayWhenRequired","viewportWidthChecker","resizeDebouncer","max","overlay","slidingNavOverlayClass","tabTrapMarkerSelectors","firstTabTrapAttribute","lastTabTrapAttribute","focusableElements","trapTabKey","shiftKey","activeElement","hasAttribute","lastElement","focus","firstElement","Search","searchContainerSelector","searchButtonsSelector","searchBarSelector","searchContainer","searchButtons","searchBtn","searchBar","searchInput","StickyNav","header","primaryNav","main","stickyNavDebouncer","scroll","pageYOffset","_typeof2","defaults","startAt","perView","focusAt","gap","autoplay","hoverpause","keyboard","bound","swipeThreshold","dragThreshold","perTouch","touchRatio","touchAngle","animationDuration","rewind","rewindDuration","animationTimingFunc","direction","peek","breakpoints","ltr","rtl","slider","carousel","swipeable","dragging","cloneSlide","activeNav","activeSlide","disabledArrow","warn","msg","console","classCallCheck","Constructor","createClass","defineProperties","props","descriptor","configurable","writable","protoProps","staticProps","_extends","assign","receiver","desc","getOwnPropertyDescriptor","getPrototypeOf","possibleConstructorReturn","ReferenceError","toInt","isString","isObject","isFunction","isUndefined","mount","glide","extensions","events","components","_name","define","definition","mergeOptions","settings","EventsBus","hop","index","item","Glide","_c","_t","_e","transformers","pattern","Run","make","distance","Transition","disable","Move","interval","_o","set","_i","_d","previous","leading","throttled","at","remaining","trailing","cancel","MARGIN_TYPE","siblings","node","matched","nextSibling","exist","HTMLElement","EventsBinder","closure","capture","VALID_DIRECTIONS","FLIPED_MOVEMENTS","Rtl","Components","modify","translate","Direction","is","Gap","Gaps","Grow","Clones","grow","Peeking","Peek","before","Focusing","Sizes","slideWidth","supportsPassive","opts","supportsPassive$1","START_EVENTS","MOVE_EVENTS","END_EVENTS","MOUSE_EVENTS","sortBreakpoints","points","sort","reduce","k","COMPONENTS","Html","root","track","slides","wrapper","slide","_r","Translate","Events","transform","TRANSFORMERS","mutate","transformer","mutator","isType","isOffset","after","movement","compose","duration","transition","enable","offset","_v","setupSlides","setupWrapper","dimention","wrapperSize","reductor","marginLeft","marginRight","_this","items","collect","_Glide$settings","peekIncrementer","part","end","clone","_clone","unshift","_Components$Html","half","prepend","reverse","_i2","_i3","Resize","Binder","unbind","destroy","Build","typeClass","activeClass","sibling","removeClasses","move","calculate","isStart","isEnd","steps","countableSteps","min","_m","step","substr","Swipe","swipeSin","swipeStartX","swipeStartY","bindSwipeStart","swipe","touches","pageX","pageY","bindSwipeMove","bindSwipeEnd","subExSx","subEySy","powEX","abs","powEY","swipeHypotenuse","sqrt","swipeCathetus","asin","PI","parseFloat","threshold","swipeDistance","swipeDeg","round","unbindSwipeMove","unbindSwipeEnd","unbindSwipeStart","_this2","_this3","changedTouches","Images","dragstart","Anchors","detached","prevented","_a","detach","draggable","attach","Controls","_n","addBindings","setActive","removeActive","controls","removeBindings","currentTarget","Keyboard","press","Autoplay","stop","time","clearInterval","Breakpoints","matchMedia","point","_Core","Glide$$1","__proto__","subClass","superClass","setPrototypeOf","inherits","HeroSlider","mountSlider","onlyChildSlide","arrowNav","autoheight","GallerySlider","gallerySlider","glideTrack","bulletNav","firstElementChild","childElementCount","calculateNewArrowPosition","captionHeights","thisCaptionHeight","height","distancePx","bulletDistancePx","ShareBar","companyName","shareurl","sharecontent","shareplatform","descriptionString","textArray","EqualHeightCells","equalHeightsOnResize","bp","equalGridCellHeights","removeHeightFromCell","targetedGrids","vw","thirdCell","twoThirdsCell","thirdHeight","Modal","THEBODY","ROOT","videoRatio","defaultConfig","modalType","modalTitle","closeSelector","visibleClassName","videoRatioClass","sharingPlatforms","sharingUrl","extendDefaults","show","properties","newSource","modalBox","removeProperty","modalBody","modalContent","platform","outerHTML","loadXMLDoc","handleTouch","watchResize","xmlhttp","displayVideo","displayInfo","displayShare","displayAjax","displayScrape","displayHtml","currentHeight","evenPixelHeight","ceil","minHeight","closeButton","hide","resizeHandler","previousClientY","clientY","ModalElement","currentClientY","scrollTop","scrollHeight","onkeydown","Modals","isTouch","checkTouchBoolean","touchStartInit","videourl","TableFade","tables","scrollWidth","scrollLeft","FakeUploadInput","realInputs","pop","FocusOutlines","handleFirstTab","handleMouseDownOnce","InstagramWidget","llt","dataset","instagramWidget","queryUserMedia","fetch","formMediaEdgeUrl","ok","userMediaData","createWidget","err","thumbnailUrl","media_url","thumbnail_url","permalink","basicApiRequestUrl","basicApiMediaFields","basicApiAccessToken","CollapsibleProductSection","originalSelector","togglecollapsingButtonWrappers","MutationObserverCallback","addMutationObservers","collapsibleProductButtons","collapsibleProductButton","btn","nextElementSibling","expanded","shortlistButtons","productListingWrapper","elementToObserve","observer","addCollapsibleButtonEvents","mutationList","mutatedTarget","mutation","newCollapsibleButtons","collapsingButtonWrapper","reloadedCollapsingButton","collapsingSection","ready"],"mappings":"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","file":"js/application/application-128aa341f701fcd5b3f3.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/packs/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 704);\n","class Helpers {\n static ready(cb) {\n if (document.readyState !== 'loading') {\n cb();\n } else {\n document.addEventListener('DOMContentLoaded', cb);\n }\n }\n\n static forEach(array, callback, scope) {\n for (let i = 0; i < array.length; i += 1) {\n callback.call(scope, array[i], i); // passes back stuff we need\n }\n }\n\n // https://davidwalsh.name/javascript-debounce-function\n // Returns a function, that, as long as it continues to be invoked, will not\n // be triggered. The function will be called after it stops being called for\n // N milliseconds. If `immediate` is passed, trigger the function on the\n // leading edge, instead of the trailing.\n static debounce = (func, wait, immediate) => {\n let timeout;\n\n return function() {\n const context = this;\n const args = arguments;\n\n clearTimeout(timeout);\n\n timeout = setTimeout(function() {\n timeout = null;\n\n if (!immediate) {\n func.apply(context, args)\n }\n }, wait);\n\n if (immediate && !timeout) {\n func.apply(context, args);\n }\n };\n };\n\n static addClass(el, className) {\n if (el.classList) {\n el.classList.add(className);\n } else if (!Helpers.hasClass(el, className)) {\n el.className += ` ${className}`;\n }\n }\n\n static removeClass(el, className) {\n if (el.classList) {\n el.classList.remove(className);\n } else {\n el.className = el.className.replace(new RegExp(`\\\\b${className}\\\\b`, 'g'), '');\n }\n }\n\n static toggleClass(el, className) {\n if (el.classList) {\n el.classList.toggle(className);\n } else {\n let classes = el.className.split(' ');\n let existingIndex = classes.indexOf(className);\n\n if (existingIndex >= 0) {\n classes.splice(existingIndex, 1);\n } else {\n classes.push(className);\n }\n\n el.className = classes.join(' ');\n }\n }\n\n static hasClass(el, className) {\n return el.classList ? el.classList.contains(className) : new RegEx(`\\\\b${className}\\\\b`).test(el.className);\n // return this object so we can chain methods\n // TODO: SOLVE THE PROBLEM OF RETURNING THIS AFTER RETURNING THE hasClass\n // return this;\n }\n}\n\nexport default Helpers;\n","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*\nUnobtrusive JavaScript\nhttps://github.com/rails/rails/blob/master/actionview/app/assets/javascripts\nReleased under the MIT license\n */\n;\n(function () {\n var context = this;\n (function () {\n (function () {\n this.Rails = {\n linkClickSelector: 'a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]',\n buttonClickSelector: {\n selector: 'button[data-remote]:not([form]), button[data-confirm]:not([form])',\n exclude: 'form button'\n },\n inputChangeSelector: 'select[data-remote], input[data-remote], textarea[data-remote]',\n formSubmitSelector: 'form',\n formInputClickSelector: 'form input[type=submit], form input[type=image], form button[type=submit], form button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])',\n formDisableSelector: 'input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled',\n formEnableSelector: 'input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled',\n fileInputSelector: 'input[name][type=file]:not([disabled])',\n linkDisableSelector: 'a[data-disable-with], a[data-disable]',\n buttonDisableSelector: 'button[data-remote][data-disable-with], button[data-remote][data-disable]'\n };\n }).call(this);\n }).call(context);\n var Rails = context.Rails;\n (function () {\n (function () {\n var nonce;\n nonce = null;\n\n Rails.loadCSPNonce = function () {\n var ref;\n return nonce = (ref = document.querySelector(\"meta[name=csp-nonce]\")) != null ? ref.content : void 0;\n };\n\n Rails.cspNonce = function () {\n return nonce != null ? nonce : Rails.loadCSPNonce();\n };\n }).call(this);\n (function () {\n var expando, m;\n m = Element.prototype.matches || Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector;\n\n Rails.matches = function (element, selector) {\n if (selector.exclude != null) {\n return m.call(element, selector.selector) && !m.call(element, selector.exclude);\n } else {\n return m.call(element, selector);\n }\n };\n\n expando = '_ujsData';\n\n Rails.getData = function (element, key) {\n var ref;\n return (ref = element[expando]) != null ? ref[key] : void 0;\n };\n\n Rails.setData = function (element, key, value) {\n if (element[expando] == null) {\n element[expando] = {};\n }\n\n return element[expando][key] = value;\n };\n\n Rails.$ = function (selector) {\n return Array.prototype.slice.call(document.querySelectorAll(selector));\n };\n }).call(this);\n (function () {\n var $, csrfParam, csrfToken;\n $ = Rails.$;\n\n csrfToken = Rails.csrfToken = function () {\n var meta;\n meta = document.querySelector('meta[name=csrf-token]');\n return meta && meta.content;\n };\n\n csrfParam = Rails.csrfParam = function () {\n var meta;\n meta = document.querySelector('meta[name=csrf-param]');\n return meta && meta.content;\n };\n\n Rails.CSRFProtection = function (xhr) {\n var token;\n token = csrfToken();\n\n if (token != null) {\n return xhr.setRequestHeader('X-CSRF-Token', token);\n }\n };\n\n Rails.refreshCSRFTokens = function () {\n var param, token;\n token = csrfToken();\n param = csrfParam();\n\n if (token != null && param != null) {\n return $('form input[name=\"' + param + '\"]').forEach(function (input) {\n return input.value = token;\n });\n }\n };\n }).call(this);\n (function () {\n var CustomEvent, fire, matches, preventDefault;\n matches = Rails.matches;\n CustomEvent = window.CustomEvent;\n\n if (typeof CustomEvent !== 'function') {\n CustomEvent = function CustomEvent(event, params) {\n var evt;\n evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n preventDefault = CustomEvent.prototype.preventDefault;\n\n CustomEvent.prototype.preventDefault = function () {\n var result;\n result = preventDefault.call(this);\n\n if (this.cancelable && !this.defaultPrevented) {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function get() {\n return true;\n }\n });\n }\n\n return result;\n };\n }\n\n fire = Rails.fire = function (obj, name, data) {\n var event;\n event = new CustomEvent(name, {\n bubbles: true,\n cancelable: true,\n detail: data\n });\n obj.dispatchEvent(event);\n return !event.defaultPrevented;\n };\n\n Rails.stopEverything = function (e) {\n fire(e.target, 'ujs:everythingStopped');\n e.preventDefault();\n e.stopPropagation();\n return e.stopImmediatePropagation();\n };\n\n Rails.delegate = function (element, selector, eventType, handler) {\n return element.addEventListener(eventType, function (e) {\n var target;\n target = e.target;\n\n while (!(!(target instanceof Element) || matches(target, selector))) {\n target = target.parentNode;\n }\n\n if (target instanceof Element && handler.call(target, e) === false) {\n e.preventDefault();\n return e.stopPropagation();\n }\n });\n };\n }).call(this);\n (function () {\n var AcceptHeaders, CSRFProtection, createXHR, cspNonce, fire, prepareOptions, processResponse;\n cspNonce = Rails.cspNonce, CSRFProtection = Rails.CSRFProtection, fire = Rails.fire;\n AcceptHeaders = {\n '*': '*/*',\n text: 'text/plain',\n html: 'text/html',\n xml: 'application/xml, text/xml',\n json: 'application/json, text/javascript',\n script: 'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript'\n };\n\n Rails.ajax = function (options) {\n var xhr;\n options = prepareOptions(options);\n xhr = createXHR(options, function () {\n var ref, response;\n response = processResponse((ref = xhr.response) != null ? ref : xhr.responseText, xhr.getResponseHeader('Content-Type'));\n\n if (Math.floor(xhr.status / 100) === 2) {\n if (typeof options.success === \"function\") {\n options.success(response, xhr.statusText, xhr);\n }\n } else {\n if (typeof options.error === \"function\") {\n options.error(response, xhr.statusText, xhr);\n }\n }\n\n return typeof options.complete === \"function\" ? options.complete(xhr, xhr.statusText) : void 0;\n });\n\n if (options.beforeSend != null && !options.beforeSend(xhr, options)) {\n return false;\n }\n\n if (xhr.readyState === XMLHttpRequest.OPENED) {\n return xhr.send(options.data);\n }\n };\n\n prepareOptions = function prepareOptions(options) {\n options.url = options.url || location.href;\n options.type = options.type.toUpperCase();\n\n if (options.type === 'GET' && options.data) {\n if (options.url.indexOf('?') < 0) {\n options.url += '?' + options.data;\n } else {\n options.url += '&' + options.data;\n }\n }\n\n if (AcceptHeaders[options.dataType] == null) {\n options.dataType = '*';\n }\n\n options.accept = AcceptHeaders[options.dataType];\n\n if (options.dataType !== '*') {\n options.accept += ', */*; q=0.01';\n }\n\n return options;\n };\n\n createXHR = function createXHR(options, done) {\n var xhr;\n xhr = new XMLHttpRequest();\n xhr.open(options.type, options.url, true);\n xhr.setRequestHeader('Accept', options.accept);\n\n if (typeof options.data === 'string') {\n xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');\n }\n\n if (!options.crossDomain) {\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n }\n\n CSRFProtection(xhr);\n xhr.withCredentials = !!options.withCredentials;\n\n xhr.onreadystatechange = function () {\n if (xhr.readyState === XMLHttpRequest.DONE) {\n return done(xhr);\n }\n };\n\n return xhr;\n };\n\n processResponse = function processResponse(response, type) {\n var parser, script;\n\n if (typeof response === 'string' && typeof type === 'string') {\n if (type.match(/\\bjson\\b/)) {\n try {\n response = JSON.parse(response);\n } catch (error) {}\n } else if (type.match(/\\b(?:java|ecma)script\\b/)) {\n script = document.createElement('script');\n script.setAttribute('nonce', cspNonce());\n script.text = response;\n document.head.appendChild(script).parentNode.removeChild(script);\n } else if (type.match(/\\b(xml|html|svg)\\b/)) {\n parser = new DOMParser();\n type = type.replace(/;.+/, '');\n\n try {\n response = parser.parseFromString(response, type);\n } catch (error) {}\n }\n }\n\n return response;\n };\n\n Rails.href = function (element) {\n return element.href;\n };\n\n Rails.isCrossDomain = function (url) {\n var e, originAnchor, urlAnchor;\n originAnchor = document.createElement('a');\n originAnchor.href = location.href;\n urlAnchor = document.createElement('a');\n\n try {\n urlAnchor.href = url;\n return !((!urlAnchor.protocol || urlAnchor.protocol === ':') && !urlAnchor.host || originAnchor.protocol + '//' + originAnchor.host === urlAnchor.protocol + '//' + urlAnchor.host);\n } catch (error) {\n e = error;\n return true;\n }\n };\n }).call(this);\n (function () {\n var matches, toArray;\n matches = Rails.matches;\n\n toArray = function toArray(e) {\n return Array.prototype.slice.call(e);\n };\n\n Rails.serializeElement = function (element, additionalParam) {\n var inputs, params;\n inputs = [element];\n\n if (matches(element, 'form')) {\n inputs = toArray(element.elements);\n }\n\n params = [];\n inputs.forEach(function (input) {\n if (!input.name || input.disabled) {\n return;\n }\n\n if (matches(input, 'select')) {\n return toArray(input.options).forEach(function (option) {\n if (option.selected) {\n return params.push({\n name: input.name,\n value: option.value\n });\n }\n });\n } else if (input.checked || ['radio', 'checkbox', 'submit'].indexOf(input.type) === -1) {\n return params.push({\n name: input.name,\n value: input.value\n });\n }\n });\n\n if (additionalParam) {\n params.push(additionalParam);\n }\n\n return params.map(function (param) {\n if (param.name != null) {\n return encodeURIComponent(param.name) + \"=\" + encodeURIComponent(param.value);\n } else {\n return param;\n }\n }).join('&');\n };\n\n Rails.formElements = function (form, selector) {\n if (matches(form, 'form')) {\n return toArray(form.elements).filter(function (el) {\n return matches(el, selector);\n });\n } else {\n return toArray(form.querySelectorAll(selector));\n }\n };\n }).call(this);\n (function () {\n var allowAction, fire, stopEverything;\n fire = Rails.fire, stopEverything = Rails.stopEverything;\n\n Rails.handleConfirm = function (e) {\n if (!allowAction(this)) {\n return stopEverything(e);\n }\n };\n\n allowAction = function allowAction(element) {\n var answer, callback, message;\n message = element.getAttribute('data-confirm');\n\n if (!message) {\n return true;\n }\n\n answer = false;\n\n if (fire(element, 'confirm')) {\n try {\n answer = confirm(message);\n } catch (error) {}\n\n callback = fire(element, 'confirm:complete', [answer]);\n }\n\n return answer && callback;\n };\n }).call(this);\n (function () {\n var disableFormElement, disableFormElements, disableLinkElement, enableFormElement, enableFormElements, enableLinkElement, formElements, getData, matches, setData, stopEverything;\n matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, stopEverything = Rails.stopEverything, formElements = Rails.formElements;\n\n Rails.handleDisabledElement = function (e) {\n var element;\n element = this;\n\n if (element.disabled) {\n return stopEverything(e);\n }\n };\n\n Rails.enableElement = function (e) {\n var element;\n element = e instanceof Event ? e.target : e;\n\n if (matches(element, Rails.linkDisableSelector)) {\n return enableLinkElement(element);\n } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formEnableSelector)) {\n return enableFormElement(element);\n } else if (matches(element, Rails.formSubmitSelector)) {\n return enableFormElements(element);\n }\n };\n\n Rails.disableElement = function (e) {\n var element;\n element = e instanceof Event ? e.target : e;\n\n if (matches(element, Rails.linkDisableSelector)) {\n return disableLinkElement(element);\n } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formDisableSelector)) {\n return disableFormElement(element);\n } else if (matches(element, Rails.formSubmitSelector)) {\n return disableFormElements(element);\n }\n };\n\n disableLinkElement = function disableLinkElement(element) {\n var replacement;\n replacement = element.getAttribute('data-disable-with');\n\n if (replacement != null) {\n setData(element, 'ujs:enable-with', element.innerHTML);\n element.innerHTML = replacement;\n }\n\n element.addEventListener('click', stopEverything);\n return setData(element, 'ujs:disabled', true);\n };\n\n enableLinkElement = function enableLinkElement(element) {\n var originalText;\n originalText = getData(element, 'ujs:enable-with');\n\n if (originalText != null) {\n element.innerHTML = originalText;\n setData(element, 'ujs:enable-with', null);\n }\n\n element.removeEventListener('click', stopEverything);\n return setData(element, 'ujs:disabled', null);\n };\n\n disableFormElements = function disableFormElements(form) {\n return formElements(form, Rails.formDisableSelector).forEach(disableFormElement);\n };\n\n disableFormElement = function disableFormElement(element) {\n var replacement;\n replacement = element.getAttribute('data-disable-with');\n\n if (replacement != null) {\n if (matches(element, 'button')) {\n setData(element, 'ujs:enable-with', element.innerHTML);\n element.innerHTML = replacement;\n } else {\n setData(element, 'ujs:enable-with', element.value);\n element.value = replacement;\n }\n }\n\n element.disabled = true;\n return setData(element, 'ujs:disabled', true);\n };\n\n enableFormElements = function enableFormElements(form) {\n return formElements(form, Rails.formEnableSelector).forEach(enableFormElement);\n };\n\n enableFormElement = function enableFormElement(element) {\n var originalText;\n originalText = getData(element, 'ujs:enable-with');\n\n if (originalText != null) {\n if (matches(element, 'button')) {\n element.innerHTML = originalText;\n } else {\n element.value = originalText;\n }\n\n setData(element, 'ujs:enable-with', null);\n }\n\n element.disabled = false;\n return setData(element, 'ujs:disabled', null);\n };\n }).call(this);\n (function () {\n var stopEverything;\n stopEverything = Rails.stopEverything;\n\n Rails.handleMethod = function (e) {\n var csrfParam, csrfToken, form, formContent, href, link, method;\n link = this;\n method = link.getAttribute('data-method');\n\n if (!method) {\n return;\n }\n\n href = Rails.href(link);\n csrfToken = Rails.csrfToken();\n csrfParam = Rails.csrfParam();\n form = document.createElement('form');\n formContent = \"\";\n\n if (csrfParam != null && csrfToken != null && !Rails.isCrossDomain(href)) {\n formContent += \"\";\n }\n\n formContent += '';\n form.method = 'post';\n form.action = href;\n form.target = link.target;\n form.innerHTML = formContent;\n form.style.display = 'none';\n document.body.appendChild(form);\n form.querySelector('[type=\"submit\"]').click();\n return stopEverything(e);\n };\n }).call(this);\n (function () {\n var ajax,\n fire,\n getData,\n isCrossDomain,\n isRemote,\n matches,\n serializeElement,\n setData,\n stopEverything,\n slice = [].slice;\n matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, fire = Rails.fire, stopEverything = Rails.stopEverything, ajax = Rails.ajax, isCrossDomain = Rails.isCrossDomain, serializeElement = Rails.serializeElement;\n\n isRemote = function isRemote(element) {\n var value;\n value = element.getAttribute('data-remote');\n return value != null && value !== 'false';\n };\n\n Rails.handleRemote = function (e) {\n var button, data, dataType, element, method, url, withCredentials;\n element = this;\n\n if (!isRemote(element)) {\n return true;\n }\n\n if (!fire(element, 'ajax:before')) {\n fire(element, 'ajax:stopped');\n return false;\n }\n\n withCredentials = element.getAttribute('data-with-credentials');\n dataType = element.getAttribute('data-type') || 'script';\n\n if (matches(element, Rails.formSubmitSelector)) {\n button = getData(element, 'ujs:submit-button');\n method = getData(element, 'ujs:submit-button-formmethod') || element.method;\n url = getData(element, 'ujs:submit-button-formaction') || element.getAttribute('action') || location.href;\n\n if (method.toUpperCase() === 'GET') {\n url = url.replace(/\\?.*$/, '');\n }\n\n if (element.enctype === 'multipart/form-data') {\n data = new FormData(element);\n\n if (button != null) {\n data.append(button.name, button.value);\n }\n } else {\n data = serializeElement(element, button);\n }\n\n setData(element, 'ujs:submit-button', null);\n setData(element, 'ujs:submit-button-formmethod', null);\n setData(element, 'ujs:submit-button-formaction', null);\n } else if (matches(element, Rails.buttonClickSelector) || matches(element, Rails.inputChangeSelector)) {\n method = element.getAttribute('data-method');\n url = element.getAttribute('data-url');\n data = serializeElement(element, element.getAttribute('data-params'));\n } else {\n method = element.getAttribute('data-method');\n url = Rails.href(element);\n data = element.getAttribute('data-params');\n }\n\n ajax({\n type: method || 'GET',\n url: url,\n data: data,\n dataType: dataType,\n beforeSend: function beforeSend(xhr, options) {\n if (fire(element, 'ajax:beforeSend', [xhr, options])) {\n return fire(element, 'ajax:send', [xhr]);\n } else {\n fire(element, 'ajax:stopped');\n return false;\n }\n },\n success: function success() {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:success', args);\n },\n error: function error() {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:error', args);\n },\n complete: function complete() {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:complete', args);\n },\n crossDomain: isCrossDomain(url),\n withCredentials: withCredentials != null && withCredentials !== 'false'\n });\n return stopEverything(e);\n };\n\n Rails.formSubmitButtonClick = function (e) {\n var button, form;\n button = this;\n form = button.form;\n\n if (!form) {\n return;\n }\n\n if (button.name) {\n setData(form, 'ujs:submit-button', {\n name: button.name,\n value: button.value\n });\n }\n\n setData(form, 'ujs:formnovalidate-button', button.formNoValidate);\n setData(form, 'ujs:submit-button-formaction', button.getAttribute('formaction'));\n return setData(form, 'ujs:submit-button-formmethod', button.getAttribute('formmethod'));\n };\n\n Rails.preventInsignificantClick = function (e) {\n var data, insignificantMetaClick, link, metaClick, method, nonPrimaryMouseClick;\n link = this;\n method = (link.getAttribute('data-method') || 'GET').toUpperCase();\n data = link.getAttribute('data-params');\n metaClick = e.metaKey || e.ctrlKey;\n insignificantMetaClick = metaClick && method === 'GET' && !data;\n nonPrimaryMouseClick = e.button != null && e.button !== 0;\n\n if (nonPrimaryMouseClick || insignificantMetaClick) {\n return e.stopImmediatePropagation();\n }\n };\n }).call(this);\n (function () {\n var $, CSRFProtection, delegate, disableElement, enableElement, fire, formSubmitButtonClick, getData, handleConfirm, handleDisabledElement, handleMethod, handleRemote, loadCSPNonce, preventInsignificantClick, refreshCSRFTokens;\n fire = Rails.fire, delegate = Rails.delegate, getData = Rails.getData, $ = Rails.$, refreshCSRFTokens = Rails.refreshCSRFTokens, CSRFProtection = Rails.CSRFProtection, loadCSPNonce = Rails.loadCSPNonce, enableElement = Rails.enableElement, disableElement = Rails.disableElement, handleDisabledElement = Rails.handleDisabledElement, handleConfirm = Rails.handleConfirm, preventInsignificantClick = Rails.preventInsignificantClick, handleRemote = Rails.handleRemote, formSubmitButtonClick = Rails.formSubmitButtonClick, handleMethod = Rails.handleMethod;\n\n if (typeof jQuery !== \"undefined\" && jQuery !== null && jQuery.ajax != null) {\n if (jQuery.rails) {\n throw new Error('If you load both jquery_ujs and rails-ujs, use rails-ujs only.');\n }\n\n jQuery.rails = Rails;\n jQuery.ajaxPrefilter(function (options, originalOptions, xhr) {\n if (!options.crossDomain) {\n return CSRFProtection(xhr);\n }\n });\n }\n\n Rails.start = function () {\n if (window._rails_loaded) {\n throw new Error('rails-ujs has already been loaded!');\n }\n\n window.addEventListener('pageshow', function () {\n $(Rails.formEnableSelector).forEach(function (el) {\n if (getData(el, 'ujs:disabled')) {\n return enableElement(el);\n }\n });\n return $(Rails.linkDisableSelector).forEach(function (el) {\n if (getData(el, 'ujs:disabled')) {\n return enableElement(el);\n }\n });\n });\n delegate(document, Rails.linkDisableSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.linkDisableSelector, 'ajax:stopped', enableElement);\n delegate(document, Rails.buttonDisableSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.buttonDisableSelector, 'ajax:stopped', enableElement);\n delegate(document, Rails.linkClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.linkClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.linkClickSelector, 'click', handleConfirm);\n delegate(document, Rails.linkClickSelector, 'click', disableElement);\n delegate(document, Rails.linkClickSelector, 'click', handleRemote);\n delegate(document, Rails.linkClickSelector, 'click', handleMethod);\n delegate(document, Rails.buttonClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.buttonClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.buttonClickSelector, 'click', handleConfirm);\n delegate(document, Rails.buttonClickSelector, 'click', disableElement);\n delegate(document, Rails.buttonClickSelector, 'click', handleRemote);\n delegate(document, Rails.inputChangeSelector, 'change', handleDisabledElement);\n delegate(document, Rails.inputChangeSelector, 'change', handleConfirm);\n delegate(document, Rails.inputChangeSelector, 'change', handleRemote);\n delegate(document, Rails.formSubmitSelector, 'submit', handleDisabledElement);\n delegate(document, Rails.formSubmitSelector, 'submit', handleConfirm);\n delegate(document, Rails.formSubmitSelector, 'submit', handleRemote);\n delegate(document, Rails.formSubmitSelector, 'submit', function (e) {\n return setTimeout(function () {\n return disableElement(e);\n }, 13);\n });\n delegate(document, Rails.formSubmitSelector, 'ajax:send', disableElement);\n delegate(document, Rails.formSubmitSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.formInputClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.formInputClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.formInputClickSelector, 'click', handleConfirm);\n delegate(document, Rails.formInputClickSelector, 'click', formSubmitButtonClick);\n document.addEventListener('DOMContentLoaded', refreshCSRFTokens);\n document.addEventListener('DOMContentLoaded', loadCSPNonce);\n return window._rails_loaded = true;\n };\n\n if (window.Rails === Rails && fire(document, 'rails:attachBindings')) {\n Rails.start();\n }\n }).call(this);\n }).call(this);\n\n if ((typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) === \"object\" && module.exports) {\n module.exports = Rails;\n } else if (typeof define === \"function\" && define.amd) {\n define(Rails);\n }\n}).call(this);",";(function(window){var hadGlobal='Modernizr' in window;var oldGlobal=window.Modernizr;/*!\n * modernizr v3.11.4\n * Build https://modernizr.com/download?-setclasses-dontmin\n *\n * Copyright (c)\n * Faruk Ates\n * Paul Irish\n * Alex Sexton\n * Ryan Seddon\n * Patrick Kettner\n * Stu Cox\n * Richard Herrera\n * Veeck\n\n * MIT License\n */\n\n/*\n * Modernizr tests which native CSS3 and HTML5 features are available in the\n * current UA and makes the results available to you in two ways: as properties on\n * a global `Modernizr` object, and as classes on the `` element. This\n * information allows you to progressively enhance your pages with a granular level\n * of control over the experience.\n*/\n\n;(function(scriptGlobalObject, window, document, undefined){\n\n var tests = [];\n \n\n /**\n * ModernizrProto is the constructor for Modernizr\n *\n * @class\n * @access public\n */\n var ModernizrProto = {\n _version: '3.11.4',\n\n // Any settings that don't work as separate modules\n // can go in here as configuration.\n _config: {\n 'classPrefix': '',\n 'enableClasses': true,\n 'enableJSClass': true,\n 'usePrefixes': true\n },\n\n // Queue of tests\n _q: [],\n\n // Stub these for people who are listening\n on: function(test, cb) {\n // I don't really think people should do this, but we can\n // safe guard it a bit.\n // -- NOTE:: this gets WAY overridden in src/addTest for actual async tests.\n // This is in case people listen to synchronous tests. I would leave it out,\n // but the code to *disallow* sync tests in the real version of this\n // function is actually larger than this.\n var self = this;\n setTimeout(function() {\n cb(self[test]);\n }, 0);\n },\n\n addTest: function(name, fn, options) {\n tests.push({name: name, fn: fn, options: options});\n },\n\n addAsyncTest: function(fn) {\n tests.push({name: null, fn: fn});\n }\n };\n\n \n\n // Fake some of Object.create so we can force non test results to be non \"own\" properties.\n var Modernizr = function() {};\n Modernizr.prototype = ModernizrProto;\n\n // Leak modernizr globally when you `require` it rather than force it here.\n // Overwrite name so constructor name is nicer :D\n Modernizr = new Modernizr();\n\n \n\n var classes = [];\n \n\n /**\n * is returns a boolean if the typeof an obj is exactly type.\n *\n * @access private\n * @function is\n * @param {*} obj - A thing we want to check the type of\n * @param {string} type - A string to compare the typeof against\n * @returns {boolean} true if the typeof the first parameter is exactly the specified type, false otherwise\n */\n function is(obj, type) {\n return typeof obj === type;\n }\n\n ;\n\n /**\n * Run through all tests and detect their support in the current UA.\n *\n * @access private\n * @returns {void}\n */\n function testRunner() {\n var featureNames;\n var feature;\n var aliasIdx;\n var result;\n var nameIdx;\n var featureName;\n var featureNameSplit;\n\n for (var featureIdx in tests) {\n if (tests.hasOwnProperty(featureIdx)) {\n featureNames = [];\n feature = tests[featureIdx];\n // run the test, throw the return value into the Modernizr,\n // then based on that boolean, define an appropriate className\n // and push it into an array of classes we'll join later.\n //\n // If there is no name, it's an 'async' test that is run,\n // but not directly added to the object. That should\n // be done with a post-run addTest call.\n if (feature.name) {\n featureNames.push(feature.name.toLowerCase());\n\n if (feature.options && feature.options.aliases && feature.options.aliases.length) {\n // Add all the aliases into the names list\n for (aliasIdx = 0; aliasIdx < feature.options.aliases.length; aliasIdx++) {\n featureNames.push(feature.options.aliases[aliasIdx].toLowerCase());\n }\n }\n }\n\n // Run the test, or use the raw value if it's not a function\n result = is(feature.fn, 'function') ? feature.fn() : feature.fn;\n\n // Set each of the names on the Modernizr object\n for (nameIdx = 0; nameIdx < featureNames.length; nameIdx++) {\n featureName = featureNames[nameIdx];\n // Support dot properties as sub tests. We don't do checking to make sure\n // that the implied parent tests have been added. You must call them in\n // order (either in the test, or make the parent test a dependency).\n //\n // Cap it to TWO to make the logic simple and because who needs that kind of subtesting\n // hashtag famous last words\n featureNameSplit = featureName.split('.');\n\n if (featureNameSplit.length === 1) {\n Modernizr[featureNameSplit[0]] = result;\n } else {\n // cast to a Boolean, if not one already or if it doesnt exist yet (like inputtypes)\n if (!Modernizr[featureNameSplit[0]] || Modernizr[featureNameSplit[0]] && !(Modernizr[featureNameSplit[0]] instanceof Boolean)) {\n Modernizr[featureNameSplit[0]] = new Boolean(Modernizr[featureNameSplit[0]]);\n }\n\n Modernizr[featureNameSplit[0]][featureNameSplit[1]] = result;\n }\n\n classes.push((result ? '' : 'no-') + featureNameSplit.join('-'));\n }\n }\n }\n }\n ;\n\n /**\n * docElement is a convenience wrapper to grab the root element of the document\n *\n * @access private\n * @returns {HTMLElement|SVGElement} The root element of the document\n */\n var docElement = document.documentElement;\n \n\n /**\n * A convenience helper to check if the document we are running in is an SVG document\n *\n * @access private\n * @returns {boolean}\n */\n var isSVG = docElement.nodeName.toLowerCase() === 'svg';\n\n \n\n /**\n * setClasses takes an array of class names and adds them to the root element\n *\n * @access private\n * @function setClasses\n * @param {string[]} classes - Array of class names\n */\n // Pass in an and array of class names, e.g.:\n // ['no-webp', 'borderradius', ...]\n function setClasses(classes) {\n var className = docElement.className;\n var classPrefix = Modernizr._config.classPrefix || '';\n\n if (isSVG) {\n className = className.baseVal;\n }\n\n // Change `no-js` to `js` (independently of the `enableClasses` option)\n // Handle classPrefix on this too\n if (Modernizr._config.enableJSClass) {\n var reJS = new RegExp('(^|\\\\s)' + classPrefix + 'no-js(\\\\s|$)');\n className = className.replace(reJS, '$1' + classPrefix + 'js$2');\n }\n\n if (Modernizr._config.enableClasses) {\n // Add the new classes\n if (classes.length > 0) {\n className += ' ' + classPrefix + classes.join(' ' + classPrefix);\n }\n if (isSVG) {\n docElement.className.baseVal = className;\n } else {\n docElement.className = className;\n }\n }\n }\n\n ;\n\n // Run each test\n testRunner();\n\n // Remove the \"no-js\" class if it exists\n setClasses(classes);\n\n delete ModernizrProto.addTest;\n delete ModernizrProto.addAsyncTest;\n\n // Run the things that are supposed to run after the tests\n for (var i = 0; i < Modernizr._q.length; i++) {\n Modernizr._q[i]();\n }\n\n // Leak Modernizr namespace\n scriptGlobalObject.Modernizr = Modernizr;\n\n\n;\n\n})(window, window, document);\nmodule.exports=window.Modernizr;if(hadGlobal){window.Modernizr=oldGlobal;}else{delete window.Modernizr;}})(window);","module.exports = __webpack_public_path__ + \"media/images/application/template/arrow-down-aab8d3b1057bdb112486a782012d6cd0.png\";","module.exports = __webpack_public_path__ + \"media/images/application/template/arrow-left-58e974c1f2dc34f0fd265de53b776843.png\";","module.exports = __webpack_public_path__ + \"media/images/application/template/arrow-right-129c65aba9c6957826f874459f0eec34.png\";","module.exports = __webpack_public_path__ + \"media/images/application/template/arrow-up-f9d40b3d21f967fe61ec71639a158435.png\";","module.exports = __webpack_public_path__ + \"media/images/application/template/download-5080d74322b95ebf58828c67f50152b0.png\";","module.exports = __webpack_public_path__ + \"media/images/application/template/select-arrow-down-15db2f7f388c0b045c506696ecf05fb8.png\";","module.exports = __webpack_public_path__ + \"media/images/application/template/tick-c4ff8a7f211d29c6c809e038131d020c.png\";","module.exports = function (module) {\n if (!module.webpackPolyfill) {\n module.deprecate = function () {};\n\n module.paths = []; // module.parent = undefined by default\n\n if (!module.children) module.children = [];\n Object.defineProperty(module, \"loaded\", {\n enumerable: true,\n get: function get() {\n return module.l;\n }\n });\n Object.defineProperty(module, \"id\", {\n enumerable: true,\n get: function get() {\n return module.i;\n }\n });\n module.webpackPolyfill = 1;\n }\n\n return module;\n};","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n(function (window, factory) {\n var lazySizes = factory(window, window.document, Date);\n window.lazySizes = lazySizes;\n\n if ((typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) == 'object' && module.exports) {\n module.exports = lazySizes;\n }\n})(typeof window != 'undefined' ? window : {}, function l(window, document, Date) {\n // Pass in the windoe Date function also for SSR because the Date class can be lost\n 'use strict';\n /*jshint eqnull:true */\n\n var lazysizes, lazySizesCfg;\n\n (function () {\n var prop;\n var lazySizesDefaults = {\n lazyClass: 'lazyload',\n loadedClass: 'lazyloaded',\n loadingClass: 'lazyloading',\n preloadClass: 'lazypreload',\n errorClass: 'lazyerror',\n //strictClass: 'lazystrict',\n autosizesClass: 'lazyautosizes',\n srcAttr: 'data-src',\n srcsetAttr: 'data-srcset',\n sizesAttr: 'data-sizes',\n //preloadAfterLoad: false,\n minSize: 40,\n customMedia: {},\n init: true,\n expFactor: 1.5,\n hFac: 0.8,\n loadMode: 2,\n loadHidden: true,\n ricTimeout: 0,\n throttleDelay: 125\n };\n lazySizesCfg = window.lazySizesConfig || window.lazysizesConfig || {};\n\n for (prop in lazySizesDefaults) {\n if (!(prop in lazySizesCfg)) {\n lazySizesCfg[prop] = lazySizesDefaults[prop];\n }\n }\n })();\n\n if (!document || !document.getElementsByClassName) {\n return {\n init: function init() {},\n cfg: lazySizesCfg,\n noSupport: true\n };\n }\n\n var docElem = document.documentElement;\n var supportPicture = window.HTMLPictureElement;\n var _addEventListener = 'addEventListener';\n var _getAttribute = 'getAttribute';\n /**\n * Update to bind to window because 'this' becomes null during SSR\n * builds.\n */\n\n var addEventListener = window[_addEventListener].bind(window);\n\n var setTimeout = window.setTimeout;\n var requestAnimationFrame = window.requestAnimationFrame || setTimeout;\n var requestIdleCallback = window.requestIdleCallback;\n var regPicture = /^picture$/i;\n var loadEvents = ['load', 'error', 'lazyincluded', '_lazyloaded'];\n var regClassCache = {};\n var forEach = Array.prototype.forEach;\n\n var hasClass = function hasClass(ele, cls) {\n if (!regClassCache[cls]) {\n regClassCache[cls] = new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)');\n }\n\n return regClassCache[cls].test(ele[_getAttribute]('class') || '') && regClassCache[cls];\n };\n\n var addClass = function addClass(ele, cls) {\n if (!hasClass(ele, cls)) {\n ele.setAttribute('class', (ele[_getAttribute]('class') || '').trim() + ' ' + cls);\n }\n };\n\n var removeClass = function removeClass(ele, cls) {\n var reg;\n\n if (reg = hasClass(ele, cls)) {\n ele.setAttribute('class', (ele[_getAttribute]('class') || '').replace(reg, ' '));\n }\n };\n\n var addRemoveLoadEvents = function addRemoveLoadEvents(dom, fn, add) {\n var action = add ? _addEventListener : 'removeEventListener';\n\n if (add) {\n addRemoveLoadEvents(dom, fn);\n }\n\n loadEvents.forEach(function (evt) {\n dom[action](evt, fn);\n });\n };\n\n var triggerEvent = function triggerEvent(elem, name, detail, noBubbles, noCancelable) {\n var event = document.createEvent('Event');\n\n if (!detail) {\n detail = {};\n }\n\n detail.instance = lazysizes;\n event.initEvent(name, !noBubbles, !noCancelable);\n event.detail = detail;\n elem.dispatchEvent(event);\n return event;\n };\n\n var updatePolyfill = function updatePolyfill(el, full) {\n var polyfill;\n\n if (!supportPicture && (polyfill = window.picturefill || lazySizesCfg.pf)) {\n if (full && full.src && !el[_getAttribute]('srcset')) {\n el.setAttribute('srcset', full.src);\n }\n\n polyfill({\n reevaluate: true,\n elements: [el]\n });\n } else if (full && full.src) {\n el.src = full.src;\n }\n };\n\n var getCSS = function getCSS(elem, style) {\n return (getComputedStyle(elem, null) || {})[style];\n };\n\n var getWidth = function getWidth(elem, parent, width) {\n width = width || elem.offsetWidth;\n\n while (width < lazySizesCfg.minSize && parent && !elem._lazysizesWidth) {\n width = parent.offsetWidth;\n parent = parent.parentNode;\n }\n\n return width;\n };\n\n var rAF = function () {\n var running, waiting;\n var firstFns = [];\n var secondFns = [];\n var fns = firstFns;\n\n var run = function run() {\n var runFns = fns;\n fns = firstFns.length ? secondFns : firstFns;\n running = true;\n waiting = false;\n\n while (runFns.length) {\n runFns.shift()();\n }\n\n running = false;\n };\n\n var rafBatch = function rafBatch(fn, queue) {\n if (running && !queue) {\n fn.apply(this, arguments);\n } else {\n fns.push(fn);\n\n if (!waiting) {\n waiting = true;\n (document.hidden ? setTimeout : requestAnimationFrame)(run);\n }\n }\n };\n\n rafBatch._lsFlush = run;\n return rafBatch;\n }();\n\n var rAFIt = function rAFIt(fn, simple) {\n return simple ? function () {\n rAF(fn);\n } : function () {\n var that = this;\n var args = arguments;\n rAF(function () {\n fn.apply(that, args);\n });\n };\n };\n\n var throttle = function throttle(fn) {\n var running;\n var lastTime = 0;\n var gDelay = lazySizesCfg.throttleDelay;\n var rICTimeout = lazySizesCfg.ricTimeout;\n\n var run = function run() {\n running = false;\n lastTime = Date.now();\n fn();\n };\n\n var idleCallback = requestIdleCallback && rICTimeout > 49 ? function () {\n requestIdleCallback(run, {\n timeout: rICTimeout\n });\n\n if (rICTimeout !== lazySizesCfg.ricTimeout) {\n rICTimeout = lazySizesCfg.ricTimeout;\n }\n } : rAFIt(function () {\n setTimeout(run);\n }, true);\n return function (isPriority) {\n var delay;\n\n if (isPriority = isPriority === true) {\n rICTimeout = 33;\n }\n\n if (running) {\n return;\n }\n\n running = true;\n delay = gDelay - (Date.now() - lastTime);\n\n if (delay < 0) {\n delay = 0;\n }\n\n if (isPriority || delay < 9) {\n idleCallback();\n } else {\n setTimeout(idleCallback, delay);\n }\n };\n }; //based on http://modernjavascript.blogspot.de/2013/08/building-better-debounce.html\n\n\n var debounce = function debounce(func) {\n var timeout, timestamp;\n var wait = 99;\n\n var run = function run() {\n timeout = null;\n func();\n };\n\n var later = function later() {\n var last = Date.now() - timestamp;\n\n if (last < wait) {\n setTimeout(later, wait - last);\n } else {\n (requestIdleCallback || run)(run);\n }\n };\n\n return function () {\n timestamp = Date.now();\n\n if (!timeout) {\n timeout = setTimeout(later, wait);\n }\n };\n };\n\n var loader = function () {\n var preloadElems, isCompleted, resetPreloadingTimer, loadMode, started;\n var eLvW, elvH, eLtop, eLleft, eLright, eLbottom, isBodyHidden;\n var regImg = /^img$/i;\n var regIframe = /^iframe$/i;\n var supportScroll = 'onscroll' in window && !/(gle|ing)bot/.test(navigator.userAgent);\n var shrinkExpand = 0;\n var currentExpand = 0;\n var isLoading = 0;\n var lowRuns = -1;\n\n var resetPreloading = function resetPreloading(e) {\n isLoading--;\n\n if (!e || isLoading < 0 || !e.target) {\n isLoading = 0;\n }\n };\n\n var isVisible = function isVisible(elem) {\n if (isBodyHidden == null) {\n isBodyHidden = getCSS(document.body, 'visibility') == 'hidden';\n }\n\n return isBodyHidden || !(getCSS(elem.parentNode, 'visibility') == 'hidden' && getCSS(elem, 'visibility') == 'hidden');\n };\n\n var isNestedVisible = function isNestedVisible(elem, elemExpand) {\n var outerRect;\n var parent = elem;\n var visible = isVisible(elem);\n eLtop -= elemExpand;\n eLbottom += elemExpand;\n eLleft -= elemExpand;\n eLright += elemExpand;\n\n while (visible && (parent = parent.offsetParent) && parent != document.body && parent != docElem) {\n visible = (getCSS(parent, 'opacity') || 1) > 0;\n\n if (visible && getCSS(parent, 'overflow') != 'visible') {\n outerRect = parent.getBoundingClientRect();\n visible = eLright > outerRect.left && eLleft < outerRect.right && eLbottom > outerRect.top - 1 && eLtop < outerRect.bottom + 1;\n }\n }\n\n return visible;\n };\n\n var checkElements = function checkElements() {\n var eLlen, i, rect, autoLoadElem, loadedSomething, elemExpand, elemNegativeExpand, elemExpandVal, beforeExpandVal, defaultExpand, preloadExpand, hFac;\n var lazyloadElems = lazysizes.elements;\n\n if ((loadMode = lazySizesCfg.loadMode) && isLoading < 8 && (eLlen = lazyloadElems.length)) {\n i = 0;\n lowRuns++;\n\n for (; i < eLlen; i++) {\n if (!lazyloadElems[i] || lazyloadElems[i]._lazyRace) {\n continue;\n }\n\n if (!supportScroll || lazysizes.prematureUnveil && lazysizes.prematureUnveil(lazyloadElems[i])) {\n unveilElement(lazyloadElems[i]);\n continue;\n }\n\n if (!(elemExpandVal = lazyloadElems[i][_getAttribute]('data-expand')) || !(elemExpand = elemExpandVal * 1)) {\n elemExpand = currentExpand;\n }\n\n if (!defaultExpand) {\n defaultExpand = !lazySizesCfg.expand || lazySizesCfg.expand < 1 ? docElem.clientHeight > 500 && docElem.clientWidth > 500 ? 500 : 370 : lazySizesCfg.expand;\n lazysizes._defEx = defaultExpand;\n preloadExpand = defaultExpand * lazySizesCfg.expFactor;\n hFac = lazySizesCfg.hFac;\n isBodyHidden = null;\n\n if (currentExpand < preloadExpand && isLoading < 1 && lowRuns > 2 && loadMode > 2 && !document.hidden) {\n currentExpand = preloadExpand;\n lowRuns = 0;\n } else if (loadMode > 1 && lowRuns > 1 && isLoading < 6) {\n currentExpand = defaultExpand;\n } else {\n currentExpand = shrinkExpand;\n }\n }\n\n if (beforeExpandVal !== elemExpand) {\n eLvW = innerWidth + elemExpand * hFac;\n elvH = innerHeight + elemExpand;\n elemNegativeExpand = elemExpand * -1;\n beforeExpandVal = elemExpand;\n }\n\n rect = lazyloadElems[i].getBoundingClientRect();\n\n if ((eLbottom = rect.bottom) >= elemNegativeExpand && (eLtop = rect.top) <= elvH && (eLright = rect.right) >= elemNegativeExpand * hFac && (eLleft = rect.left) <= eLvW && (eLbottom || eLright || eLleft || eLtop) && (lazySizesCfg.loadHidden || isVisible(lazyloadElems[i])) && (isCompleted && isLoading < 3 && !elemExpandVal && (loadMode < 3 || lowRuns < 4) || isNestedVisible(lazyloadElems[i], elemExpand))) {\n unveilElement(lazyloadElems[i]);\n loadedSomething = true;\n\n if (isLoading > 9) {\n break;\n }\n } else if (!loadedSomething && isCompleted && !autoLoadElem && isLoading < 4 && lowRuns < 4 && loadMode > 2 && (preloadElems[0] || lazySizesCfg.preloadAfterLoad) && (preloadElems[0] || !elemExpandVal && (eLbottom || eLright || eLleft || eLtop || lazyloadElems[i][_getAttribute](lazySizesCfg.sizesAttr) != 'auto'))) {\n autoLoadElem = preloadElems[0] || lazyloadElems[i];\n }\n }\n\n if (autoLoadElem && !loadedSomething) {\n unveilElement(autoLoadElem);\n }\n }\n };\n\n var throttledCheckElements = throttle(checkElements);\n\n var switchLoadingClass = function switchLoadingClass(e) {\n var elem = e.target;\n\n if (elem._lazyCache) {\n delete elem._lazyCache;\n return;\n }\n\n resetPreloading(e);\n addClass(elem, lazySizesCfg.loadedClass);\n removeClass(elem, lazySizesCfg.loadingClass);\n addRemoveLoadEvents(elem, rafSwitchLoadingClass);\n triggerEvent(elem, 'lazyloaded');\n };\n\n var rafedSwitchLoadingClass = rAFIt(switchLoadingClass);\n\n var rafSwitchLoadingClass = function rafSwitchLoadingClass(e) {\n rafedSwitchLoadingClass({\n target: e.target\n });\n };\n\n var changeIframeSrc = function changeIframeSrc(elem, src) {\n try {\n elem.contentWindow.location.replace(src);\n } catch (e) {\n elem.src = src;\n }\n };\n\n var handleSources = function handleSources(source) {\n var customMedia;\n\n var sourceSrcset = source[_getAttribute](lazySizesCfg.srcsetAttr);\n\n if (customMedia = lazySizesCfg.customMedia[source[_getAttribute]('data-media') || source[_getAttribute]('media')]) {\n source.setAttribute('media', customMedia);\n }\n\n if (sourceSrcset) {\n source.setAttribute('srcset', sourceSrcset);\n }\n };\n\n var lazyUnveil = rAFIt(function (elem, detail, isAuto, sizes, isImg) {\n var src, srcset, parent, isPicture, event, firesLoad;\n\n if (!(event = triggerEvent(elem, 'lazybeforeunveil', detail)).defaultPrevented) {\n if (sizes) {\n if (isAuto) {\n addClass(elem, lazySizesCfg.autosizesClass);\n } else {\n elem.setAttribute('sizes', sizes);\n }\n }\n\n srcset = elem[_getAttribute](lazySizesCfg.srcsetAttr);\n src = elem[_getAttribute](lazySizesCfg.srcAttr);\n\n if (isImg) {\n parent = elem.parentNode;\n isPicture = parent && regPicture.test(parent.nodeName || '');\n }\n\n firesLoad = detail.firesLoad || 'src' in elem && (srcset || src || isPicture);\n event = {\n target: elem\n };\n addClass(elem, lazySizesCfg.loadingClass);\n\n if (firesLoad) {\n clearTimeout(resetPreloadingTimer);\n resetPreloadingTimer = setTimeout(resetPreloading, 2500);\n addRemoveLoadEvents(elem, rafSwitchLoadingClass, true);\n }\n\n if (isPicture) {\n forEach.call(parent.getElementsByTagName('source'), handleSources);\n }\n\n if (srcset) {\n elem.setAttribute('srcset', srcset);\n } else if (src && !isPicture) {\n if (regIframe.test(elem.nodeName)) {\n changeIframeSrc(elem, src);\n } else {\n elem.src = src;\n }\n }\n\n if (isImg && (srcset || isPicture)) {\n updatePolyfill(elem, {\n src: src\n });\n }\n }\n\n if (elem._lazyRace) {\n delete elem._lazyRace;\n }\n\n removeClass(elem, lazySizesCfg.lazyClass);\n rAF(function () {\n // Part of this can be removed as soon as this fix is older: https://bugs.chromium.org/p/chromium/issues/detail?id=7731 (2015)\n var isLoaded = elem.complete && elem.naturalWidth > 1;\n\n if (!firesLoad || isLoaded) {\n if (isLoaded) {\n addClass(elem, 'ls-is-cached');\n }\n\n switchLoadingClass(event);\n elem._lazyCache = true;\n setTimeout(function () {\n if ('_lazyCache' in elem) {\n delete elem._lazyCache;\n }\n }, 9);\n }\n\n if (elem.loading == 'lazy') {\n isLoading--;\n }\n }, true);\n });\n\n var unveilElement = function unveilElement(elem) {\n if (elem._lazyRace) {\n return;\n }\n\n var detail;\n var isImg = regImg.test(elem.nodeName); //allow using sizes=\"auto\", but don't use. it's invalid. Use data-sizes=\"auto\" or a valid value for sizes instead (i.e.: sizes=\"80vw\")\n\n var sizes = isImg && (elem[_getAttribute](lazySizesCfg.sizesAttr) || elem[_getAttribute]('sizes'));\n\n var isAuto = sizes == 'auto';\n\n if ((isAuto || !isCompleted) && isImg && (elem[_getAttribute]('src') || elem.srcset) && !elem.complete && !hasClass(elem, lazySizesCfg.errorClass) && hasClass(elem, lazySizesCfg.lazyClass)) {\n return;\n }\n\n detail = triggerEvent(elem, 'lazyunveilread').detail;\n\n if (isAuto) {\n autoSizer.updateElem(elem, true, elem.offsetWidth);\n }\n\n elem._lazyRace = true;\n isLoading++;\n lazyUnveil(elem, detail, isAuto, sizes, isImg);\n };\n\n var afterScroll = debounce(function () {\n lazySizesCfg.loadMode = 3;\n throttledCheckElements();\n });\n\n var altLoadmodeScrollListner = function altLoadmodeScrollListner() {\n if (lazySizesCfg.loadMode == 3) {\n lazySizesCfg.loadMode = 2;\n }\n\n afterScroll();\n };\n\n var onload = function onload() {\n if (isCompleted) {\n return;\n }\n\n if (Date.now() - started < 999) {\n setTimeout(onload, 999);\n return;\n }\n\n isCompleted = true;\n lazySizesCfg.loadMode = 3;\n throttledCheckElements();\n addEventListener('scroll', altLoadmodeScrollListner, true);\n };\n\n return {\n _: function _() {\n started = Date.now();\n lazysizes.elements = document.getElementsByClassName(lazySizesCfg.lazyClass);\n preloadElems = document.getElementsByClassName(lazySizesCfg.lazyClass + ' ' + lazySizesCfg.preloadClass);\n addEventListener('scroll', throttledCheckElements, true);\n addEventListener('resize', throttledCheckElements, true);\n addEventListener('pageshow', function (e) {\n if (e.persisted) {\n var loadingElements = document.querySelectorAll('.' + lazySizesCfg.loadingClass);\n\n if (loadingElements.length && loadingElements.forEach) {\n requestAnimationFrame(function () {\n loadingElements.forEach(function (img) {\n if (img.complete) {\n unveilElement(img);\n }\n });\n });\n }\n }\n });\n\n if (window.MutationObserver) {\n new MutationObserver(throttledCheckElements).observe(docElem, {\n childList: true,\n subtree: true,\n attributes: true\n });\n } else {\n docElem[_addEventListener]('DOMNodeInserted', throttledCheckElements, true);\n\n docElem[_addEventListener]('DOMAttrModified', throttledCheckElements, true);\n\n setInterval(throttledCheckElements, 999);\n }\n\n addEventListener('hashchange', throttledCheckElements, true); //, 'fullscreenchange'\n\n ['focus', 'mouseover', 'click', 'load', 'transitionend', 'animationend'].forEach(function (name) {\n document[_addEventListener](name, throttledCheckElements, true);\n });\n\n if (/d$|^c/.test(document.readyState)) {\n onload();\n } else {\n addEventListener('load', onload);\n\n document[_addEventListener]('DOMContentLoaded', throttledCheckElements);\n\n setTimeout(onload, 20000);\n }\n\n if (lazysizes.elements.length) {\n checkElements();\n\n rAF._lsFlush();\n } else {\n throttledCheckElements();\n }\n },\n checkElems: throttledCheckElements,\n unveil: unveilElement,\n _aLSL: altLoadmodeScrollListner\n };\n }();\n\n var autoSizer = function () {\n var autosizesElems;\n var sizeElement = rAFIt(function (elem, parent, event, width) {\n var sources, i, len;\n elem._lazysizesWidth = width;\n width += 'px';\n elem.setAttribute('sizes', width);\n\n if (regPicture.test(parent.nodeName || '')) {\n sources = parent.getElementsByTagName('source');\n\n for (i = 0, len = sources.length; i < len; i++) {\n sources[i].setAttribute('sizes', width);\n }\n }\n\n if (!event.detail.dataAttr) {\n updatePolyfill(elem, event.detail);\n }\n });\n\n var getSizeElement = function getSizeElement(elem, dataAttr, width) {\n var event;\n var parent = elem.parentNode;\n\n if (parent) {\n width = getWidth(elem, parent, width);\n event = triggerEvent(elem, 'lazybeforesizes', {\n width: width,\n dataAttr: !!dataAttr\n });\n\n if (!event.defaultPrevented) {\n width = event.detail.width;\n\n if (width && width !== elem._lazysizesWidth) {\n sizeElement(elem, parent, event, width);\n }\n }\n }\n };\n\n var updateElementsSizes = function updateElementsSizes() {\n var i;\n var len = autosizesElems.length;\n\n if (len) {\n i = 0;\n\n for (; i < len; i++) {\n getSizeElement(autosizesElems[i]);\n }\n }\n };\n\n var debouncedUpdateElementsSizes = debounce(updateElementsSizes);\n return {\n _: function _() {\n autosizesElems = document.getElementsByClassName(lazySizesCfg.autosizesClass);\n addEventListener('resize', debouncedUpdateElementsSizes);\n },\n checkElems: debouncedUpdateElementsSizes,\n updateElem: getSizeElement\n };\n }();\n\n var init = function init() {\n if (!init.i && document.getElementsByClassName) {\n init.i = true;\n\n autoSizer._();\n\n loader._();\n }\n };\n\n setTimeout(function () {\n if (lazySizesCfg.init) {\n init();\n }\n });\n lazysizes = {\n cfg: lazySizesCfg,\n autoSizer: autoSizer,\n loader: loader,\n init: init,\n uP: updatePolyfill,\n aC: addClass,\n rC: removeClass,\n hC: hasClass,\n fire: triggerEvent,\n gW: getWidth,\n rAF: rAF\n };\n return lazysizes;\n});","module.exports = __webpack_public_path__ + \"media/images/application/favicon/logo-0c978872ce2b95ae34dd06d69df4c840.png\";","module.exports = __webpack_public_path__ + \"media/images/application/favicon/safari-pinned-tab-ce7343b6462a73d31b2ee8b35a4c8f6c.svg\";","module.exports = __webpack_public_path__ + \"media/images/application/placeholder/placeholder-16x9-4ab1f0ba235f5552d4266f5545bc347e.jpg\";","module.exports = __webpack_public_path__ + \"media/images/application/placeholder/placeholder-1x1-4f8ca69b1bc4e907390095c2da0274d2.jpg\";","module.exports = __webpack_public_path__ + \"media/images/application/placeholder/placeholder-1x1_5-5a48dee5698632aebd5dcbaeb0b3158b.jpg\";","module.exports = __webpack_public_path__ + \"media/images/application/placeholder/placeholder-2x1-59d36952eb28d76d126e242f731de7ab.jpg\";","// shim for using process in browser\nvar process = module.exports = {}; // cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\n\nfunction defaultClearTimeout() {\n throw new Error('clearTimeout has not been defined');\n}\n\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n})();\n\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n } // if setTimeout wasn't available but was latter defined\n\n\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch (e) {\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch (e) {\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n}\n\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n } // if clearTimeout wasn't available but was latter defined\n\n\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e) {\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e) {\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n}\n\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n\n draining = false;\n\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n var len = queue.length;\n\n while (len) {\n currentQueue = queue;\n queue = [];\n\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n\n queueIndex = -1;\n len = queue.length;\n }\n\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n\n queue.push(new Item(fun, args));\n\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n}; // v8 likes predictible objects\n\n\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\n\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\n\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\n\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) {\n return [];\n};\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () {\n return '/';\n};\n\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\n\nprocess.umask = function () {\n return 0;\n};","module.exports = __webpack_public_path__ + \"media/images/application/placeholder/placeholder-32x9-e852c21d1d444a71aa3a18549efb8dbf.jpg\";","module.exports = __webpack_public_path__ + \"media/images/application/placeholder/placeholder-3x2-1a47a2e1038a068a1cd2fd63cf8e3de2.jpg\";","module.exports = __webpack_public_path__ + \"media/images/application/placeholder/placeholder-3x4-70cbcfe32e7d49e3fc37eb2f05592e83.jpg\";","module.exports = __webpack_public_path__ + \"media/images/application/placeholder/placeholder-8x9-341c7aa039c5123acb173c07bc5ee325.jpg\";","module.exports = __webpack_public_path__ + \"media/images/application/schema/logo-d6479cc151a395a792eab172595fdc35.png\";","module.exports = __webpack_public_path__ + \"media/images/application/social_sharing/facebook-19ad77d66da88de5b894d7bcddcc8e1b.png\";","module.exports = __webpack_public_path__ + \"media/images/application/social_sharing/twitter-dc9ab86759a997f1c498fa97676bbca6.png\";","module.exports = __webpack_public_path__ + \"media/images/application/template/SAF-email-footer-2f996349985ccd057da0cf4ee50f44b7.png\";","module.exports = __webpack_public_path__ + \"media/images/application/template/SAF-email-header-dd4fc64ab9a0e86931d7bb9ed92eb8db.png\";","module.exports = __webpack_public_path__ + \"media/images/application/template/basket-8025a423eb1e7f9e3574202ebff928e6.svg\";","module.exports = __webpack_public_path__ + \"media/images/application/template/cta_bread_01-1de1920ffcf25809411030c33e39bf67.svg\";","module.exports = __webpack_public_path__ + \"media/images/application/template/cta_meat_01-c1f8693789fb83bee64960a077b8d108.svg\";","module.exports = __webpack_public_path__ + \"media/images/application/template/email-bc0075c0095c9e2f21fa2d339fb248d9.svg\";","module.exports = __webpack_public_path__ + \"media/images/application/template/icon--download-d6fc60093ff533502312a4a26972a875.svg\";","module.exports = __webpack_public_path__ + \"media/images/application/template/icon--link-external-267bf021bfe2590be55233f348aacfb4.svg\";","module.exports = __webpack_public_path__ + \"media/images/application/template/icon--map-marker_smaller-64b9f882838029a294871273a9aff9ff.svg\";","module.exports = __webpack_public_path__ + \"media/images/application/template/insta-77cd17fdb3585355c73f04038789854c.svg\";","module.exports = __webpack_public_path__ + \"media/images/application/template/logo-dc1b16bb257de83ada8a62c22106e66c.svg\";","module.exports = __webpack_public_path__ + \"media/images/application/template/logos/fdq-4a17c499cfb138a5daf829157ef3f3c4.png\";","module.exports = __webpack_public_path__ + \"media/images/application/template/logos/icsa-8fcfb1cfcb649097b480d642b77f0280.png\";","module.exports = __webpack_public_path__ + \"media/images/application/template/logos/miele-1a69e9e96ecdc8ed1919fa2a44594685.png\";","module.exports = __webpack_public_path__ + \"media/images/application/template/logos/nottstrent-753c1d4c1e37ac6d2ad039a3f16399ff.png\";","module.exports = __webpack_public_path__ + \"media/images/application/template/logos/placeholder-logo-square-7c95861197532d1c3693e9015de58426.png\";","module.exports = __webpack_public_path__ + \"media/images/application/template/logos/placeholder-logo-tall-83b4025a5ad05d39c556ab5b7e25a6b2.png\";","module.exports = __webpack_public_path__ + \"media/images/application/template/logos/placeholder-logo-wide-1b611dafe8f81b508b09c49c2d04c371.png\";","module.exports = __webpack_public_path__ + \"media/images/application/template/logos/visitengland-d1f59b637542a1f91ab1c9d9ce105fab.png\";","module.exports = __webpack_public_path__ + \"media/images/application/template/map-pin-d433ad397899cfed61bb7c6e06ec40a4.png\";","module.exports = __webpack_public_path__ + \"media/images/application/template/menu-e136da4d1747a82a65453150d63afed3.svg\";","module.exports = __webpack_public_path__ + \"media/images/application/template/placeholder-7b28effe2d0b78f871668ac14b5f25d1.png\";","module.exports = __webpack_public_path__ + \"media/images/application/template/quotemark-4926714170df0bae1e44085e75b7fcda.svg\";","module.exports = __webpack_public_path__ + \"media/images/application/template/search-a022de1d13f13066261315f4f86d92a8.svg\";","module.exports = __webpack_public_path__ + \"media/images/application/template/spacer-5575162f58ea4570e78d7430ba5dabc4.gif\";","module.exports = __webpack_public_path__ + \"media/images/application/template/stripe_logo-51fa3753c7ed4e38b387c75621fefa49.svg\";","try {\n\t// test for scope support\n\tdocument.querySelector(':scope *');\n} catch (error) {\n\t(function (ElementPrototype) {\n\t\t// scope regex\n\t\tvar scope = /:scope(?![\\w-])/gi;\n\n\t\t// polyfill Element#querySelector\n\t\tvar querySelectorWithScope = polyfill(ElementPrototype.querySelector);\n\n\t\tElementPrototype.querySelector = function querySelector(selectors) {\n\t\t\treturn querySelectorWithScope.apply(this, arguments);\n\t\t};\n\n\t\t// polyfill Element#querySelectorAll\n\t\tvar querySelectorAllWithScope = polyfill(ElementPrototype.querySelectorAll);\n\n\t\tElementPrototype.querySelectorAll = function querySelectorAll(selectors) {\n\t\t\treturn querySelectorAllWithScope.apply(this, arguments);\n\t\t};\n\n\t\t// polyfill Element#matches\n\t\tif (ElementPrototype.matches) {\n\t\t\tvar matchesWithScope = polyfill(ElementPrototype.matches);\n\n\t\t\tElementPrototype.matches = function matches(selectors) {\n\t\t\t\treturn matchesWithScope.apply(this, arguments);\n\t\t\t};\n\t\t}\n\n\t\t// polyfill Element#closest\n\t\tif (ElementPrototype.closest) {\n\t\t\tvar closestWithScope = polyfill(ElementPrototype.closest);\n\n\t\t\tElementPrototype.closest = function closest(selectors) {\n\t\t\t\treturn closestWithScope.apply(this, arguments);\n\t\t\t};\n\t\t}\n\n\t\tfunction polyfill(qsa) {\n\t\t\treturn function (selectors) {\n\t\t\t\t// whether the selectors contain :scope\n\t\t\t\tvar hasScope = selectors && scope.test(selectors);\n\n\t\t\t\tif (hasScope) {\n\t\t\t\t\t// fallback attribute\n\t\t\t\t\tvar attr = 'q' + Math.floor(Math.random() * 9000000) + 1000000;\n\n\t\t\t\t\t// replace :scope with the fallback attribute\n\t\t\t\t\targuments[0] = selectors.replace(scope, '[' + attr + ']');\n\n\t\t\t\t\t// add the fallback attribute\n\t\t\t\t\tthis.setAttribute(attr, '');\n\n\t\t\t\t\t// results of the qsa\n\t\t\t\t\tvar elementOrNodeList = qsa.apply(this, arguments);\n\n\t\t\t\t\t// remove the fallback attribute\n\t\t\t\t\tthis.removeAttribute(attr);\n\n\t\t\t\t\t// return the results of the qsa\n\t\t\t\t\treturn elementOrNodeList;\n\t\t\t\t} else {\n\t\t\t\t\t// return the results of the qsa\n\t\t\t\t\treturn qsa.apply(this, arguments);\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t})(Element.prototype);\n}\n","if (typeof NodeList !== 'undefined' && NodeList.prototype && !NodeList.prototype.forEach) {\n // Yes, there's really no need for `Object.defineProperty` here\n NodeList.prototype.forEach = Array.prototype.forEach;\n}\n","if (!Element.prototype.matches) {\n Element.prototype.matches =\n Element.prototype.msMatchesSelector ||\n Element.prototype.webkitMatchesSelector;\n}\n\nif (!Element.prototype.closest) {\n Element.prototype.closest = function(s) {\n var el = this;\n\n do {\n if (Element.prototype.matches.call(el, s)) return el;\n el = el.parentElement || el.parentNode;\n } while (el !== null && el.nodeType === 1);\n return null;\n };\n}\n","//https://github.com/stefanpenner/es6-promise#auto-polyfill\n!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):t.ES6Promise=e()}(this,function(){\"use strict\";function t(t){var e=typeof t;return null!==t&&(\"object\"===e||\"function\"===e)}function e(t){return\"function\"==typeof t}function n(t){W=t}function r(t){z=t}function o(){return function(){return process.nextTick(a)}}function i(){return\"undefined\"!=typeof U?function(){U(a)}:c()}function s(){var t=0,e=new H(a),n=document.createTextNode(\"\");return e.observe(n,{characterData:!0}),function(){n.data=t=++t%2}}function u(){var t=new MessageChannel;return t.port1.onmessage=a,function(){return t.port2.postMessage(0)}}function c(){var t=setTimeout;return function(){return t(a,1)}}function a(){for(var t=0;t currentVal\n *\n * findIndex method returns the index of the first element from an Array which satisified the condition else it returns -1.\n */\n\nArray.prototype.findIndex = function(callback, thisArg) {\n if(!callback || typeof callback !== 'function') throw TypeError();\n const size = this.length;\n const that = thisArg || this;\n for(var i = 0; i < size; i++) {\n try {\n if(!!callback.apply(that,[this[i], i, this])) {\n return i;\n }\n } catch(e) {\n return -1;\n }\n }\n return -1;\n}\n","// https://github.com/bkjain655/medium/blob/development/js/polyfills/array.find/index.js\n\n/**\n * Array Find method\n * Find method is used to find specific data from an Array.\n * e.x. : When we want to edit / view more details of the specific series from the List of Series\n *\n * Find method is an ES6 method which is supported in all the latest browsers, but if you still want to support in Legacy browsers like IE8 or IE9 or IE10\n * Then we can use polyfills library.\n *\n * Find takes a callback as an argument.\n * callback = (currentVal, index, arr) => currentVal\n *\n * Find method returns the first element from an Array which satisified the condition else it returns undefined.\n */\n\nArray.prototype.find = function(callback, thisArg) {\n if(!callback || typeof callback !== 'function') throw TypeError();\n const size = this.length;\n const that = thisArg || this;\n for(var i = 0; i < size; i++) {\n try {\n if(!!callback.apply(that,[this[i], i, this])) {\n return this[i];\n }\n } catch(e) {\n return undefined;\n }\n }\n return undefined;\n}\n","// https://vanillajstoolkit.com/polyfills/stringreplaceall/\n\n/**\n * String.prototype.replaceAll() polyfill\n * https://gomakethings.com/how-to-replace-a-section-of-a-string-with-another-one-with-vanilla-js/\n * @author Chris Ferdinandi\n * @license MIT\n */\nif (!String.prototype.replaceAll) {\n\tString.prototype.replaceAll = function(str, newStr){\n\n\t\t// If a regex pattern\n\t\tif (Object.prototype.toString.call(str).toLowerCase() === '[object regexp]') {\n\t\t\treturn this.replace(str, newStr);\n\t\t}\n\n\t\t// If a string\n\t\treturn this.replace(new RegExp(str, 'g'), newStr);\n\n\t};\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n(function (window, factory) {\n if (!window) {\n return;\n }\n\n var globalInstall = function globalInstall(initialEvent) {\n factory(window.lazySizes, initialEvent);\n window.removeEventListener('lazyunveilread', globalInstall, true);\n };\n\n factory = factory.bind(null, window, window.document);\n\n if ((typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) == 'object' && module.exports) {\n factory(require('lazysizes'));\n } else if (window.lazySizes) {\n globalInstall();\n } else {\n window.addEventListener('lazyunveilread', globalInstall, true);\n }\n})(typeof window != 'undefined' ? window : 0, function (window, document, lazySizes, initialEvent) {\n 'use strict';\n\n var cloneElementClass;\n var style = document.createElement('a').style;\n var fitSupport = ('objectFit' in style);\n var positionSupport = fitSupport && 'objectPosition' in style;\n var regCssFit = /object-fit[\"']*\\s*:\\s*[\"']*(contain|cover)/;\n var regCssPosition = /object-position[\"']*\\s*:\\s*[\"']*(.+?)(?=($|,|'|\"|;))/;\n var blankSrc = 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==';\n var regBgUrlEscape = /\\(|\\)|'/;\n var positionDefaults = {\n center: 'center',\n '50% 50%': 'center'\n };\n\n function getObject(element) {\n var css = getComputedStyle(element, null) || {};\n var content = css.fontFamily || '';\n var objectFit = content.match(regCssFit) || '';\n var objectPosition = objectFit && content.match(regCssPosition) || '';\n\n if (objectPosition) {\n objectPosition = objectPosition[1];\n }\n\n return {\n fit: objectFit && objectFit[1] || '',\n position: positionDefaults[objectPosition] || objectPosition || 'center'\n };\n }\n\n function generateStyleClass() {\n if (cloneElementClass) {\n return;\n }\n\n var styleElement = document.createElement('style');\n cloneElementClass = lazySizes.cfg.objectFitClass || 'lazysizes-display-clone';\n document.querySelector('head').appendChild(styleElement);\n }\n\n function removePrevClone(element) {\n var prev = element.previousElementSibling;\n\n if (prev && lazySizes.hC(prev, cloneElementClass)) {\n prev.parentNode.removeChild(prev);\n element.style.position = prev.getAttribute('data-position') || '';\n element.style.visibility = prev.getAttribute('data-visibility') || '';\n }\n }\n\n function initFix(element, config) {\n var switchClassesAdded, addedSrc, styleElement, styleElementStyle;\n var lazysizesCfg = lazySizes.cfg;\n\n var onChange = function onChange() {\n var src = element.currentSrc || element.src;\n\n if (src && addedSrc !== src) {\n addedSrc = src;\n styleElementStyle.backgroundImage = 'url(' + (regBgUrlEscape.test(src) ? JSON.stringify(src) : src) + ')';\n\n if (!switchClassesAdded) {\n switchClassesAdded = true;\n lazySizes.rC(styleElement, lazysizesCfg.loadingClass);\n lazySizes.aC(styleElement, lazysizesCfg.loadedClass);\n }\n }\n };\n\n var rafedOnChange = function rafedOnChange() {\n lazySizes.rAF(onChange);\n };\n\n element._lazysizesParentFit = config.fit;\n element.addEventListener('lazyloaded', rafedOnChange, true);\n element.addEventListener('load', rafedOnChange, true);\n lazySizes.rAF(function () {\n var hideElement = element;\n var container = element.parentNode;\n\n if (container.nodeName.toUpperCase() == 'PICTURE') {\n hideElement = container;\n container = container.parentNode;\n }\n\n removePrevClone(hideElement);\n\n if (!cloneElementClass) {\n generateStyleClass();\n }\n\n styleElement = element.cloneNode(false);\n styleElementStyle = styleElement.style;\n styleElement.addEventListener('load', function () {\n var curSrc = styleElement.currentSrc || styleElement.src;\n\n if (curSrc && curSrc != blankSrc) {\n styleElement.src = blankSrc;\n styleElement.srcset = '';\n }\n });\n lazySizes.rC(styleElement, lazysizesCfg.loadedClass);\n lazySizes.rC(styleElement, lazysizesCfg.lazyClass);\n lazySizes.rC(styleElement, lazysizesCfg.autosizesClass);\n lazySizes.aC(styleElement, lazysizesCfg.loadingClass);\n lazySizes.aC(styleElement, cloneElementClass);\n ['data-parent-fit', 'data-parent-container', 'data-object-fit-polyfilled', lazysizesCfg.srcsetAttr, lazysizesCfg.srcAttr].forEach(function (attr) {\n styleElement.removeAttribute(attr);\n });\n styleElement.src = blankSrc;\n styleElement.srcset = '';\n styleElementStyle.backgroundRepeat = 'no-repeat';\n styleElementStyle.backgroundPosition = config.position;\n styleElementStyle.backgroundSize = config.fit;\n styleElement.setAttribute('data-position', hideElement.style.position);\n styleElement.setAttribute('data-visibility', hideElement.style.visibility);\n hideElement.style.visibility = 'hidden';\n hideElement.style.position = 'absolute';\n element.setAttribute('data-parent-fit', config.fit);\n element.setAttribute('data-parent-container', 'prev');\n element.setAttribute('data-object-fit-polyfilled', '');\n element._objectFitPolyfilledDisplay = styleElement;\n container.insertBefore(styleElement, hideElement);\n\n if (element._lazysizesParentFit) {\n delete element._lazysizesParentFit;\n }\n\n if (element.complete) {\n onChange();\n }\n });\n }\n\n if (!fitSupport || !positionSupport) {\n var onRead = function onRead(e) {\n if (e.detail.instance != lazySizes) {\n return;\n }\n\n var element = e.target;\n var obj = getObject(element);\n\n if (obj.fit && (!fitSupport || obj.position != 'center')) {\n initFix(element, obj);\n return true;\n }\n\n return false;\n };\n\n window.addEventListener('lazybeforesizes', function (e) {\n if (e.detail.instance != lazySizes) {\n return;\n }\n\n var element = e.target;\n\n if (element.getAttribute('data-object-fit-polyfilled') != null && !element._objectFitPolyfilledDisplay) {\n if (!onRead(e)) {\n lazySizes.rAF(function () {\n element.removeAttribute('data-object-fit-polyfilled');\n });\n }\n }\n });\n window.addEventListener('lazyunveilread', onRead, true);\n\n if (initialEvent && initialEvent.detail) {\n onRead(initialEvent);\n }\n }\n});","var map = {\n\t\"./favicon/logo\": 304,\n\t\"./favicon/logo.png\": 304,\n\t\"./favicon/safari-pinned-tab\": 305,\n\t\"./favicon/safari-pinned-tab.svg\": 305,\n\t\"./placeholder/placeholder-16x9\": 306,\n\t\"./placeholder/placeholder-16x9.jpg\": 306,\n\t\"./placeholder/placeholder-1x1\": 307,\n\t\"./placeholder/placeholder-1x1.jpg\": 307,\n\t\"./placeholder/placeholder-1x1_5\": 308,\n\t\"./placeholder/placeholder-1x1_5.jpg\": 308,\n\t\"./placeholder/placeholder-2x1\": 309,\n\t\"./placeholder/placeholder-2x1.jpg\": 309,\n\t\"./placeholder/placeholder-32x9\": 310,\n\t\"./placeholder/placeholder-32x9.jpg\": 310,\n\t\"./placeholder/placeholder-3x2\": 311,\n\t\"./placeholder/placeholder-3x2.jpg\": 311,\n\t\"./placeholder/placeholder-3x4\": 312,\n\t\"./placeholder/placeholder-3x4.jpg\": 312,\n\t\"./placeholder/placeholder-8x9\": 313,\n\t\"./placeholder/placeholder-8x9.jpg\": 313,\n\t\"./schema/logo\": 314,\n\t\"./schema/logo.png\": 314,\n\t\"./social_sharing/facebook\": 315,\n\t\"./social_sharing/facebook.png\": 315,\n\t\"./social_sharing/twitter\": 316,\n\t\"./social_sharing/twitter.png\": 316,\n\t\"./template/SAF-email-footer\": 317,\n\t\"./template/SAF-email-footer.png\": 317,\n\t\"./template/SAF-email-header\": 318,\n\t\"./template/SAF-email-header.png\": 318,\n\t\"./template/arrow-down\": 183,\n\t\"./template/arrow-down.png\": 183,\n\t\"./template/arrow-down.svg\": 448,\n\t\"./template/arrow-left\": 184,\n\t\"./template/arrow-left.png\": 184,\n\t\"./template/arrow-left.svg\": 449,\n\t\"./template/arrow-right\": 185,\n\t\"./template/arrow-right.png\": 185,\n\t\"./template/arrow-right.svg\": 450,\n\t\"./template/arrow-up\": 186,\n\t\"./template/arrow-up.png\": 186,\n\t\"./template/arrow-up.svg\": 451,\n\t\"./template/basket\": 319,\n\t\"./template/basket.svg\": 319,\n\t\"./template/cta_bread_01\": 320,\n\t\"./template/cta_bread_01.svg\": 320,\n\t\"./template/cta_meat_01\": 321,\n\t\"./template/cta_meat_01.svg\": 321,\n\t\"./template/download\": 187,\n\t\"./template/download.png\": 187,\n\t\"./template/download.svg\": 452,\n\t\"./template/email\": 322,\n\t\"./template/email.svg\": 322,\n\t\"./template/icon--download\": 323,\n\t\"./template/icon--download.svg\": 323,\n\t\"./template/icon--link-external\": 324,\n\t\"./template/icon--link-external.svg\": 324,\n\t\"./template/icon--map-marker_smaller\": 325,\n\t\"./template/icon--map-marker_smaller.svg\": 325,\n\t\"./template/insta\": 326,\n\t\"./template/insta.svg\": 326,\n\t\"./template/logo\": 327,\n\t\"./template/logo.svg\": 327,\n\t\"./template/logos/fdq\": 328,\n\t\"./template/logos/fdq.png\": 328,\n\t\"./template/logos/icsa\": 329,\n\t\"./template/logos/icsa.png\": 329,\n\t\"./template/logos/miele\": 330,\n\t\"./template/logos/miele.png\": 330,\n\t\"./template/logos/nottstrent\": 331,\n\t\"./template/logos/nottstrent.png\": 331,\n\t\"./template/logos/placeholder-logo-square\": 332,\n\t\"./template/logos/placeholder-logo-square.png\": 332,\n\t\"./template/logos/placeholder-logo-tall\": 333,\n\t\"./template/logos/placeholder-logo-tall.png\": 333,\n\t\"./template/logos/placeholder-logo-wide\": 334,\n\t\"./template/logos/placeholder-logo-wide.png\": 334,\n\t\"./template/logos/visitengland\": 335,\n\t\"./template/logos/visitengland.png\": 335,\n\t\"./template/map-pin\": 336,\n\t\"./template/map-pin.png\": 336,\n\t\"./template/menu\": 337,\n\t\"./template/menu.svg\": 337,\n\t\"./template/placeholder\": 338,\n\t\"./template/placeholder.png\": 338,\n\t\"./template/quotemark\": 339,\n\t\"./template/quotemark.svg\": 339,\n\t\"./template/search\": 340,\n\t\"./template/search.svg\": 340,\n\t\"./template/select-arrow-down\": 188,\n\t\"./template/select-arrow-down.png\": 188,\n\t\"./template/select-arrow-down.svg\": 453,\n\t\"./template/spacer\": 341,\n\t\"./template/spacer.gif\": 341,\n\t\"./template/stripe_logo\": 342,\n\t\"./template/stripe_logo.svg\": 342,\n\t\"./template/tick\": 189,\n\t\"./template/tick.png\": 189,\n\t\"./template/tick.svg\": 454\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 447;","module.exports = __webpack_public_path__ + \"media/images/application/template/arrow-down-65b31a185ae5e6d14a561ad5c71cd581.svg\";","module.exports = __webpack_public_path__ + \"media/images/application/template/arrow-left-c9709e33d539a874745cdf5747aa39d1.svg\";","module.exports = __webpack_public_path__ + \"media/images/application/template/arrow-right-c3b9f5c3628641d578298ce64d0e0791.svg\";","module.exports = __webpack_public_path__ + \"media/images/application/template/arrow-up-62ddb8cf696b9ff7f910553abb27cc49.svg\";","module.exports = __webpack_public_path__ + \"media/images/application/template/download-d76fbb47fc3926d9630878254dbb5e5b.svg\";","module.exports = __webpack_public_path__ + \"media/images/application/template/select-arrow-down-d208ae1ba7fd36526f63e726d0c787dc.svg\";","module.exports = __webpack_public_path__ + \"media/images/application/template/tick-ecc77d3960396a1bca26850d0aed097d.svg\";","class CookieDisclaimer {\n constructor() {\n this.config = {\n classForBody: 'has-cookie-banner',\n name: 'cookies_accepted',\n templateHtml: '',\n message: 'Our website uses cookies to monitor traffic on our website and ensure that we can provide our customers with the best online experience possible. Please read our cookie policy to view more details on the cookies we use.',\n };\n\n this.run();\n }\n\n /* eslint no-unused-expressions: \"off\" */\n run() {\n CookieDisclaimer.readCookie(this.config.name) || (() => {\n const div = document.createElement('div');\n div.setAttribute('class', 'cookie-banner');\n div.setAttribute('id', 'cookie-banner');\n div.innerHTML += this.config.templateHtml;\n document.body.insertBefore(div, document.body.firstChild);\n document.getElementById('message').innerHTML = this.config.message;\n if (document.body.classList) {\n document.body.classList.add(this.config.classForBody);\n } else {\n document.body.className += ` ${this.config.classForBody}`;\n }\n document.getElementById('close').onclick = () => {\n CookieDisclaimer.writeCookie(this.config.name, !0, 1800);\n const a = document.getElementById('cookie-banner');\n a.parentNode.removeChild(a);\n if (document.body.classList) {\n document.body.classList.remove(this.config.classForBody);\n } else {\n document.body.className = document.body.className.replace(new RegExp(`(^|\\\\b)${this.config.classForBody.split(' ').join('|')}(\\\\b|$)`, 'gi'), ' ');\n }\n return false;\n };\n })();\n }\n\n static writeCookie(name, value, days) {\n let expires = '';\n\n if (days) {\n const date = new Date();\n date.setTime(date.getTime() + 24 * days * 60 * 60 * 1e3);\n expires = `; expires=${date.toGMTString()}`;\n }\n\n document.cookie = `${name}=${value}${expires}; path=/`;\n }\n\n static readCookie(name) {\n const nameEQ = `${name}=`;\n const ca = document.cookie.split(';');\n\n for (let i = 0; i < ca.length; i += 1) {\n let c = ca[i];\n\n while (c.charAt(0) === ' ') {\n c = c.substring(1, c.length);\n }\n\n if (c.indexOf(nameEQ) === 0) {\n return c.substring(nameEQ.length, c.length);\n }\n }\n\n return null;\n }\n}\n\nexport default CookieDisclaimer;\n","import Helpers from '../lib/helpers';\n\nclass AddUserAgentClasses {\n constructor() {\n /**\n * detect IE\n * and add a specific class to the body\n * function modified from this: http://stackoverflow.com/questions/19999388/check-if-user-is-using-ie-with-jquery\n */\n const ua = window.navigator.userAgent;\n let a = 'not-ie';\n let b = '';\n const msie = ua.indexOf('MSIE ');\n if (msie > 0) {\n // IE 10 or older\n a = 'msie';\n b = 'ie10';\n }\n\n const trident = ua.indexOf('Trident/');\n if (trident > 0) {\n // IE 11\n a = 'msie';\n b = 'ie11';\n }\n\n const edge = ua.indexOf('Edge/');\n if (edge > 0) {\n // Edge (IE 12+)\n a = 'edge';\n b = `ie${parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10)}`;\n }\n\n const body = document.querySelector('body');\n\n // other browser\n if (a !== '') {\n Helpers.addClass(body, a);\n }\n\n if (b !== '') {\n Helpers.addClass(body, b);\n }\n\n // Firefox\n if (navigator.userAgent.toLowerCase().indexOf('firefox') > -1) {\n // Do Firefox-related activities\n Helpers.addClass(body, 'firefox');\n }\n }\n}\n\nexport default AddUserAgentClasses;\n","/* eslint no-console: \"off\", no-unused-vars: \"off\" */\n\nclass Console {\n static log(...args) {\n // console.log(...args);\n }\n\n static error(...args) {\n // console.error(...args);\n }\n}\n\nexport default Console;\n","import Console from './console';\n\n/* eslint max-len: [\"error\", { \"code\": 120 }] */\n\nclass Navigation {\n constructor({\n headerObject, // we only need this to get the current viewportSituation\n rootList,\n childNavToggleSelector,\n translationForAriaLabelShow,\n translationForAriaLabelHide,\n }) {\n this.headerObject = headerObject;\n this.rootList = rootList;\n this.childNavToggleSelector = childNavToggleSelector;\n this.translationForAriaLabelShow = translationForAriaLabelShow;\n this.translationForAriaLabelHide = translationForAriaLabelHide;\n if (!this.headerObject) { Console.error('headerObject not supplied'); return null; }\n if (!this.rootList) { Console.error('rootList not supplied'); return null; }\n if (!this.childNavToggleSelector) { Console.error('childNavToggleSelector not supplied'); return null; }\n if (!this.translationForAriaLabelShow) { Console.error('translationForAriaLabelShow not supplied'); return null; }\n if (!this.translationForAriaLabelHide) { Console.error('translationForAriaLabelHide not supplied'); return null; }\n\n this.touchDevice = false;\n this.initialiseList(this.rootList);\n this.initialiseTouchEvents();\n this.initialiseEscapeKey();\n }\n\n initialiseList(list, level = 1) {\n this.initialiseListItemToggleClicks(list);\n\n if (level === 1) {\n this.initialiseListItemAutoRevealOnMouseEnter(list);\n }\n\n this.initialiseAnySubLists(list, level);\n }\n\n initialiseAnySubLists(currentList, currentLevel) {\n currentList.querySelectorAll(':scope > li').forEach((listItem) => {\n const subList = listItem.querySelector(':scope > ul');\n if (subList) {\n Console.log('about to initialise subList:', subList);\n this.initialiseList(subList, currentLevel + 1);\n }\n });\n }\n\n // Note: With the current CSS - this is only used on Mobile, or on Desktop\n // with mouse (but only above level1), or desktop with touch device.\n initialiseListItemToggleClicks(list) {\n list.querySelectorAll(`:scope > li > ${this.childNavToggleSelector}`).forEach((listItemToggle) => {\n listItemToggle.addEventListener(\n 'click',\n () => {\n Console.log('clicked toggle');\n if (listItemToggle.getAttribute('aria-expanded') === 'true') {\n this.hideListItemSubList(listItemToggle.parentElement);\n } else {\n if (this.headerObject.viewportSituationDesktop()) {\n this.collapseAnyExpandedNavOfOtherParents(listItemToggle.parentElement);\n }\n this.showListItemSubList(listItemToggle.parentElement);\n }\n },\n { passive: true },\n );\n });\n }\n\n initialiseListItemAutoRevealOnMouseEnter(list) {\n list.querySelectorAll(':scope > li').forEach((listItem) => {\n listItem.addEventListener(\n 'mouseenter',\n (event) => this.handleMouseEnteredListItem(event),\n );\n listItem.addEventListener(\n 'mouseleave',\n (event) => this.handleMouseLeftListItem(event),\n );\n });\n }\n\n // Note this is currently only in play for Level 1, and wide (desktop).\n // This method is currently used to automatically expand (display) the Level 1\n // nav on mouse enter (when not using touch device).\n handleMouseEnteredListItem(event) {\n Console.log('mouse entered');\n if (this.headerObject.viewportSituationMobile()\n || this.touchDevice) {\n return;\n }\n\n const listItem = event.target;\n this.showListItemSubList(listItem);\n }\n\n // Note this is currently only in play for Level 1, and wide (desktop).\n // This method is currently used to automatically collapse (hide) the Level 1\n // nav on mouse leave (when not using touch device).\n handleMouseLeftListItem(event) {\n if (this.headerObject.viewportSituationMobile()\n || this.touchDevice) {\n return;\n }\n\n const listItem = event.target;\n this.hideListItemSubList(listItem);\n }\n\n showListItemSubList(listItem) {\n Console.log('Showing sub list (Aria expanding)');\n\n const link = listItem.querySelector('a');\n link.setAttribute('aria-expanded', 'true');\n\n const toggle = listItem.querySelector(`:scope > ${this.childNavToggleSelector}`);\n if (toggle) {\n toggle.setAttribute('aria-expanded', 'true'); // this visually flips the arrow with current css\n toggle.setAttribute('aria-label', this.translationForAriaLabelHide);\n }\n\n const subList = listItem.querySelector(':scope > ul');\n if (subList) {\n // set whatever is required\n }\n }\n\n hideListItemSubList(listItem) {\n const link = listItem.querySelector('a');\n\n link.setAttribute('aria-expanded', 'false');\n link.blur();\n\n const toggle = listItem.querySelector(`:scope > ${this.childNavToggleSelector}`);\n if (toggle) {\n toggle.setAttribute('aria-expanded', 'false'); // this visually flips the arrow with current css\n toggle.setAttribute('aria-label', this.translationForAriaLabelShow);\n }\n\n const subList = listItem.querySelector(':scope > ul');\n if (subList) {\n // set whatever is required\n }\n }\n\n initialiseTouchEvents() {\n this.touchHandler = this.handleInitialTouchDetected.bind(this);\n document.addEventListener(\n 'touchstart',\n this.touchHandler,\n { passive: true },\n );\n }\n\n handleInitialTouchDetected() {\n Console.log('Handling initial touch detection');\n this.touchDevice = true;\n\n this.rootList.querySelectorAll(this.childNavToggleSelector).forEach((el) => {\n const toggle = el;\n toggle.style.pointerEvents = 'auto';\n });\n\n document.removeEventListener(\n 'touchstart',\n this.touchHandler,\n );\n\n document.addEventListener(\n 'touchstart',\n (event) => this.handleSubsequentTouchDetected(event),\n { passive: true },\n );\n }\n\n handleSubsequentTouchDetected(event) {\n Console.log('Handling subsequent touch');\n const closestNav = event.target.closest('nav');\n if (closestNav\n && (closestNav.querySelector('ul') === this.rootList)\n ) {\n return;\n }\n\n if (this.headerObject.viewportSituationDesktop()) {\n this.collapseAnyExpandedNav();\n }\n }\n\n collapseAnyExpandedNav(exceptThoseWithSameRootListItemAs = null) {\n this.rootList.querySelectorAll(`${this.childNavToggleSelector}[aria-expanded=true]`).forEach((toggle) => {\n if (!Navigation.elementsHaveSameRootListItem(toggle, exceptThoseWithSameRootListItemAs)) {\n Console.log(toggle, 'is being made aria-expanded=false');\n toggle.setAttribute('aria-expanded', 'false');\n }\n });\n\n // TODO - this could do with being more specific. But may be removed anyway when move away from ARIA\n this.rootList.querySelectorAll('li > a[aria-expanded=true]').forEach((a) => {\n if (!Navigation.elementsHaveSameRootListItem(a, exceptThoseWithSameRootListItemAs)) {\n Console.log(a, 'is being made aria-expanded=false');\n a.setAttribute('aria-expanded', 'false');\n }\n });\n }\n\n collapseAnyExpandedNavOfOtherParents(currentListItem) {\n this.collapseAnyExpandedNav(currentListItem);\n }\n\n static elementsHaveSameRootListItem(elementA, elementB) {\n const rootListItemSelector = 'nav > ul > li';\n\n if (!elementA || !elementB) {\n return false;\n }\n\n return (elementA.closest(rootListItemSelector) === elementB.closest(rootListItemSelector));\n }\n\n initialiseEscapeKey() {\n Console.log('Initialising escape key');\n document.addEventListener(\n 'keydown',\n (event) => {\n const theEvent = event || window.event;\n let isEscape = false;\n if ('key' in theEvent) {\n isEscape = theEvent.key === 'Escape' || theEvent.key === 'Esc';\n } else {\n isEscape = theEvent.keyCode === 27;\n }\n if (isEscape) {\n this.collapseAnyExpandedNav();\n }\n },\n { passive: true },\n );\n }\n}\n\nexport default Navigation;\n","import Console from './console';\n\n/* eslint max-len: [\"error\", { \"code\": 130 }] */\n\nclass MenuButton {\n constructor({\n headerObject,\n menuToggle,\n slidingNav,\n }) {\n this.headerObject = headerObject;\n this.menuToggle = menuToggle;\n this.slidingNav = slidingNav;\n if (!this.headerObject) { Console.error('headerObject not supplied'); return null; }\n if (!this.menuToggle) { Console.error('menuToggle not supplied'); return null; }\n if (typeof this.slidingNav !== 'boolean') { Console.error('slidingNav incorrect'); return null; }\n\n this.navSlideHideTimer = undefined; // For a setTimeout later\n\n this.initialiseMenuButtonClickActions();\n }\n\n initialiseMenuButtonClickActions() {\n this.menuToggle.addEventListener('click', (e) => {\n if (this.headerObject.menuVisibleOnMobile) {\n this.hideMenuOnMobile();\n } else {\n this.showMenuOnMobile();\n }\n e.preventDefault();\n });\n }\n\n // Only ever gets called when burger menu toggle is clicked (event listener).\n // This is related to user interactions.\n showMenuOnMobile() {\n Console.log('showMenuOnMobile');\n this.headerObject.menuVisibleOnMobile = true;\n\n document.querySelector('html').classList.add('has-primary-nav'); // this class provides the css animation\n this.menuToggle.setAttribute('aria-expanded', 'true');\n\n clearTimeout(this.navSlideHideTimer); // cancel timer (if present) which will try to hide the nav\n\n this.headerObject.showTabbableElements();\n this.headerObject.trapTabbing();\n\n if (this.slidingNav) {\n this.headerObject.addSlidingNavOverlay();\n }\n }\n\n //\n // ** This gets called by a few places ************ //\n // Called by both viewport width conditions/resizes and user interactions\n hideMenuOnMobile() {\n Console.log('hideMenuOnMobile');\n this.headerObject.menuVisibleOnMobile = false;\n\n document.querySelector('html').classList.remove('has-primary-nav'); // this class removal provides the css animation\n this.menuToggle.setAttribute('aria-expanded', 'false');\n\n if (this.slidingNav) {\n // We must only disable (hide) these elements once the css animation has\n // completed, so doesnt look bad.\n this.navSlideHideTimer = setTimeout(() => {\n this.headerObject.hideTabbableElements();\n }, 500);\n } else {\n this.headerObject.hideTabbableElements();\n }\n this.headerObject.unTrapTabbing();\n\n if (this.slidingNav) {\n this.headerObject.removeSlidingNavOverlay();\n }\n }\n}\n\nexport default MenuButton;\n","import Helpers from '../lib/helpers';\nimport Navigation from './header/navigation';\nimport MenuButton from './header/menu-button';\nimport Console from './header/console';\n\n/* eslint max-len: [\"error\", { \"code\": 130 }] */\n/* eslint class-methods-use-this: [\"error\", { \"exceptMethods\": [\"removeSlidingNavOverlay\", \"trapTabKey\"] }] */\n\nclass Header {\n constructor({\n headerSelector,\n menuToggleSelector,\n slidingNav,\n slidingNavOverlayClasses = [],\n breakpoint = 30000,\n navigationRootListSelector,\n childNavToggleSelector,\n tabTrappableItemsWrapperSelector,\n tabTrappableItemsSelectors,\n translationsSelector,\n translationAttributeForAriaLabelShow,\n translationAttributeForAriaLabelHide,\n }) {\n // get and use headerElement to reduce the querySelector scope and save work\n const headerElement = document.querySelector(headerSelector);\n if (!headerElement) { Console.error('header element not found'); return null; }\n\n this.headerElement = headerElement;\n // Note - there are two .nav_utility nodes in the DOM - this one is the\n // second one - within _header_navigation:\n this.menuToggle = headerElement.querySelector(menuToggleSelector); // burger\n this.slidingNav = slidingNav;\n this.slidingNavOverlayClasses = slidingNavOverlayClasses;\n this.breakpoint = breakpoint;\n this.navigationRootList = headerElement.querySelector(navigationRootListSelector);\n this.tabTrappableItemsWrapper = headerElement.querySelector(tabTrappableItemsWrapperSelector);\n this.tabTrappableItemsSelectors = tabTrappableItemsSelectors;\n\n if (!this.menuToggle) { Console.error('menuToggle not supplied'); return null; }\n if (typeof this.slidingNav !== 'boolean') { Console.error('slidingNav incorrect'); return null; }\n if (!this.navigationRootList) { Console.error('navigationRootList not supplied'); return null; }\n if (!this.breakpoint) { Console.error('breakpoint not supplied'); return null; }\n if (!this.tabTrappableItemsWrapper) { Console.error('tabTrappableItemsWrapper not found'); return null; }\n if (!this.tabTrappableItemsSelectors) { Console.error('tabTrappableItemsSelectors not supplied'); return null; }\n\n this.menuButton = new MenuButton({\n headerObject: this,\n menuToggle: this.menuToggle,\n slidingNav: this.slidingNav,\n });\n\n this.childNavToggleSelector = childNavToggleSelector;\n if (!this.childNavToggleSelector) { Console.error('childNavToggleSelector not supplied'); return null; }\n // Get translations from the DOM so they are consistent with those used by\n // server when rendering the initial HTML.\n const translationsElement = headerElement.querySelector(translationsSelector);\n if (!translationsElement) { Console.error('translationsElement not supplied'); return null; }\n this.translationForAriaLabelShow = translationsElement\n .getAttribute(translationAttributeForAriaLabelShow);\n this.translationForAriaLabelHide = translationsElement\n .getAttribute(translationAttributeForAriaLabelHide);\n if (!this.translationForAriaLabelShow) {\n Console.error('translationForAriaLabelShow not supplied or found'); return null;\n }\n if (!this.translationForAriaLabelHide) {\n Console.error('translationForAriaLabelHide not supplied or found'); return null;\n }\n\n this.navigation = new Navigation({\n headerObject: this,\n rootList: this.navigationRootList,\n childNavToggleSelector: this.childNavToggleSelector,\n translationForAriaLabelShow: this.translationForAriaLabelShow,\n translationForAriaLabelHide: this.translationForAriaLabelHide,\n });\n\n // --- Properties which maintain/manage 'state':\n this.menuVisibleOnMobile = false; // set initial state to be closed on mobile\n this.viewportSituation = ''; // e.g. desktop/mobile. Gets set in viewportWidthChecker (initially, and upon resizes).\n // ---\n\n this.monitorViewportWidthAndAlterDisplayWhenRequired();\n }\n\n monitorViewportWidthAndAlterDisplayWhenRequired() {\n this.viewportWidthChecker();\n\n const resizeDebouncer = Helpers.debounce(() => {\n this.viewportWidthChecker();\n }, 50);\n window.addEventListener('resize', resizeDebouncer, { passive: true });\n }\n\n viewportSituationDesktop() {\n return (this.viewportSituation === 'desktop');\n }\n\n viewportSituationMobile() {\n return (this.viewportSituation === 'mobile');\n }\n\n // This is run initially, or on resize - so these methods are purely related\n // to viewport width, NOT click/etc interactions\n viewportWidthChecker() {\n Console.log('viewportWidthChecker', this.viewportSituation);\n\n const { clientWidth } = document.documentElement;\n const viewportWidth = Math.max(clientWidth, window.innerWidth || 0); // px value\n\n if (viewportWidth >= this.breakpoint) {\n if (!this.viewportSituationDesktop()) {\n // Should be in viewportSituation of desktop - move to that now\n this.viewportSituation = 'desktop';\n this.showTabbableElements('desktop'); // peculiar instance hence argument\n if (this.slidingNav) {\n this.removeSlidingNavOverlay();\n }\n }\n } else if (!this.viewportSituationMobile()) {\n // Should be in viewportSituation of mobile - move to that now\n this.viewportSituation = 'mobile';\n // this.hideMenuOnMobile(); // this is the existing behaviour, but I'd query whether we really want to do this\n if (this.menuVisibleOnMobile) {\n this.showTabbableElements();\n if (this.slidingNav) {\n this.addSlidingNavOverlay();\n }\n } else {\n this.hideTabbableElements();\n }\n }\n }\n\n addSlidingNavOverlay() {\n Console.log('addSlidingNavOverlay');\n // create overlay to mask the other part of the screen while menu is open\n const overlay = document.createElement('div');\n // have to add classes individually for IE11 to cope:\n this.slidingNavOverlayClasses.forEach((slidingNavOverlayClass) => {\n overlay.classList.add(slidingNavOverlayClass);\n });\n overlay.setAttribute('data-js', 'sliding-nav-overlay');\n document.body.appendChild(overlay);\n // add event listener to the overlay\n overlay.addEventListener(\n 'click',\n (e) => this.menuButton.hideMenuOnMobile(e),\n { passive: true },\n );\n }\n\n removeSlidingNavOverlay() {\n Console.log('removeSlidingNavOverlay');\n // remove overlay (if one was present from mobile nav being open)\n const overlay = document.querySelector('[data-js=\"sliding-nav-overlay\"]');\n if (overlay) { overlay.parentNode.removeChild(overlay); }\n }\n\n showTabbableElements() {\n // show elements visually, and so they may now be tabbed to\n Console.log('showTabbableElements');\n\n // Add class to hide focusable sliding nav elements\n this.headerElement.classList.remove('hide-nav-children');\n }\n\n hideTabbableElements() {\n // hide elements so they may not be tabbed to\n Console.log('hideTabbableElements');\n\n // Remove class that hides focusable sliding nav elements\n this.headerElement.classList.add('hide-nav-children');\n }\n\n static get firstTabTrapAttribute() { return 'data-tab-trap-first-element'; }\n\n static get lastTabTrapAttribute() { return 'data-tab-trap-last-element'; }\n\n trapTabbing() {\n // Don't let the user tab beyond the menu. For use when viewing mobile version and the menu is open.\n\n // Add attributes as markers to the first and last focusable elements, if they've not already been added previously.\n const tabTrapMarkerSelectors = `[${Header.firstTabTrapAttribute}], [${Header.lastTabTrapAttribute}]`;\n if (this.tabTrappableItemsWrapper.querySelectorAll(tabTrapMarkerSelectors).length !== 2) {\n Console.log('Adding first and last marker attributes for tab trapping');\n let focusableElements = this\n .tabTrappableItemsWrapper\n .querySelectorAll(this.tabTrappableItemsSelectors); /* eslint prefer-const: \"off\" */\n focusableElements[0].setAttribute(Header.firstTabTrapAttribute, '');\n focusableElements[focusableElements.length - 1].setAttribute(Header.lastTabTrapAttribute, '');\n }\n\n Console.log('Adding tab trapping event listener');\n document.addEventListener(\n 'keydown',\n this.trapTabKey,\n );\n }\n\n trapTabKey(e) {\n if (e.keyCode === 9) { // TAB KEY\n if (e.shiftKey) { // SHIFT + TAB\n if (document.activeElement.hasAttribute(Header.firstTabTrapAttribute)) {\n Console.log('Tab trapping first element:', document.activeElement);\n e.preventDefault();\n const lastElement = document.querySelector(`[${Header.lastTabTrapAttribute}]`);\n Console.log('lastElement is:', lastElement);\n if (lastElement) {\n lastElement.focus();\n }\n }\n } else if (document.activeElement.hasAttribute(Header.lastTabTrapAttribute)) {\n Console.log('Tab trapping last element:', document.activeElement);\n e.preventDefault();\n const firstElement = document.querySelector(`[${Header.firstTabTrapAttribute}]`);\n Console.log('lastElement is:', firstElement);\n if (firstElement) {\n firstElement.focus();\n }\n }\n }\n }\n\n unTrapTabbing() {\n Console.log('Removing tab trapping event listener');\n document.removeEventListener(\n 'keydown',\n this.trapTabKey,\n );\n }\n}\n\nexport default Header;\n","import Helpers from '../lib/helpers';\n\nclass Search {\n constructor({ searchContainerSelector, searchButtonsSelector, searchBarSelector }) {\n this.searchContainerSelector = searchContainerSelector;\n this.searchButtonsSelector = searchButtonsSelector;\n this.searchBarSelector = searchBarSelector;\n\n if (!this.searchContainerSelector) { return null; }\n if (!this.searchButtonsSelector) { return null; }\n if (!this.searchBarSelector) { return null; }\n\n // Show / hide the search bar\n let searchContainer = document.querySelectorAll(this.searchContainerSelector);\n let searchButtons = document.querySelectorAll(this.searchButtonsSelector);\n let searchBar = document.querySelector(this.searchBarSelector);\n\n if (!searchContainer) { return null; }\n if (!searchButtons) { return null; }\n\n Helpers.forEach(searchContainer, (el, i) => {\n var searchBtn = el.querySelector('[data-search]');\n var searchBar = el.querySelector('[data-search-box]');\n var searchInput = el.querySelector('input[type=\"search\"]');\n\n searchBtn.addEventListener('click', (e) => {\n e.preventDefault();\n e.stopPropagation();\n if (searchBar) {\n if (searchBar.getAttribute('data-visible') != null) {\n searchBar.removeAttribute('data-visible');\n el.setAttribute('aria-expanded', 'false');\n searchBtn.removeAttribute('data-visible');\n } else {\n searchBar.setAttribute('data-visible', '');\n searchBtn.setAttribute('data-visible', '');\n el.setAttribute('aria-expanded', 'true');\n searchInput.focus();\n }\n }\n });\n });\n }\n}\n\nexport default Search;\n","import Helpers from '../lib/helpers';\n\nclass StickyNav {\n constructor({\n header, primaryNav, main, body,\n }) {\n this.header = document.querySelector(header);\n this.primaryNav = document.querySelector(primaryNav);\n this.main = document.querySelector(main);\n this.body = document.querySelector(body);\n\n if (!this.header) { return null; }\n if (!this.primaryNav) { return null; }\n if (!this.main) { return null; }\n if (!this.body) { return null; }\n\n // Run sticky nav on page load in case we are not at the top\n this.run();\n\n // Run sticky nav on scroll too\n const stickyNavDebouncer = Helpers.debounce(() => {\n this.run();\n }, 10);\n window.addEventListener('scroll', stickyNavDebouncer, { passive: true });\n }\n\n run() {\n let navIsVisible;\n\n const scroll = window.pageYOffset;\n const scrollLength = 150; // px distance before sticky kicks in\n\n if (scroll >= scrollLength && !this.body.classList.contains('has-sticky-nav')) {\n // add a class to the elements\n this.header.classList.add('is-sticky');\n this.primaryNav.classList.add('is-sticky');\n this.main.classList.add('is-sticky');\n this.body.classList.add('has-sticky-nav');\n\n // declare that the header is now visible\n navIsVisible = true;\n } else if (scroll < scrollLength && this.body.classList.contains('has-sticky-nav')) {\n // remove classes from the elements\n this.header.classList.remove('is-sticky');\n this.primaryNav.classList.remove('is-sticky');\n this.main.classList.remove('is-sticky');\n this.body.classList.remove('has-sticky-nav');\n\n // declare that the header is now hidden\n navIsVisible = false;\n }\n }\n}\n\nexport default StickyNav;\n","function _typeof2(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof2(obj); }\n\n/*!\n * Glide.js v3.4.1\n * (c) 2013-2019 Jędrzej Chałubek (http://jedrzejchalubek.com/)\n * Released under the MIT License.\n */\nvar defaults = {\n /**\n * Type of the movement.\n *\n * Available types:\n * `slider` - Rewinds slider to the start/end when it reaches the first or last slide.\n * `carousel` - Changes slides without starting over when it reaches the first or last slide.\n *\n * @type {String}\n */\n type: 'slider',\n\n /**\n * Start at specific slide number defined with zero-based index.\n *\n * @type {Number}\n */\n startAt: 0,\n\n /**\n * A number of slides visible on the single viewport.\n *\n * @type {Number}\n */\n perView: 1,\n\n /**\n * Focus currently active slide at a specified position in the track.\n *\n * Available inputs:\n * `center` - Current slide will be always focused at the center of a track.\n * `0,1,2,3...` - Current slide will be focused on the specified zero-based index.\n *\n * @type {String|Number}\n */\n focusAt: 0,\n\n /**\n * A size of the gap added between slides.\n *\n * @type {Number}\n */\n gap: 10,\n\n /**\n * Change slides after a specified interval. Use `false` for turning off autoplay.\n *\n * @type {Number|Boolean}\n */\n autoplay: false,\n\n /**\n * Stop autoplay on mouseover event.\n *\n * @type {Boolean}\n */\n hoverpause: true,\n\n /**\n * Allow for changing slides with left and right keyboard arrows.\n *\n * @type {Boolean}\n */\n keyboard: true,\n\n /**\n * Stop running `perView` number of slides from the end. Use this\n * option if you don't want to have an empty space after\n * a slider. Works only with `slider` type and a\n * non-centered `focusAt` setting.\n *\n * @type {Boolean}\n */\n bound: false,\n\n /**\n * Minimal swipe distance needed to change the slide. Use `false` for turning off a swiping.\n *\n * @type {Number|Boolean}\n */\n swipeThreshold: 80,\n\n /**\n * Minimal mouse drag distance needed to change the slide. Use `false` for turning off a dragging.\n *\n * @type {Number|Boolean}\n */\n dragThreshold: 120,\n\n /**\n * A maximum number of slides to which movement will be made on swiping or dragging. Use `false` for unlimited.\n *\n * @type {Number|Boolean}\n */\n perTouch: false,\n\n /**\n * Moving distance ratio of the slides on a swiping and dragging.\n *\n * @type {Number}\n */\n touchRatio: 0.5,\n\n /**\n * Angle required to activate slides moving on swiping or dragging.\n *\n * @type {Number}\n */\n touchAngle: 45,\n\n /**\n * Duration of the animation in milliseconds.\n *\n * @type {Number}\n */\n animationDuration: 400,\n\n /**\n * Allows looping the `slider` type. Slider will rewind to the first/last slide when it's at the start/end.\n *\n * @type {Boolean}\n */\n rewind: true,\n\n /**\n * Duration of the rewinding animation of the `slider` type in milliseconds.\n *\n * @type {Number}\n */\n rewindDuration: 800,\n\n /**\n * Easing function for the animation.\n *\n * @type {String}\n */\n animationTimingFunc: 'cubic-bezier(.165, .840, .440, 1)',\n\n /**\n * Throttle costly events at most once per every wait milliseconds.\n *\n * @type {Number}\n */\n throttle: 10,\n\n /**\n * Moving direction mode.\n *\n * Available inputs:\n * - 'ltr' - left to right movement,\n * - 'rtl' - right to left movement.\n *\n * @type {String}\n */\n direction: 'ltr',\n\n /**\n * The distance value of the next and previous viewports which\n * have to peek in the current view. Accepts number and\n * pixels as a string. Left and right peeking can be\n * set up separately with a directions object.\n *\n * For example:\n * `100` - Peek 100px on the both sides.\n * { before: 100, after: 50 }` - Peek 100px on the left side and 50px on the right side.\n *\n * @type {Number|String|Object}\n */\n peek: 0,\n\n /**\n * Collection of options applied at specified media breakpoints.\n * For example: display two slides per view under 800px.\n * `{\n * '800px': {\n * perView: 2\n * }\n * }`\n */\n breakpoints: {},\n\n /**\n * Collection of internally used HTML classes.\n *\n * @todo Refactor `slider` and `carousel` properties to single `type: { slider: '', carousel: '' }` object\n * @type {Object}\n */\n classes: {\n direction: {\n ltr: 'glide--ltr',\n rtl: 'glide--rtl'\n },\n slider: 'glide--slider',\n carousel: 'glide--carousel',\n swipeable: 'glide--swipeable',\n dragging: 'glide--dragging',\n cloneSlide: 'glide__slide--clone',\n activeNav: 'glide__bullet--active',\n activeSlide: 'glide__slide--active',\n disabledArrow: 'glide__arrow--disabled'\n }\n};\n/**\n * Outputs warning message to the bowser console.\n *\n * @param {String} msg\n * @return {Void}\n */\n\nfunction warn(msg) {\n console.error(\"[Glide warn]: \" + msg);\n}\n\nvar _typeof = typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\" ? function (obj) {\n return _typeof2(obj);\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n};\n\nvar classCallCheck = function classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar get = function get(object, property, receiver) {\n if (object === null) object = Function.prototype;\n var desc = Object.getOwnPropertyDescriptor(object, property);\n\n if (desc === undefined) {\n var parent = Object.getPrototypeOf(object);\n\n if (parent === null) {\n return undefined;\n } else {\n return get(parent, property, receiver);\n }\n } else if (\"value\" in desc) {\n return desc.value;\n } else {\n var getter = desc.get;\n\n if (getter === undefined) {\n return undefined;\n }\n\n return getter.call(receiver);\n }\n};\n\nvar inherits = function inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + _typeof2(superClass));\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\nvar possibleConstructorReturn = function possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (_typeof2(call) === \"object\" || typeof call === \"function\") ? call : self;\n};\n/**\n * Converts value entered as number\n * or string to integer value.\n *\n * @param {String} value\n * @returns {Number}\n */\n\n\nfunction toInt(value) {\n return parseInt(value);\n}\n/**\n * Converts value entered as number\n * or string to flat value.\n *\n * @param {String} value\n * @returns {Number}\n */\n\n\nfunction toFloat(value) {\n return parseFloat(value);\n}\n/**\n * Indicates whether the specified value is a string.\n *\n * @param {*} value\n * @return {Boolean}\n */\n\n\nfunction isString(value) {\n return typeof value === 'string';\n}\n/**\n * Indicates whether the specified value is an object.\n *\n * @param {*} value\n * @return {Boolean}\n *\n * @see https://github.com/jashkenas/underscore\n */\n\n\nfunction isObject(value) {\n var type = typeof value === 'undefined' ? 'undefined' : _typeof(value);\n return type === 'function' || type === 'object' && !!value; // eslint-disable-line no-mixed-operators\n}\n/**\n * Indicates whether the specified value is a number.\n *\n * @param {*} value\n * @return {Boolean}\n */\n\n\nfunction isNumber(value) {\n return typeof value === 'number';\n}\n/**\n * Indicates whether the specified value is a function.\n *\n * @param {*} value\n * @return {Boolean}\n */\n\n\nfunction isFunction(value) {\n return typeof value === 'function';\n}\n/**\n * Indicates whether the specified value is undefined.\n *\n * @param {*} value\n * @return {Boolean}\n */\n\n\nfunction isUndefined(value) {\n return typeof value === 'undefined';\n}\n/**\n * Indicates whether the specified value is an array.\n *\n * @param {*} value\n * @return {Boolean}\n */\n\n\nfunction isArray(value) {\n return value.constructor === Array;\n}\n/**\n * Creates and initializes specified collection of extensions.\n * Each extension receives access to instance of glide and rest of components.\n *\n * @param {Object} glide\n * @param {Object} extensions\n *\n * @returns {Object}\n */\n\n\nfunction mount(glide, extensions, events) {\n var components = {};\n\n for (var name in extensions) {\n if (isFunction(extensions[name])) {\n components[name] = extensions[name](glide, components, events);\n } else {\n warn('Extension must be a function');\n }\n }\n\n for (var _name in components) {\n if (isFunction(components[_name].mount)) {\n components[_name].mount();\n }\n }\n\n return components;\n}\n/**\n * Defines getter and setter property on the specified object.\n *\n * @param {Object} obj Object where property has to be defined.\n * @param {String} prop Name of the defined property.\n * @param {Object} definition Get and set definitions for the property.\n * @return {Void}\n */\n\n\nfunction define(obj, prop, definition) {\n Object.defineProperty(obj, prop, definition);\n}\n/**\n * Sorts aphabetically object keys.\n *\n * @param {Object} obj\n * @return {Object}\n */\n\n\nfunction sortKeys(obj) {\n return Object.keys(obj).sort().reduce(function (r, k) {\n r[k] = obj[k];\n return r[k], r;\n }, {});\n}\n/**\n * Merges passed settings object with default options.\n *\n * @param {Object} defaults\n * @param {Object} settings\n * @return {Object}\n */\n\n\nfunction mergeOptions(defaults, settings) {\n var options = _extends({}, defaults, settings); // `Object.assign` do not deeply merge objects, so we\n // have to do it manually for every nested object\n // in options. Although it does not look smart,\n // it's smaller and faster than some fancy\n // merging deep-merge algorithm script.\n\n\n if (settings.hasOwnProperty('classes')) {\n options.classes = _extends({}, defaults.classes, settings.classes);\n\n if (settings.classes.hasOwnProperty('direction')) {\n options.classes.direction = _extends({}, defaults.classes.direction, settings.classes.direction);\n }\n }\n\n if (settings.hasOwnProperty('breakpoints')) {\n options.breakpoints = _extends({}, defaults.breakpoints, settings.breakpoints);\n }\n\n return options;\n}\n\nvar EventsBus = function () {\n /**\n * Construct a EventBus instance.\n *\n * @param {Object} events\n */\n function EventsBus() {\n var events = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n classCallCheck(this, EventsBus);\n this.events = events;\n this.hop = events.hasOwnProperty;\n }\n /**\n * Adds listener to the specifed event.\n *\n * @param {String|Array} event\n * @param {Function} handler\n */\n\n\n createClass(EventsBus, [{\n key: 'on',\n value: function on(event, handler) {\n if (isArray(event)) {\n for (var i = 0; i < event.length; i++) {\n this.on(event[i], handler);\n }\n } // Create the event's object if not yet created\n\n\n if (!this.hop.call(this.events, event)) {\n this.events[event] = [];\n } // Add the handler to queue\n\n\n var index = this.events[event].push(handler) - 1; // Provide handle back for removal of event\n\n return {\n remove: function remove() {\n delete this.events[event][index];\n }\n };\n }\n /**\n * Runs registered handlers for specified event.\n *\n * @param {String|Array} event\n * @param {Object=} context\n */\n\n }, {\n key: 'emit',\n value: function emit(event, context) {\n if (isArray(event)) {\n for (var i = 0; i < event.length; i++) {\n this.emit(event[i], context);\n }\n } // If the event doesn't exist, or there's no handlers in queue, just leave\n\n\n if (!this.hop.call(this.events, event)) {\n return;\n } // Cycle through events queue, fire!\n\n\n this.events[event].forEach(function (item) {\n item(context || {});\n });\n }\n }]);\n return EventsBus;\n}();\n\nvar Glide = function () {\n /**\r\n * Construct glide.\r\n *\r\n * @param {String} selector\r\n * @param {Object} options\r\n */\n function Glide(selector) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n classCallCheck(this, Glide);\n this._c = {};\n this._t = [];\n this._e = new EventsBus();\n this.disabled = false;\n this.selector = selector;\n this.settings = mergeOptions(defaults, options);\n this.index = this.settings.startAt;\n }\n /**\r\n * Initializes glide.\r\n *\r\n * @param {Object} extensions Collection of extensions to initialize.\r\n * @return {Glide}\r\n */\n\n\n createClass(Glide, [{\n key: 'mount',\n value: function mount$$1() {\n var extensions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this._e.emit('mount.before');\n\n if (isObject(extensions)) {\n this._c = mount(this, extensions, this._e);\n } else {\n warn('You need to provide a object on `mount()`');\n }\n\n this._e.emit('mount.after');\n\n return this;\n }\n /**\r\n * Collects an instance `translate` transformers.\r\n *\r\n * @param {Array} transformers Collection of transformers.\r\n * @return {Void}\r\n */\n\n }, {\n key: 'mutate',\n value: function mutate() {\n var transformers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n if (isArray(transformers)) {\n this._t = transformers;\n } else {\n warn('You need to provide a array on `mutate()`');\n }\n\n return this;\n }\n /**\r\n * Updates glide with specified settings.\r\n *\r\n * @param {Object} settings\r\n * @return {Glide}\r\n */\n\n }, {\n key: 'update',\n value: function update() {\n var settings = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.settings = mergeOptions(this.settings, settings);\n\n if (settings.hasOwnProperty('startAt')) {\n this.index = settings.startAt;\n }\n\n this._e.emit('update');\n\n return this;\n }\n /**\r\n * Change slide with specified pattern. A pattern must be in the special format:\r\n * `>` - Move one forward\r\n * `<` - Move one backward\r\n * `={i}` - Go to {i} zero-based slide (eq. '=1', will go to second slide)\r\n * `>>` - Rewinds to end (last slide)\r\n * `<<` - Rewinds to start (first slide)\r\n *\r\n * @param {String} pattern\r\n * @return {Glide}\r\n */\n\n }, {\n key: 'go',\n value: function go(pattern) {\n this._c.Run.make(pattern);\n\n return this;\n }\n /**\r\n * Move track by specified distance.\r\n *\r\n * @param {String} distance\r\n * @return {Glide}\r\n */\n\n }, {\n key: 'move',\n value: function move(distance) {\n this._c.Transition.disable();\n\n this._c.Move.make(distance);\n\n return this;\n }\n /**\r\n * Destroy instance and revert all changes done by this._c.\r\n *\r\n * @return {Glide}\r\n */\n\n }, {\n key: 'destroy',\n value: function destroy() {\n this._e.emit('destroy');\n\n return this;\n }\n /**\r\n * Start instance autoplaying.\r\n *\r\n * @param {Boolean|Number} interval Run autoplaying with passed interval regardless of `autoplay` settings\r\n * @return {Glide}\r\n */\n\n }, {\n key: 'play',\n value: function play() {\n var interval = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n if (interval) {\n this.settings.autoplay = interval;\n }\n\n this._e.emit('play');\n\n return this;\n }\n /**\r\n * Stop instance autoplaying.\r\n *\r\n * @return {Glide}\r\n */\n\n }, {\n key: 'pause',\n value: function pause() {\n this._e.emit('pause');\n\n return this;\n }\n /**\r\n * Sets glide into a idle status.\r\n *\r\n * @return {Glide}\r\n */\n\n }, {\n key: 'disable',\n value: function disable() {\n this.disabled = true;\n return this;\n }\n /**\r\n * Sets glide into a active status.\r\n *\r\n * @return {Glide}\r\n */\n\n }, {\n key: 'enable',\n value: function enable() {\n this.disabled = false;\n return this;\n }\n /**\r\n * Adds cuutom event listener with handler.\r\n *\r\n * @param {String|Array} event\r\n * @param {Function} handler\r\n * @return {Glide}\r\n */\n\n }, {\n key: 'on',\n value: function on(event, handler) {\n this._e.on(event, handler);\n\n return this;\n }\n /**\r\n * Checks if glide is a precised type.\r\n *\r\n * @param {String} name\r\n * @return {Boolean}\r\n */\n\n }, {\n key: 'isType',\n value: function isType(name) {\n return this.settings.type === name;\n }\n /**\r\n * Gets value of the core options.\r\n *\r\n * @return {Object}\r\n */\n\n }, {\n key: 'settings',\n get: function get$$1() {\n return this._o;\n }\n /**\r\n * Sets value of the core options.\r\n *\r\n * @param {Object} o\r\n * @return {Void}\r\n */\n ,\n set: function set$$1(o) {\n if (isObject(o)) {\n this._o = o;\n } else {\n warn('Options must be an `object` instance.');\n }\n }\n /**\r\n * Gets current index of the slider.\r\n *\r\n * @return {Object}\r\n */\n\n }, {\n key: 'index',\n get: function get$$1() {\n return this._i;\n }\n /**\r\n * Sets current index a slider.\r\n *\r\n * @return {Object}\r\n */\n ,\n set: function set$$1(i) {\n this._i = toInt(i);\n }\n /**\r\n * Gets type name of the slider.\r\n *\r\n * @return {String}\r\n */\n\n }, {\n key: 'type',\n get: function get$$1() {\n return this.settings.type;\n }\n /**\r\n * Gets value of the idle status.\r\n *\r\n * @return {Boolean}\r\n */\n\n }, {\n key: 'disabled',\n get: function get$$1() {\n return this._d;\n }\n /**\r\n * Sets value of the idle status.\r\n *\r\n * @return {Boolean}\r\n */\n ,\n set: function set$$1(status) {\n this._d = !!status;\n }\n }]);\n return Glide;\n}();\n\nfunction Run(Glide, Components, Events) {\n var Run = {\n /**\n * Initializes autorunning of the glide.\n *\n * @return {Void}\n */\n mount: function mount() {\n this._o = false;\n },\n\n /**\n * Makes glides running based on the passed moving schema.\n *\n * @param {String} move\n */\n make: function make(move) {\n var _this = this;\n\n if (!Glide.disabled) {\n Glide.disable();\n this.move = move;\n Events.emit('run.before', this.move);\n this.calculate();\n Events.emit('run', this.move);\n Components.Transition.after(function () {\n if (_this.isStart()) {\n Events.emit('run.start', _this.move);\n }\n\n if (_this.isEnd()) {\n Events.emit('run.end', _this.move);\n }\n\n if (_this.isOffset('<') || _this.isOffset('>')) {\n _this._o = false;\n Events.emit('run.offset', _this.move);\n }\n\n Events.emit('run.after', _this.move);\n Glide.enable();\n });\n }\n },\n\n /**\n * Calculates current index based on defined move.\n *\n * @return {Void}\n */\n calculate: function calculate() {\n var move = this.move,\n length = this.length;\n var steps = move.steps,\n direction = move.direction;\n var countableSteps = isNumber(toInt(steps)) && toInt(steps) !== 0;\n\n switch (direction) {\n case '>':\n if (steps === '>') {\n Glide.index = length;\n } else if (this.isEnd()) {\n if (!(Glide.isType('slider') && !Glide.settings.rewind)) {\n this._o = true;\n Glide.index = 0;\n }\n } else if (countableSteps) {\n Glide.index += Math.min(length - Glide.index, -toInt(steps));\n } else {\n Glide.index++;\n }\n\n break;\n\n case '<':\n if (steps === '<') {\n Glide.index = 0;\n } else if (this.isStart()) {\n if (!(Glide.isType('slider') && !Glide.settings.rewind)) {\n this._o = true;\n Glide.index = length;\n }\n } else if (countableSteps) {\n Glide.index -= Math.min(Glide.index, toInt(steps));\n } else {\n Glide.index--;\n }\n\n break;\n\n case '=':\n Glide.index = steps;\n break;\n\n default:\n warn('Invalid direction pattern [' + direction + steps + '] has been used');\n break;\n }\n },\n\n /**\n * Checks if we are on the first slide.\n *\n * @return {Boolean}\n */\n isStart: function isStart() {\n return Glide.index === 0;\n },\n\n /**\n * Checks if we are on the last slide.\n *\n * @return {Boolean}\n */\n isEnd: function isEnd() {\n return Glide.index === this.length;\n },\n\n /**\n * Checks if we are making a offset run.\n *\n * @param {String} direction\n * @return {Boolean}\n */\n isOffset: function isOffset(direction) {\n return this._o && this.move.direction === direction;\n }\n };\n define(Run, 'move', {\n /**\n * Gets value of the move schema.\n *\n * @returns {Object}\n */\n get: function get() {\n return this._m;\n },\n\n /**\n * Sets value of the move schema.\n *\n * @returns {Object}\n */\n set: function set(value) {\n var step = value.substr(1);\n this._m = {\n direction: value.substr(0, 1),\n steps: step ? toInt(step) ? toInt(step) : step : 0\n };\n }\n });\n define(Run, 'length', {\n /**\n * Gets value of the running distance based\n * on zero-indexing number of slides.\n *\n * @return {Number}\n */\n get: function get() {\n var settings = Glide.settings;\n var length = Components.Html.slides.length; // If the `bound` option is acitve, a maximum running distance should be\n // reduced by `perView` and `focusAt` settings. Running distance\n // should end before creating an empty space after instance.\n\n if (Glide.isType('slider') && settings.focusAt !== 'center' && settings.bound) {\n return length - 1 - (toInt(settings.perView) - 1) + toInt(settings.focusAt);\n }\n\n return length - 1;\n }\n });\n define(Run, 'offset', {\n /**\n * Gets status of the offsetting flag.\n *\n * @return {Boolean}\n */\n get: function get() {\n return this._o;\n }\n });\n return Run;\n}\n/**\n * Returns a current time.\n *\n * @return {Number}\n */\n\n\nfunction now() {\n return new Date().getTime();\n}\n/**\n * Returns a function, that, when invoked, will only be triggered\n * at most once during a given window of time.\n *\n * @param {Function} func\n * @param {Number} wait\n * @param {Object=} options\n * @return {Function}\n *\n * @see https://github.com/jashkenas/underscore\n */\n\n\nfunction throttle(func, wait, options) {\n var timeout = void 0,\n context = void 0,\n args = void 0,\n result = void 0;\n var previous = 0;\n if (!options) options = {};\n\n var later = function later() {\n previous = options.leading === false ? 0 : now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n\n var throttled = function throttled() {\n var at = now();\n if (!previous && options.leading === false) previous = at;\n var remaining = wait - (at - previous);\n context = this;\n args = arguments;\n\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n\n previous = at;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n\n return result;\n };\n\n throttled.cancel = function () {\n clearTimeout(timeout);\n previous = 0;\n timeout = context = args = null;\n };\n\n return throttled;\n}\n\nvar MARGIN_TYPE = {\n ltr: ['marginLeft', 'marginRight'],\n rtl: ['marginRight', 'marginLeft']\n};\n\nfunction Gaps(Glide, Components, Events) {\n var Gaps = {\n /**\n * Applies gaps between slides. First and last\n * slides do not receive it's edge margins.\n *\n * @param {HTMLCollection} slides\n * @return {Void}\n */\n apply: function apply(slides) {\n for (var i = 0, len = slides.length; i < len; i++) {\n var style = slides[i].style;\n var direction = Components.Direction.value;\n\n if (i !== 0) {\n style[MARGIN_TYPE[direction][0]] = this.value / 2 + 'px';\n } else {\n style[MARGIN_TYPE[direction][0]] = '';\n }\n\n if (i !== slides.length - 1) {\n style[MARGIN_TYPE[direction][1]] = this.value / 2 + 'px';\n } else {\n style[MARGIN_TYPE[direction][1]] = '';\n }\n }\n },\n\n /**\n * Removes gaps from the slides.\n *\n * @param {HTMLCollection} slides\n * @returns {Void}\n */\n remove: function remove(slides) {\n for (var i = 0, len = slides.length; i < len; i++) {\n var style = slides[i].style;\n style.marginLeft = '';\n style.marginRight = '';\n }\n }\n };\n define(Gaps, 'value', {\n /**\n * Gets value of the gap.\n *\n * @returns {Number}\n */\n get: function get() {\n return toInt(Glide.settings.gap);\n }\n });\n define(Gaps, 'grow', {\n /**\n * Gets additional dimentions value caused by gaps.\n * Used to increase width of the slides wrapper.\n *\n * @returns {Number}\n */\n get: function get() {\n return Gaps.value * (Components.Sizes.length - 1);\n }\n });\n define(Gaps, 'reductor', {\n /**\n * Gets reduction value caused by gaps.\n * Used to subtract width of the slides.\n *\n * @returns {Number}\n */\n get: function get() {\n var perView = Glide.settings.perView;\n return Gaps.value * (perView - 1) / perView;\n }\n });\n /**\n * Apply calculated gaps:\n * - after building, so slides (including clones) will receive proper margins\n * - on updating via API, to recalculate gaps with new options\n */\n\n Events.on(['build.after', 'update'], throttle(function () {\n Gaps.apply(Components.Html.wrapper.children);\n }, 30));\n /**\n * Remove gaps:\n * - on destroying to bring markup to its inital state\n */\n\n Events.on('destroy', function () {\n Gaps.remove(Components.Html.wrapper.children);\n });\n return Gaps;\n}\n/**\n * Finds siblings nodes of the passed node.\n *\n * @param {Element} node\n * @return {Array}\n */\n\n\nfunction siblings(node) {\n if (node && node.parentNode) {\n var n = node.parentNode.firstChild;\n var matched = [];\n\n for (; n; n = n.nextSibling) {\n if (n.nodeType === 1 && n !== node) {\n matched.push(n);\n }\n }\n\n return matched;\n }\n\n return [];\n}\n/**\n * Checks if passed node exist and is a valid element.\n *\n * @param {Element} node\n * @return {Boolean}\n */\n\n\nfunction exist(node) {\n if (node && node instanceof window.HTMLElement) {\n return true;\n }\n\n return false;\n}\n\nvar TRACK_SELECTOR = '[data-glide-el=\"track\"]';\n\nfunction Html(Glide, Components) {\n var Html = {\n /**\n * Setup slider HTML nodes.\n *\n * @param {Glide} glide\n */\n mount: function mount() {\n this.root = Glide.selector;\n this.track = this.root.querySelector(TRACK_SELECTOR);\n this.slides = Array.prototype.slice.call(this.wrapper.children).filter(function (slide) {\n return !slide.classList.contains(Glide.settings.classes.cloneSlide);\n });\n }\n };\n define(Html, 'root', {\n /**\n * Gets node of the glide main element.\n *\n * @return {Object}\n */\n get: function get() {\n return Html._r;\n },\n\n /**\n * Sets node of the glide main element.\n *\n * @return {Object}\n */\n set: function set(r) {\n if (isString(r)) {\n r = document.querySelector(r);\n }\n\n if (exist(r)) {\n Html._r = r;\n } else {\n warn('Root element must be a existing Html node');\n }\n }\n });\n define(Html, 'track', {\n /**\n * Gets node of the glide track with slides.\n *\n * @return {Object}\n */\n get: function get() {\n return Html._t;\n },\n\n /**\n * Sets node of the glide track with slides.\n *\n * @return {Object}\n */\n set: function set(t) {\n if (exist(t)) {\n Html._t = t;\n } else {\n warn('Could not find track element. Please use ' + TRACK_SELECTOR + ' attribute.');\n }\n }\n });\n define(Html, 'wrapper', {\n /**\n * Gets node of the slides wrapper.\n *\n * @return {Object}\n */\n get: function get() {\n return Html.track.children[0];\n }\n });\n return Html;\n}\n\nfunction Peek(Glide, Components, Events) {\n var Peek = {\n /**\n * Setups how much to peek based on settings.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.value = Glide.settings.peek;\n }\n };\n define(Peek, 'value', {\n /**\n * Gets value of the peek.\n *\n * @returns {Number|Object}\n */\n get: function get() {\n return Peek._v;\n },\n\n /**\n * Sets value of the peek.\n *\n * @param {Number|Object} value\n * @return {Void}\n */\n set: function set(value) {\n if (isObject(value)) {\n value.before = toInt(value.before);\n value.after = toInt(value.after);\n } else {\n value = toInt(value);\n }\n\n Peek._v = value;\n }\n });\n define(Peek, 'reductor', {\n /**\n * Gets reduction value caused by peek.\n *\n * @returns {Number}\n */\n get: function get() {\n var value = Peek.value;\n var perView = Glide.settings.perView;\n\n if (isObject(value)) {\n return value.before / perView + value.after / perView;\n }\n\n return value * 2 / perView;\n }\n });\n /**\n * Recalculate peeking sizes on:\n * - when resizing window to update to proper percents\n */\n\n Events.on(['resize', 'update'], function () {\n Peek.mount();\n });\n return Peek;\n}\n\nfunction Move(Glide, Components, Events) {\n var Move = {\n /**\n * Constructs move component.\n *\n * @returns {Void}\n */\n mount: function mount() {\n this._o = 0;\n },\n\n /**\n * Calculates a movement value based on passed offset and currently active index.\n *\n * @param {Number} offset\n * @return {Void}\n */\n make: function make() {\n var _this = this;\n\n var offset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n this.offset = offset;\n Events.emit('move', {\n movement: this.value\n });\n Components.Transition.after(function () {\n Events.emit('move.after', {\n movement: _this.value\n });\n });\n }\n };\n define(Move, 'offset', {\n /**\n * Gets an offset value used to modify current translate.\n *\n * @return {Object}\n */\n get: function get() {\n return Move._o;\n },\n\n /**\n * Sets an offset value used to modify current translate.\n *\n * @return {Object}\n */\n set: function set(value) {\n Move._o = !isUndefined(value) ? toInt(value) : 0;\n }\n });\n define(Move, 'translate', {\n /**\n * Gets a raw movement value.\n *\n * @return {Number}\n */\n get: function get() {\n return Components.Sizes.slideWidth * Glide.index;\n }\n });\n define(Move, 'value', {\n /**\n * Gets an actual movement value corrected by offset.\n *\n * @return {Number}\n */\n get: function get() {\n var offset = this.offset;\n var translate = this.translate;\n\n if (Components.Direction.is('rtl')) {\n return translate + offset;\n }\n\n return translate - offset;\n }\n });\n /**\n * Make movement to proper slide on:\n * - before build, so glide will start at `startAt` index\n * - on each standard run to move to newly calculated index\n */\n\n Events.on(['build.before', 'run'], function () {\n Move.make();\n });\n return Move;\n}\n\nfunction Sizes(Glide, Components, Events) {\n var Sizes = {\n /**\n * Setups dimentions of slides.\n *\n * @return {Void}\n */\n setupSlides: function setupSlides() {\n var width = this.slideWidth + 'px';\n var slides = Components.Html.slides;\n\n for (var i = 0; i < slides.length; i++) {\n slides[i].style.width = width;\n }\n },\n\n /**\n * Setups dimentions of slides wrapper.\n *\n * @return {Void}\n */\n setupWrapper: function setupWrapper(dimention) {\n Components.Html.wrapper.style.width = this.wrapperSize + 'px';\n },\n\n /**\n * Removes applied styles from HTML elements.\n *\n * @returns {Void}\n */\n remove: function remove() {\n var slides = Components.Html.slides;\n\n for (var i = 0; i < slides.length; i++) {\n slides[i].style.width = '';\n }\n\n Components.Html.wrapper.style.width = '';\n }\n };\n define(Sizes, 'length', {\n /**\n * Gets count number of the slides.\n *\n * @return {Number}\n */\n get: function get() {\n return Components.Html.slides.length;\n }\n });\n define(Sizes, 'width', {\n /**\n * Gets width value of the glide.\n *\n * @return {Number}\n */\n get: function get() {\n return Components.Html.root.offsetWidth;\n }\n });\n define(Sizes, 'wrapperSize', {\n /**\n * Gets size of the slides wrapper.\n *\n * @return {Number}\n */\n get: function get() {\n return Sizes.slideWidth * Sizes.length + Components.Gaps.grow + Components.Clones.grow;\n }\n });\n define(Sizes, 'slideWidth', {\n /**\n * Gets width value of the single slide.\n *\n * @return {Number}\n */\n get: function get() {\n return Sizes.width / Glide.settings.perView - Components.Peek.reductor - Components.Gaps.reductor;\n }\n });\n /**\n * Apply calculated glide's dimensions:\n * - before building, so other dimentions (e.g. translate) will be calculated propertly\n * - when resizing window to recalculate sildes dimensions\n * - on updating via API, to calculate dimensions based on new options\n */\n\n Events.on(['build.before', 'resize', 'update'], function () {\n Sizes.setupSlides();\n Sizes.setupWrapper();\n });\n /**\n * Remove calculated glide's dimensions:\n * - on destoting to bring markup to its inital state\n */\n\n Events.on('destroy', function () {\n Sizes.remove();\n });\n return Sizes;\n}\n\nfunction Build(Glide, Components, Events) {\n var Build = {\n /**\n * Init glide building. Adds classes, sets\n * dimensions and setups initial state.\n *\n * @return {Void}\n */\n mount: function mount() {\n Events.emit('build.before');\n this.typeClass();\n this.activeClass();\n Events.emit('build.after');\n },\n\n /**\n * Adds `type` class to the glide element.\n *\n * @return {Void}\n */\n typeClass: function typeClass() {\n Components.Html.root.classList.add(Glide.settings.classes[Glide.settings.type]);\n },\n\n /**\n * Sets active class to current slide.\n *\n * @return {Void}\n */\n activeClass: function activeClass() {\n var classes = Glide.settings.classes;\n var slide = Components.Html.slides[Glide.index];\n\n if (slide) {\n slide.classList.add(classes.activeSlide);\n siblings(slide).forEach(function (sibling) {\n sibling.classList.remove(classes.activeSlide);\n });\n }\n },\n\n /**\n * Removes HTML classes applied at building.\n *\n * @return {Void}\n */\n removeClasses: function removeClasses() {\n var classes = Glide.settings.classes;\n Components.Html.root.classList.remove(classes[Glide.settings.type]);\n Components.Html.slides.forEach(function (sibling) {\n sibling.classList.remove(classes.activeSlide);\n });\n }\n };\n /**\n * Clear building classes:\n * - on destroying to bring HTML to its initial state\n * - on updating to remove classes before remounting component\n */\n\n Events.on(['destroy', 'update'], function () {\n Build.removeClasses();\n });\n /**\n * Remount component:\n * - on resizing of the window to calculate new dimentions\n * - on updating settings via API\n */\n\n Events.on(['resize', 'update'], function () {\n Build.mount();\n });\n /**\n * Swap active class of current slide:\n * - after each move to the new index\n */\n\n Events.on('move.after', function () {\n Build.activeClass();\n });\n return Build;\n}\n\nfunction Clones(Glide, Components, Events) {\n var Clones = {\n /**\n * Create pattern map and collect slides to be cloned.\n */\n mount: function mount() {\n this.items = [];\n\n if (Glide.isType('carousel')) {\n this.items = this.collect();\n }\n },\n\n /**\n * Collect clones with pattern.\n *\n * @return {Void}\n */\n collect: function collect() {\n var items = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var slides = Components.Html.slides;\n var _Glide$settings = Glide.settings,\n perView = _Glide$settings.perView,\n classes = _Glide$settings.classes;\n var peekIncrementer = +!!Glide.settings.peek;\n var part = perView + peekIncrementer;\n var start = slides.slice(0, part);\n var end = slides.slice(-part);\n\n for (var r = 0; r < Math.max(1, Math.floor(perView / slides.length)); r++) {\n for (var i = 0; i < start.length; i++) {\n var clone = start[i].cloneNode(true);\n clone.classList.add(classes.cloneSlide);\n items.push(clone);\n }\n\n for (var _i = 0; _i < end.length; _i++) {\n var _clone = end[_i].cloneNode(true);\n\n _clone.classList.add(classes.cloneSlide);\n\n items.unshift(_clone);\n }\n }\n\n return items;\n },\n\n /**\n * Append cloned slides with generated pattern.\n *\n * @return {Void}\n */\n append: function append() {\n var items = this.items;\n var _Components$Html = Components.Html,\n wrapper = _Components$Html.wrapper,\n slides = _Components$Html.slides;\n var half = Math.floor(items.length / 2);\n var prepend = items.slice(0, half).reverse();\n var append = items.slice(half, items.length);\n var width = Components.Sizes.slideWidth + 'px';\n\n for (var i = 0; i < append.length; i++) {\n wrapper.appendChild(append[i]);\n }\n\n for (var _i2 = 0; _i2 < prepend.length; _i2++) {\n wrapper.insertBefore(prepend[_i2], slides[0]);\n }\n\n for (var _i3 = 0; _i3 < items.length; _i3++) {\n items[_i3].style.width = width;\n }\n },\n\n /**\n * Remove all cloned slides.\n *\n * @return {Void}\n */\n remove: function remove() {\n var items = this.items;\n\n for (var i = 0; i < items.length; i++) {\n Components.Html.wrapper.removeChild(items[i]);\n }\n }\n };\n define(Clones, 'grow', {\n /**\n * Gets additional dimentions value caused by clones.\n *\n * @return {Number}\n */\n get: function get() {\n return (Components.Sizes.slideWidth + Components.Gaps.value) * Clones.items.length;\n }\n });\n /**\n * Append additional slide's clones:\n * - while glide's type is `carousel`\n */\n\n Events.on('update', function () {\n Clones.remove();\n Clones.mount();\n Clones.append();\n });\n /**\n * Append additional slide's clones:\n * - while glide's type is `carousel`\n */\n\n Events.on('build.before', function () {\n if (Glide.isType('carousel')) {\n Clones.append();\n }\n });\n /**\n * Remove clones HTMLElements:\n * - on destroying, to bring HTML to its initial state\n */\n\n Events.on('destroy', function () {\n Clones.remove();\n });\n return Clones;\n}\n\nvar EventsBinder = function () {\n /**\n * Construct a EventsBinder instance.\n */\n function EventsBinder() {\n var listeners = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n classCallCheck(this, EventsBinder);\n this.listeners = listeners;\n }\n /**\n * Adds events listeners to arrows HTML elements.\n *\n * @param {String|Array} events\n * @param {Element|Window|Document} el\n * @param {Function} closure\n * @param {Boolean|Object} capture\n * @return {Void}\n */\n\n\n createClass(EventsBinder, [{\n key: 'on',\n value: function on(events, el, closure) {\n var capture = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n if (isString(events)) {\n events = [events];\n }\n\n for (var i = 0; i < events.length; i++) {\n this.listeners[events[i]] = closure;\n el.addEventListener(events[i], this.listeners[events[i]], capture);\n }\n }\n /**\n * Removes event listeners from arrows HTML elements.\n *\n * @param {String|Array} events\n * @param {Element|Window|Document} el\n * @param {Boolean|Object} capture\n * @return {Void}\n */\n\n }, {\n key: 'off',\n value: function off(events, el) {\n var capture = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n if (isString(events)) {\n events = [events];\n }\n\n for (var i = 0; i < events.length; i++) {\n el.removeEventListener(events[i], this.listeners[events[i]], capture);\n }\n }\n /**\n * Destroy collected listeners.\n *\n * @returns {Void}\n */\n\n }, {\n key: 'destroy',\n value: function destroy() {\n delete this.listeners;\n }\n }]);\n return EventsBinder;\n}();\n\nfunction Resize(Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var Resize = {\n /**\n * Initializes window bindings.\n */\n mount: function mount() {\n this.bind();\n },\n\n /**\n * Binds `rezsize` listener to the window.\n * It's a costly event, so we are debouncing it.\n *\n * @return {Void}\n */\n bind: function bind() {\n Binder.on('resize', window, throttle(function () {\n Events.emit('resize');\n }, Glide.settings.throttle));\n },\n\n /**\n * Unbinds listeners from the window.\n *\n * @return {Void}\n */\n unbind: function unbind() {\n Binder.off('resize', window);\n }\n };\n /**\n * Remove bindings from window:\n * - on destroying, to remove added EventListener\n */\n\n Events.on('destroy', function () {\n Resize.unbind();\n Binder.destroy();\n });\n return Resize;\n}\n\nvar VALID_DIRECTIONS = ['ltr', 'rtl'];\nvar FLIPED_MOVEMENTS = {\n '>': '<',\n '<': '>',\n '=': '='\n};\n\nfunction Direction(Glide, Components, Events) {\n var Direction = {\n /**\n * Setups gap value based on settings.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.value = Glide.settings.direction;\n },\n\n /**\n * Resolves pattern based on direction value\n *\n * @param {String} pattern\n * @returns {String}\n */\n resolve: function resolve(pattern) {\n var token = pattern.slice(0, 1);\n\n if (this.is('rtl')) {\n return pattern.split(token).join(FLIPED_MOVEMENTS[token]);\n }\n\n return pattern;\n },\n\n /**\n * Checks value of direction mode.\n *\n * @param {String} direction\n * @returns {Boolean}\n */\n is: function is(direction) {\n return this.value === direction;\n },\n\n /**\n * Applies direction class to the root HTML element.\n *\n * @return {Void}\n */\n addClass: function addClass() {\n Components.Html.root.classList.add(Glide.settings.classes.direction[this.value]);\n },\n\n /**\n * Removes direction class from the root HTML element.\n *\n * @return {Void}\n */\n removeClass: function removeClass() {\n Components.Html.root.classList.remove(Glide.settings.classes.direction[this.value]);\n }\n };\n define(Direction, 'value', {\n /**\n * Gets value of the direction.\n *\n * @returns {Number}\n */\n get: function get() {\n return Direction._v;\n },\n\n /**\n * Sets value of the direction.\n *\n * @param {String} value\n * @return {Void}\n */\n set: function set(value) {\n if (VALID_DIRECTIONS.indexOf(value) > -1) {\n Direction._v = value;\n } else {\n warn('Direction value must be `ltr` or `rtl`');\n }\n }\n });\n /**\n * Clear direction class:\n * - on destroy to bring HTML to its initial state\n * - on update to remove class before reappling bellow\n */\n\n Events.on(['destroy', 'update'], function () {\n Direction.removeClass();\n });\n /**\n * Remount component:\n * - on update to reflect changes in direction value\n */\n\n Events.on('update', function () {\n Direction.mount();\n });\n /**\n * Apply direction class:\n * - before building to apply class for the first time\n * - on updating to reapply direction class that may changed\n */\n\n Events.on(['build.before', 'update'], function () {\n Direction.addClass();\n });\n return Direction;\n}\n/**\n * Reflects value of glide movement.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\n\n\nfunction Rtl(Glide, Components) {\n return {\n /**\n * Negates the passed translate if glide is in RTL option.\n *\n * @param {Number} translate\n * @return {Number}\n */\n modify: function modify(translate) {\n if (Components.Direction.is('rtl')) {\n return -translate;\n }\n\n return translate;\n }\n };\n}\n/**\n * Updates glide movement with a `gap` settings.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\n\n\nfunction Gap(Glide, Components) {\n return {\n /**\n * Modifies passed translate value with number in the `gap` settings.\n *\n * @param {Number} translate\n * @return {Number}\n */\n modify: function modify(translate) {\n return translate + Components.Gaps.value * Glide.index;\n }\n };\n}\n/**\n * Updates glide movement with width of additional clones width.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\n\n\nfunction Grow(Glide, Components) {\n return {\n /**\n * Adds to the passed translate width of the half of clones.\n *\n * @param {Number} translate\n * @return {Number}\n */\n modify: function modify(translate) {\n return translate + Components.Clones.grow / 2;\n }\n };\n}\n/**\n * Updates glide movement with a `peek` settings.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\n\n\nfunction Peeking(Glide, Components) {\n return {\n /**\n * Modifies passed translate value with a `peek` setting.\n *\n * @param {Number} translate\n * @return {Number}\n */\n modify: function modify(translate) {\n if (Glide.settings.focusAt >= 0) {\n var peek = Components.Peek.value;\n\n if (isObject(peek)) {\n return translate - peek.before;\n }\n\n return translate - peek;\n }\n\n return translate;\n }\n };\n}\n/**\n * Updates glide movement with a `focusAt` settings.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\n\n\nfunction Focusing(Glide, Components) {\n return {\n /**\n * Modifies passed translate value with index in the `focusAt` setting.\n *\n * @param {Number} translate\n * @return {Number}\n */\n modify: function modify(translate) {\n var gap = Components.Gaps.value;\n var width = Components.Sizes.width;\n var focusAt = Glide.settings.focusAt;\n var slideWidth = Components.Sizes.slideWidth;\n\n if (focusAt === 'center') {\n return translate - (width / 2 - slideWidth / 2);\n }\n\n return translate - slideWidth * focusAt - gap * focusAt;\n }\n };\n}\n/**\n * Applies diffrent transformers on translate value.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\n\n\nfunction mutator(Glide, Components, Events) {\n /**\n * Merge instance transformers with collection of default transformers.\n * It's important that the Rtl component be last on the list,\n * so it reflects all previous transformations.\n *\n * @type {Array}\n */\n var TRANSFORMERS = [Gap, Grow, Peeking, Focusing].concat(Glide._t, [Rtl]);\n return {\n /**\n * Piplines translate value with registered transformers.\n *\n * @param {Number} translate\n * @return {Number}\n */\n mutate: function mutate(translate) {\n for (var i = 0; i < TRANSFORMERS.length; i++) {\n var transformer = TRANSFORMERS[i];\n\n if (isFunction(transformer) && isFunction(transformer().modify)) {\n translate = transformer(Glide, Components, Events).modify(translate);\n } else {\n warn('Transformer should be a function that returns an object with `modify()` method');\n }\n }\n\n return translate;\n }\n };\n}\n\nfunction Translate(Glide, Components, Events) {\n var Translate = {\n /**\n * Sets value of translate on HTML element.\n *\n * @param {Number} value\n * @return {Void}\n */\n set: function set(value) {\n var transform = mutator(Glide, Components).mutate(value);\n Components.Html.wrapper.style.transform = 'translate3d(' + -1 * transform + 'px, 0px, 0px)';\n },\n\n /**\n * Removes value of translate from HTML element.\n *\n * @return {Void}\n */\n remove: function remove() {\n Components.Html.wrapper.style.transform = '';\n }\n };\n /**\n * Set new translate value:\n * - on move to reflect index change\n * - on updating via API to reflect possible changes in options\n */\n\n Events.on('move', function (context) {\n var gap = Components.Gaps.value;\n var length = Components.Sizes.length;\n var width = Components.Sizes.slideWidth;\n\n if (Glide.isType('carousel') && Components.Run.isOffset('<')) {\n Components.Transition.after(function () {\n Events.emit('translate.jump');\n Translate.set(width * (length - 1));\n });\n return Translate.set(-width - gap * length);\n }\n\n if (Glide.isType('carousel') && Components.Run.isOffset('>')) {\n Components.Transition.after(function () {\n Events.emit('translate.jump');\n Translate.set(0);\n });\n return Translate.set(width * length + gap * length);\n }\n\n return Translate.set(context.movement);\n });\n /**\n * Remove translate:\n * - on destroying to bring markup to its inital state\n */\n\n Events.on('destroy', function () {\n Translate.remove();\n });\n return Translate;\n}\n\nfunction Transition(Glide, Components, Events) {\n /**\n * Holds inactivity status of transition.\n * When true transition is not applied.\n *\n * @type {Boolean}\n */\n var disabled = false;\n var Transition = {\n /**\n * Composes string of the CSS transition.\n *\n * @param {String} property\n * @return {String}\n */\n compose: function compose(property) {\n var settings = Glide.settings;\n\n if (!disabled) {\n return property + ' ' + this.duration + 'ms ' + settings.animationTimingFunc;\n }\n\n return property + ' 0ms ' + settings.animationTimingFunc;\n },\n\n /**\n * Sets value of transition on HTML element.\n *\n * @param {String=} property\n * @return {Void}\n */\n set: function set() {\n var property = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'transform';\n Components.Html.wrapper.style.transition = this.compose(property);\n },\n\n /**\n * Removes value of transition from HTML element.\n *\n * @return {Void}\n */\n remove: function remove() {\n Components.Html.wrapper.style.transition = '';\n },\n\n /**\n * Runs callback after animation.\n *\n * @param {Function} callback\n * @return {Void}\n */\n after: function after(callback) {\n setTimeout(function () {\n callback();\n }, this.duration);\n },\n\n /**\n * Enable transition.\n *\n * @return {Void}\n */\n enable: function enable() {\n disabled = false;\n this.set();\n },\n\n /**\n * Disable transition.\n *\n * @return {Void}\n */\n disable: function disable() {\n disabled = true;\n this.set();\n }\n };\n define(Transition, 'duration', {\n /**\n * Gets duration of the transition based\n * on currently running animation type.\n *\n * @return {Number}\n */\n get: function get() {\n var settings = Glide.settings;\n\n if (Glide.isType('slider') && Components.Run.offset) {\n return settings.rewindDuration;\n }\n\n return settings.animationDuration;\n }\n });\n /**\n * Set transition `style` value:\n * - on each moving, because it may be cleared by offset move\n */\n\n Events.on('move', function () {\n Transition.set();\n });\n /**\n * Disable transition:\n * - before initial build to avoid transitioning from `0` to `startAt` index\n * - while resizing window and recalculating dimentions\n * - on jumping from offset transition at start and end edges in `carousel` type\n */\n\n Events.on(['build.before', 'resize', 'translate.jump'], function () {\n Transition.disable();\n });\n /**\n * Enable transition:\n * - on each running, because it may be disabled by offset move\n */\n\n Events.on('run', function () {\n Transition.enable();\n });\n /**\n * Remove transition:\n * - on destroying to bring markup to its inital state\n */\n\n Events.on('destroy', function () {\n Transition.remove();\n });\n return Transition;\n}\n/**\n * Test via a getter in the options object to see\n * if the passive property is accessed.\n *\n * @see https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md#feature-detection\n */\n\n\nvar supportsPassive = false;\n\ntry {\n var opts = Object.defineProperty({}, 'passive', {\n get: function get() {\n supportsPassive = true;\n }\n });\n window.addEventListener('testPassive', null, opts);\n window.removeEventListener('testPassive', null, opts);\n} catch (e) {}\n\nvar supportsPassive$1 = supportsPassive;\nvar START_EVENTS = ['touchstart', 'mousedown'];\nvar MOVE_EVENTS = ['touchmove', 'mousemove'];\nvar END_EVENTS = ['touchend', 'touchcancel', 'mouseup', 'mouseleave'];\nvar MOUSE_EVENTS = ['mousedown', 'mousemove', 'mouseup', 'mouseleave'];\n\nfunction Swipe(Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var swipeSin = 0;\n var swipeStartX = 0;\n var swipeStartY = 0;\n var disabled = false;\n var capture = supportsPassive$1 ? {\n passive: true\n } : false;\n var Swipe = {\n /**\n * Initializes swipe bindings.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.bindSwipeStart();\n },\n\n /**\n * Handler for `swipestart` event. Calculates entry points of the user's tap.\n *\n * @param {Object} event\n * @return {Void}\n */\n start: function start(event) {\n if (!disabled && !Glide.disabled) {\n this.disable();\n var swipe = this.touches(event);\n swipeSin = null;\n swipeStartX = toInt(swipe.pageX);\n swipeStartY = toInt(swipe.pageY);\n this.bindSwipeMove();\n this.bindSwipeEnd();\n Events.emit('swipe.start');\n }\n },\n\n /**\n * Handler for `swipemove` event. Calculates user's tap angle and distance.\n *\n * @param {Object} event\n */\n move: function move(event) {\n if (!Glide.disabled) {\n var _Glide$settings = Glide.settings,\n touchAngle = _Glide$settings.touchAngle,\n touchRatio = _Glide$settings.touchRatio,\n classes = _Glide$settings.classes;\n var swipe = this.touches(event);\n var subExSx = toInt(swipe.pageX) - swipeStartX;\n var subEySy = toInt(swipe.pageY) - swipeStartY;\n var powEX = Math.abs(subExSx << 2);\n var powEY = Math.abs(subEySy << 2);\n var swipeHypotenuse = Math.sqrt(powEX + powEY);\n var swipeCathetus = Math.sqrt(powEY);\n swipeSin = Math.asin(swipeCathetus / swipeHypotenuse);\n\n if (swipeSin * 180 / Math.PI < touchAngle) {\n event.stopPropagation();\n Components.Move.make(subExSx * toFloat(touchRatio));\n Components.Html.root.classList.add(classes.dragging);\n Events.emit('swipe.move');\n } else {\n return false;\n }\n }\n },\n\n /**\n * Handler for `swipeend` event. Finitializes user's tap and decides about glide move.\n *\n * @param {Object} event\n * @return {Void}\n */\n end: function end(event) {\n if (!Glide.disabled) {\n var settings = Glide.settings;\n var swipe = this.touches(event);\n var threshold = this.threshold(event);\n var swipeDistance = swipe.pageX - swipeStartX;\n var swipeDeg = swipeSin * 180 / Math.PI;\n var steps = Math.round(swipeDistance / Components.Sizes.slideWidth);\n this.enable();\n\n if (swipeDistance > threshold && swipeDeg < settings.touchAngle) {\n // While swipe is positive and greater than threshold move backward.\n if (settings.perTouch) {\n steps = Math.min(steps, toInt(settings.perTouch));\n }\n\n if (Components.Direction.is('rtl')) {\n steps = -steps;\n }\n\n Components.Run.make(Components.Direction.resolve('<' + steps));\n } else if (swipeDistance < -threshold && swipeDeg < settings.touchAngle) {\n // While swipe is negative and lower than negative threshold move forward.\n if (settings.perTouch) {\n steps = Math.max(steps, -toInt(settings.perTouch));\n }\n\n if (Components.Direction.is('rtl')) {\n steps = -steps;\n }\n\n Components.Run.make(Components.Direction.resolve('>' + steps));\n } else {\n // While swipe don't reach distance apply previous transform.\n Components.Move.make();\n }\n\n Components.Html.root.classList.remove(settings.classes.dragging);\n this.unbindSwipeMove();\n this.unbindSwipeEnd();\n Events.emit('swipe.end');\n }\n },\n\n /**\n * Binds swipe's starting event.\n *\n * @return {Void}\n */\n bindSwipeStart: function bindSwipeStart() {\n var _this = this;\n\n var settings = Glide.settings;\n\n if (settings.swipeThreshold) {\n Binder.on(START_EVENTS[0], Components.Html.wrapper, function (event) {\n _this.start(event);\n }, capture);\n }\n\n if (settings.dragThreshold) {\n Binder.on(START_EVENTS[1], Components.Html.wrapper, function (event) {\n _this.start(event);\n }, capture);\n }\n },\n\n /**\n * Unbinds swipe's starting event.\n *\n * @return {Void}\n */\n unbindSwipeStart: function unbindSwipeStart() {\n Binder.off(START_EVENTS[0], Components.Html.wrapper, capture);\n Binder.off(START_EVENTS[1], Components.Html.wrapper, capture);\n },\n\n /**\n * Binds swipe's moving event.\n *\n * @return {Void}\n */\n bindSwipeMove: function bindSwipeMove() {\n var _this2 = this;\n\n Binder.on(MOVE_EVENTS, Components.Html.wrapper, throttle(function (event) {\n _this2.move(event);\n }, Glide.settings.throttle), capture);\n },\n\n /**\n * Unbinds swipe's moving event.\n *\n * @return {Void}\n */\n unbindSwipeMove: function unbindSwipeMove() {\n Binder.off(MOVE_EVENTS, Components.Html.wrapper, capture);\n },\n\n /**\n * Binds swipe's ending event.\n *\n * @return {Void}\n */\n bindSwipeEnd: function bindSwipeEnd() {\n var _this3 = this;\n\n Binder.on(END_EVENTS, Components.Html.wrapper, function (event) {\n _this3.end(event);\n });\n },\n\n /**\n * Unbinds swipe's ending event.\n *\n * @return {Void}\n */\n unbindSwipeEnd: function unbindSwipeEnd() {\n Binder.off(END_EVENTS, Components.Html.wrapper);\n },\n\n /**\n * Normalizes event touches points accorting to different types.\n *\n * @param {Object} event\n */\n touches: function touches(event) {\n if (MOUSE_EVENTS.indexOf(event.type) > -1) {\n return event;\n }\n\n return event.touches[0] || event.changedTouches[0];\n },\n\n /**\n * Gets value of minimum swipe distance settings based on event type.\n *\n * @return {Number}\n */\n threshold: function threshold(event) {\n var settings = Glide.settings;\n\n if (MOUSE_EVENTS.indexOf(event.type) > -1) {\n return settings.dragThreshold;\n }\n\n return settings.swipeThreshold;\n },\n\n /**\n * Enables swipe event.\n *\n * @return {self}\n */\n enable: function enable() {\n disabled = false;\n Components.Transition.enable();\n return this;\n },\n\n /**\n * Disables swipe event.\n *\n * @return {self}\n */\n disable: function disable() {\n disabled = true;\n Components.Transition.disable();\n return this;\n }\n };\n /**\n * Add component class:\n * - after initial building\n */\n\n Events.on('build.after', function () {\n Components.Html.root.classList.add(Glide.settings.classes.swipeable);\n });\n /**\n * Remove swiping bindings:\n * - on destroying, to remove added EventListeners\n */\n\n Events.on('destroy', function () {\n Swipe.unbindSwipeStart();\n Swipe.unbindSwipeMove();\n Swipe.unbindSwipeEnd();\n Binder.destroy();\n });\n return Swipe;\n}\n\nfunction Images(Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var Images = {\n /**\n * Binds listener to glide wrapper.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.bind();\n },\n\n /**\n * Binds `dragstart` event on wrapper to prevent dragging images.\n *\n * @return {Void}\n */\n bind: function bind() {\n Binder.on('dragstart', Components.Html.wrapper, this.dragstart);\n },\n\n /**\n * Unbinds `dragstart` event on wrapper.\n *\n * @return {Void}\n */\n unbind: function unbind() {\n Binder.off('dragstart', Components.Html.wrapper);\n },\n\n /**\n * Event handler. Prevents dragging.\n *\n * @return {Void}\n */\n dragstart: function dragstart(event) {\n event.preventDefault();\n }\n };\n /**\n * Remove bindings from images:\n * - on destroying, to remove added EventListeners\n */\n\n Events.on('destroy', function () {\n Images.unbind();\n Binder.destroy();\n });\n return Images;\n}\n\nfunction Anchors(Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n /**\n * Holds detaching status of anchors.\n * Prevents detaching of already detached anchors.\n *\n * @private\n * @type {Boolean}\n */\n\n var detached = false;\n /**\n * Holds preventing status of anchors.\n * If `true` redirection after click will be disabled.\n *\n * @private\n * @type {Boolean}\n */\n\n var prevented = false;\n var Anchors = {\n /**\n * Setups a initial state of anchors component.\n *\n * @returns {Void}\n */\n mount: function mount() {\n /**\n * Holds collection of anchors elements.\n *\n * @private\n * @type {HTMLCollection}\n */\n this._a = Components.Html.wrapper.querySelectorAll('a');\n this.bind();\n },\n\n /**\n * Binds events to anchors inside a track.\n *\n * @return {Void}\n */\n bind: function bind() {\n Binder.on('click', Components.Html.wrapper, this.click);\n },\n\n /**\n * Unbinds events attached to anchors inside a track.\n *\n * @return {Void}\n */\n unbind: function unbind() {\n Binder.off('click', Components.Html.wrapper);\n },\n\n /**\n * Handler for click event. Prevents clicks when glide is in `prevent` status.\n *\n * @param {Object} event\n * @return {Void}\n */\n click: function click(event) {\n if (prevented) {\n event.stopPropagation();\n event.preventDefault();\n }\n },\n\n /**\n * Detaches anchors click event inside glide.\n *\n * @return {self}\n */\n detach: function detach() {\n prevented = true;\n\n if (!detached) {\n for (var i = 0; i < this.items.length; i++) {\n this.items[i].draggable = false;\n this.items[i].setAttribute('data-href', this.items[i].getAttribute('href'));\n this.items[i].removeAttribute('href');\n }\n\n detached = true;\n }\n\n return this;\n },\n\n /**\n * Attaches anchors click events inside glide.\n *\n * @return {self}\n */\n attach: function attach() {\n prevented = false;\n\n if (detached) {\n for (var i = 0; i < this.items.length; i++) {\n this.items[i].draggable = true;\n this.items[i].setAttribute('href', this.items[i].getAttribute('data-href'));\n }\n\n detached = false;\n }\n\n return this;\n }\n };\n define(Anchors, 'items', {\n /**\n * Gets collection of the arrows HTML elements.\n *\n * @return {HTMLElement[]}\n */\n get: function get() {\n return Anchors._a;\n }\n });\n /**\n * Detach anchors inside slides:\n * - on swiping, so they won't redirect to its `href` attributes\n */\n\n Events.on('swipe.move', function () {\n Anchors.detach();\n });\n /**\n * Attach anchors inside slides:\n * - after swiping and transitions ends, so they can redirect after click again\n */\n\n Events.on('swipe.end', function () {\n Components.Transition.after(function () {\n Anchors.attach();\n });\n });\n /**\n * Unbind anchors inside slides:\n * - on destroying, to bring anchors to its initial state\n */\n\n Events.on('destroy', function () {\n Anchors.attach();\n Anchors.unbind();\n Binder.destroy();\n });\n return Anchors;\n}\n\nvar NAV_SELECTOR = '[data-glide-el=\"controls[nav]\"]';\nvar CONTROLS_SELECTOR = '[data-glide-el^=\"controls\"]';\n\nfunction Controls(Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var capture = supportsPassive$1 ? {\n passive: true\n } : false;\n var Controls = {\n /**\n * Inits arrows. Binds events listeners\n * to the arrows HTML elements.\n *\n * @return {Void}\n */\n mount: function mount() {\n /**\n * Collection of navigation HTML elements.\n *\n * @private\n * @type {HTMLCollection}\n */\n this._n = Components.Html.root.querySelectorAll(NAV_SELECTOR);\n /**\n * Collection of controls HTML elements.\n *\n * @private\n * @type {HTMLCollection}\n */\n\n this._c = Components.Html.root.querySelectorAll(CONTROLS_SELECTOR);\n this.addBindings();\n },\n\n /**\n * Sets active class to current slide.\n *\n * @return {Void}\n */\n setActive: function setActive() {\n for (var i = 0; i < this._n.length; i++) {\n this.addClass(this._n[i].children);\n }\n },\n\n /**\n * Removes active class to current slide.\n *\n * @return {Void}\n */\n removeActive: function removeActive() {\n for (var i = 0; i < this._n.length; i++) {\n this.removeClass(this._n[i].children);\n }\n },\n\n /**\n * Toggles active class on items inside navigation.\n *\n * @param {HTMLElement} controls\n * @return {Void}\n */\n addClass: function addClass(controls) {\n var settings = Glide.settings;\n var item = controls[Glide.index];\n\n if (item) {\n item.classList.add(settings.classes.activeNav);\n siblings(item).forEach(function (sibling) {\n sibling.classList.remove(settings.classes.activeNav);\n });\n }\n },\n\n /**\n * Removes active class from active control.\n *\n * @param {HTMLElement} controls\n * @return {Void}\n */\n removeClass: function removeClass(controls) {\n var item = controls[Glide.index];\n\n if (item) {\n item.classList.remove(Glide.settings.classes.activeNav);\n }\n },\n\n /**\n * Adds handles to the each group of controls.\n *\n * @return {Void}\n */\n addBindings: function addBindings() {\n for (var i = 0; i < this._c.length; i++) {\n this.bind(this._c[i].children);\n }\n },\n\n /**\n * Removes handles from the each group of controls.\n *\n * @return {Void}\n */\n removeBindings: function removeBindings() {\n for (var i = 0; i < this._c.length; i++) {\n this.unbind(this._c[i].children);\n }\n },\n\n /**\n * Binds events to arrows HTML elements.\n *\n * @param {HTMLCollection} elements\n * @return {Void}\n */\n bind: function bind(elements) {\n for (var i = 0; i < elements.length; i++) {\n Binder.on('click', elements[i], this.click);\n Binder.on('touchstart', elements[i], this.click, capture);\n }\n },\n\n /**\n * Unbinds events binded to the arrows HTML elements.\n *\n * @param {HTMLCollection} elements\n * @return {Void}\n */\n unbind: function unbind(elements) {\n for (var i = 0; i < elements.length; i++) {\n Binder.off(['click', 'touchstart'], elements[i]);\n }\n },\n\n /**\n * Handles `click` event on the arrows HTML elements.\n * Moves slider in driection precised in\n * `data-glide-dir` attribute.\n *\n * @param {Object} event\n * @return {Void}\n */\n click: function click(event) {\n event.preventDefault();\n Components.Run.make(Components.Direction.resolve(event.currentTarget.getAttribute('data-glide-dir')));\n }\n };\n define(Controls, 'items', {\n /**\n * Gets collection of the controls HTML elements.\n *\n * @return {HTMLElement[]}\n */\n get: function get() {\n return Controls._c;\n }\n });\n /**\n * Swap active class of current navigation item:\n * - after mounting to set it to initial index\n * - after each move to the new index\n */\n\n Events.on(['mount.after', 'move.after'], function () {\n Controls.setActive();\n });\n /**\n * Remove bindings and HTML Classes:\n * - on destroying, to bring markup to its initial state\n */\n\n Events.on('destroy', function () {\n Controls.removeBindings();\n Controls.removeActive();\n Binder.destroy();\n });\n return Controls;\n}\n\nfunction Keyboard(Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var Keyboard = {\n /**\n * Binds keyboard events on component mount.\n *\n * @return {Void}\n */\n mount: function mount() {\n if (Glide.settings.keyboard) {\n this.bind();\n }\n },\n\n /**\n * Adds keyboard press events.\n *\n * @return {Void}\n */\n bind: function bind() {\n Binder.on('keyup', document, this.press);\n },\n\n /**\n * Removes keyboard press events.\n *\n * @return {Void}\n */\n unbind: function unbind() {\n Binder.off('keyup', document);\n },\n\n /**\n * Handles keyboard's arrows press and moving glide foward and backward.\n *\n * @param {Object} event\n * @return {Void}\n */\n press: function press(event) {\n if (event.keyCode === 39) {\n Components.Run.make(Components.Direction.resolve('>'));\n }\n\n if (event.keyCode === 37) {\n Components.Run.make(Components.Direction.resolve('<'));\n }\n }\n };\n /**\n * Remove bindings from keyboard:\n * - on destroying to remove added events\n * - on updating to remove events before remounting\n */\n\n Events.on(['destroy', 'update'], function () {\n Keyboard.unbind();\n });\n /**\n * Remount component\n * - on updating to reflect potential changes in settings\n */\n\n Events.on('update', function () {\n Keyboard.mount();\n });\n /**\n * Destroy binder:\n * - on destroying to remove listeners\n */\n\n Events.on('destroy', function () {\n Binder.destroy();\n });\n return Keyboard;\n}\n\nfunction Autoplay(Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var Autoplay = {\n /**\n * Initializes autoplaying and events.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.start();\n\n if (Glide.settings.hoverpause) {\n this.bind();\n }\n },\n\n /**\n * Starts autoplaying in configured interval.\n *\n * @param {Boolean|Number} force Run autoplaying with passed interval regardless of `autoplay` settings\n * @return {Void}\n */\n start: function start() {\n var _this = this;\n\n if (Glide.settings.autoplay) {\n if (isUndefined(this._i)) {\n this._i = setInterval(function () {\n _this.stop();\n\n Components.Run.make('>');\n\n _this.start();\n }, this.time);\n }\n }\n },\n\n /**\n * Stops autorunning of the glide.\n *\n * @return {Void}\n */\n stop: function stop() {\n this._i = clearInterval(this._i);\n },\n\n /**\n * Stops autoplaying while mouse is over glide's area.\n *\n * @return {Void}\n */\n bind: function bind() {\n var _this2 = this;\n\n Binder.on('mouseover', Components.Html.root, function () {\n _this2.stop();\n });\n Binder.on('mouseout', Components.Html.root, function () {\n _this2.start();\n });\n },\n\n /**\n * Unbind mouseover events.\n *\n * @returns {Void}\n */\n unbind: function unbind() {\n Binder.off(['mouseover', 'mouseout'], Components.Html.root);\n }\n };\n define(Autoplay, 'time', {\n /**\n * Gets time period value for the autoplay interval. Prioritizes\n * times in `data-glide-autoplay` attrubutes over options.\n *\n * @return {Number}\n */\n get: function get() {\n var autoplay = Components.Html.slides[Glide.index].getAttribute('data-glide-autoplay');\n\n if (autoplay) {\n return toInt(autoplay);\n }\n\n return toInt(Glide.settings.autoplay);\n }\n });\n /**\n * Stop autoplaying and unbind events:\n * - on destroying, to clear defined interval\n * - on updating via API to reset interval that may changed\n */\n\n Events.on(['destroy', 'update'], function () {\n Autoplay.unbind();\n });\n /**\n * Stop autoplaying:\n * - before each run, to restart autoplaying\n * - on pausing via API\n * - on destroying, to clear defined interval\n * - while starting a swipe\n * - on updating via API to reset interval that may changed\n */\n\n Events.on(['run.before', 'pause', 'destroy', 'swipe.start', 'update'], function () {\n Autoplay.stop();\n });\n /**\n * Start autoplaying:\n * - after each run, to restart autoplaying\n * - on playing via API\n * - while ending a swipe\n */\n\n Events.on(['run.after', 'play', 'swipe.end'], function () {\n Autoplay.start();\n });\n /**\n * Remount autoplaying:\n * - on updating via API to reset interval that may changed\n */\n\n Events.on('update', function () {\n Autoplay.mount();\n });\n /**\n * Destroy a binder:\n * - on destroying glide instance to clearup listeners\n */\n\n Events.on('destroy', function () {\n Binder.destroy();\n });\n return Autoplay;\n}\n/**\n * Sorts keys of breakpoint object so they will be ordered from lower to bigger.\n *\n * @param {Object} points\n * @returns {Object}\n */\n\n\nfunction sortBreakpoints(points) {\n if (isObject(points)) {\n return sortKeys(points);\n } else {\n warn('Breakpoints option must be an object');\n }\n\n return {};\n}\n\nfunction Breakpoints(Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n /**\n * Holds reference to settings.\n *\n * @type {Object}\n */\n\n var settings = Glide.settings;\n /**\n * Holds reference to breakpoints object in settings. Sorts breakpoints\n * from smaller to larger. It is required in order to proper\n * matching currently active breakpoint settings.\n *\n * @type {Object}\n */\n\n var points = sortBreakpoints(settings.breakpoints);\n /**\n * Cache initial settings before overwritting.\n *\n * @type {Object}\n */\n\n var defaults = _extends({}, settings);\n\n var Breakpoints = {\n /**\n * Matches settings for currectly matching media breakpoint.\n *\n * @param {Object} points\n * @returns {Object}\n */\n match: function match(points) {\n if (typeof window.matchMedia !== 'undefined') {\n for (var point in points) {\n if (points.hasOwnProperty(point)) {\n if (window.matchMedia('(max-width: ' + point + 'px)').matches) {\n return points[point];\n }\n }\n }\n }\n\n return defaults;\n }\n };\n /**\n * Overwrite instance settings with currently matching breakpoint settings.\n * This happens right after component initialization.\n */\n\n _extends(settings, Breakpoints.match(points));\n /**\n * Update glide with settings of matched brekpoint:\n * - window resize to update slider\n */\n\n\n Binder.on('resize', window, throttle(function () {\n Glide.settings = mergeOptions(settings, Breakpoints.match(points));\n }, Glide.settings.throttle));\n /**\n * Resort and update default settings:\n * - on reinit via API, so breakpoint matching will be performed with options\n */\n\n Events.on('update', function () {\n points = sortBreakpoints(points);\n defaults = _extends({}, settings);\n });\n /**\n * Unbind resize listener:\n * - on destroying, to bring markup to its initial state\n */\n\n Events.on('destroy', function () {\n Binder.off('resize', window);\n });\n return Breakpoints;\n}\n\nvar COMPONENTS = {\n // Required\n Html: Html,\n Translate: Translate,\n Transition: Transition,\n Direction: Direction,\n Peek: Peek,\n Sizes: Sizes,\n Gaps: Gaps,\n Move: Move,\n Clones: Clones,\n Resize: Resize,\n Build: Build,\n Run: Run,\n // Optional\n Swipe: Swipe,\n Images: Images,\n Anchors: Anchors,\n Controls: Controls,\n Keyboard: Keyboard,\n Autoplay: Autoplay,\n Breakpoints: Breakpoints\n};\n\nvar Glide$1 = function (_Core) {\n inherits(Glide$$1, _Core);\n\n function Glide$$1() {\n classCallCheck(this, Glide$$1);\n return possibleConstructorReturn(this, (Glide$$1.__proto__ || Object.getPrototypeOf(Glide$$1)).apply(this, arguments));\n }\n\n createClass(Glide$$1, [{\n key: 'mount',\n value: function mount() {\n var extensions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return get(Glide$$1.prototype.__proto__ || Object.getPrototypeOf(Glide$$1.prototype), 'mount', this).call(this, _extends({}, COMPONENTS, extensions));\n }\n }]);\n return Glide$$1;\n}(Glide);\n\nexport default Glide$1;","import Glide from '@glidejs/glide';\n\nclass HeroSlider {\n constructor({ selector }) {\n this.selector = document.querySelector(selector);\n\n if (!this.selector) { return null; }\n\n const slides = this.selector.querySelectorAll('.glide__slide');\n\n if (slides.length > 1) {\n HeroSlider.mountSlider(this.selector);\n } else { // There is one slide or less\n // Add active class to the only slide so the caption animation still works\n let onlyChildSlide = document.querySelector('.glide__slide');\n let arrowNav = this.selector.querySelector('[data-glide-el=\"controls\"]');\n\n if (arrowNav) {\n arrowNav.style.display = 'none';\n }\n\n setTimeout(() => {\n onlyChildSlide.classList.add('glide__slide--active');\n }, 300);\n }\n }\n\n static mountSlider(selector) {\n if (!selector) { return; }\n\n new Glide(selector, {\n type: 'slider',\n gap: 0,\n animationDuration: 1000,\n autoplay: 5500,\n perView: 1,\n autoheight: true,\n }).mount();\n }\n}\n\nexport default HeroSlider;\n","import Glide from '@glidejs/glide';\nimport Helpers from '../lib/helpers';\n\nclass GallerySlider {\n constructor({ selector }) {\n this.selector = document.querySelector(selector);\n\n if (!this.selector) { return null; }\n\n this.gallerySlider(this.selector);\n }\n\n gallerySlider(selector) {\n const slides = document.querySelectorAll('[data-js=\"gallery-slides\"]');\n\n Helpers.forEach(slides, (el) => {\n // Add nav bullets in before we mount so they have event listeners attached\n const glideTrack = el.querySelector('[data-glide-el=\"track\"]');\n let bulletNav = el.querySelector('[data-glide-el=\"controls[nav]\"]');\n\n // Add a nav bullet inside the container for each .glide__slide\n for (let i = 0; i < glideTrack.firstElementChild.childElementCount; i += 1) {\n bulletNav.innerHTML\n += ``;\n }\n\n new Glide(el, {\n type: 'carousel',\n gap: 0,\n animationDuration: 1000,\n autoplay: false,\n perView: 1,\n autoheight: true,\n }).mount();\n\n // Immmediately move the arrows / bullets\n this.calculateNewArrowPosition(el);\n\n // And run again on resize\n window.addEventListener('resize', () => {\n this.calculateNewArrowPosition(el);\n }, { passive: true });\n }, this);\n }\n\n calculateNewArrowPosition(el) {\n // Check for presence of captions first\n if (!el.querySelector('[data-js=\"gallery-caption\"]')) return;\n\n // Set up an empty array for the caption heights\n let captionHeights = [];\n\n // select all gallery captions for this gallery\n Helpers.forEach(el.querySelectorAll('[data-js=\"gallery-caption\"]'), (el) => {\n // Find the the current caption height\n const thisCaptionHeight = el.getBoundingClientRect().height;\n\n // Push the current caption Height to an array so we can access it later\n captionHeights.push(thisCaptionHeight);\n }, this);\n\n // Find the highest value in the array\n const max = captionHeights.reduce((a, b) => {\n return Math.max(a, b);\n });\n\n // Move the arrows to the bottom right of the image\n let controls = el.querySelector('[data-glide-el=\"controls\"]');\n const distancePx = `${max}px`;\n controls.style.bottom = distancePx;\n\n // select the bullet container\n let bulletNav = el.querySelector('[data-glide-el=\"controls[nav]\"]');\n\n // Move the bullets to 30px from the bottom of the image\n const bulletDistancePx = max + 30;\n bulletNav.style.top = `calc(100% - ${bulletDistancePx}px)`;\n }\n}\n\nexport default GallerySlider;\n","import Helpers from '../lib/helpers';\n\nclass ShareBar {\n constructor({ selector, companyName }) {\n this.selector = selector;\n this.companyName = companyName;\n\n if (!this.selector) { return null; }\n if (!this.companyName) { return null; }\n\n Helpers.forEach(\n document.querySelectorAll(this.selector), (el, i) => {\n const shareurl = el.getAttribute('data-share-url');\n const sharecontent = el.getAttribute('data-share-content');\n const shareplatform = el.getAttribute('data-share-platform');\n const companyName = this.companyName;\n\n el.addEventListener('click', (e) => {\n e.preventDefault();\n e.stopPropagation();\n\n let descriptionString = '';\n\n if (sharecontent) {\n const textArray = sharecontent.split(' ');\n // For each word in the array...\n Helpers.forEach(\n textArray, (el, i) => {\n // Add the current split word plus space at the end into the new string\n descriptionString += `${el}%20`;\n },\n );\n } else {\n // Else use the fallback string\n descriptionString = companyName;\n }\n\n let url;\n\n // Form the Twitter sharing URL\n if (shareplatform === 'twitter') {\n url = `https://twitter.com/intent/tweet/?text=${descriptionString}&url=${shareurl}`;\n }\n\n // Form the Facebook sharing URL\n if (shareplatform === 'facebook') {\n url = `https://facebook.com/sharer/sharer.php?u=${shareurl}`;\n }\n\n // Form the Linkedin sharing URL\n if (shareplatform === 'linkedin') {\n url = `https://www.linkedin.com/shareArticle?mini=true&url=${shareurl}&title=${descriptionString}&summary=${descriptionString}&source=${shareurl}`;\n }\n\n // Form the Pinterest sharing URL\n if (shareplatform === 'pinterest') {\n url = `https://pinterest.com/pin/create/button/?urlhttp%3A%2F%2F=${shareurl}&media=${shareurl}&description=${descriptionString}`;\n }\n\n // open a new window and go to the formed URL\n window.open(url);\n });\n },\n );\n }\n}\n\nexport default ShareBar;\n","import Helpers from '../lib/helpers';\n\nclass EqualHeightCells {\n /**\n * Make two thirds / one-third grid images the same height\n */\n\n constructor({ selector, breakpoint }) {\n this.selector = selector;\n this.bp = breakpoint; // Breakpoint width at which the grid is created\n\n if (!this.selector) { return null; }\n\n // Only targets 2/3rds grids which have images in both cells\n this.targetedGrids = document.querySelectorAll(this.selector);\n\n if (!this.targetedGrids) { return null; }\n\n // check viewport width immediately\n const vw = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n // run immediately if above breakpoint\n if (this.targetedGrids) {\n if (vw > this.bp) {\n // Wait for images to load before resizing cells\n setTimeout(() => {\n this.equalGridCellHeights();\n }, 500);\n // wait again just incase we have a slow page load\n setTimeout(() => {\n this.equalGridCellHeights();\n }, 2000);\n setTimeout(() => {\n this.equalGridCellHeights();\n }, 5000);\n setTimeout(() => {\n this.equalGridCellHeights();\n }, 10000);\n }\n }\n\n // and again on page resize\n window.addEventListener('resize', this.equalHeightsOnResize, { passive: true });\n }\n\n equalGridCellHeights() {\n Helpers.forEach(this.targetedGrids, (el, i) => {\n let thirdCell = el.querySelector('[data-grid-thirds-cell]');\n let twoThirdsCell = el.querySelector('[data-grid-two-thirds-cell]');\n let thirdHeight = thirdCell.getBoundingClientRect().height;\n // Make the 2-thirds picture element same height as the one-thirds next to it\n twoThirdsCell.style.height = `${Math.round(thirdHeight)}px`;\n });\n }\n\n removeHeightFromCell() {\n Helpers.forEach(this.targetedGrids, (el, i) => {\n let twoThirdsCell = el.querySelector('[data-grid-two-thirds-cell]');\n // Remove inline styles from the element\n twoThirdsCell.removeAttribute('style');\n });\n }\n\n equalHeightsOnResize = Helpers.debounce(() => {\n const vw = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n // run if above breakpoint\n if (vw > this.bp) {\n this.equalGridCellHeights();\n } else {\n this.removeHeightFromCell();\n }\n }, 200);\n}\n\nexport default EqualHeightCells;\n","import Helpers from './helpers';\n\nclass Modal {\n constructor(args) {\n // Setup some config items that can be overwritten later\n\n this.THEBODY = document.querySelector('body');\n this.ROOT = document.documentElement;\n\n // Store our modal type, and some other data to do stuff with\n this.videoRatio; // <-- Never seems to be set... but does get compared against... ??\n\n const defaultConfig = {\n modalType: 'html',\n modalTitle: '',\n content: '',\n closeSelector: '[data-js=\"modal-close\"]', // the selector that should close the overlay\n visibleClassName: 'is-visible', // class for visibility\n videoRatioClass: 'video__wrap--16x9',\n sharingPlatforms: ['facebook', 'twitter', 'linkedin', 'email', 'pinterest', 'googleplus'],\n sharingUrl: '',\n };\n\n this.config = args ? Modal.extendDefaults(defaultConfig, args) : defaultConfig;\n\n this.show(this.config);\n }\n\n // ////////////////////////////////////////////////////////////////////////////\n // Private Functions\n // ////////////////////////////////////////////////////////////////////////////\n\n displayInfo(modalBox, modalBody) {\n let modalContent = document.createElement('div');\n modalContent.classList.add('info__wrap');\n modalBox.classList.add('modal__box--info');\n modalContent.innerHTML += `
${this.config.content}
`;\n // add it inside the modal body\n modalBody.appendChild(modalContent);\n modalBox.appendChild(modalBody);\n }\n\n displayShare(modalBox, modalBody) {\n let modalContent = document.createElement('div');\n modalContent.classList.add('share__wrap');\n modalBox.classList.add('modal__box--share');\n\n // Split the description text (blank space seperated) into an array\n const textArray = this.config.content.split(' ');\n\n // Create a var to hold the newly formatted text\n let descriptionString = '';\n let sharingUrl;\n\n if (this.config.sharingUrl !== '') {\n sharingUrl = encodeURIComponent(this.config.sharingUrl);\n }\n\n // For each word in the array...\n Helpers.forEach(textArray, (el) => {\n // Add the current split word plus space at the end into the new string\n descriptionString += `${el}%20`;\n });\n\n // Add Facebook link\n modalContent.innerHTML += '
`;\n break;\n }\n });\n\n modalBody.appendChild(modalContent);\n modalBox.appendChild(modalBody);\n }\n\n displayVideo(modalBox, modalBody) {\n let modalContent = document.createElement('div');\n modalContent.classList.add('video__wrap');\n modalBox.classList.add('modal__box--video');\n\n // check for the video aspect ratio\n if (this.videoRatio === '4x3') {\n modalContent.classList.add('video__wrap--4x3');\n } else if (this.videoRatio === 'square') {\n modalContent.classList.add('video__wrap--square');\n } else if (this.videoRatio === '16x9') {\n modalContent.classList.add('video__wrap--16x9');\n } else {\n // fallback to 16:9 ratio\n modalContent.classList.add('video__wrap--16x9');\n }\n\n modalContent.innerHTML += ``;\n\n // add it inside the modal body\n modalBody.appendChild(modalContent);\n\n // Append the HTMLDivElement to the modal box as a child\n modalBox.appendChild(modalBody);\n }\n\n displayHtml(modalBox, modalBody) {\n let modalContent = document.createElement('div');\n modalContent.classList.add('html__wrap');\n modalBox.classList.add('modal__box--html');\n\n const insertText = '
Injected Title from displayHtml()
This is some text injected via the displayHtml() function inside modal.js
';\n\n modalContent.innerHTML += insertText;\n\n if (this.config.content.outerHTML === undefined) {\n modalContent.innerHTML += this.config.content;\n }\n else {\n modalContent.innerHTML += this.config.content.outerHTML;\n }\n // append the main modal body content to the modalBox\n modalBody.appendChild(modalContent);\n modalBox.appendChild(modalBody);\n }\n\n displayScrape(modalBox, modalBody) {\n let modalContent = document.createElement('div');\n modalContent.classList.add('scrape__wrap');\n modalBox.classList.add('modal__box--scrape');\n\n if (this.config.content.outerHTML === undefined) {\n modalContent.innerHTML += this.config.content;\n } else {\n modalContent.innerHTML += this.config.content.outerHTML;\n }\n // append the main modal body content to the modalBox\n modalBody.appendChild(modalContent);\n modalBox.appendChild(modalBody);\n }\n\n displayAjax(modalBox, modalBody) {\n let modalContent = document.createElement('div');\n modalContent.classList.add('ajax__wrap');\n modalBox.classList.add('modal__box--ajax');\n\n // run the ajax load function\n this.loadXMLDoc(modalContent, modalBox);\n\n // append the main modal body content to the modalBox\n modalBody.appendChild(modalContent);\n modalBox.appendChild(modalBody);\n }\n\n /**\n * Extend Defaults\n *\n * @param {Object} source\n * @param {Object} properties\n */\n static extendDefaults(source, properties) {\n const newSource = source;\n let property;\n\n for (property in properties) {\n newSource[property] = properties[property];\n }\n\n return newSource; // to set options var\n }\n\n /**\n * Hide the modal box and overlay\n */\n\n hide() {\n // select the modal box and overlay\n let modalBox = document.querySelector('[data-js=\"modal-box\"]');\n let overlay = document.querySelector('[data-js=\"overlay\"]');\n\n // remove the modal box and overlay\n modalBox.parentNode.removeChild(modalBox);\n overlay.parentNode.removeChild(overlay);\n\n const hasModalClass = 'has-modal';\n const stopTouchClass = 'stop-touch';\n\n // remove classes from elements\n if (this.THEBODY.classList) {\n this.THEBODY.classList.remove(hasModalClass);\n this.THEBODY.classList.remove(stopTouchClass);\n this.ROOT.classList.remove(hasModalClass);\n } else {\n // var theClassName = THEBODY.getAttribute('class');\n // theClassName = theClassName.replace(/(\\s|^)has-modal(\\s|$)/, ' ');\n // THEBODY.setAttribute('class', theClassName);\n this.THEBODY.className = this.THEBODY.className.replace(new RegExp(`(^|\\\\b)${hasModalClass.split(' ').join('|')}(\\\\b|$)`, 'gi'), ' ');\n this.THEBODY.className = this.THEBODY.className.replace(new RegExp(`(^|\\\\b)${stopTouchClass.split(' ').join('|')}(\\\\b|$)`, 'gi'), ' ');\n this.ROOT.className = this.ROOT.className.replace(new RegExp(`(^|\\\\b)${hasModalClass.split(' ').join('|')}(\\\\b|$)`, 'gi'), ' ');\n }\n\n // remove touchmove event listener from body\n this.THEBODY.removeEventListener('touchmove', Modal.handleTouch, { passive: false });\n\n // remove resize event listener from window\n\n window.removeEventListener('resize', Modal.watchResize, true);\n }\n\n /**\n * Handle AJAX requests\n * @param {HTMLElement} modalContent Content to display\n */\n\n loadXMLDoc(modalContent, modalBox) {\n let xmlhttp = new XMLHttpRequest();\n\n // create a loader\n modalContent.innerHTML = '';\n\n xmlhttp.onreadystatechange = () => {\n modalBox.classList.add('ajax-loading');\n\n if (xmlhttp.readyState == XMLHttpRequest.DONE) { // XMLHttpRequest.DONE == 4\n // if (xmlhttp.status == 200 || xmlhttp.status === 304) {\\\n\n if (xmlhttp.status === 200) {\n // Success! Do stuff with data.\n // console.log(xmlhttp.responseText);\n modalBox.classList.remove('ajax-loading');\n modalBox.classList.add('ajax-loaded');\n\n modalContent.innerHTML = xmlhttp.responseText;\n }\n else {\n console.error(xmlhttp.status, xmlhttp.statusText);\n }\n }\n };\n\n xmlhttp.open('GET', this.config.content, true);\n xmlhttp.send();\n }\n\n /**\n * Show the modal box and overlay\n */\n\n show() {\n // create elements for the modal box and the overlay\n let modalBox = document.createElement('div');\n let modalBody = document.createElement('div');\n let overlay = document.createElement('div');\n\n // add classes to each of the new elements\n if (modalBox.classList && overlay.classList) {\n modalBox.classList.add('modal');\n modalBody.classList.add('modal__body');\n overlay.classList.add('overlay');\n this.THEBODY.classList.add('has-modal');\n this.ROOT.classList.add('has-modal');\n } else {\n modalBox.className += ' modal';\n modalBody.className += ' modal__body';\n overlay.className += ' overlay';\n this.THEBODY.className += ' has-modal';\n this.ROOT.className += ' has-modal';\n }\n\n // add some js-hooks to the data-attribute\n modalBox.setAttribute('data-js', 'modal-box');\n overlay.setAttribute('data-js', 'overlay');\n\n // create an empty element we can send into the modal header if there's no title attribute\n let title = '';\n // but if the button does have a modal title data attribute...\n // add the this.config.modalTitle inside the element\n if (this.config.modalTitle !== '') {\n title = `
${this.config.modalTitle}
`;\n }\n\n // append the header into the newly created modalBox div\n // modalBox.innerHTML += '' + title + '';\n\n // append the close button into the modalBody\n // so it scrolls with the body content\n modalBody.innerHTML += '';\n\n switch (this.config.modalType) {\n case 'video':\n // if the modal type is video inject an iframe\n this.displayVideo(modalBox, modalBody);\n break;\n case 'info':\n // if the modal type is info inject an H1\n this.displayInfo(modalBox, modalBody);\n break;\n case 'share':\n // if the modal type is share...\n // form the sharingbuttons.io URL and inject it\n this.displayShare(modalBox, modalBody);\n break;\n case 'ajax':\n this.displayAjax(modalBox, modalBody);\n break;\n case 'scrape':\n this.displayScrape(modalBox, modalBody);\n break;\n case 'html':\n default:\n this.displayHtml(modalBox, modalBody);\n break;\n }\n\n // Now add the overlay and modalBox to the end of the body\n // /////////////////////////////////////////////////////////////////////////\n document.body.appendChild(modalBox);\n document.body.appendChild(overlay);\n\n // add visible classes to each of the new elements\n if (modalBox.classList && overlay.classList) {\n modalBox.classList.add(this.config.visibleClassName);\n overlay.classList.add(this.config.visibleClassName);\n } else {\n modalBox.className += ` ${this.config.visibleClassName}`;\n overlay.className += ` ${this.config.visibleClassName}`;\n }\n\n // make sure the modal window is an even number of pixels tall...\n // So we dont end up with half-pixel rendering initially\n const currentHeight = modalBox.getBoundingClientRect().height;\n const evenPixelHeight = 2 * Math.ceil(currentHeight / 2);\n modalBox.style.minHeight = `${evenPixelHeight}px`;\n\n // add event listeners to the close selector\n const closeButton = document.querySelectorAll(this.config.closeSelector);\n\n // attach the event listener to all instances of the selector\n Helpers.forEach(closeButton, (el, i) => {\n el.addEventListener('click', () => { this.hide(); });\n });\n\n // add event listener to the overlay\n overlay.addEventListener('click', () => { this.hide(); });\n\n // add event listener to the document\n // to remove min-height on resize\n const resizeHandler = Modal.watchResize();\n window.addEventListener('resize', () => resizeHandler, true);\n\n //\n //\n // ///////////////////////////////////////////////////\n // IOS BODY SCROLL LOCKING\n // ///////////////////////////////////////////////////\n\n // Currently the iOS scroll blocking works great for enquiry forms... but not for video or Gmap\n // modals because they display in iframes which would also require an event listener adding to\n // block touchmove, but that would affect interactivity\n\n // so instead intercept the click event early if we are using a touch device and just open the\n // video / maps URL directly in a new window\n\n // stop touch events on the body\n this.THEBODY.addEventListener('touchmove', Modal.handleTouch, { passive: false });\n this.THEBODY.classList.add('stop-touch');\n\n // block scrolling\n modalBody.addEventListener('touchstart', (e) => {\n // console.log(\"modalBody touchstart\");\n\n // set the position of first touch\n const previousClientY = e.touches[0].clientY;\n\n // grab the modal body via the touched target\n const ModalElement = e.touches[0].target.closest('.modal__body');\n\n // add an event listener on touchmove\n // bind late by adding the touchmove after touchstart\n modalBody.addEventListener('touchmove', (e) => {\n // allow touchmove on modalBody\n e.stopPropagation();\n\n // log current Y position, so we can compare it with previous\n const currentClientY = e.touches[0].clientY;\n\n // if the scroll is at the top of the box\n if (ModalElement.scrollTop === 0 || ModalElement.scrollTop === undefined) {\n // console.log(\"at the top\");\n\n // stop scroll up\n if (previousClientY < currentClientY) {\n // console.log(\"scrolling down... prevent this event\");\n e.preventDefault();\n }\n }\n\n // if the scroll is at the end of the box\n if (ModalElement.clientHeight + ModalElement.scrollTop === ModalElement.scrollHeight) {\n // console.log(\"at the bottom\");\n\n // stop scroll down\n if (previousClientY > currentClientY) {\n // console.log(\"scrolling up... prevent this event\");\n e.preventDefault();\n }\n }\n }, { passive: false });\n }, { passive: false });\n\n // close the modal box when user hits `esc` key\n document.onkeydown = (evt) => {\n evt = evt || window.event;\n if (evt.keyCode === 27) {\n this.hide();\n }\n };\n }\n\n // remove inline min-height (half-pixel rendering fix) on resize of window\n // ////////////////////////////////////////////////////////\n static watchResize() {\n const modalBox = document.querySelector('.modal');\n\n if (modalBox.style.removeProperty) {\n modalBox.style.removeProperty('min-height');\n } else {\n modalBox.style.removeAttribute('min-height');\n }\n }\n\n // Handle blocking touch scroll on elements\n // ////////////////////////////////////////////////////////\n static handleTouch(e) {\n // console.log(\"touchmove scroll disabled on this element\");\n e.preventDefault();\n }\n}\n\nexport default Modal;\n","import Helpers from '../lib/helpers';\nimport Modal from '../lib/modal';\n\nclass Modals {\n constructor() {\n let body = document.querySelector('body');\n\n /**\n * Add a class to body when its a touch device\n * This is needed for the modal system to open maps and videos directly on mobile\n * instead of opening them in a new modal window\n */\n // define boolean var as false initially as no touch has happened yet\n let isTouch = false;\n\n // add class to body if isTouch is true\n const checkTouchBoolean = () => {\n // this will only run once\n if (isTouch) {\n // console.log(\"is-touch class added\");\n Helpers.addClass(body, 'is-touch-device');\n // class now added to body, so can remove the event listener\n window.removeEventListener('touchstart', touchStartInit, { passive: true });\n }\n };\n\n // touch device being used, set isTouch to true now\n let touchStartInit = () => {\n isTouch = true;\n checkTouchBoolean();\n };\n window.addEventListener('touchstart', touchStartInit, { passive: true });\n\n /**\n * Setup our modal types\n */\n Helpers.forEach(document.querySelectorAll('[data-modal-video]'), (el) => {\n const videourl = el.getAttribute('data-modal-video');\n el.addEventListener('click', (e) => {\n e.preventDefault();\n e.stopPropagation();\n\n // if on a touch device, open the URL in a new window, not in a modal\n if (Helpers.hasClass(body, 'is-touch-device')) {\n // open a new window and go to the URL\n window.open(videourl);\n } else {\n new Modal({\n modalType: 'video',\n modalTitle: 'Video',\n content: videourl\n });\n }\n });\n });\n\n Helpers.forEach(document.querySelectorAll('[data-modal-share]'), (el) => {\n const shareurl = el.getAttribute('data-modal-share');\n const sharecontent = el.getAttribute('data-modal-content');\n const shareplatform = el.getAttribute('data-modal-platform');\n\n el.addEventListener('click', (e) => {\n e.preventDefault();\n e.stopPropagation();\n\n new Modal({\n modalType: 'share',\n modalTitle: 'Share this page',\n content: sharecontent,\n sharingUrl: shareurl\n });\n });\n });\n\n Helpers.forEach(document.querySelectorAll('[data-modal-ajax]'), (el) => {\n const shareurl = `${el.getAttribute('href')}?layout=blank`;\n el.addEventListener('click', (e) => {\n e.preventDefault();\n e.stopPropagation();\n\n new Modal({\n modalType: 'ajax',\n modalTitle: 'AJAX DATA',\n content: shareurl\n });\n });\n });\n\n Helpers.forEach(document.querySelectorAll('[data-modal-html]'), (el) => {\n el.addEventListener('click', (e) => {\n e.preventDefault();\n e.stopPropagation();\n\n // if on a touch device, open the URL in a new window, not in a modal\n if (Helpers.hasClass(body, 'is-touch-device')) {\n const url = el.getAttribute('data-modal-html-touch');\n // open a new window and go to the URL\n window.open(url);\n } else {\n new Modal({\n modalType: 'html',\n modalTitle: 'html',\n content: el.getAttribute('data-modal-html')\n });\n }\n });\n });\n\n // look inside the element that was clicked...\n // scrape data inside it with data-modal-scrape-content\n // output scraped data to a modal window\n Helpers.forEach(document.querySelectorAll('[data-modal-scrape]'), (el) => {\n const content = el.querySelector('[data-modal-scrape-content]');\n if (content) {\n el.addEventListener('click', (e) => {\n e.preventDefault();\n e.stopPropagation();\n new Modal({\n modalType: 'scrape',\n modalTitle: 'scrape',\n content: content\n });\n });\n }\n });\n }\n}\n\nexport default Modals;\n","import Helpers from '../lib/helpers';\n\nclass TableFade {\n constructor({ selector }) {\n this.selector = selector;\n\n if (!this.selector) { return null; }\n\n // select all tables\n const tables = document.querySelectorAll(`[${this.selector}] table`);\n\n // if there are tables present\n if (tables) {\n // loop through each table and attach event listeners\n Helpers.forEach(tables, (el) => {\n let wrapper = el.parentNode;\n\n // On page load if this table has overflowing content...\n // set the attribute which adds the gradient fade\n if (el.clientWidth < el.scrollWidth) {\n wrapper.setAttribute(this.selector, 'active');\n } else {\n wrapper.setAttribute(this.selector, 'inactive');\n }\n\n // On scroll of the current table\n el.addEventListener('scroll', () => {\n // Work out how many pixels are left to scroll\n const scrollPixelsLeft = el.scrollWidth - el.scrollLeft - el.clientWidth;\n\n // Remove the gradient fade if close to the end of the scroll distance\n if (scrollPixelsLeft < 30) {\n wrapper.setAttribute('data-state', 'no-fadeout');\n } else {\n wrapper.setAttribute('data-state', 'fadeout');\n }\n }, { passive: true });\n\n // On resize of the window\n // Check if table content is still overflowing\n // Remove fade if not\n // add fade if so\n window.addEventListener('resize', () => {\n if (el.clientWidth < el.scrollWidth) {\n wrapper.setAttribute(this.selector, 'active');\n } else {\n wrapper.setAttribute(this.selector, 'inactive');\n }\n }, { passive: true });\n });\n }\n }\n}\n\nexport default TableFade;\n","import Helpers from '../lib/helpers';\n\nclass FakeUploadInput {\n constructor() {\n const realInputs = document.querySelectorAll('[data-upload-real-input]');\n\n if (realInputs.length <= 0) { return; }\n\n Helpers.forEach(realInputs, (input, _) => {\n input.addEventListener('change', (e) => {\n let fauxInput = e.target\n .parentNode\n .parentNode\n .querySelector('[data-upload-fake-input]');\n\n fauxInput.value = input.value.split(/(\\\\|\\/)/g).pop();\n });\n });\n }\n}\n\nexport default FakeUploadInput;\n","class FocusOutlines {\n constructor() {\n window.addEventListener(\n 'keydown',\n FocusOutlines.handleFirstTab,\n { passive: true },\n );\n }\n\n static handleFirstTab(e) {\n if (e.keyCode === 9) {\n document.body.classList.add('user-is-tabbing');\n window.removeEventListener(\n 'keydown',\n FocusOutlines.handleFirstTab,\n );\n window.addEventListener(\n 'mousedown',\n FocusOutlines.handleMouseDownOnce,\n { passive: true },\n );\n }\n }\n\n static handleMouseDownOnce() {\n document.body.classList.remove('user-is-tabbing');\n window.removeEventListener(\n 'mousedown',\n FocusOutlines.handleMouseDownOnce,\n );\n window.addEventListener(\n 'keydown',\n FocusOutlines.handleFirstTab,\n { passive: true },\n );\n }\n}\n\nexport default FocusOutlines;\n","class InstagramWidget {\n constructor({ selector }) {\n this.selector = document.querySelector(selector);\n if (!this.selector) { return null; }\n\n this.llt = this.selector.dataset.instagramWidget;\n this.queryUserMedia();\n }\n\n queryUserMedia() {\n fetch(this.formMediaEdgeUrl()).then((response) => {\n // The API call was successful!\n if (response.ok) {\n return response.json();\n }\n return Promise.reject(response);\n }).then((data) => {\n this.userMediaData = data;\n // console.log('queryUserMedia() this.userMediaData = ', this.userMediaData);\n this.createWidget();\n }).catch((err) => {\n // There was an error\n console.warn('Something went wrong getting data from instagram.', err);\n });\n }\n\n // Insert images into the HTML\n createWidget() {\n let i;\n for (i = 0; i < 4; i += 1) {\n let thumbnailUrl = this.userMediaData.data[i].media_url;\n // Video thumbnails are .thumbnail_url not .media_url\n if (this.userMediaData.data[i].thumbnail_url) {\n thumbnailUrl = this.userMediaData.data[i].thumbnail_url;\n }\n this.selector.innerHTML += ``;\n }\n }\n\n // Instagram Basic Display API\n // Query the 'User Media Edge' for latest post data\n // https://developers.facebook.com/docs/instagram-basic-display-api/guides/getting-profiles-and-media#step-2--query-the-user-media-edge\n // Fields: https://developers.facebook.com/docs/instagram-basic-display-api/reference/media#fields\n formMediaEdgeUrl() {\n this.basicApiRequestUrl = 'https://graph.instagram.com/me/';\n this.basicApiMediaFields = 'id,caption,media_url,permalink,thumbnail_url';\n this.basicApiAccessToken = this.llt;\n const formedApiUrl = `${this.basicApiRequestUrl}media?fields=${this.basicApiMediaFields}&access_token=${this.basicApiAccessToken}`;\n return formedApiUrl;\n }\n}\n\nexport default InstagramWidget;\n","import Helpers from '../lib/helpers';\n\nclass CollapsibleProductSection {\n constructor({ selector }) {\n // Check for existence of selector\n this.originalSelector = selector;\n this.selector = document.querySelectorAll(selector);\n if (!this.selector) { return null; }\n\n // Run if selector found on page\n CollapsibleProductSection.togglecollapsingButtonWrappers(this.selector);\n\n // Bind 'this' to the Mutation Observer callback function\n // So we have a reference to the original class inside the callback\n this.MutationObserverCallback = this.MutationObserverCallback.bind(this);\n\n this.addMutationObservers();\n }\n\n addMutationObservers() {\n const shortlistButtons = this.selector;\n\n Helpers.forEach(shortlistButtons, (el, i) => {\n if (el.closest('.product__listing')) {\n // console.log('shortlistButton is inside a product listing');\n const productListingWrapper = el.closest('.product__listing');\n this.productListingWrapper = productListingWrapper;\n const elementToObserve = productListingWrapper;\n\n this.observer = new MutationObserver(this.MutationObserverCallback);\n\n this.observer.observe(elementToObserve, {\n childList: true,\n subtree: false,\n });\n }\n });\n this.addCollapsibleButtonEvents();\n }\n\n MutationObserverCallback(mutationList, observer) {\n // console.log('form has been re-loaded');\n // console.log('MutationObserverCallback() this = ', this);\n // console.log('mutationList in Callback = ', mutationList);\n // console.log('observer in Callback = ', observer);\n\n let mutatedTarget;\n // if we can log what the elementToObserve was here\n // then we can pass the correct element to add Collapsible Buttons events back onto\n Helpers.forEach(mutationList, (mutation, i) => {\n // console.log('mutation.target = ', mutation.target);\n mutatedTarget = mutation.target;\n });\n\n // Otherwise we'll have to just apply any changes to all buttons\n this.addCollapsibleButtonEvents(mutatedTarget);\n }\n\n addCollapsibleButtonEvents(mutatedTarget) {\n // console.log('addCollapsibleButtonEvents() mutatedTarget = ', mutatedTarget);\n\n // The submitted form element has been replaced, so we need to create a new nodelist\n // with reference to the new Collapsible Button rather than the old one\n const newCollapsibleButtons = document.querySelectorAll(this.originalSelector);\n\n // Only target a single reloaded form collapsible button if mutatedTarget is defined\n // otherwise get 2 event listeners attached to ones that havent been submitted\n if (mutatedTarget) {\n // Add events to just the new collapsible button\n setTimeout(() => {\n const collapsingButtonWrapper = mutatedTarget.querySelector(this.originalSelector);\n const reloadedCollapsingButton = collapsingButtonWrapper.querySelector('.btn--collapsible-product');\n const collapsingSection = collapsingButtonWrapper.nextElementSibling;\n\n collapsingSection.hidden = false;\n\n // set to open\n reloadedCollapsingButton.setAttribute('aria-expanded', 'true');\n collapsingButtonWrapper.setAttribute('aria-expanded', 'true');\n collapsingButtonWrapper.setAttribute('data-state', 'open');\n\n reloadedCollapsingButton.addEventListener('click', () => {\n // console.log('Collapsible Button clicked');\n reloadedCollapsingButton.setAttribute('aria-expanded', reloadedCollapsingButton.getAttribute('aria-expanded') === 'true' ? 'false' : 'true');\n\n // Log whether expanded true or false to use for collapsing section visibilty later\n const expanded = collapsingButtonWrapper.getAttribute('aria-expanded') === 'true' || false;\n\n // Toggle aria-expanded on collapsingButtonWrapper\n collapsingButtonWrapper.setAttribute('data-state', collapsingButtonWrapper.getAttribute('data-state') === 'open' ? 'closed' : 'open');\n collapsingButtonWrapper.setAttribute('aria-expanded', collapsingButtonWrapper.getAttribute('aria-expanded') === 'true' ? 'false' : 'true');\n\n // Toggle visibility of the collapsing section\n collapsingSection.hidden = expanded;\n });\n }, 100);\n } else {\n // Add to all collapsible section buttons\n Helpers.forEach(newCollapsibleButtons, (el) => {\n // Set to closed originally\n el.setAttribute('aria-expanded', 'false');\n\n el.addEventListener('click', () => {\n // console.log('Collapsible Button clicked');\n el.setAttribute('aria-expanded', el.getAttribute('aria-expanded') === 'true' ? 'false' : 'true');\n });\n });\n }\n }\n\n static togglecollapsingButtonWrappers(selector) {\n const collapsibleProductButtons = selector;\n\n Helpers.forEach(collapsibleProductButtons, (collapsibleProductButton) => {\n const btn = collapsibleProductButton.querySelector('.btn--collapsible-product');\n const target = collapsibleProductButton.nextElementSibling;\n\n target.hidden = 'true';\n\n btn.onclick = (e) => {\n e.preventDefault();\n // Toggle data-state on collapsibleProductButton container div\n collapsibleProductButton.setAttribute('data-state', collapsibleProductButton.getAttribute('data-state') === 'open' ? 'closed' : 'open');\n\n // Toggle aria-expanded on collapsibleProductButton\n const expanded = btn.getAttribute('aria-expanded') === 'true' || false;\n btn.setAttribute('aria-expanded', !expanded);\n target.hidden = expanded;\n };\n });\n }\n}\n\nexport default CollapsibleProductSection;\n","/* eslint no-new: \"off\" */\n\n// This file is automatically compiled by Webpack, along with any other files\n// present in this directory. You're encouraged to place your actual application logic in\n// a relevant structure within app/javascript and only use these pack files to reference\n// that code so it'll be compiled.\n//\n// To reference this file, add <%= javascript_pack_tag 'application' %> to the appropriate\n// layout file, like app/views/layouts/application.html.erb\n\nimport Rails from 'rails-ujs';\nimport modernizr from 'modernizr';\n\n// IE11 polyfills - as they don't work when within ie11 pack\n// Perhaps these polyfills could be put in IE11's global scope where the ie11 pack is called? Instead of being here.\nimport '../../javascripts/lib/ie11-polyfills/element-qsa-scope';\nimport '../../javascripts/lib/ie11-polyfills/nodelist-foreach';\nimport '../../javascripts/lib/ie11-polyfills/closest';\nimport '../../javascripts/lib/ie11-polyfills/es6-promise-auto';\nimport '../../javascripts/lib/ie11-polyfills/find-index';\nimport '../../javascripts/lib/ie11-polyfills/find';\nimport '../../javascripts/lib/ie11-polyfills/string-replaceall';\n\nimport Helpers from '../../javascripts/lib/helpers';\nimport CookieDisclaimer from '../../javascripts/lib/cookie-disclaimer';\n\nimport AddUserAgentClasses from '../../javascripts/application/add-user-agent-classes';\nimport Header from '../../javascripts/application/header';\nimport Search from '../../javascripts/application/search';\nimport StickyNav from '../../javascripts/application/sticky-nav';\nimport HeroSlider from '../../javascripts/application/hero-slider';\nimport GallerySlider from '../../javascripts/application/gallery-slider';\nimport ShareBar from '../../javascripts/application/share-bar';\nimport EqualHeightCells from '../../javascripts/application/equal-height-cells';\nimport Modals from '../../javascripts/application/modals';\nimport TableFade from '../../javascripts/application/table-fade';\nimport FakeUploadInput from '../../javascripts/application/fake-upload-input';\nimport FocusOutlines from '../../javascripts/application/focus-outlines';\nimport InstagramWidget from '../../javascripts/application/instagram-widget';\n// import PointsTooltips from '../../javascripts/application/points-tooltips';\nimport CollapsibleProductSection from '../../javascripts/application/collapsible-product-section';\n\nimport '../../stylesheets/application/application.scss';\n\nimport lazySizes from 'lazysizes';\nif (!('object-fit' in document.createElement('a').style)) {\n require('lazysizes/plugins/object-fit/ls.object-fit');\n}\n\n// Uncomment to copy all static images under ../images to the output folder and reference\n// them with the image_pack_tag helper in views (e.g <%= image_pack_tag 'rails.png' %>)\n// or the `imagePath` JavaScript helper below.\nconst images = require.context('../../images/application', true);\nconst imagePath = (name) => images(name, true);\n\nconst companyName = 'The School Of Artisan Food';\n\nRails.start();\n\nHelpers.ready(() => {\n new AddUserAgentClasses();\n new Header({\n headerSelector: 'header',\n menuToggleSelector: '[data-js=\"menu-toggle\"]',\n slidingNav: document.body.classList.contains('has-sliding-nav'),\n slidingNavOverlayClasses: ['overlay', 'nav__overlay', 'is-visible'],\n navigationRootListSelector: 'nav[data-js=\"primary-navigation\"] ul',\n childNavToggleSelector: 'button.subnav-toggle-button',\n tabTrappableItemsWrapperSelector: '.page-header__lower-wrapper',\n tabTrappableItemsSelectors: 'a[href]:not(.page-header__logo), button:not([disabled]), [tabindex=\"0\"]',\n translationsSelector: 'nav[data-js=\"primary-navigation\"]',\n translationAttributeForAriaLabelShow: 'data-translation-aria-label-show',\n translationAttributeForAriaLabelHide: 'data-translation-aria-label-hide',\n });\n new Search({\n searchContainerSelector: '[data-search-container]',\n searchButtonsSelector: '[data-search]',\n searchBarSelector: '[data-search-box]',\n });\n new StickyNav({\n header: '.page-header',\n primaryNav: '.nav__primary',\n main: 'main.page-content',\n body: 'body',\n });\n new HeroSlider({\n selector: '[data-js=\"hero-slides\"]',\n });\n new GallerySlider({\n selector: '[data-js=\"gallery-slides\"]',\n });\n new ShareBar({\n selector: '[data-share-url]',\n companyName: companyName\n });\n new EqualHeightCells({\n selector: '[data-grid-two-thirds].both-images',\n breakpoint: 768,\n });\n new Modals();\n new TableFade({\n selector: 'data-js-table-scroll-fade',\n });\n new CookieDisclaimer();\n new FakeUploadInput();\n new FocusOutlines();\n new InstagramWidget({\n selector: '[data-instagram-widget]',\n });\n // new PointsTooltips({\n // selector: '[data-points-tooltip]',\n // });\n new CollapsibleProductSection({\n selector: '[data-product-collapsible]',\n });\n});\n","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar g; // This works in non-strict mode\n\ng = function () {\n return this;\n}();\n\ntry {\n // This works if eval is allowed (see CSP)\n g = g || new Function(\"return this\")();\n} catch (e) {\n // This works if the window reference is available\n if ((typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) === \"object\") g = window;\n} // g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\n\nmodule.exports = g;"],"sourceRoot":""}