File: D:/HostingSpaces/SBogers10/stafa.komma.pro/wwwroot/js/site/app.js.map
{"version":3,"sources":["webpack:///./resources/js/site/global/scrollHandler.js","webpack:///./node_modules/process/browser.js","webpack:///./resources/js/site/components/shareButtonsHandler.js","webpack:///./resources/js/site/components/heroSliderHandler.js","webpack:///./resources/js/site/components/overlayMenuHandler.js","webpack:///./resources/js/site/components/youtubeHandler.js","webpack:///./resources/js/site/components/imageRackHandler.js","webpack:///./resources/js/site/components/scrollToHandler.js","webpack:///./resources/js/global/polyfills/promise.js","webpack:///./resources/js/global/polyfills/isInteger.js","webpack:///./node_modules/timers-browserify/main.js","webpack:///./node_modules/setimmediate/setImmediate.js","webpack:///(webpack)/buildin/module.js","webpack:///./resources/js/site/components/mapsHandler.js","webpack:///./resources/js/site/components/chocolateFactory.js","webpack:///./resources/js/site/components/projectorHandler.js","webpack:///./resources/js/site/app.js","webpack:///./resources/js/site/global/browserHandler.js","webpack:///./resources/js/global/polyfills/symbol-es6.min.js","webpack:///./resources/js/site/global/helpers.js","webpack:///(webpack)/buildin/global.js","webpack:///./resources/js/site/components/cookieHandler.js"],"names":["ScrollHandler","time","Date","now","timeout","waitThrottle","waitDebounce","lastScrollTopPosition","scrollDirectionDown","scrollDirectionUp","init","triggerOnInit","window","addEventListener","triggerThrottle","triggerSmooth","isset","clearTimeout","setTimeout","triggerDebounce","triggerElementInViewportAnimation","detectScrollDirection","toggleStickyHeader","detectIfElementIsPartlyInViewport","el","rect","getBoundingClientRect","windowHeight","innerHeight","document","documentElement","clientHeight","windowWidth","innerWidth","clientWidth","verticalInView","top","height","horizontalInView","left","width","detectIfElementIsFullyInViewport","bottom","scrollTopPosition","pageYOffset","scrollTop","Math","abs","elements","querySelectorAll","elementsLength","length","e","element","classList","remove","stickyHeader","querySelector","hidden","body","add","cachedSetTimeout","cachedClearTimeout","process","module","exports","defaultSetTimout","Error","defaultClearTimeout","runTimeout","fun","call","this","currentQueue","queue","draining","queueIndex","cleanUpNextTick","concat","drainQueue","len","run","marker","runClearTimeout","Item","array","noop","nextTick","args","Array","arguments","i","push","prototype","apply","title","browser","env","argv","version","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","name","binding","cwd","chdir","dir","umask","ShareButtonsHandler","shareButtonsElement","shareMessageElement","shareMessage","getElementById","convertShareMessageToObject","items","buttons","buttonsLength","button","item","social","getAttribute","functionName","capitalizeFirstLetter","console","log","messageObject","attributes","attributesLength","attribute","attributeName","replace","snakeToCamel","value","clickFacebookButton","FB","ui","method","mobile_iframe","href","url","response","clickTwitterButton","open","encodeName","encodeUrl","clickLinkedinButton","encodeSummary","clickMailButton","clickLinkButton","select","copyToClipboard","flashMessage","Sliders","sliderContainers","sliderContainersLength","sliderId","Slidersetting","SliderSetting","slideQuery","navigationButtons","dots","Slider","prepareParameters","settingsObject","self","definedPreviousNext","autoSlider","sliderInterval","setSliderId","string","setDefinedPreviousNext","boolean","setAutoSlider","setSliderInterval","integer","setSlideQuery","setNavigationButtons","setDots","getSliderId","getDefinedPreviousNext","getAutoSlider","getSliderInterval","getSlideQuery","getNavigationButtons","getDots","fill","settingsObjectKeys","Object","keys","settingsObjectLength","key","settings","sliderObject","activeSlideId","previousSlideId","nextSlideId","availableSlides","slides","autoSliderInterval","setPreviousAndNextSlide","setSlide","swipeGestures","Hammer","resetAutoSlider","nextSlide","previousSlide","navigationButtonsLength","clickNavigationButton","dotsLength","clickDot","clearInterval","Number","isInteger","setInterval","slidesLength","slide","style","pointerEvents","slideOrder","parseInt","setActiveDot","navButton","next","previous","setAttribute","clickedDot","dot","dotOrder","tabIndex","bodyScrollLock","require","OverlayMenuHandler","overlayMenuTriggerList","overlayMenuTriggerListCount","overlayMenuTrigger","initOverlayMenu","toggleOverlayMenu","event","overlayMenuNav","enableBodyScroll","contains","forEach","elem","disableBodyScroll","toggle","YoutubeHandler","youtubeClass","players","youtubePlayers","youtubePlayersAmount","youtubePlayer","youtubeElement","id","link","autoPlay","initYoutube","YT","Player","onYouTubePlayerAPIReady","loadPlayers","getScript","player","videoId","host","playerVars","modestbranding","rel","disablekb","autoplay","events","onStateChange","onReady","playerContainerId","target","getIframe","data","PlayerState","ENDED","playVideo","ImageRackHandler","imageRackElements","imageRackElementsLength","ImageRack","imageRack","rack","slideArea","imageLoaded","currentItem","maxItemPosition","maxTranslated","offset","previousButton","nextButton","calculateSteps","previousItem","setImageRack","nextItem","swipeLeft","swipeRight","debounceTimeout","bodyOffset","availableViewArea","offsetWidth","rackWidth","offsetLeft","maxItemCalculated","imagesLoaded","offsetFromLeftSide","warn","nextOffsetPosition","transform","ScrollToHandler","duration","start","change","currentTime","allowAnimation","scrollToAnimation","easing","anchorLinks","anchorLinksAmount","prepareScrollTo","preventDefault","elementId","substr","indexOf","scrollToElementPosition","max","startTime","performance","getTime","requestAnimationFrame","animateScroll","abortScrollAnimation","timestamp","progress","min","EasingFunctions","newScrollTop","cancelAnimationFrame","factory","finallyConstructor","callback","constructor","then","resolve","reason","reject","setTimeoutFunc","Promise","fn","TypeError","_state","_handled","_value","undefined","_deferreds","doResolve","handle","deferred","_immediateFn","cb","onFulfilled","onRejected","ret","promise","newValue","finale","thisArg","_unhandledRejectionFn","Handler","done","ex","prom","all","arr","slice","remaining","res","val","race","values","setImmediate","err","globalNS","global","define","isFinite","floor","Function","Timeout","clearFn","_id","_clearFn","scope","close","unref","ref","enroll","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","active","_onTimeout","clearImmediate","registerImmediate","html","channel","messagePrefix","onGlobalMessage","nextHandle","tasksByHandle","currentlyRunningATask","doc","attachTo","getPrototypeOf","toString","runIfPresent","postMessage","importScripts","postMessageIsAsynchronous","oldOnMessage","onmessage","canUsePostMessage","MessageChannel","port1","port2","createElement","script","onreadystatechange","removeChild","appendChild","random","source","attachEvent","task","webpackPolyfill","deprecate","paths","children","defineProperty","enumerable","get","l","MapsHandler","maps","map","hasAttribute","lat","parseFloat","lng","node","location","styles","setCustomStyling","google","drawMaps","googleMap","Map","zoom","center","disableDefaultUI","Marker","position","icon","ChocolateFactory","bannedVisitor","enter","chocolateFactories","amountOfChocolateFactories","ChocolateBar","_flashTicket","chocolateBar","goldenTicket","enjoyTheTour","chocolateFactory","tourGroup","oompaLoompas","amountOfOompaLoompas","tourGroupSize","visitor","visitorName","_isVisitorBanned","_getArrangement","_finishTour","nodeName","group","_addWillieWonka","Ajax","post","HttpRequest","JSON","parse","status","_thanksForVisiting","redirectUrl","_giveFeedbackToMembers","errors","_unknownGapInFactory","_willie","feedbackArea","innerHTML","_clearPreviousMarkedJackets","jacket","visitorFeedbackArea","visitorNode","_grabVisitorJacket","visitorFeedback","visitorFeedbackAmount","visitorFeedbackLine","currentFeedbackArea","markedJackets","markedJacketsAmount","currentLayer","safetyBreak","parentNode","tagName","nextStop","projectors","projectorContainers","projectorContainersLength","projectorId","projectorSetting","ProjectorSetting","autoSlide","Projector","captions","setProjectorId","setAutoSlide","setCaptions","getProjectorId","getAutoSlide","getCaptions","autoSlideInterval","resetAutoSlide","setActiveCaption","captionsLength","caption","captionOrder","BrowserHandler","userAgent","browserInfo","navigator","getBrowserInfo","handleIE","handleSafari","msie","ielt11","ie11","match","substring","getElementsByTagName","tem","ua","M","test","exec","appName","appVersion","splice","defineProperties","symbolHiddenCounter","globalSymbolRegistry","ES6","isArray","objectToString","emptyFunction","simpleFunction","arg","isCallable","Iterator","ArrayIterator","flag","_array","_flag","_nextIndex","StringIterator","_string","isObject","appendArray","array1","array2","length1","length2","hasOwnProperty","simpleInheritance","child","parent","create","Symbol","desc","String","symbol","_description","_isSymbol","setupSymbolInternals","for","record","registryLength","writable","configurable","keyFor","isSymbol","hasInstance","isConcatSpreadable","iterator","toStringTag","valueOf","nextValue","stringObject","SpreadOperatorImpl","_target","_values","_thisArg","spread","iterable","forOf","temp","returnValue","instanceOf","object","hasInstanceSymbolProp","iterationResult","spreadOperator","instance","targets","outputs","unshift","arrayLike","mapFn","obj","linear","t","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","async","scripts","prior","onload","_","isAbort","readyState","src","insertBefore","debounce","func","wait","immediate","context","later","callNow","Cookie","set","days","domain","domainParts","date","expires","setTime","toGMTString","split","cookie","shift","join","nameEQ","ca","c","charAt","erase","number_format","number","decimals","dec_point","thousands_sep","n","prec","sep","dec","s","k","pow","round","toFixedFix","Element","closest","matches","msMatchesSelector","webkitMatchesSelector","ancestor","parentElement","xhr","XMLHttpRequest","token","content","setRequestHeader","send","stringify","toUpperCase","m","indexInParent","childNodes","num","nodeType","editable","contentEditable","readOnly","range","createRange","selectNodeContents","selection","getSelection","removeAllRanges","addRange","setSelectionRange","execCommand","scrollLeft","pageXOffset","g","CookieHandler","cookieBar","cookieOverlay","cookieMessage","cookieSwitch","cookieFadeOutAnimationDuration","acceptTracking","initCookieBar","initCookieOverlay","checkForCookieSettings","initCookieSwitch","closeButton","closeCookieMessage","openCookieSettingsButton","openCookieSettings","toggleTrackingInput","checked","toggleTrackingSetting","acceptButton","setCookieSettings","saveButton","reload"],"mappings":"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","file":"/js/site/app.js","sourcesContent":["/* ==========================================================================\n Scroll handler\n - Handler the objects which are bind on scroll events or visible in viewport\n ========================================================================== */\n\nconst ScrollHandler = {\n\n // Variables for debounce and throttle effects\n time: Date.now(),\n timeout: null,\n waitThrottle: 1000,\n waitDebounce: 300,\n\n // Variables for scroll direction\n lastScrollTopPosition: 0,\n scrollDirectionDown: true,\n scrollDirectionUp: false,\n\n //Initialisation\n init: function () {\n\n // Trigger start on start up\n ScrollHandler.triggerOnInit();\n\n // Throttle scroll\n window.addEventListener('scroll', function () {\n if ((ScrollHandler.time + ScrollHandler.waitThrottle - Date.now()) < 0) {\n ScrollHandler.triggerThrottle();\n ScrollHandler.time = Date.now();\n }\n });\n\n // Smooth scroll\n window.addEventListener('scroll', function () {\n ScrollHandler.triggerSmooth();\n });\n\n // Debounce scroll\n window.addEventListener('scroll', function () {\n if(isset(ScrollHandler.timeout)) clearTimeout(ScrollHandler.timeout);\n ScrollHandler.timeout = setTimeout(ScrollHandler.triggerDebounce, ScrollHandler.waitDebounce);\n });\n },\n\n // Trigger on start up\n triggerOnInit: function () {\n ScrollHandler.triggerElementInViewportAnimation();\n },\n\n // Trigger scroll functions with throttle (preferred)\n triggerThrottle: function () {\n // console.log('Throttled scroll');\n ScrollHandler.triggerElementInViewportAnimation();\n },\n\n // Trigger scroll on debounce\n triggerDebounce: function () {\n // console.log('Debounce scroll');\n },\n\n // Trigger scroll on the flight\n triggerSmooth: function () {\n // console.log('Smooth scroll');\n ScrollHandler.detectScrollDirection();\n ScrollHandler.toggleStickyHeader();\n },\n\n // Detect if part of a given element is visible in the viewport\n // El must be a node element\n detectIfElementIsPartlyInViewport: function(el)\n {\n if(isset(el)){\n\n const rect = el.getBoundingClientRect();\n // DOMRect { x: 8, y: 8, width: 100, height: 100, top: 8, right: 108, bottom: 108, left: 8 }\n const windowHeight = (window.innerHeight || document.documentElement.clientHeight);\n const windowWidth = (window.innerWidth || document.documentElement.clientWidth);\n\n const verticalInView = (rect.top <= (windowHeight)) && ((rect.top + rect.height) >= 0);\n const horizontalInView = (rect.left <= windowWidth) && ((rect.left + rect.width) >= 0);\n\n return (verticalInView && horizontalInView);\n }\n },\n\n // Detect if a given element is fully visible in the viewport\n // El must be a node element\n detectIfElementIsFullyInViewport: function(el)\n {\n if(isset(el)){\n const rect = el.getBoundingClientRect();\n\n return (\n rect.top >= 0 &&\n rect.bottom <= window.innerHeight\n );\n }\n },\n\n detectScrollDirection: function () {\n const scrollTopPosition = window.pageYOffset || document.documentElement.scrollTop; // Credits: \"https://github.com/qeremy/so/blob/master/so.dom.js#L426\"\n const minimalScrollAmount = 96;\n\n if (scrollTopPosition >= ScrollHandler.lastScrollTopPosition){\n if(Math.abs(scrollTopPosition - ScrollHandler.lastScrollTopPosition) < minimalScrollAmount) return\n ScrollHandler.scrollDirectionDown = true;\n ScrollHandler.scrollDirectionUp = false;\n } else {\n if(Math.abs(scrollTopPosition - ScrollHandler.lastScrollTopPosition) < minimalScrollAmount) return\n ScrollHandler.scrollDirectionDown = false;\n ScrollHandler.scrollDirectionUp = true;\n }\n ScrollHandler.lastScrollTopPosition = scrollTopPosition;\n },\n\n // Trigger animation on elements that have 'element-in-viewport' and that are in the viewport\n // These animation can only be triggered once, if you want more then that you should write an specific function for this\n triggerElementInViewportAnimation: function () {\n const elements = document.querySelectorAll('.element-in-viewport');\n const elementsLength = elements.length;\n\n for(let e = 0; e < elementsLength; e++){\n\n const element = elements[e];\n if(ScrollHandler.detectIfElementIsPartlyInViewport(element)){\n element.classList.remove('element-in-viewport');\n }\n }\n\n },\n\n // ------------------------------ CUSTOM SCROLL HANDLERS ------------------------------------\n\n // Hide or show sticky navigation when header isn't visible\n toggleStickyHeader: function () {\n const stickyHeader = document.querySelector('.js-sticky-header');\n const visibleStickyHeaderClass = 'is-sticky-header-visible';\n if (stickyHeader) stickyHeader.hidden = false;\n\n if(isset(stickyHeader)){\n // Hide when scrolling DOWN (OR within offset)\n if(ScrollHandler.scrollDirectionDown || ScrollHandler.lastScrollTopPosition < 110){\n document.body.classList.remove(visibleStickyHeaderClass);\n }\n // Show when scrolling UP and outside of offset\n else {\n document.body.classList.add(visibleStickyHeaderClass);\n }\n }\n },\n\n};\n\nScrollHandler.init();","// shim for using process in browser\nvar process = module.exports = {};\n\n// 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}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\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 try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\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\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\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\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\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 if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\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) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/* ==========================================================================\n Share buttons handler\n ========================================================================== */\n\nconst ShareButtonsHandler = {\n\n shareButtonsElement: null,\n shareMessageElement: null,\n shareMessage: null,\n\n init: function () {\n // Get the youtube players containers\n ShareButtonsHandler.shareButtonsElement = document.getElementById('js-shareButtons');\n ShareButtonsHandler.shareMessageElement = document.getElementById('js-shareButtonData');\n\n if (isset(ShareButtonsHandler.shareButtonsElement) && isset(ShareButtonsHandler.shareMessageElement)) {\n ShareButtonsHandler.convertShareMessageToObject();\n\n const items = ShareButtonsHandler.shareButtonsElement.querySelectorAll('.js-social-media-item');\n const buttons = ShareButtonsHandler.shareButtonsElement.querySelectorAll('.js-social-media-button');\n const buttonsLength = buttons.length;\n\n for (let i = 0; i < buttonsLength; i++) {\n const button = buttons[i];\n const item = items[i];\n\n button.addEventListener('click', function () {\n const social = item.getAttribute('data-social');\n let functionName = 'click' + capitalizeFirstLetter(social) + 'Button';\n\n if(typeof ShareButtonsHandler[functionName] === 'function'){\n ShareButtonsHandler[functionName]();\n }\n else{\n console.log('Method not build yet: ' + functionName);\n }\n });\n }\n }\n },\n\n convertShareMessageToObject: function () {\n let messageObject = {};\n for (let i = 0, attributes = ShareButtonsHandler.shareMessageElement.attributes, attributesLength = attributes.length; i < attributesLength; i++) {\n const attribute = attributes[i];\n let attributeName = attribute.name;\n attributeName = attributeName.replace(/data-/g, '');\n attributeName = snakeToCamel(attributeName);\n\n messageObject[attributeName] = attribute.value;\n }\n ShareButtonsHandler.shareMessage = messageObject;\n },\n\n clickFacebookButton: function () {\n FB.ui({\n method: 'share',\n mobile_iframe: true,\n href: ShareButtonsHandler.shareMessage.url,\n }, function (response) {\n });\n },\n\n clickTwitterButton: function () {\n window.open('https://twitter.com/intent/tweet?text=' + ShareButtonsHandler.shareMessage.encodeName + '&url=' + ShareButtonsHandler.shareMessage.encodeUrl , 'newwindow', 'width=500, height=600');\n },\n\n clickLinkedinButton: function () {\n window.open('https://www.linkedin.com/shareArticle?mini=true&url='+ ShareButtonsHandler.shareMessage.encodeUrl +'&title='+ ShareButtonsHandler.shareMessage.encodeName +'&summary=' + ShareButtonsHandler.shareMessage.encodeSummary, 'newwindow', 'width=500, height=600');\n },\n\n clickMailButton: function () {\n window.open('mailto:?subject='+ShareButtonsHandler.shareMessage.name+'&body='+ShareButtonsHandler.shareMessage.url, '_self');\n },\n\n clickLinkButton: function () {\n ShareButtonsHandler.shareMessageElement.select();\n copyToClipboard('#js-shareButtonData');\n\n const flashMessage = ShareButtonsHandler.shareButtonsElement.querySelector('.js-link-copied-message');\n flashMessage.classList.add('clicked');\n\n setTimeout(function () {\n flashMessage.classList.remove('clicked');\n }, 2000);\n\n },\n\n};\n\nShareButtonsHandler.init();","\n/* Example\n\nconst headerImageSliderSetting = new SliderProjectorSetting({\n sliderProjectorId: 'header-image-slider',\n slideQuery: '#header-image-slider .placeholder figure',\n dots: '#header-image-slider .slider-navigation-labels .navigation span',\n autoSlider: true,\n sliderInterval: 4000\n});\nheaderImageSliderSetting = headerImageSliderSetting.prepareParameters();\n\nconst headerImageSlider = new SliderProjector(headerImageSliderSetting).init();\n\n */\n\n\nlet Sliders = [];\n\nconst sliderContainers = document.querySelectorAll('.js-slider');\nconst sliderContainersLength = sliderContainers.length;\n\nfor(let i =0; i < sliderContainersLength; i++){\n\n const slider = sliderContainers[i];\n const sliderId = slider.getAttribute('id');\n\n if(sliderId !== null){\n\n const Slidersetting = new SliderSetting({\n sliderId: sliderId,\n slideQuery: '#' + sliderId +' .js-slider-slide',\n navigationButtons: '#' + sliderId +' .js-slider-button',\n dots: '#' + sliderId +' .js-slider-indicator',\n });\n\n Sliders.push( new Slider(Slidersetting.prepareParameters()).init() );\n }\n else console.log('An image slider has no id...');\n}\n\n\nfunction SliderSetting(settingsObject) {\n\n const self = this;\n\n this.sliderId = '';\n this.definedPreviousNext = true;\n this.autoSlider = false;\n this.sliderInterval = 4000;\n this.navigationButtons = '';\n this.dots = '';\n this.slideQuery = '';\n\n this.setSliderId = function (string) {\n this.sliderId = string;\n return this;\n };\n this.setDefinedPreviousNext = function (boolean) {\n this.definedPreviousNext = boolean;\n return this;\n };\n this.setAutoSlider = function (boolean) {\n this.autoSlider = boolean;\n return this;\n };\n this.setSliderInterval = function (integer) {\n this.sliderInterval = integer;\n return this;\n };\n this.setSlideQuery = function (string) {\n this.slideQuery = string;\n return this;\n };\n this.setNavigationButtons = function (string) {\n this.navigationButtons = string;\n return this;\n };\n this.setDots = function (string) {\n this.dots = string;\n return this;\n };\n this.getSliderId = function () {\n return this.sliderId;\n };\n this.getDefinedPreviousNext = function () {\n return this.definedPreviousNext;\n };\n this.getAutoSlider = function () {\n return this.autoSlider;\n };\n this.getSliderInterval = function () {\n return this.sliderInterval;\n };\n this.getSlideQuery = function () {\n return this.slideQuery;\n };\n this.getNavigationButtons = function () {\n return this.navigationButtons;\n };\n this.getDots = function () {\n return this.dots;\n };\n\n // Invert setters to getters\n this.prepareParameters = function () {\n\n return {\n sliderId: self.getSliderId(),\n definedPreviousNext: self.getDefinedPreviousNext(),\n autoSlider: self.getAutoSlider(),\n sliderInterval: self.getSliderInterval(),\n navigationButtons: self.getNavigationButtons(),\n dots: self.getDots(),\n slideQuery: self.getSlideQuery()\n }\n\n };\n\n // Mass assign settings\n this.fill = function () {\n // Object.keys(settingsObject).forEach(function (key) {\n // self[key] = settingsObject[key];\n // });\n\n const settingsObjectKeys = Object.keys(settingsObject);\n const settingsObjectLength = settingsObjectKeys.length;\n\n for(let i = 0; i < settingsObjectLength; i++){\n const key = settingsObjectKeys[i];\n self[key] = settingsObject[key];\n }\n\n };\n\n this.fill();\n\n return {\n sliderId: self.setSliderId,\n definedPreviousNext: self.setDefinedPreviousNext,\n autoSlider: self.setAutoSlider,\n sliderInterval: self.setSliderInterval,\n navigationButtons: self.setNavigationButtons,\n dots: self.setDots,\n slideQuery: self.setSlideQuery,\n prepareParameters: self.prepareParameters\n };\n}\n\nfunction Slider(settings) {\n //Define Slider object\n const self = this;\n this.sliderObject = '';\n\n //SlideParameters\n this.activeSlideId = 0;\n this.previousSlideId = 0;\n this.nextSlideId = 0;\n this.availableSlides = 1;\n this.slides = [];\n this.autoSliderInterval = null;\n\n this.settings = {};\n\n this.init = function () {\n\n //Append settings to self\n this.settings = settings;\n\n //Assign needed elements and calculations\n this.sliderObject = document.getElementById(this.settings.sliderId);\n this.slides = document.querySelectorAll(this.settings.slideQuery);\n this.availableSlides = this.slides.length;\n this.activeSlideId = 0;\n\n //Define previous and next if we want to use those\n if (self.settings.definedPreviousNext) this.setPreviousAndNextSlide();\n\n // Set active slide (and possible previous and next classes)\n this.setSlide();\n\n // Swipe interaction\n const swipeGestures = new Hammer(this.sliderObject);\n swipeGestures.on('swipeleft', function () {\n self.resetAutoSlider();\n self.nextSlide();\n self.setSlide();\n });\n swipeGestures.on('swiperight', function () {\n self.resetAutoSlider();\n self.previousSlide();\n self.setSlide();\n });\n\n\n\n if (this.settings.navigationButtons !== '') {\n\n // Click interaction\n const navigationButtons = document.querySelectorAll(this.settings.navigationButtons);\n const navigationButtonsLength = navigationButtons.length;\n for(let i = 0; i < navigationButtonsLength; i++){\n const navigationButton = navigationButtons[i];\n navigationButton.addEventListener('click', function () {\n self.clickNavigationButton(this);\n });\n }\n\n }\n\n if (this.settings.dots !== '') {\n // Click interaction\n const dots = document.querySelectorAll(this.settings.dots);\n const dotsLength = dots.length;\n\n for(let i = 0; i < dotsLength; i++){\n const dot = dots[i];\n dot.addEventListener('click', function () {\n self.clickDot(this);\n });\n }\n\n }\n\n self.autoSlider();\n };\n\n\n this.autoSlider = function (){\n\n if(this.autoSliderInterval !== null) clearInterval(this.autoSliderInterval);\n\n if(this.settings.autoSlider && Number.isInteger(this.settings.sliderInterval) ){\n\n this.autoSliderInterval = setInterval(function() {\n self.nextSlide();\n self.setSlide();\n }, this.settings.sliderInterval\n );\n }\n };\n\n this.resetAutoSlider = self.autoSlider;\n\n\n this.nextSlide = function () {\n this.activeSlideId++;\n if (this.activeSlideId >= this.availableSlides) this.activeSlideId = 0;\n\n if (self.settings.definedPreviousNext) this.setPreviousAndNextSlide();\n };\n\n this.previousSlide = function () {\n this.activeSlideId--;\n if (this.activeSlideId < 0) this.activeSlideId = this.availableSlides - 1;\n\n if (self.settings.definedPreviousNext) this.setPreviousAndNextSlide();\n };\n\n this.setPreviousAndNextSlide = function () {\n this.nextSlideId = this.activeSlideId + 1;\n if (this.nextSlideId >= this.availableSlides) this.nextSlideId = 0;\n\n this.previousSlideId = this.activeSlideId - 1;\n if (this.previousSlideId < 0) this.previousSlideId = this.availableSlides - 1;\n };\n\n this.setSlide = function () {\n\n // Loop through the form elements\n const slidesLength = self.slides.length;\n for(let i = 0; i < slidesLength; i++){\n const slide = self.slides[i];\n\n slide.style.pointerEvents = \"none\"; // Needed for swipe functionality\n\n // Convert data set attribute to desired type\n const slideOrder = parseInt(slide.getAttribute('data-order'));\n\n // Remove and set active for all slides\n if (slideOrder !== self.activeSlideId) slide.classList.remove('is-active');\n else slide.classList.add('is-active');\n\n // If we use the previous and next, also set those classes\n if (self.settings.definedPreviousNext) {\n\n if (slideOrder !== self.previousSlideId) slide.classList.remove('previous');\n else slide.classList.add('previous');\n\n if (slideOrder !== self.nextSlideId) slide.classList.remove('next');\n else slide.classList.add('next');\n }\n }\n\n if (self.settings.dots !== '') { self.setActiveDot(); }\n };\n\n this.clickNavigationButton = function (navButton) {\n self.activeSlideId = parseInt(navButton.getAttribute('data-order'));\n if (self.settings.definedPreviousNext) self.setPreviousAndNextSlide();\n self.setSlide();\n\n const next = document.querySelector(self.settings.navigationButtons + '.next');\n const previous = document.querySelector(self.settings.navigationButtons + '.previous');\n\n next.setAttribute('data-order', self.nextSlideId);\n previous.setAttribute('data-order', self.previousSlideId);\n\n self.resetAutoSlider();\n\n // next.querySelector('p').innerHTML = self.slides[self.nextSlideId].dataset.name;\n // previous.querySelector('p').innerHTML = self.slides[self.previousSlideId].dataset.name;\n };\n\n this.clickDot = function (clickedDot) {\n self.activeSlideId = parseInt(clickedDot.getAttribute('data-order'));\n self.setSlide();\n self.resetAutoSlider();\n };\n\n this.setActiveDot = function () {\n\n const dots = document.querySelectorAll(this.settings.dots);\n const dotsLength = dots.length;\n for(let i = 0; i < dotsLength; i++){\n const dot = dots[i];\n dotOrder = parseInt(dot.getAttribute('data-order'));\n\n if(dotOrder !== self.activeSlideId) {\n dot.classList.remove('is-active');\n dot.tabIndex = 0;\n }\n else {\n dot.classList.add('is-active');\n dot.tabIndex = -1;\n }\n }\n };\n}","/* ==========================================================================\n Navigation handler\n - Handles the showing and hiding of the overlay-menu component which has the proper classes.\n ========================================================================== */\n\nconst bodyScrollLock = require('body-scroll-lock');\n\nconst OverlayMenuHandler = {\n\n // init: function () {\n // const overlayMenuTrigger = document.querySelector('.js-overlay-menu-trigger');\n // OverlayMenuHandler.initOverlayMenu(overlayMenuTrigger);\n // },\n\n init: function () {\n\n const overlayMenuTriggerList = document.querySelectorAll('.js-overlay-menu-trigger');\n const overlayMenuTriggerListCount = overlayMenuTriggerList.length;\n\n if(isset(overlayMenuTriggerList) && overlayMenuTriggerListCount !== 0){\n for(let i = 0; i < overlayMenuTriggerListCount; i++){\n const overlayMenuTrigger = overlayMenuTriggerList[i];\n OverlayMenuHandler.initOverlayMenu(overlayMenuTrigger);\n }\n }\n },\n\n initOverlayMenu: function (overlayMenuTrigger) {\n overlayMenuTrigger.addEventListener('click', OverlayMenuHandler.toggleOverlayMenu, false);\n },\n\n toggleOverlayMenu: function (event) {\n const overlayMenuNav = document.querySelector('.js-overlay-menu');\n // const overlayMenuBody = overlayMenu.querySelector('.js-overlay-menu-persist-scrolling');\n\n // Bail if overlayMenu doesn't exist\n if (!overlayMenuNav) return;\n\n // Clear previously locked scroll on the body\n bodyScrollLock.enableBodyScroll(overlayMenuNav);\n\n // If the overlayMenu is already active, collapse it and quit\n if (document.body.classList.contains('is-overlay-menu-active')) {\n overlayMenuNav.querySelectorAll('[tabindex=\"0\"]').forEach(function(elem) {\n elem.tabIndex = -1;\n });\n\n document.body.classList.remove('is-overlay-menu-active');\n return;\n }\n\n // Lock scrolling on the body\n bodyScrollLock.disableBodyScroll(overlayMenuNav);\n\n overlayMenuNav.querySelectorAll('[tabindex=\"-1\"]').forEach(function(elem) {\n elem.tabIndex = 0;\n });\n\n // Toggle active overlayMenu by setting a class on the body\n document.body.classList.toggle('is-overlay-menu-active');\n overlayMenuNav.hidden = false;\n }\n};\n\nOverlayMenuHandler.init();","/* ==========================================================================\n Youtube handler\n ========================================================================== */\n\nconst YoutubeHandler = {\n\n youtubeClass : '.js-youtube-player',\n players: [],\n\n init : function()\n {\n // Get the youtube players containers\n const youtubePlayers = document.querySelectorAll(YoutubeHandler.youtubeClass);\n const youtubePlayersAmount = youtubePlayers.length;\n\n for(let i = 0; i < youtubePlayersAmount; i++){\n\n const youtubePlayer = youtubePlayers[i];\n\n\n const youtubePlayerId = youtubePlayer.getAttribute('id');\n if(youtubePlayerId !== null )\n {\n // Strip the necessary data from the html and create objects from it\n const youtubeElement = {\n id: youtubePlayer.getAttribute('id'),\n link: youtubePlayer.getAttribute('data-youtube-link'),\n autoPlay: parseInt(youtubePlayer.getAttribute('data-auto-play')),\n };\n\n YoutubeHandler.players.push(youtubeElement);\n }\n else{\n console.log(\"Element not include because there isn't a id on the player\");\n console.log(youtubePlayer);\n }\n }\n\n if(youtubePlayersAmount >= 1) YoutubeHandler.initYoutube();\n\n },\n\n /**\n * Check if external script is loaded\n *\n */\n initYoutube: function() {\n // See if YT variable exists\n if (typeof(YT) == 'undefined' || typeof(YT.Player) == 'undefined') {\n // Setup API ready function\n window.onYouTubePlayerAPIReady = function() {\n YoutubeHandler.loadPlayers();\n };\n // Load external script\n getScript('https://www.youtube.com/iframe_api');\n // If YT already exists load player\n } else {\n YoutubeHandler.loadPlayers();\n }\n },\n\n /**\n * Create the Youtube player(s) with parameters\n * And rewrite the players to key them by the element id\n *\n */\n loadPlayers: function() {\n\n let players = [];\n\n const youtubePlayersAmount = YoutubeHandler.players.length;\n for(let i = 0; i < youtubePlayersAmount; i++){\n\n let youtubePlayer = YoutubeHandler.players[i];\n\n // Load player\n youtubePlayer.player = new YT.Player(youtubePlayer.id,{\n height: 200,\n width: 200,\n videoId: youtubePlayer.link,\n host: 'https://www.youtube-nocookie.com',\n playerVars: {\n modestbranding: 0,\n rel: 0,\n disablekb: 1,\n autoplay: youtubePlayer.autoPlay\n },\n events: {\n // 'onReady': YoutubeHandler.onReady,\n 'onStateChange': YoutubeHandler.onStateChange\n }\n });\n\n players[youtubePlayer.id] = youtubePlayer;\n\n }\n\n YoutubeHandler.players = players;\n\n },\n\n /**\n * When player is ready to play\n */\n onReady : function(event) {\n\n const playerContainerId = event.target.getIframe().getAttribute('id');\n const player = YoutubeHandler.players[playerContainerId].player;\n\n // Show video\n // setTimeout(function(){ $('#' + playerContainerId).stop().animate({ opacity: 1 },1000) },800);\n\n // If not on tablet or mobile, play on high quality\n // player.mute();\n // player.playVideo();\n // player.setPlaybackQuality('hd1080');\n },\n\n /**\n * Listener for Youtube state change\n */\n onStateChange : function(event) {\n\n const playerContainerId = event.target.getIframe().getAttribute('id');\n const player = YoutubeHandler.players[playerContainerId].player;\n\n const videoState = event.data;\n\n // Loop video\n if (event.data === YT.PlayerState.ENDED ) {\n player.playVideo();\n }\n }\n};\n\nYoutubeHandler.init();","require('hammerjs');\n\nconst ImageRackHandler = {\n\n init: function () {\n const imageRackElements = document.querySelectorAll('.js-image-rack');\n const imageRackElementsLength = imageRackElements.length;\n\n for(let i = 0; i < imageRackElementsLength; i++){\n new ImageRack(imageRackElements[i]);\n }\n }\n};\n\n\nclass ImageRack {\n\n constructor(imageRack) {\n\n const self = this;\n\n this.rack = imageRack;\n this.slideArea = this.rack.querySelector('.js-image-rack-slide');\n this.items = this.rack.querySelectorAll('.js-image-rack-item');\n\n this.imageLoaded = false;\n\n this.currentItem = 0;\n this.maxItemPosition = this.items.length;\n this.maxTranslated = 0;\n\n this.offset = [];\n\n this.previousButton = this.rack.querySelector('.js-image-rack-button.previous');\n this.nextButton = this.rack.querySelector('.js-image-rack-button.next');\n\n this.calculateSteps();\n\n this.previousButton.addEventListener('click', function () {\n self.previousItem();\n self.setImageRack();\n });\n\n this.nextButton.addEventListener('click', function () {\n self.nextItem();\n self.setImageRack();\n });\n\n // Swipe interaction\n const swipeGestures = new Hammer(this.rack);\n swipeGestures.on('swipeleft', function () {\n self.swipeLeft();\n self.setImageRack();\n });\n swipeGestures.on('swiperight', function () {\n self.swipeRight();\n self.setImageRack();\n });\n\n this.debounceTimeout = null;\n this.waitDebounce = 500;\n\n // Debounce Resize\n window.addEventListener('resize', function () {\n if(isset(self.debounceTimeout)) clearTimeout(self.debounceTimeout);\n self.debounceTimeout = setTimeout(function() {\n self.calculateSteps();\n self.setImageRack();\n }, self.waitDebounce);\n });\n }\n\n calculateSteps() {\n //Reset the steps array\n this.offset = [];\n\n // Calculated the offset of the whole rack to know how much we may translate at most\n // const bodyOffset = window.bodyOffset(this.rack);\n const bodyOffset = window.bodyOffset(this.slideArea);\n\n // Calculated the available view area of the rack\n let availableViewArea = document.body.offsetWidth - bodyOffset.left;\n\n // Get the racket Width\n let rackWidth = this.items[this.items.length - 1].offsetLeft + this.items[this.items.length - 1].offsetWidth;\n this.maxTranslated = rackWidth - availableViewArea;\n\n let maxItemCalculated = false;\n let imagesLoaded = true;\n\n // Calculated for each item the offset in the rack\n for(let i = 0; i < this.items.length; i++) {\n const item = this.items[i];\n\n if(item.offsetWidth === 0) imagesLoaded = false;\n\n let offsetFromLeftSide = item.offsetLeft;\n\n // Append the offset to the offset position array\n this.offset.push(\n offsetFromLeftSide\n );\n\n // If the max translated is smaller and isn't already defined\n if(this.maxTranslated < offsetFromLeftSide && !maxItemCalculated) {\n this.maxItemPosition = (i + 1);\n maxItemCalculated = true;\n }\n }\n\n // Recalculated when the images aren't loaded\n if(imagesLoaded) this.imageLoaded = true;\n\n }\n\n nextItem() {\n this.currentItem++;\n if(this.currentItem >= this.maxItemPosition) this.currentItem = this.maxItemPosition;\n }\n\n previousItem() {\n this.currentItem--;\n if(this.currentItem < 0) this.currentItem = 0;\n }\n\n swipeLeft() {\n this.nextItem();\n }\n\n swipeRight() {\n this.previousItem();\n }\n\n setImageRack() {\n // Check if image are load when interaction\n if(!this.imageLoaded){\n console.warn(\"ImageRack: Recalculated because images weren't loaded yet.\");\n this.calculateSteps();\n }\n\n let nextOffsetPosition = '-' + this.offset[this.currentItem];\n this.slideArea.style.transform = 'translateX(' + nextOffsetPosition + 'px)';\n }\n}\n\nImageRackHandler.init();","/* ==========================================================================\n Scroll To Click handler\n ========================================================================== */\n\nconst ScrollToHandler = {\n\n // Animation settings\n offset : 60, //pixel\n duration : 1200, //ms\n\n // Animation variables\n body : null,\n start : 0,\n change : 0,\n currentTime : 0,\n allowAnimation : false,\n scrollToAnimation : null,\n\n // Watch the EasingFunction helper for the available methods\n easing: 'easeInOutQuad',\n\n init : function(){\n\n const anchorLinks = document.querySelectorAll('.js-scroll-to-target');\n const anchorLinksAmount = anchorLinks.length;\n\n for(let i = 0; i < anchorLinksAmount; i++) {\n\n const anchorLink = anchorLinks[i];\n\n anchorLink.addEventListener('click', function (event) {\n ScrollToHandler.prepareScrollTo(this.getAttribute('href'));\n event.preventDefault();\n });\n }\n },\n\n /**\n * Prepare the Handler for the animation\n */\n prepareScrollTo : function(elementId){\n\n // Get the scroll to element\n elementId = elementId.substr(elementId.indexOf('#')+1);\n const scrollToElement = document.getElementById(elementId);\n const scrollToElementPosition = scrollToElement.getBoundingClientRect();\n\n // Reset or define the Handler variables\n ScrollToHandler.body = document.documentElement;\n ScrollToHandler.start = Math.max(ScrollToHandler.body.scrollTop, document.body.scrollTop, window.pageYOffset); //Use Math.max because safari doesn't support document.documentElement.scrollTop\n ScrollToHandler.change = ((scrollToElementPosition.top + ScrollToHandler.start) - ScrollToHandler.start) - ScrollToHandler.offset;\n ScrollToHandler.startTime = 'now' in window.performance ? performance.now() : new Date().getTime();\n ScrollToHandler.allowAnimation = true;\n\n // Trigger animation\n scrollToAnimation = requestAnimationFrame(ScrollToHandler.animateScroll);\n\n // Stop on scroll\n window.addEventListener('mousedown', ScrollToHandler.abortScrollAnimation);\n window.addEventListener('wheel', ScrollToHandler.abortScrollAnimation);\n window.addEventListener('DOMMouseScroll', ScrollToHandler.abortScrollAnimation);\n window.addEventListener('mousewheel', ScrollToHandler.abortScrollAnimation);\n window.addEventListener('keyup', ScrollToHandler.abortScrollAnimation);\n window.addEventListener('touchmove', ScrollToHandler.abortScrollAnimation);\n\n },\n\n /*\n * Animate the scroll position\n */\n animateScroll : function (timestamp) {\n\n // Calculate progress from 0 - 1\n let progress = Math.min(1, (timestamp - ScrollToHandler.startTime) / ScrollToHandler.duration);\n if(progress < 0) progress = 0;\n\n // Convert progress with easing function\n progress = EasingFunctions[ScrollToHandler.easing](progress);\n\n const newScrollTop = ScrollToHandler.start + ( ScrollToHandler.change * progress );\n\n ScrollToHandler.body.scrollTop = newScrollTop;\n if( ScrollToHandler.body.scrollTop === 0 ) document.body.scrollTop = newScrollTop; // Safari doesn't support so if ScrollToHandler.body.scrollTop is 0 force the scroll position through document.body.scrollTop\n\n if(progress < 1 && ScrollToHandler.allowAnimation){\n scrollToAnimation = requestAnimationFrame(ScrollToHandler.animateScroll);\n }\n\n },\n\n /*\n * Abort the scroll animation\n */\n abortScrollAnimation : function (event) {\n ScrollToHandler.allowAnimation = false;\n cancelAnimationFrame(ScrollToHandler.scrollToAnimation);\n }\n\n};\n\nScrollToHandler.init();","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (factory());\n}(this, (function () { 'use strict';\n\n /**\n * @this {Promise}\n */\n function finallyConstructor(callback) {\n var constructor = this.constructor;\n return this.then(\n function(value) {\n return constructor.resolve(callback()).then(function() {\n return value;\n });\n },\n function(reason) {\n return constructor.resolve(callback()).then(function() {\n return constructor.reject(reason);\n });\n }\n );\n }\n\n// Store setTimeout reference so promise-polyfill will be unaffected by\n// other code modifying setTimeout (like sinon.useFakeTimers())\n var setTimeoutFunc = setTimeout;\n\n function noop() {}\n\n// Polyfill for Function.prototype.bind\n function bind(fn, thisArg) {\n return function() {\n fn.apply(thisArg, arguments);\n };\n }\n\n /**\n * @constructor\n * @param {Function} fn\n */\n function Promise(fn) {\n if (!(this instanceof Promise))\n throw new TypeError('Promises must be constructed via new');\n if (typeof fn !== 'function') throw new TypeError('not a function');\n /** @type {!number} */\n this._state = 0;\n /** @type {!boolean} */\n this._handled = false;\n /** @type {Promise|undefined} */\n this._value = undefined;\n /** @type {!Array<!Function>} */\n this._deferreds = [];\n\n doResolve(fn, this);\n }\n\n function handle(self, deferred) {\n while (self._state === 3) {\n self = self._value;\n }\n if (self._state === 0) {\n self._deferreds.push(deferred);\n return;\n }\n self._handled = true;\n Promise._immediateFn(function() {\n var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;\n if (cb === null) {\n (self._state === 1 ? resolve : reject)(deferred.promise, self._value);\n return;\n }\n var ret;\n try {\n ret = cb(self._value);\n } catch (e) {\n reject(deferred.promise, e);\n return;\n }\n resolve(deferred.promise, ret);\n });\n }\n\n function resolve(self, newValue) {\n try {\n // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure\n if (newValue === self)\n throw new TypeError('A promise cannot be resolved with itself.');\n if (\n newValue &&\n (typeof newValue === 'object' || typeof newValue === 'function')\n ) {\n var then = newValue.then;\n if (newValue instanceof Promise) {\n self._state = 3;\n self._value = newValue;\n finale(self);\n return;\n } else if (typeof then === 'function') {\n doResolve(bind(then, newValue), self);\n return;\n }\n }\n self._state = 1;\n self._value = newValue;\n finale(self);\n } catch (e) {\n reject(self, e);\n }\n }\n\n function reject(self, newValue) {\n self._state = 2;\n self._value = newValue;\n finale(self);\n }\n\n function finale(self) {\n if (self._state === 2 && self._deferreds.length === 0) {\n Promise._immediateFn(function() {\n if (!self._handled) {\n Promise._unhandledRejectionFn(self._value);\n }\n });\n }\n\n for (var i = 0, len = self._deferreds.length; i < len; i++) {\n handle(self, self._deferreds[i]);\n }\n self._deferreds = null;\n }\n\n /**\n * @constructor\n */\n function Handler(onFulfilled, onRejected, promise) {\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.promise = promise;\n }\n\n /**\n * Take a potentially misbehaving resolver function and make sure\n * onFulfilled and onRejected are only called once.\n *\n * Makes no guarantees about asynchrony.\n */\n function doResolve(fn, self) {\n var done = false;\n try {\n fn(\n function(value) {\n if (done) return;\n done = true;\n resolve(self, value);\n },\n function(reason) {\n if (done) return;\n done = true;\n reject(self, reason);\n }\n );\n } catch (ex) {\n if (done) return;\n done = true;\n reject(self, ex);\n }\n }\n\n Promise.prototype['catch'] = function(onRejected) {\n return this.then(null, onRejected);\n };\n\n Promise.prototype.then = function(onFulfilled, onRejected) {\n // @ts-ignore\n var prom = new this.constructor(noop);\n\n handle(this, new Handler(onFulfilled, onRejected, prom));\n return prom;\n };\n\n Promise.prototype['finally'] = finallyConstructor;\n\n Promise.all = function(arr) {\n return new Promise(function(resolve, reject) {\n if (!arr || typeof arr.length === 'undefined')\n throw new TypeError('Promise.all accepts an array');\n var args = Array.prototype.slice.call(arr);\n if (args.length === 0) return resolve([]);\n var remaining = args.length;\n\n function res(i, val) {\n try {\n if (val && (typeof val === 'object' || typeof val === 'function')) {\n var then = val.then;\n if (typeof then === 'function') {\n then.call(\n val,\n function(val) {\n res(i, val);\n },\n reject\n );\n return;\n }\n }\n args[i] = val;\n if (--remaining === 0) {\n resolve(args);\n }\n } catch (ex) {\n reject(ex);\n }\n }\n\n for (var i = 0; i < args.length; i++) {\n res(i, args[i]);\n }\n });\n };\n\n Promise.resolve = function(value) {\n if (value && typeof value === 'object' && value.constructor === Promise) {\n return value;\n }\n\n return new Promise(function(resolve) {\n resolve(value);\n });\n };\n\n Promise.reject = function(value) {\n return new Promise(function(resolve, reject) {\n reject(value);\n });\n };\n\n Promise.race = function(values) {\n return new Promise(function(resolve, reject) {\n for (var i = 0, len = values.length; i < len; i++) {\n values[i].then(resolve, reject);\n }\n });\n };\n\n// Use polyfill for setImmediate for performance gains\n Promise._immediateFn =\n (typeof setImmediate === 'function' &&\n function(fn) {\n setImmediate(fn);\n }) ||\n function(fn) {\n setTimeoutFunc(fn, 0);\n };\n\n Promise._unhandledRejectionFn = function _unhandledRejectionFn(err) {\n if (typeof console !== 'undefined' && console) {\n console.warn('Possible Unhandled Promise Rejection:', err); // eslint-disable-line no-console\n }\n };\n\n /** @suppress {undefinedVars} */\n var globalNS = (function() {\n // the only reliable means to get the global object is\n // `Function('return this')()`\n // However, this causes CSP violations in Chrome apps.\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n throw new Error('unable to locate global object');\n })();\n\n if (!('Promise' in globalNS)) {\n globalNS['Promise'] = Promise;\n } else if (!globalNS.Promise.prototype['finally']) {\n globalNS.Promise.prototype['finally'] = finallyConstructor;\n }\n\n})));","Number.isInteger = Number.isInteger || function(value) {\n return typeof value === \"number\" &&\n isFinite(value) &&\n Math.floor(value) === value;\n};","var scope = (typeof global !== \"undefined\" && global) ||\n (typeof self !== \"undefined\" && self) ||\n window;\nvar apply = Function.prototype.apply;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) {\n if (timeout) {\n timeout.close();\n }\n};\n\nfunction Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n this._clearFn.call(scope, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n clearTimeout(item._idleTimeoutId);\n\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n};\n\n// setimmediate attaches itself to the global object\nrequire(\"setimmediate\");\n// On some exotic environments, it's not clear which object `setimmediate` was\n// able to install onto. Search each possibility in the same order as the\n// `setimmediate` library.\nexports.setImmediate = (typeof self !== \"undefined\" && self.setImmediate) ||\n (typeof global !== \"undefined\" && global.setImmediate) ||\n (this && this.setImmediate);\nexports.clearImmediate = (typeof self !== \"undefined\" && self.clearImmediate) ||\n (typeof global !== \"undefined\" && global.clearImmediate) ||\n (this && this.clearImmediate);\n","(function (global, undefined) {\n \"use strict\";\n\n if (global.setImmediate) {\n return;\n }\n\n var nextHandle = 1; // Spec says greater than zero\n var tasksByHandle = {};\n var currentlyRunningATask = false;\n var doc = global.document;\n var registerImmediate;\n\n function setImmediate(callback) {\n // Callback can either be a function or a string\n if (typeof callback !== \"function\") {\n callback = new Function(\"\" + callback);\n }\n // Copy function arguments\n var args = new Array(arguments.length - 1);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i + 1];\n }\n // Store and register the task\n var task = { callback: callback, args: args };\n tasksByHandle[nextHandle] = task;\n registerImmediate(nextHandle);\n return nextHandle++;\n }\n\n function clearImmediate(handle) {\n delete tasksByHandle[handle];\n }\n\n function run(task) {\n var callback = task.callback;\n var args = task.args;\n switch (args.length) {\n case 0:\n callback();\n break;\n case 1:\n callback(args[0]);\n break;\n case 2:\n callback(args[0], args[1]);\n break;\n case 3:\n callback(args[0], args[1], args[2]);\n break;\n default:\n callback.apply(undefined, args);\n break;\n }\n }\n\n function runIfPresent(handle) {\n // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n // So if we're currently running a task, we'll need to delay this invocation.\n if (currentlyRunningATask) {\n // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n // \"too much recursion\" error.\n setTimeout(runIfPresent, 0, handle);\n } else {\n var task = tasksByHandle[handle];\n if (task) {\n currentlyRunningATask = true;\n try {\n run(task);\n } finally {\n clearImmediate(handle);\n currentlyRunningATask = false;\n }\n }\n }\n }\n\n function installNextTickImplementation() {\n registerImmediate = function(handle) {\n process.nextTick(function () { runIfPresent(handle); });\n };\n }\n\n function canUsePostMessage() {\n // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n // where `global.postMessage` means something completely different and can't be used for this purpose.\n if (global.postMessage && !global.importScripts) {\n var postMessageIsAsynchronous = true;\n var oldOnMessage = global.onmessage;\n global.onmessage = function() {\n postMessageIsAsynchronous = false;\n };\n global.postMessage(\"\", \"*\");\n global.onmessage = oldOnMessage;\n return postMessageIsAsynchronous;\n }\n }\n\n function installPostMessageImplementation() {\n // Installs an event handler on `global` for the `message` event: see\n // * https://developer.mozilla.org/en/DOM/window.postMessage\n // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n var onGlobalMessage = function(event) {\n if (event.source === global &&\n typeof event.data === \"string\" &&\n event.data.indexOf(messagePrefix) === 0) {\n runIfPresent(+event.data.slice(messagePrefix.length));\n }\n };\n\n if (global.addEventListener) {\n global.addEventListener(\"message\", onGlobalMessage, false);\n } else {\n global.attachEvent(\"onmessage\", onGlobalMessage);\n }\n\n registerImmediate = function(handle) {\n global.postMessage(messagePrefix + handle, \"*\");\n };\n }\n\n function installMessageChannelImplementation() {\n var channel = new MessageChannel();\n channel.port1.onmessage = function(event) {\n var handle = event.data;\n runIfPresent(handle);\n };\n\n registerImmediate = function(handle) {\n channel.port2.postMessage(handle);\n };\n }\n\n function installReadyStateChangeImplementation() {\n var html = doc.documentElement;\n registerImmediate = function(handle) {\n // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var script = doc.createElement(\"script\");\n script.onreadystatechange = function () {\n runIfPresent(handle);\n script.onreadystatechange = null;\n html.removeChild(script);\n script = null;\n };\n html.appendChild(script);\n };\n }\n\n function installSetTimeoutImplementation() {\n registerImmediate = function(handle) {\n setTimeout(runIfPresent, 0, handle);\n };\n }\n\n // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.\n var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);\n attachTo = attachTo && attachTo.setTimeout ? attachTo : global;\n\n // Don't get fooled by e.g. browserify environments.\n if ({}.toString.call(global.process) === \"[object process]\") {\n // For Node.js before 0.9\n installNextTickImplementation();\n\n } else if (canUsePostMessage()) {\n // For non-IE10 modern browsers\n installPostMessageImplementation();\n\n } else if (global.MessageChannel) {\n // For web workers, where supported\n installMessageChannelImplementation();\n\n } else if (doc && \"onreadystatechange\" in doc.createElement(\"script\")) {\n // For IE 6–8\n installReadyStateChangeImplementation();\n\n } else {\n // For older browsers\n installSetTimeoutImplementation();\n }\n\n attachTo.setImmediate = setImmediate;\n attachTo.clearImmediate = clearImmediate;\n}(typeof self === \"undefined\" ? typeof global === \"undefined\" ? this : global : self));\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","/* ==========================================================================\n Google Maps handler\n - https://developers.google.com/maps/documentation/javascript/adding-a-google-map\n ========================================================================== */\n\nconst MapsHandler = {\n\n maps: [],\n key: 'AIzaSyCVGPUmRmQRxXvzzWu3Xyu77XebQxQ-f4Y',\n\n init: function () {\n // Get map elements\n const maps = document.querySelectorAll('.js-google-map');\n\n // If there are map elements loop through them and draw the maps\n if(maps.length !== 0 ) {\n\n // Convert elements into object for callback when script as been loaded\n for(let i = 0; i < maps.length; i++) {\n\n // Get map from nodeList\n const map = maps[i];\n\n if(!map.hasAttribute('data-google-lat') || !map.hasAttribute('data-google-lng')) continue;\n\n let lat = parseFloat(map.getAttribute('data-google-lat'));\n let lng = parseFloat(map.getAttribute('data-google-lng'));\n\n MapsHandler.maps.push({\n node: map,\n location: {\n lat: lat,\n lng: lng,\n },\n styles: MapsHandler.setCustomStyling()\n });\n }\n\n // See if google variable exists\n if (typeof(google) == 'undefined' || typeof(google.maps) == 'undefined') {\n // Load external script with drawMaps callback\n getScript('https://maps.googleapis.com/maps/api/js?v=quarterly&key=' + MapsHandler.key, MapsHandler.drawMaps);\n } else {\n // If already loaded draw maps\n MapsHandler.drawMaps()\n }\n }\n },\n\n /**\n * Draw the google maps\n */\n drawMaps: function () {\n\n for (let i = 0; i < MapsHandler.maps.length; i++) {\n\n const map = MapsHandler.maps[i];\n\n // Create a map\n const googleMap = new google.maps.Map(map.node, {\n zoom: 14,\n center: map.location,\n disableDefaultUI: true,\n styles: map.styles\n });\n\n // Add a marker\n const marker = new google.maps.Marker({\n position: map.location,\n map: googleMap,\n icon: '/img/google-maps-marker.png'\n });\n }\n },\n\n /**\n * Set the custom styling for the Google Maps\n *\n * @returns {*[]}\n */\n setCustomStyling: function () {\n\n return [\n {\n \"elementType\": \"geometry\",\n \"stylers\": [\n {\n \"color\": \"#f5f5f5\"\n }\n ]\n },\n {\n \"elementType\": \"labels.icon\",\n \"stylers\": [\n {\n \"visibility\": \"off\"\n }\n ]\n },\n {\n \"elementType\": \"labels.text.fill\",\n \"stylers\": [\n {\n \"color\": \"#616161\"\n }\n ]\n },\n {\n \"elementType\": \"labels.text.stroke\",\n \"stylers\": [\n {\n \"color\": \"#f5f5f5\"\n }\n ]\n },\n {\n \"featureType\": \"administrative.land_parcel\",\n \"elementType\": \"labels.text.fill\",\n \"stylers\": [\n {\n \"color\": \"#bdbdbd\"\n }\n ]\n },\n {\n \"featureType\": \"poi\",\n \"elementType\": \"geometry\",\n \"stylers\": [\n {\n \"color\": \"#eeeeee\"\n }\n ]\n },\n {\n \"featureType\": \"poi\",\n \"elementType\": \"labels.text.fill\",\n \"stylers\": [\n {\n \"color\": \"#757575\"\n }\n ]\n },\n {\n \"featureType\": \"poi.park\",\n \"elementType\": \"geometry\",\n \"stylers\": [\n {\n \"color\": \"#e5e5e5\"\n }\n ]\n },\n {\n \"featureType\": \"poi.park\",\n \"elementType\": \"labels.text.fill\",\n \"stylers\": [\n {\n \"color\": \"#9e9e9e\"\n }\n ]\n },\n {\n \"featureType\": \"road\",\n \"elementType\": \"geometry\",\n \"stylers\": [\n {\n \"color\": \"#ffffff\"\n }\n ]\n },\n {\n \"featureType\": \"road.arterial\",\n \"elementType\": \"labels.text.fill\",\n \"stylers\": [\n {\n \"color\": \"#757575\"\n }\n ]\n },\n {\n \"featureType\": \"road.highway\",\n \"elementType\": \"geometry\",\n \"stylers\": [\n {\n \"color\": \"#dadada\"\n }\n ]\n },\n {\n \"featureType\": \"road.highway\",\n \"elementType\": \"labels.text.fill\",\n \"stylers\": [\n {\n \"color\": \"#616161\"\n }\n ]\n },\n {\n \"featureType\": \"road.local\",\n \"elementType\": \"labels.text.fill\",\n \"stylers\": [\n {\n \"color\": \"#9e9e9e\"\n }\n ]\n },\n {\n \"featureType\": \"transit.line\",\n \"elementType\": \"geometry\",\n \"stylers\": [\n {\n \"color\": \"#e5e5e5\"\n }\n ]\n },\n {\n \"featureType\": \"transit.station\",\n \"elementType\": \"geometry\",\n \"stylers\": [\n {\n \"color\": \"#eeeeee\"\n }\n ]\n },\n {\n \"featureType\": \"water\",\n \"elementType\": \"geometry\",\n \"stylers\": [\n {\n \"color\": \"#c9c9c9\"\n }\n ]\n },\n {\n \"featureType\": \"water\",\n \"elementType\": \"labels.text.fill\",\n \"stylers\": [\n {\n \"color\": \"#9e9e9e\"\n }\n ]\n }\n ];\n }\n};\n\nMapsHandler.init();","/* ==========================================================================\n | Prevent Bots handler\n |\n | We named this chocolate factory and belonging confusing js hooks\n | to prevent smart bots from blocking these variable or functions.\n |\n ========================================================================== */\n\nconst ChocolateFactory = {\n\n bannedVisitor: [],\n\n /** Get all the chocolate factory and start\n * Looping through those start flashing tickets\n */\n enter: function()\n {\n\n const chocolateFactories = document.querySelectorAll('.js-chocolate-factory');\n\n if(isset(chocolateFactories)){\n\n const amountOfChocolateFactories = chocolateFactories.length;\n for(let i = 0; i < amountOfChocolateFactories; i++){\n\n const ChocolateBar = chocolateFactories[i];\n ChocolateFactory._flashTicket(ChocolateBar);\n }\n }\n },\n\n /**\n * If factory has a golden ticket\n * Then we can make them go on the tour if there has been click on the ticket\n *\n * @param chocolateBar\n * @private\n */\n _flashTicket: function (chocolateBar) {\n\n // Try get the ticket from the chocolateBar\n const goldenTicket = chocolateBar.querySelector('.js-golden-ticket');\n\n // Only continue if chocolate bar has a golden ticket\n if(isset(goldenTicket)){\n\n goldenTicket.addEventListener('click', function () {\n ChocolateFactory.enjoyTheTour(chocolateBar);\n });\n }\n else{\n console.log('To bad, no golden tickets has been found.');\n }\n },\n\n /**\n * Start the tour through the factory\n * And get the names and properties of the members of the group\n * If there are members in the group of course\n *\n * @param chocolateFactory\n */\n enjoyTheTour(chocolateFactory){\n\n // Ask for the tour group\n const tourGroup = chocolateFactory.querySelectorAll('input, textarea');\n\n if(isset(tourGroup)){\n\n // For each visitor we want a belonging Oompa Loompa\n let oompaLoompas = {};\n let amountOfOompaLoompas = 0;\n\n const tourGroupSize = tourGroup.length;\n for(let i = 0; i < tourGroupSize; i++){\n\n // Get the visitor from the group\n const visitor = tourGroup[i];\n\n // Ask for its name\n const visitorName = visitor.getAttribute('name');\n\n // Check if the visitor is banned\n if( ChocolateFactory._isVisitorBanned(visitorName)) continue;\n\n oompaLoompas[ visitorName ] = ChocolateFactory._getArrangement(visitor);\n amountOfOompaLoompas++;\n }\n\n // Check for insurance that there are oompa loompas\n if(amountOfOompaLoompas === 0) return;\n\n // Send submit request\n ChocolateFactory._finishTour(oompaLoompas, chocolateFactory);\n }\n else{\n console.log('To bad, no members to visit this factory')\n }\n },\n\n /**\n * Check if the visitor name isn't allow\n *\n * @param visitorName\n * @returns {boolean}\n * @private\n */\n _isVisitorBanned: function(visitorName){\n if(ChocolateFactory.bannedVisitor.indexOf(visitorName) !== -1){\n return true;\n }\n return false;\n },\n\n /**\n * Most get visitor have a normal arrangement\n * But sometimes there are special cases\n * Like a Selector or checkbox\n *\n * @param visitor\n * @returns {*}\n * @private\n */\n _getArrangement: function(visitor)\n {\n\n const visitorType = visitor.nodeName;\n\n switch (visitorType) {\n default:\n return visitor.value;\n }\n },\n\n /**\n * Finish the tour\n * If successful show thanks message\n * Or show defined error message or fallback\n *\n * @param group\n * @param chocolateFactory\n * @returns {*|void}\n * @private\n */\n _finishTour: function(group, chocolateFactory)\n {\n // Add willie to the group\n group = ChocolateFactory._addWillieWonka(group);\n\n // Get the gate for finish the tour\n const gate = '/contact/process';\n\n try {\n Ajax.post(gate, group, function (HttpRequest) {\n\n const response = JSON.parse(HttpRequest.response);\n\n switch (HttpRequest.status) {\n case 200:\n return ChocolateFactory._thanksForVisiting(response.redirectUrl);\n case 422:\n return ChocolateFactory._giveFeedbackToMembers(response.errors, chocolateFactory);\n default:\n break;\n }\n\n return ChocolateFactory._unknownGapInFactory(chocolateFactory);\n });\n }\n catch (e) {\n return ChocolateFactory._unknownGapInFactory(chocolateFactory);\n }\n },\n\n /**\n * Add willie wonka to the group\n * Ps... it actually the secret code!\n *\n * @param group\n * @returns {*}\n * @private\n */\n _addWillieWonka: function(group){\n group._willie = 'wonka';\n return group;\n },\n\n /**\n * Add the feedback to the desired area.\n * Most likely to the visitor directly, but sometime to the factory desired feedback area\n *\n * @param errors\n * @param chocolateFactory\n * @private\n */\n _giveFeedbackToMembers: function(errors, chocolateFactory){\n\n // Grab the factory feedback area\n const feedbackArea = chocolateFactory.querySelector('.js-error-area');\n\n // Clear the current html\n if(isset(feedbackArea)) feedbackArea.innerHTML = '';\n\n // Clear the previous marked jackets\n ChocolateFactory._clearPreviousMarkedJackets(chocolateFactory);\n\n Object.keys(errors).forEach(function(visitor) {\n\n let jacket = null;\n let visitorFeedbackArea = null;\n\n // Honey elements doesn't has a accessible element\n if(visitor !== '_honey' && visitor !== '_secretCode') {\n\n // Grab the visitor\n const visitorNode = chocolateFactory.querySelector('#' + visitor);\n\n // Find the jacket of a visitor\n jacket = ChocolateFactory._grabVisitorJacket(visitorNode);\n\n // If found get the desired area\n if(isset(jacket)) visitorFeedbackArea = jacket.querySelector('.js-form-element-error');\n\n // Clear the current html\n if(isset(visitorFeedbackArea)) visitorFeedbackArea.innerHTML = '';\n\n }\n\n // Get the feedback for this visitor\n const visitorFeedback = errors[visitor];\n\n // Spit out each line\n const visitorFeedbackAmount = visitorFeedback.length;\n for(let i = 0; i < visitorFeedbackAmount; i++){\n const visitorFeedbackLine = visitorFeedback[i];\n\n // Honey elements doesn't has a accessible element area\n if(visitor !== '_honey' && visitor !== '_secretCode') {\n\n // Mark the jacket\n if(isset(jacket)) jacket.classList.add('has-error');\n\n // Append feedback to visitor feedback area if defined\n if(isset(visitorFeedbackArea))\n {\n let currentFeedbackArea = visitorFeedbackArea.innerHTML;\n currentFeedbackArea += '<span>' + capitalizeFirstLetter(visitorFeedbackLine) + '</span>';\n visitorFeedbackArea.innerHTML = currentFeedbackArea;\n }\n }\n\n // Append feedback to factory feedback area if defined\n if(isset(feedbackArea)){\n let currentFeedbackArea = feedbackArea.innerHTML;\n currentFeedbackArea += '<li>' + capitalizeFirstLetter(visitorFeedbackLine) + '</li>';\n feedbackArea.innerHTML = currentFeedbackArea;\n }\n }\n });\n },\n\n /**\n * Clear the previous marked jackets\n *\n * @param chocolateFactory\n * @private\n */\n _clearPreviousMarkedJackets(chocolateFactory) {\n\n const markedJackets = chocolateFactory.querySelectorAll('.has-error');\n const markedJacketsAmount = markedJackets.length;\n\n for(let i = 0; i < markedJacketsAmount; i++){\n markedJackets[i].classList.remove('has-error');\n }\n },\n\n /**\n * Grab the jacket of the visitor\n *\n * @param visitor\n * @returns {null|*|(() => (Node | null))|ActiveX.IXMLDOMNode|(Node & ParentNode)}\n * @private\n */\n _grabVisitorJacket: function(visitor){\n\n // Check if visitor is defined\n if (!isset(visitor)) return null;\n\n // Do loop settings\n currentLayer = visitor;\n safetyBreak = 0;\n\n // Grab the next layer till it is the jacket (or safetyBreak has been reached\n do {\n safetyBreak++;\n currentLayer = currentLayer.parentNode;\n if(currentLayer.classList.contains('js-form-element')) return currentLayer;\n } while (currentLayer.tagName !== 'BODY' && safetyBreak <= 10);\n\n return null;\n },\n\n /**\n * Redirect the visitor to the thanks page\n *\n * @param nextStop\n * @private\n */\n _thanksForVisiting: function (nextStop) {\n window.location = nextStop;\n },\n\n /**\n * Unknown error occurred, log the error\n *\n * @param chocolateFactory\n * @private\n */\n _unknownGapInFactory: function (chocolateFactory) {\n console.log(chocolateFactory);\n console.log('ChocolateFactory: Unkown Error');\n },\n};\n\nChocolateFactory.enter();","/**\n * Created by Pascal on 06/12/17.\n * (Name changes by Rob on 18/03/18)\n */\n\n/* Example\n\nconst headerImageSliderSetting = new ProjectorSetting({\n sliderProjectorId: 'header-image-slider',\n slideQuery: '#header-image-slider .placeholder figure',\n dots: '#header-image-slider .slider-navigation-labels .navigation span',\n captions: '#header-image-slider .slider-navigation-labels .caption p',\n autoSlide: true,\n sliderInterval: 4000\n});\nheaderImageSliderSetting = headerImageSliderSetting.prepareParameters();\n\nconst headerImageSlider = new Projector(headerImageSliderSetting).init();\n\n */\n\nlet projectors = [];\n\nconst projectorContainers = document.querySelectorAll('.js-projector');\nconst projectorContainersLength = projectorContainers.length;\n\nfor(let i =0; i < projectorContainersLength; i++){\n\n const projector = projectorContainers[i];\n const projectorId = projector.getAttribute('id');\n\n if(projectorId !== null){\n\n const projectorSetting = new ProjectorSetting({\n sliderId: projectorId,\n slideQuery: '#' + projectorId +' .js-projector-slide',\n navigationButtons: '#' + projectorId +' .js-projector-button' ,\n dots: '#' + projectorId +' .js-projector-indicator' ,\n autoSlide: true,\n sliderInterval: 4000\n });\n\n projectors.push( new Projector(projectorSetting.prepareParameters()).init() );\n }\n else console.log('An image slider has no id...');\n}\n\n\nfunction ProjectorSetting(settingsObject) {\n\n const self = this;\n\n this.sliderId = '';\n this.definedPreviousNext = true;\n this.autoSlide = false;\n this.sliderInterval = 4000;\n this.navigationButtons = '';\n this.dots = '';\n this.captions = '';\n this.slideQuery = '';\n\n this.setProjectorId = function (string) {\n this.sliderId = string;\n return this;\n };\n this.setDefinedPreviousNext = function (boolean) {\n this.definedPreviousNext = boolean;\n return this;\n };\n this.setAutoSlide = function (boolean) {\n this.autoSlide = boolean;\n return this;\n };\n this.setSliderInterval = function (integer) {\n this.sliderInterval = integer;\n return this;\n };\n this.setSlideQuery = function (string) {\n this.slideQuery = string;\n return this;\n };\n this.setNavigationButtons = function (string) {\n this.navigationButtons = string;\n return this;\n };\n this.setDots = function (string) {\n this.dots = string;\n return this;\n };\n this.setCaptions = function (string) {\n this.captions = string;\n return this;\n };\n this.getProjectorId = function () {\n return this.sliderId;\n };\n this.getDefinedPreviousNext = function () {\n return this.definedPreviousNext;\n };\n this.getAutoSlide = function () {\n return this.autoSlide;\n };\n this.getSliderInterval = function () {\n return this.sliderInterval;\n };\n this.getSlideQuery = function () {\n return this.slideQuery;\n };\n this.getNavigationButtons = function () {\n return this.navigationButtons;\n };\n this.getDots = function () {\n return this.dots;\n };\n this.getCaptions = function () {\n return this.captions;\n };\n\n\n // Invert setters to getters\n this.prepareParameters = function () {\n\n return {\n sliderId: self.getProjectorId(),\n definedPreviousNext: self.getDefinedPreviousNext(),\n autoSlide: self.getAutoSlide(),\n sliderInterval: self.getSliderInterval(),\n navigationButtons: self.getNavigationButtons(),\n dots: self.getDots(),\n captions: self.getCaptions(),\n slideQuery: self.getSlideQuery()\n }\n\n };\n\n // Mass assign settings\n this.fill = function () {\n // Object.keys(settingsObject).forEach(function (key) {\n // self[key] = settingsObject[key];\n // });\n\n const settingsObjectKeys = Object.keys(settingsObject);\n const settingsObjectLength = settingsObjectKeys.length;\n\n for(let i = 0; i < settingsObjectLength; i++){\n const key = settingsObjectKeys[i];\n self[key] = settingsObject[key];\n }\n\n };\n\n this.fill();\n\n return {\n sliderId: self.setProjectorId,\n definedPreviousNext: self.setDefinedPreviousNext,\n autoSlide: self.setAutoSlide,\n sliderInterval: self.setSliderInterval,\n navigationButtons: self.setNavigationButtons,\n dots: self.setDots,\n captions: self.setCaptions,\n slideQuery: self.setSlideQuery,\n prepareParameters: self.prepareParameters\n };\n}\n\nfunction Projector(settings) {\n\n //Define Projector object\n const self = this;\n this.sliderObject = '';\n\n //SlideParameters\n this.activeSlideId = 0;\n this.previousSlideId = 0;\n this.nextSlideId = 0;\n this.availableSlides = 1;\n this.slides = [];\n this.autoSlideInterval = null;\n\n this.settings = {};\n\n this.init = function () {\n\n //Append settings to self\n this.settings = settings;\n\n //Assign needed elements and calculations\n this.sliderObject = document.getElementById(this.settings.sliderId);\n this.slides = document.querySelectorAll(this.settings.slideQuery);\n this.availableSlides = this.slides.length;\n this.activeSlideId = 0;\n\n //Define previous and next if we want to use those\n if (self.settings.definedPreviousNext) this.setPreviousAndNextSlide();\n\n // Set active slide (and possible previous and next classes)\n this.setSlide();\n\n // Swipe interaction\n const swipeGestures = new Hammer(this.sliderObject);\n swipeGestures.on('swipeleft', function () {\n self.resetAutoSlide();\n self.nextSlide();\n self.setSlide();\n });\n swipeGestures.on('swiperight', function () {\n self.resetAutoSlide();\n self.previousSlide();\n self.setSlide();\n });\n\n\n\n if (this.settings.navigationButtons !== '') {\n\n // Click interaction\n const navigationButtons = document.querySelectorAll(this.settings.navigationButtons);\n const navigationButtonsLength = navigationButtons.length;\n for(let i = 0; i < navigationButtonsLength; i++){\n const navigationButton = navigationButtons[i];\n navigationButton.addEventListener('click', function () {\n self.clickNavigationButton(this);\n });\n }\n\n }\n\n if (this.settings.dots !== '') {\n // Click interaction\n const dots = document.querySelectorAll(this.settings.dots);\n const dotsLength = dots.length;\n // console.log(this.settings.dots);\n // console.log(dots);\n for(let i = 0; i < dotsLength; i++){\n const dot = dots[i];\n // console.log('hier');\n dot.addEventListener('click', function () {\n self.clickDot(this);\n });\n }\n\n }\n\n self.autoSlide();\n };\n\n\n this.autoSlide = function (){\n\n if(this.autoSlideInterval !== null) clearInterval(this.autoSlideInterval);\n\n if(this.settings.autoSlide && Number.isInteger(this.settings.sliderInterval) ){\n\n this.autoSlideInterval = setInterval(function() {\n self.nextSlide();\n self.setSlide();\n }, this.settings.sliderInterval\n );\n }\n };\n\n this.resetAutoSlide = self.autoSlide;\n\n\n this.nextSlide = function () {\n this.activeSlideId++;\n if (this.activeSlideId >= this.availableSlides) this.activeSlideId = 0;\n\n if (self.settings.definedPreviousNext) this.setPreviousAndNextSlide();\n };\n\n this.previousSlide = function () {\n this.activeSlideId--;\n if (this.activeSlideId < 0) this.activeSlideId = this.availableSlides - 1;\n\n if (self.settings.definedPreviousNext) this.setPreviousAndNextSlide();\n };\n\n this.setPreviousAndNextSlide = function () {\n this.nextSlideId = this.activeSlideId + 1;\n if (this.nextSlideId >= this.availableSlides) this.nextSlideId = 0;\n\n this.previousSlideId = this.activeSlideId - 1;\n if (this.previousSlideId < 0) this.previousSlideId = this.availableSlides - 1;\n };\n\n this.setSlide = function () {\n\n // Loop through the form elements\n const slidesLength = self.slides.length;\n for(let i = 0; i < slidesLength; i++){\n const slide = self.slides[i];\n\n // Convert data set attribute to desired type\n const slideOrder = parseInt(slide.getAttribute('data-order'));\n\n // Remove and set active for all slides\n if (slideOrder !== self.activeSlideId) slide.classList.remove('is-active');\n else slide.classList.add('is-active');\n\n // If we use the previous and next, also set those classes\n if (self.settings.definedPreviousNext) {\n\n if (slideOrder !== self.previousSlideId) slide.classList.remove('previous');\n else slide.classList.add('previous');\n\n if (slideOrder !== self.nextSlideId) slide.classList.remove('next');\n else slide.classList.add('next');\n }\n }\n\n if (self.settings.dots !== '') { self.setActiveDot(); }\n if (self.settings.captions !== '') { self.setActiveCaption(); }\n };\n\n this.clickNavigationButton = function (navButton) {\n self.activeSlideId = parseInt(navButton.getAttribute('data-order'));\n if (self.settings.definedPreviousNext) self.setPreviousAndNextSlide();\n self.setSlide();\n\n const next = document.querySelector(self.settings.navigationButtons + '.next');\n const previous = document.querySelector(self.settings.navigationButtons + '.previous');\n\n next.setAttribute('data-order', self.nextSlideId);\n previous.setAttribute('data-order', self.previousSlideId);\n\n self.resetAutoSlide();\n\n // next.querySelector('p').innerHTML = self.slides[self.nextSlideId].dataset.name;\n // previous.querySelector('p').innerHTML = self.slides[self.previousSlideId].dataset.name;\n };\n\n this.clickDot = function (clickedDot) {\n self.activeSlideId = parseInt(clickedDot.getAttribute('data-order'));\n self.setSlide();\n self.resetAutoSlide();\n };\n\n this.setActiveDot = function () {\n\n const dots = document.querySelectorAll(this.settings.dots);\n const dotsLength = dots.length;\n for(let i = 0; i < dotsLength; i++){\n const dot = dots[i];\n dotOrder = parseInt(dot.getAttribute('data-order'));\n\n if(dotOrder !== self.activeSlideId) dot.classList.remove('is-active');\n else dot.classList.add('is-active');\n }\n };\n\n this.setActiveCaption = function () {\n\n const captions = document.querySelectorAll(this.settings.captions);\n const captionsLength = captions.length;\n for(let i = 0; i < captionsLength; i++){\n const caption = captions[i];\n captionOrder = parseInt(caption.getAttribute('data-order'));\n\n if(captionOrder !== self.activeSlideId) caption.classList.remove('is-active');\n else caption.classList.add('is-active');\n }\n };\n}","/** ==========================================================================\n * Dependencies\n * =========================================================================*/\n\n/**\n * External\n */\nrequire('hammerjs');\nrequire('objectFitPolyfill');\n\n/**\n * Global / Shared with KMS\n */\nrequire('./../global/polyfills/eventPolyFill');\nrequire('./../global/polyfills/isInteger');\nrequire('./../global/polyfills/promise');\nrequire('./../global/polyfills/symbol-es6.min');\n\n\n/** ==========================================================================\n * Global functionalities\n * =========================================================================*/\n\nrequire('./global/helpers'); // Should be first\nrequire('./global/browserHandler');\n// require('./global/pagetransitionHandler');\n// require('./global/resizeHandler');\nrequire('./global/scrollHandler');\n\n\n/** ==========================================================================\n * Component functionalities\n * =========================================================================*/\n\nrequire('./components/chocolateFactory');\nrequire('./components/cookieHandler');\nrequire('./components/heroSliderHandler');\nrequire('./components/imageRackHandler');\n// require('./components/InputHandler');\nrequire('./components/mapsHandler');\nrequire('./components/overlayMenuHandler');\nrequire('./components/projectorHandler');\nrequire('./components/scrollToHandler');\n// require('./components/searchHandler');\nrequire('./components/shareButtonsHandler');\nrequire('./components/youtubeHandler');\n\n/** ==========================================================================\n * Shop Component functionalities\n * =========================================================================*/\n\n// require('./../shop/components/shoppingcartHandler');","/* ==========================================================================\n Browser Handler\n ========================================================================== */\n\nconst BrowserHandler = {\n\n userAgent: '',\n browserInfo: '',\n\n\n init: function () {\n BrowserHandler.userAgent = window.navigator.userAgent;\n BrowserHandler.browserInfo = BrowserHandler.getBrowserInfo();\n BrowserHandler.handleIE();\n BrowserHandler.handleSafari();\n },\n\n handleIE: function () {\n\n // Detect versions below ie11\n let msie = BrowserHandler.userAgent.indexOf('MSIE ');\n const ielt11 = msie > 0;\n\n // Detect ie11\n const ie11 = !!navigator.userAgent.match(/Trident.*rv\\:11\\./);\n\n // If Internet Explorer\n if (ielt11 || ie11) {\n // Default version\n let version = '11';\n\n // Way to detect version < 11\n if (ielt11) version = parseInt(BrowserHandler.userAgent.substring(\n msie + 5,\n BrowserHandler.userAgent.indexOf(\".\", msie)\n ));\n\n // Append classes to HTML (we have to do this separately because else ie will fail)\n document.body.classList.add('ie');\n document.body.classList.add('v'+version);\n }\n\n },\n\n // Fallback for older safari version\n handleSafari: function () {\n\n if(BrowserHandler.browserInfo.name === 'Safari' && BrowserHandler.browserInfo.version <= 10){\n document.getElementsByTagName('html')[0].classList.add('ie');\n }\n\n },\n\n getBrowserInfo: function () {\n let ua=navigator.userAgent,tem,M=ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\\/))\\/?\\s*(\\d+)/i) || [];\n if(/trident/i.test(M[1])){\n tem=/\\brv[ :]+(\\d+)/g.exec(ua) || [];\n return {name:'IE ',version:(tem[1]||'')};\n }\n if(M[1]==='Chrome'){\n tem=ua.match(/\\bOPR\\/(\\d+)/)\n if(tem!=null) {return {name:'Opera', version:tem[1]};}\n }\n M=M[2]? [M[1], M[2]]: [navigator.appName, navigator.appVersion, '-?'];\n if((tem=ua.match(/version\\/(\\d+)/i))!=null) {M.splice(1,1,tem[1]);}\n return {\n name: M[0],\n version: M[1]\n };\n }\n};\n\nBrowserHandler.init();","!function(global,factory){\"use strict\";\"object\"==typeof module&&\"object\"==typeof module.exports?module.exports=factory(global):factory(global)}(\"undefined\"!=typeof window?window:global,function(global){\"use strict\";var defineProperty=Object.defineProperty,defineProperties=Object.defineProperties,symbolHiddenCounter=0,globalSymbolRegistry=[],slice=Array.prototype.slice,ES6=\"object\"==typeof global.ES6?global.ES6:global.ES6={},isArray=Array.isArray,objectToString=Object.prototype.toString,push=Array.prototype.push,emptyFunction=function(){},simpleFunction=function(arg){return arg},isCallable=function(fn){return\"function\"==typeof fn},Iterator=function(){},ArrayIterator=function(array,flag){this._array=array,this._flag=flag,this._nextIndex=0},StringIterator=function(string,flag){this._string=string,this._flag=flag,this._nextIndex=0},isObject=function(value){return null!==value&&(\"object\"==typeof value||\"function\"==typeof value)},setupSymbolInternals=function(symbol,desc){return defineProperties(symbol,{_description:{value:desc},_isSymbol:{value:!0},_id:{value:symbolHiddenCounter++}}),symbol},appendArray=function(array1,array2){if(\"number\"==typeof array1.length&&array1.length>=0&&\"number\"==typeof array2.length&&array2.length>=0){var length1=Math.floor(array1.length),length2=Math.floor(array2.length),i=0;for(array1.length=length1+length2;i<length2;++i)array2.hasOwnProperty(i)&&(array1[length1+i]=array2[i])}},simpleInheritance=function(child,parent){if(\"function\"!=typeof child||\"function\"!=typeof parent)throw new TypeError(\"Child and Parent must be function type\");child.prototype=Object.create(parent.prototype),child.prototype.constructor=child},Symbol=function Symbol(desc){if(desc=void 0===desc?\"\":String(desc),this instanceof Symbol)throw new TypeError(\"Symbol is not a constructor\");return setupSymbolInternals(Object.create(Symbol.prototype),desc)};defineProperties(Symbol,{for:{value:function(key){key=String(key);for(var record,registryLength=globalSymbolRegistry.length,i=0;i<registryLength;++i)if((record=globalSymbolRegistry[i]).key===key)return record.symbol;return record={key:key,symbol:Symbol(key)},globalSymbolRegistry.push(record),record.symbol},writable:!0,configurable:!0},keyFor:{value:function(symbol){if(!ES6.isSymbol(symbol))throw new TypeError(String(symbol)+\" is not a symbol\");for(var record,registryLength=globalSymbolRegistry.length,i=0;i<registryLength;++i)if((record=globalSymbolRegistry[i]).symbol===symbol)return record.key},writable:!0,configurable:!0},hasInstance:{value:Symbol(\"Symbol.hasInstance\")},isConcatSpreadable:{value:Symbol(\"Symbol.isConcatSpreadable\")},iterator:{value:Symbol(\"Symbol.iterator\")},toStringTag:{value:Symbol(\"Symbol.toStringTag\")}}),Symbol.prototype.toString=function(){return\"@@_____\"+this._id+\"_____\"},Symbol.prototype.valueOf=function(){return this},defineProperty(Iterator.prototype,Symbol.iterator.toString(),{value:function(){return this},writable:!0,configurable:!0}),simpleInheritance(ArrayIterator,Iterator),simpleInheritance(StringIterator,Iterator),defineProperty(ArrayIterator.prototype,Symbol.toStringTag.toString(),{value:\"Array Iterator\",configurable:!0}),defineProperty(StringIterator.prototype,Symbol.toStringTag.toString(),{value:\"String Iterator\",configurable:!0}),ArrayIterator.prototype.next=function(){if(!(this instanceof ArrayIterator))throw new TypeError(\"Method Array Iterator.prototype.next called on incompatible receiver \"+String(this));var nextValue;return-1===this._nextIndex?{done:!0,value:void 0}:\"number\"==typeof this._array.length&&this._array.length>=0&&this._nextIndex<Math.floor(this._array.length)?(1===this._flag?nextValue=[this._nextIndex,this._array[this._nextIndex]]:2===this._flag?nextValue=this._array[this._nextIndex]:3===this._flag&&(nextValue=this._nextIndex),this._nextIndex++,{done:!1,value:nextValue}):(this._nextIndex=-1,{done:!0,value:void 0})},StringIterator.prototype.next=function(){if(!(this instanceof StringIterator))throw new TypeError(\"Method String Iterator.prototype.next called on incompatible receiver \"+String(this));var nextValue,stringObject=new String(this._string);return-1===this._nextIndex?{done:!0,value:void 0}:this._nextIndex<stringObject.length?(nextValue=stringObject[this._nextIndex],this._nextIndex++,{done:!1,value:nextValue}):(this._nextIndex=-1,{done:!0,value:void 0})};var SpreadOperatorImpl=function(target,thisArg){this._target=target,this._values=[],this._thisArg=thisArg};SpreadOperatorImpl.prototype.spread=function(){var self=this;return slice.call(arguments).forEach(function(iterable){ES6.forOf(iterable,function(value){self._values.push(value)})}),self},SpreadOperatorImpl.prototype.add=function(){var self=this;return slice.call(arguments).forEach(function(value){self._values.push(value)}),self},SpreadOperatorImpl.prototype.call=function(thisArg){if(\"function\"!=typeof this._target)throw new TypeError(\"Target is not a function\");return thisArg=arguments.length<=0?this._thisArg:thisArg,this._target.apply(thisArg,this._values)},SpreadOperatorImpl.prototype.new=function(){if(\"function\"!=typeof this._target)throw new TypeError(\"Target is not a constructor\");var temp,returnValue;return temp=Object.create(this._target.prototype),returnValue=this._target.apply(temp,this._values),isObject(returnValue)?returnValue:temp},SpreadOperatorImpl.prototype.array=function(){if(!isArray(this._target))throw new TypeError(\"Target is not a array\");return push.apply(this._target,this._values),this._target};return defineProperties(ES6,{isSymbol:{value:function(symbol){return symbol instanceof Symbol&&function(symbol){return!0===symbol._isSymbol&&\"number\"==typeof symbol._id&&\"string\"==typeof symbol._description}(symbol)},writable:!0,configurable:!0},instanceOf:{value:function(object,constructor){if(!isObject(constructor))throw new TypeError(\"Right-hand side of 'instanceof' is not an object\");var hasInstanceSymbolProp=constructor[Symbol.hasInstance];if(void 0===hasInstanceSymbolProp)return object instanceof constructor;if(\"function\"!=typeof hasInstanceSymbolProp)throw new TypeError(typeof hasInstanceSymbolProp+\" is not a function\");return hasInstanceSymbolProp.call(constructor,object)},writable:!0,configurable:!0},forOf:{value:function(iterable,callback,thisArg){if(callback=\"function\"!=typeof callback?emptyFunction:callback,\"function\"!=typeof iterable[Symbol.iterator])throw new TypeError(\"Iterable[Symbol.iterator] is not a function\");var iterationResult,iterator=iterable[Symbol.iterator]();if(\"function\"!=typeof iterator.next)throw new TypeError(\".iterator.next is not a function\");for(;;){if(iterationResult=iterator.next(),!isObject(iterationResult))throw new TypeError(\"Iterator result \"+iterationResult+\" is not an object\");if(iterationResult.done)break;callback.call(thisArg,iterationResult.value)}},writable:!0,configurable:!0},spreadOperator:{value:function(target,thisArg){if(\"function\"!=typeof target&&!isArray(target))throw new TypeError(\"Spread operator only supports on array and function objects at this moment\");return new SpreadOperatorImpl(target,thisArg)},writable:!0,configurable:!0}}),defineProperty(global,\"Symbol\",{value:Symbol,writable:!0,configurable:!0}),defineProperty(Function.prototype,Symbol.hasInstance.toString(),{value:function(instance){return\"function\"==typeof this&&instance instanceof this}}),defineProperty(Array.prototype,\"concat\",{value:function(){if(void 0===this||null===this)throw new TypeError(\"Array.prototype.concat called on null or undefined\");var self=Object(this),targets=slice.call(arguments),outputs=[];return targets.unshift(self),targets.forEach(function(target){isObject(target)?void 0!==target[Symbol.isConcatSpreadable]?target[Symbol.isConcatSpreadable]?appendArray(outputs,target):outputs.push(target):isArray(target)?appendArray(outputs,target):outputs.push(target):outputs.push(target)}),outputs},writable:!0,configurable:!0}),defineProperty(Object.prototype,\"toString\",{value:function(){return void 0===this||null===this?objectToString.call(this):\"string\"==typeof this[Symbol.toStringTag]?\"[object \"+this[Symbol.toStringTag]+\"]\":objectToString.call(this)},writable:!0,configurable:!0}),defineProperty(Array.prototype,Symbol.iterator.toString(),{value:function(){if(void 0===this||null===this)throw new TypeError(\"Cannot convert undefined or null to object\");var self=Object(this);return new ArrayIterator(self,2)},writable:!0,configurable:!0}),defineProperty(Array,\"from\",{value:function(arrayLike,mapFn,thisArg){var constructor,length,outputs,i=0;if(constructor=isCallable(this)?this:Array,void 0===arrayLike||null===arrayLike)throw new TypeError(\"Cannot convert undefined or null to object\");if(arrayLike=Object(arrayLike),void 0===mapFn)mapFn=simpleFunction;else if(!isCallable(mapFn))throw new TypeError(mapFn+\" is not a function\");if(void 0===arrayLike[Symbol.iterator]){if(!(\"number\"==typeof arrayLike.length&&arrayLike.length>=0))return(outputs=new constructor(0)).length=0,outputs;for(length=Math.floor(arrayLike.length),(outputs=new constructor(length)).length=length;i<length;++i)outputs[i]=mapFn.call(thisArg,arrayLike[i])}else(outputs=new constructor).length=0,ES6.forOf(arrayLike,function(value){outputs.length++,outputs[outputs.length-1]=mapFn.call(thisArg,value)});return outputs},writable:!0,configurable:!0}),defineProperty(Array.prototype,\"entries\",{value:function(){if(void 0===this||null===this)throw new TypeError(\"Cannot convert undefined or null to object\");var self=Object(this);return new ArrayIterator(self,1)},writable:!0,configurable:!0}),defineProperty(Array.prototype,\"keys\",{value:function(){if(void 0===this||null===this)throw new TypeError(\"Cannot convert undefined or null to object\");var self=Object(this);return new ArrayIterator(self,3)},writable:!0,configurable:!0}),defineProperty(String.prototype,Symbol.iterator.toString(),{value:function(){if(void 0===this||null===this)throw new TypeError(\"String.prototype[Symbol.iterator] called on null or undefined\");return new StringIterator(String(this),0)},writable:!0,configurable:!0}),ES6});","/* ==========================================================================\n Helper functions\n ========================================================================== */\n\n/*\n * Simple isset method for this does not exist in javascript\n */\nwindow.isset = function (obj) {\n return typeof obj !== 'undefined' && obj !== null;\n};\n\n/*\n * Easing Functions - inspired from http://gizma.com/easing/\n * only considering the t value for the range [0, 1] => [0, 1]\n */\nwindow.EasingFunctions = {\n // no easing, no acceleration\n linear: function (t) {\n return t\n },\n // accelerating from zero velocity\n easeInQuad: function (t) {\n return t * t\n },\n // decelerating to zero velocity\n easeOutQuad: function (t) {\n return t * (2 - t)\n },\n // acceleration until halfway, then deceleration\n easeInOutQuad: function (t) {\n return t < .5 ? 2 * t * t : -1 + (4 - 2 * t) * t\n },\n // accelerating from zero velocity\n easeInCubic: function (t) {\n return t * t * t\n },\n // decelerating to zero velocity\n easeOutCubic: function (t) {\n return (--t) * t * t + 1\n },\n // acceleration until halfway, then deceleration\n easeInOutCubic: function (t) {\n return t < .5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1\n },\n // accelerating from zero velocity\n easeInQuart: function (t) {\n return t * t * t * t\n },\n // decelerating to zero velocity\n easeOutQuart: function (t) {\n return 1 - (--t) * t * t * t\n },\n // acceleration until halfway, then deceleration\n easeInOutQuart: function (t) {\n return t < .5 ? 8 * t * t * t * t : 1 - 8 * (--t) * t * t * t\n },\n // accelerating from zero velocity\n easeInQuint: function (t) {\n return t * t * t * t * t\n },\n // decelerating to zero velocity\n easeOutQuint: function (t) {\n return 1 + (--t) * t * t * t * t\n },\n // acceleration until halfway, then deceleration\n easeInOutQuint: function (t) {\n return t < .5 ? 16 * t * t * t * t * t : 1 + 16 * (--t) * t * t * t * t\n }\n};\n\n/*\n * Vanilla version of the $.getScript\n */\nwindow.getScript = function (source, callback) {\n let script = document.createElement('script');\n script.async = 1;\n\n const scripts = document.getElementsByTagName('script');\n let prior = scripts[scripts.length - 1];\n\n script.onload = script.onreadystatechange = function (_, isAbort) {\n if (isAbort || !script.readyState || /loaded|complete/.test(script.readyState)) {\n script.onload = script.onreadystatechange = null;\n script = undefined;\n\n if (!isAbort) {\n if (callback) callback();\n }\n }\n };\n\n script.src = source;\n prior.parentNode.insertBefore(script, prior);\n};\n\n/**\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 * @param func\n * @param wait\n * @param immediate\n * @returns {Function}\n */\nwindow.debounce = function(func, wait, immediate) {\n let timeout;\n return function () {\n let context = this, args = arguments;\n let later = function () {\n timeout = null;\n if (!immediate) func.apply(context, args);\n };\n let callNow = immediate && !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n if (callNow) func.apply(context, args);\n };\n};\n\n/*\n * Cookie helper class\n */\nwindow.Cookie = {\n set: function (name, value, days) {\n let domain, domainParts, date, expires, host;\n\n if (days) {\n date = new Date();\n date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));\n expires = \"; expires=\" + date.toGMTString();\n }\n else {\n expires = \"\";\n }\n\n host = location.host;\n if (host.split('.').length === 1) {\n // no \".\" in a domain - it's localhost or something similar\n document.cookie = name + \"=\" + value + expires + \"; path=/\";\n }\n else {\n // Remember the cookie on all sub domains.\n //\n // Start with trying to set cookie to the top domain.\n // (example: if user is on foo.com, try to set\n // cookie to domain \".com\")\n //\n // If the cookie will not be set, it means \".com\"\n // is a top level domain and we need to\n // set the cookie to \".foo.com\"\n domainParts = host.split('.');\n domainParts.shift();\n domain = '.' + domainParts.join('.');\n\n // For development purpose, remove this when moving to production\n // domain = '.komma.pro';\n\n document.cookie = name + \"=\" + value + expires + \"; path=/; domain=\" + domain;\n\n // check if cookie was successfuly set to the given domain\n // (otherwise it was a Top-Level Domain)\n if (Cookie.get(name) == null || Cookie.get(name) != value) {\n // append \".\" to current domain\n domain = '.' + host;\n document.cookie = name + \"=\" + value + expires + \"; path=/; domain=\" + domain;\n }\n }\n },\n\n get: function (name) {\n const nameEQ = name + \"=\";\n const ca = document.cookie.split(';');\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i];\n while (c.charAt(0) === ' ') {\n c = c.substring(1, c.length);\n }\n\n if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);\n }\n return null;\n },\n\n erase: function (name) {\n Cookie.set(name, '', -1);\n }\n};\n\n/*\n * Javascript version of the number_format method of PHP\n */\nwindow.number_format = function (number, decimals, dec_point, thousands_sep) {\n // Strip all characters but numerical ones.\n number = (number + '').replace(/[^0-9+\\-Ee.]/g, '');\n let n = !isFinite(+number) ? 0 : +number,\n prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),\n sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,\n dec = (typeof dec_point === 'undefined') ? '.' : dec_point,\n s = '',\n toFixedFix = function (n, prec) {\n var k = Math.pow(10, prec);\n return '' + Math.round(n * k) / k;\n };\n // Fix for IE parseFloat(0.55).toFixed(0) = 0;\n s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');\n if (s[0].length > 3) {\n s[0] = s[0].replace(/\\B(?=(?:\\d{3})+(?!\\d))/g, sep);\n }\n if ((s[1] || '').length < prec) {\n s[1] = s[1] || '';\n s[1] += new Array(prec - s[1].length + 1).join('0');\n }\n return s.join(dec);\n};\n\n\n/**\n * Element.closest() polyfill\n * https://developer.mozilla.org/en-US/docs/Web/API/Element/closest#Polyfill\n */\nif (!Element.prototype.closest) {\n if (!Element.prototype.matches) {\n Element.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\n }\n Element.prototype.closest = function (s) {\n var el = this;\n var ancestor = this;\n if (!document.documentElement.contains(el)) return null;\n do {\n if (ancestor.matches(s)) return ancestor;\n ancestor = ancestor.parentElement;\n } while (ancestor !== null);\n return null;\n };\n}\n\nwindow.Ajax = {\n\n //TODO: Can we create a prepare request function ??\n\n get: function(url, callback) {\n let xhr = new XMLHttpRequest();\n let token = document.querySelector('meta[name=\"csrf-token\"]').content;\n\n xhr.open('get', url, true);\n xhr.setRequestHeader('Content-Type', 'application/json');\n xhr.setRequestHeader('X-CSRF-TOKEN', token);\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n xhr.onreadystatechange = function() {\n if (xhr.readyState === 4) {\n callback(xhr);\n }\n };\n xhr.send();\n },\n\n post: function(url, data, callback) {\n let xhr = new XMLHttpRequest();\n let token = document.querySelector('meta[name=\"csrf-token\"]').content;\n\n xhr.open('post', url, true);\n xhr.setRequestHeader('Content-Type', 'application/json');\n xhr.setRequestHeader('X-CSRF-TOKEN', token);\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n xhr.onreadystatechange = function() {\n if (xhr.readyState === 4) {\n callback(xhr);\n }\n };\n xhr.send( JSON.stringify(data));\n }\n};\n\n/**\n * Capitalize the first letter of the string\n * @param string\n * @returns {string}\n */\nwindow.capitalizeFirstLetter = function (string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n};\n\n/**\n * Convert snake case into camelcase\n *\n * @param string\n * @returns {*}\n */\nwindow.snakeToCamel = function (string){\n return string.replace(/(\\-\\w)/g, function(m){return m[1].toUpperCase();});\n};\n\n/**\n * Get the index of an element inside its parent\n */\nwindow.indexInParent= function (node) {\n const children = node.parentNode.childNodes;\n let num = 0;\n for (let i = 0; i < children.length; i++) {\n if (children[i] == node) return num;\n if (children[i].nodeType == 1) num++;\n }\n return -1;\n};\n\n/**\n * For security reasons iOS Safari only allows document.execCommand('copy') for text within a contentEditable container.\n * The workaround is to detect iOS Safari and quickly toggle contentEditable before executing document.execCommand('copy').\n * Wheb input or textarea is READONLY you can prevent the unwanted popup with copy/paste functions and the input keyboard\n * Code from: https://stackoverflow.com/a/46981847\n */\nwindow.copyToClipboard = function (el) {\n\n // resolve the element\n el = (typeof el === 'string') ? document.querySelector(el) : el;\n\n // handle iOS as a special case\n if (navigator.userAgent.match(/ipad|ipod|iphone/i)) {\n\n // save current contentEditable/readOnly status\n const editable = el.contentEditable;\n const readOnly = el.readOnly;\n\n // convert to editable with readonly to stop iOS keyboard opening\n el.contentEditable = true;\n el.readOnly = true;\n\n // create a selectable range\n var range = document.createRange();\n range.selectNodeContents(el);\n\n // select the range\n const selection = window.getSelection();\n selection.removeAllRanges();\n selection.addRange(range);\n el.setSelectionRange(0, 999999);\n\n // restore contentEditable/readOnly to original state\n el.contentEditable = editable;\n el.readOnly = readOnly;\n }\n else {\n el.select();\n }\n\n // execute copy command\n document.execCommand('copy');\n};\n\n/**\n * Get the position of the element related to the body\n *\n * @param el\n * @returns {{top: number, left: number}}\n */\nwindow.bodyOffset = function (el) {\n const rect = el.getBoundingClientRect(),\n scrollLeft = window.pageXOffset || document.documentElement.scrollLeft,\n scrollTop = window.pageYOffset || document.documentElement.scrollTop;\n return { top: rect.top + scrollTop, left: rect.left + scrollLeft }\n};","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\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\nmodule.exports = g;\n","/* ==========================================================================\n Cookie handler\n - Primary usage for toggling the cookie message and/or switch\n ========================================================================== */\n\nconst CookieHandler = {\n\n cookieBar : null,\n cookieOverlay : null,\n cookieMessage : null,\n\n cookieSwitch : null,\n\n cookieFadeOutAnimationDuration : 400,\n acceptTracking : false,\n\n // Initialize cookie handler\n init : function()\n {\n // Bind cookie bar or overlay to cookieMessage\n CookieHandler.cookieMessage = document.querySelector('.js-cookie-bar, .js-cookie-overlay');\n\n // Bind cookie bar to cookieBar\n CookieHandler.cookieBar = document.querySelector('.js-cookie-bar');\n\n // If isset init the functions for cookie bar\n if(isset(CookieHandler.cookieBar)){\n CookieHandler.initCookieBar();\n }\n else{\n // Else try to connect cookie overlay with tracking to cookieOverlay\n CookieHandler.cookieOverlay = document.querySelector('.js-cookie-overlay');\n\n // If isset init the functions for cookie overlay\n if(isset(CookieHandler.cookieOverlay)){\n CookieHandler.initCookieOverlay();\n }\n }\n\n // If either type of cookie has been found check if settings are defined\n if(isset(CookieHandler.cookieMessage)){\n CookieHandler.checkForCookieSettings();\n }\n\n // Bind cookie switch to Handler\n CookieHandler.cookieSwitch = document.querySelector('.js-cookie-switch');\n // If isset init the functions for cookie switch\n if(isset(CookieHandler.cookieSwitch)){\n CookieHandler.initCookieSwitch();\n }\n },\n\n // Init the cookie bar actions\n initCookieBar: function(){\n const closeButton = CookieHandler.cookieBar.querySelector('.js-disable-cookie-bar');\n if(isset(closeButton)){\n closeButton.addEventListener('click', CookieHandler.closeCookieMessage);\n }\n },\n\n // Init the cookie overlay actions\n initCookieOverlay: function(){\n\n // Open the cookie settings event\n const openCookieSettingsButton = CookieHandler.cookieMessage.querySelector('.js-change-cookies-settings');\n if(isset(openCookieSettingsButton)){\n openCookieSettingsButton.addEventListener('click', CookieHandler.openCookieSettings);\n }\n\n // Toggle of the tracking input\n const toggleTrackingInput = CookieHandler.cookieMessage.querySelector('.c-cookie-type__input--tracking');\n if(isset(toggleTrackingInput)){\n\n if(toggleTrackingInput.checked === true) {\n CookieHandler.acceptTracking = true;\n }\n\n toggleTrackingInput.addEventListener('change', CookieHandler.toggleTrackingSetting);\n }\n\n // Accept / Save cookies button event\n const acceptButton = CookieHandler.cookieMessage.querySelector('.js-accept-cookies');\n if(isset(acceptButton)){\n acceptButton.addEventListener('click', CookieHandler.setCookieSettings);\n }\n\n },\n\n // Init the cookie switch actions\n initCookieSwitch: function(){\n\n // Toggle of the tracking input\n const toggleTrackingInput = CookieHandler.cookieSwitch.querySelector('.c-cookie-type__input--tracking');\n if(isset(toggleTrackingInput)){\n\n // Force the state of the cookie switch input because the pop-up is forced on checked\n // while the switch checks by php if the cookie really exist or not\n if(toggleTrackingInput.checked === true) {\n CookieHandler.acceptTracking = true;\n }\n else{\n CookieHandler.acceptTracking = false;\n }\n\n toggleTrackingInput.addEventListener('change', CookieHandler.toggleTrackingSetting);\n }\n\n // Save cookies button event\n const saveButton = CookieHandler.cookieSwitch.querySelector('.js-save-cookie-settings');\n if(isset(saveButton)){\n saveButton.addEventListener('click', function(){\n CookieHandler.cookieFadeOutAnimationDuration = 0; // On the switch click we want no delay :)\n CookieHandler.setCookieSettings();\n });\n }\n\n },\n\n checkForCookieSettings: function(){\n if (Cookie.get('cookieMessage')) {\n CookieHandler.cookieMessage.classList.add('is-accepted');\n }\n else {\n CookieHandler.cookieMessage.classList.remove('is-accepted');\n document.body.classList.add('is-cookie-bar-visible');\n }\n },\n\n closeCookieMessage: function (){\n Cookie.set('cookieMessage', true, 90);\n CookieHandler.cookieMessage.classList.add('is-transitioning-out');\n document.body.classList.remove('is-cookie-bar-visible');\n },\n\n openCookieSettings: function (){\n CookieHandler.cookieOverlay.querySelector('.js-cookie-settings').classList.remove('is-hidden');\n CookieHandler.cookieOverlay.querySelector('.js-cookie-info').classList.add('is-hidden');\n },\n\n toggleTrackingSetting: function(){\n if(CookieHandler.acceptTracking){\n CookieHandler.acceptTracking = false;\n }\n else{\n CookieHandler.acceptTracking = true;\n }\n },\n\n setCookieSettings: function () {\n\n // Set tracking cookie or delete it if isset according to the desired settings\n if(CookieHandler.acceptTracking){\n Cookie.set('trackingCookieAccepted', 'true', 90);\n }\n else{\n if(Cookie.get('trackingCookieAccepted')){\n Cookie.erase('trackingCookieAccepted');\n }\n }\n\n CookieHandler.closeCookieMessage();\n\n // Reload after animation to automatically trigger the tracking after accepting it\n setTimeout(function(){\n location.reload()\n }, CookieHandler.cookieFadeOutAnimationDuration);\n },\n\n};\n\nCookieHandler.init();"],"sourceRoot":""}