{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/events/events.js","bundle.js","node_modules/glueframe/GlueFrame.js","node_modules/smoothscroll-polyfill/dist/smoothscroll.js","templates/LandingPage/app/scripts/core/app.js","templates/LandingPage/app/scripts/core/views.js","templates/LandingPage/app/scripts/core/views/article-video.js","templates/LandingPage/app/scripts/core/views/before-after.js","templates/LandingPage/app/scripts/core/views/btn-toggle-content.js","templates/LandingPage/app/scripts/core/views/download-grid.js","templates/LandingPage/app/scripts/core/views/form-validation.js","templates/LandingPage/app/scripts/core/views/google-tag-manager.js","templates/LandingPage/app/scripts/core/views/hero.js","templates/LandingPage/app/scripts/core/views/hotspot-image.js","templates/LandingPage/app/scripts/core/views/hubspot.js","templates/LandingPage/app/scripts/core/views/interactive-hero.js","templates/LandingPage/app/scripts/core/views/m10Packages.js","templates/LandingPage/app/scripts/core/views/modal-view.js","templates/LandingPage/app/scripts/core/views/navigation.js","templates/LandingPage/app/scripts/core/views/products.js","templates/LandingPage/app/scripts/core/views/tabs.js","templates/LandingPage/app/scripts/framework/modal.js","templates/LandingPage/app/scripts/framework/server-side-view.js","templates/LandingPage/app/scripts/framework/vanillaLazyLoad.js","templates/LandingPage/app/scripts/framework/view.js","templates/LandingPage/app/scripts/main.js","templates/LandingPage/server/helpers/hbs.js"],"names":["r","e","n","t","o","i","f","c","require","u","a","Error","code","p","exports","call","length","1","module","ReflectOwnKeys","R","Reflect","ReflectApply","apply","target","receiver","args","Function","prototype","ownKeys","Object","getOwnPropertySymbols","getOwnPropertyNames","concat","NumberIsNaN","Number","isNaN","value","EventEmitter","init","this","once","emitter","name","Promise","resolve","reject","eventListener","undefined","errorListener","removeListener","slice","arguments","err","_events","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","listener","TypeError","_getMaxListeners","that","_addListener","type","prepend","m","events","existing","warning","create","newListener","emit","unshift","push","warned","w","String","count","console","warn","onceWrapper","fired","wrapFn","_onceWrap","state","wrapped","bind","_listeners","unwrap","evlistener","arr","ret","Array","unwrapListeners","arrayClone","listenerCount","copy","defineProperty","enumerable","get","set","arg","RangeError","getPrototypeOf","setMaxListeners","getMaxListeners","doError","error","er","message","context","handler","len","listeners","addListener","on","prependListener","prependOnceListener","list","position","originalListener","shift","index","pop","spliceOne","off","removeAllListeners","key","keys","rawListeners","eventNames","2","iframe","appName","$this","glueframe","_domain","src","split","join","_method","window","location","postMessage","ready","_readyInterval","setInterval","bootstrapped","clearInterval","_processQueue","contentWindow","glueFrameId","Date","getTime","_callbackCount","_callbacks","_registerCallback","callback","requireCallback","callbackIdentifier","_queue","_addToQueue","method","queueItem","prop","force","cbId","messageObject","JSON","stringify","val","event","triggerQueue","fire","obj","destroy","addEventListener","removeEventListener","_receiveMessage","detachEvent","origin","data","parse","b","attachEvent","3","polyfill","d","document","documentElement","style","__forceSmoothScrollPolyfill__","userAgent","Element","HTMLElement","original","scroll","scrollTo","scrollBy","elementScroll","scrollElement","scrollIntoView","now","performance","ROUNDING_TOLERANCE","navigator","RegExp","test","shouldBailOut","smoothScroll","body","left","scrollX","pageXOffset","top","scrollY","pageYOffset","scrollLeft","scrollTop","SyntaxError","behavior","scrollableParent","findScrollableParent","parentRects","getBoundingClientRect","clientRects","getComputedStyle","x","y","firstArg","hasScrollableSpace","el","axis","clientHeight","scrollHeight","clientWidth","scrollWidth","canOverflow","overflowValue","isScrollable","isScrollableY","isScrollableX","isBody","parentNode","step","currentX","currentY","k","elapsed","startTime","Math","cos","PI","startX","startY","scrollable","requestAnimationFrame","4","global","default","_view","_interopRequireDefault","_modal","_views","__esModule","App","start","trigger","modal","log","forEach","View","_default","self","../framework/modal","../framework/view","./views","5","_hubspot","_googleTagManager","_btnToggleContent","_formValidation","_navigation","_hero","_tabs","_downloadGrid","_articleVideo","_hotspotImage","_interactiveHero","_beforeAfter","_products","_m10Packages","./views/article-video","./views/before-after","./views/btn-toggle-content","./views/download-grid","./views/form-validation","./views/google-tag-manager","./views/hero","./views/hotspot-image","./views/hubspot","./views/interactive-hero","./views/m10Packages","./views/navigation","./views/products","./views/tabs","6","_serverSideView","_glueframe","extend","player","playButtonDirty","isVideo23","v23","iframes","click button.play","click button.pause","initialize","classList","contains","iframeId","querySelector","id","getElementById","eventName","pauseVideo","onYouTubePlayerAPIReady","onRender","injectYoutubeAPIScript","tag","createElement","firstScriptTag","getElementsByTagName","insertBefore","YT","Player","playVideo","add","display","remove","../../framework/server-side-view","7","input .before-after__slider","change .before-after__slider","beforeAfterSliding","logGTMEvent","width","dataset","jsGtmData","_JSON$parse","eventaction","eventcategory","eventlabel","dataLayer","8","click","onClickBtnToggleContent","innerWidth","btn","toggle","arrow","9","_hammerjs","click .download-grid__carousel__controls__range-slider","click .download-grid__carousel__controls__arrows button","onResize","hammerRangeSlider","direction","DIRECTION_HORIZONTAL","onRangeSliderPan","hammer","inputClass","TouchInput","onCarouselPan","setState","configureRangeSlider","carousel","transform","center","centerSlides","slidesCount","querySelectorAll","rangeSlider","slidesToMove","currentIndex","canSwipe","breakpoints","phone","greater","slidesInFocus","slideWidth","controlsMargin","tablet","desktop","largeDesktop","lastSlideInBreakpoint","deviceWidth","needToCenter","breakpoint","paddingBottom","max","slidesWidth","offsetWidth","diff","setRangeSliderThumbWidth","getLastSlide","setIndexAndSlide","slideToIndex","parseInt","pos","_pos","remainingOffset","onRangeSliderClick","stopPropagation","newEventObj","pageX","rangeSliderWidth","rangeSliderThumbWidth","currentThumbPos","offsetLeft","round","abs","setRangeSliderValue","min","onRangeSliderValueChange","rangeSliderStepUp","newValue","rangeSliderStepDown","rangeSliderIncrement","rangeSliderDecrement","onArrowBtnClick","delegateTarget","controlsDirection","distance","hammerjs","10","submit","keyup input[type=\"email\"]","change input[type=\"checkbox\"]","disabled","onSubmit","preventDefault","onInputChange","input","form","btnSubmit","required","checkValidity","11","onClick","addToDataLayer","currentTarget","jsGtmDataSubmit","_JSON$parse2","_event","_eventaction","_eventcategory","_eventlabel","gtmDataSubmit","jsGtmDataSubmitMarketing","_JSON$parse3","_event2","_eventaction2","_eventcategory2","_eventlabel2","gtmDataSubmitMarketing","12","click .hs-submit .hs-button","click label.hero__signup-area__btn","change .hs-marketing_material_consent input.hs-input","thankYouModal","onLabelClick","onCheckboxValueChange","gtmDataMarketingCheckboxChecked","checked","populateModal","mobileSignupArea","hubspotdata","hubSpotScript","hubSpotForm","portalId","formId","appendChild","createTextNode","onFormSubmit","13","click .hotspot-image__container__hotspots__spot__btn","setSpotActive","element","setTooltipContentMobile","setDesktopTooltipPos","setSpotInactive","activeSpot","removeTooltipContentMobile","onSpotClick","stopImmediatePropagation","spot","innerHTML","tooltipContainer","contentToSet","label","cloneNode","text","hotspotContainer","closest","tooltip","tooltipArrow","leftWindowSpace","halfRemainingSpace","parent","offsetTop","tooltipBottom","offsetHeight","missingSpace","spotOffsetFromTooltipLeft","14","openModal","hubSpot","model","onClickOpenModal","hubSpotData","15","ima","images","input .interactive-hero__content-area__controls__range-slider","change .interactive-hero__content-area__controls__range-slider","_this","vid","onloadeddata","currentTime","ontimeupdate","pausePlayingAt","pause","getSlider","sliders","videoMain","duration","pulseElement","steps","toFixed","floor","handleRangeSliderValueChange","onRangeSliderValueChangeIE","ua","indexOf","opacity","play","16","thankyou","M10PackagesId","PackageId","Language","title","click .open-click","click .send-email","click #dropdownOpen","content","getElementsByClassName","openLb","idp","fromimage","getPropertyValue","vd","ct","onClickEmailDropdown","innerText","emailForm","replace","m10id","language","send","sendEmail","validation","v","vv","drop","dropCont","className","removeAttribute","height","rName","rEmail","privacy","consent","nameV","emailV","privacyV","requestSendEmail","CustomerInfo","Name","Email","HasCheckedPrivacy","HasCheckedMarketing","PageUrl","href","PageName","pathname","RequestPdf","xhr","XMLHttpRequest","open","setRequestHeader","onreadystatechange","readyState","status","thanks","17","_handlebars","options","click .products__card__details button","change .hs-marketing_material_consent input","getTemplate","templateElement","template","compile","render","toJSON","setTimeout","onViewDetailsClick","productId","api","openDetailsModal","productData","productDetails","response","baseUrl","params","emptyContainer","queryString","map","url","encodeURI","xhttp","../../framework/view","handlebars","18","_smoothscrollPolyfill","click .navigation__mobile__burger","click a.js-menu-item-scroll","click .navigation__mobile .begin-vde","click .navigation__desktop .begin-vde","scrollElementIntoView","navH","bodyOffset","elementPosition","offsetPosition","closeBurger","onClickBurger","onClickMenuItem","hash","substr","onClickVdeMobile","onClickVdeDesktop","smoothscroll-polyfill","19","filters","click button.filter","click .products__bottom-area__products__btn-show-more button","click .products__card__details button, .products__card__details-desktop button","BtnShowMoreContainer","renderProductCard","onFilterClick","filter","toggleFilter","setFilters","filtersCategory","filtersType","selectedFilters","category","item","toLowerCase","onShowMoreClick","isLastItems","items","source","showMoreBtn","product","html","cards","20","click .js-tabs-tab","setFirstAsDefault","onClickTabs","createDeepClone","previousVisibleTab","activeBtnClicked","offset","menuHeight","selectedTabContent","desktopContentContainer","21","_typeof","Symbol","iterator","constructor","_underscore","_backbone","_modalView","_classCallCheck","instance","Constructor","_defineProperties","props","descriptor","configurable","writable","_createClass","protoProps","staticProps","_setPrototypeOf","setPrototypeOf","__proto__","_createSuper","Derived","hasNativeReflectConstruct","construct","sham","Proxy","toString","_isNativeReflectConstruct","result","Super","_getPrototypeOf","NewTarget","_possibleConstructorReturn","_assertThisInitialized","ReferenceError","defaults","frame","view","documentListenerTypes","documentListeners","documentListener","matches","selector","msMatchesSelector","Instance","_EventEmitter","subClass","superClass","_inherits","_super","scope","setEventType","eventType","layout","collection","close","isClosing","cancelable","isOpen","at","clearTimeout","closeTimeout","viewModel","Model","viewOptions","templateMarkup","addModal","check","vendor","opera","Modal","modals","Layout","Collection","click .js-modal__close","reset","keyHandler","ItemView","itemView","which","cb","_this2","contentView","isInner","isClose","closestInner","onBeforeModalClose","modalBody","overflowY","_this3","settings","currentView","splice","each","ancestor","parentElement","../core/views/modal-view","./view","backbone","underscore","22","ServerView","elems","hasViewClass","elem","extendView","viewClone","NewView","ElView","clone","omit","onBeforeRender","23","Lazy","support","IntersectionObserver","addHeightToBackgroundContainer","img","myImage","Image","onload","backgroundSize","loadImages","getAttribute","image","backgroundImage","lazyLoading","elements","observer","intersectionRatio","unobserve","lazyLoadElements","hdLazyLoad","rootMarginValue","rootMargin","threshold","observe","_i","loadOnEvent","baseSelector","elementSelector","myEvent","root","loadSrcs","load","lazyElements","24","ViewEvent","ViewEventClass","functionMap","func","namespace","$","_removeElement","removeChild","_setElement","$el","_setAttributes","attributes","setAttribute","eventFunc","_len","_key","pathItem","delegate","selectorParam","listenerParam","cid","undelegateEvents","undelegate","25","fn","_hbs","_app","_vanillaLazyLoad","NodeList","webkitMatchesSelector","s","nodeType","submittedHubspotForms","helper","registerHelper","../../server/helpers/hbs","./core/app","./framework/vanillaLazyLoad","26","_helpers","eq","values","every","ne","_len2","_key2","valuesClone","and","_len3","_key3","or","_len4","_key4","some","lt","gt","lte","gte","getJsonContext"],"mappings":"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","file":"bundle.js","sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function eventListener() {\n if (errorListener !== undefined) {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n var errorListener;\n\n // Adding an error listener is not optional because\n // if an error is thrown on an event emitter we cannot\n // guarantee that the actual event we are waiting will\n // be fired. The result could be a silent way to create\n // memory or file descriptor leaks, which is something\n // we should avoid.\n if (name !== 'error') {\n errorListener = function errorListener(err) {\n emitter.removeListener(name, eventListener);\n reject(err);\n };\n\n emitter.once('error', errorListener);\n }\n\n emitter.once(name, eventListener);\n });\n}\n",null,"var GlueFrame = function(iframe, appName) {\n\n var $this = this;\n\n // GlueFrame version\n $this.glueframe = \"1.1.2\";\n\n // Allow posting messages only to the domain of the app\n var _domain = (\"\"+iframe.src).split(\"/\").slice(0,3).join(\"/\");\n\n // Determine method of communication with iframe\n var _method = (function() {\n if (_domain == (\"\"+window.location).split(\"/\").slice(0,3).join(\"/\") ) {\n return \"object\";\n } else if (typeof window.postMessage !== \"undefined\") {\n return \"post\";\n } else {\n return \"none\";\n }\n })();\n\n // Poll the iframe until the app is bootstrapped\n $this.ready = false;\n var _readyInterval = window.setInterval(function(){\n if (!this.ready && _method === \"object\") {\n if (iframe.contentWindow[appName] && iframe.contentWindow[appName].bootstrapped) {\n $this.ready = true;\n window.clearInterval(_readyInterval);\n _processQueue();\n }\n } else if (!this.ready && _method === \"post\") {\n $this.get(\"bootstrapped\", function(bootstrapped){\n if (bootstrapped) {\n $this.ready = true;\n window.clearInterval(_readyInterval);\n _processQueue();\n }\n }, true);\n }\n }, 100);\n\n $this.glueFrameId = (new Date()).getTime();\n var _callbackCount = 0;\n var _callbacks = {};\n\n // Store callback functions in the parent window\n var _registerCallback = function(callback, requireCallback) {\n var callbackIdentifier = $this.glueFrameId + \"_\" + (++_callbackCount);\n if (typeof callback === \"function\") {\n _callbacks[callbackIdentifier] = callback;\n } else if (requireCallback) {\n throw \"GlueFrame: Callback not registered correctly.\";\n }\n return callbackIdentifier;\n };\n\n // Queue up method calls until app is ready\n var _queue = [];\n var _addToQueue = function(method, args) {\n _queue.push({method: method, args: args});\n };\n\n // Loop through queue when app is ready\n var _processQueue = function() {\n for (var i = 0; i < _queue.length; i += 1) {\n var queueItem = _queue[i];\n queueItem.method.apply(null, queueItem.args);\n }\n _queue = [];\n $this.set(\"queuedEventsProcessed\", true);\n };\n\n $this.get = function(prop, callback, force) {\n if (!$this.ready && !force) {\n _addToQueue($this.get, [prop, callback]);\n return;\n }\n var cbId = _registerCallback(callback, true);\n if (_method === \"object\") {\n var value = iframe.contentWindow[appName].get.apply(null, [prop]);\n if (typeof _callbacks[cbId] !== \"undefined\") {\n _callbacks[cbId].apply(null, [value]);\n }\n } else if (_method === \"post\") {\n var messageObject = {f: \"get\", args: [prop], cbId: cbId};\n iframe.contentWindow.postMessage( JSON.stringify(messageObject), force ? \"*\" : _domain );\n }\n };\n\n $this.set = function(prop, val, callback) {\n if (!$this.ready) {\n _addToQueue($this.set, [prop, val, callback]);\n return;\n }\n var cbId = _registerCallback(callback, false);\n if (_method === \"object\") {\n var value = iframe.contentWindow[appName].set.apply(null, [prop, val]);\n if (typeof _callbacks[cbId] !== \"undefined\") {\n _callbacks[cbId].apply(null, [value]);\n }\n } else if (_method === \"post\") {\n var messageObject = {f: \"set\", args: [prop, val], cbId: cbId};\n iframe.contentWindow.postMessage( JSON.stringify(messageObject), _domain );\n }\n };\n\n $this.bind = function(event, callback, triggerQueue) {\n var triggerQueue = triggerQueue || false;\n if (!$this.ready) {\n _addToQueue($this.bind, [event, callback, true]);\n return;\n }\n var cbId = _registerCallback(callback, true);\n if (_method === \"object\") {\n iframe.contentWindow[appName].bind.apply(null, [event, callback, triggerQueue]);\n } else if (_method === \"post\") {\n var messageObject = {f: \"bind\", args: [event], cbId: cbId, triggerQueue: triggerQueue};\n iframe.contentWindow.postMessage( JSON.stringify(messageObject), _domain );\n }\n };\n\n $this.fire = function(event, obj) {\n if (!$this.ready) {\n _addToQueue($this.fire, [event, obj]);\n return;\n }\n if (_method === \"object\") {\n return iframe.contentWindow[appName].fire.apply(null, [event, obj]);\n } else if (_method === \"post\") {\n var messageObject = {f: \"fire\", args: [event, obj]};\n iframe.contentWindow.postMessage( JSON.stringify(messageObject), _domain );\n }\n };\n\n // Remove event listeners, callbacks and intervals\n $this.destroy = function(){\n if (window.addEventListener) {\n window.removeEventListener(\"message\", _receiveMessage, false);\n } else {\n window.detachEvent(\"onmessage\", _receiveMessage);\n }\n window.clearInterval(_readyInterval);\n _callbacks = {};\n };\n\n // Parse messages received from iframe\n var _receiveMessage = function(e) {\n \tif (e.origin === _domain) {\n var data;\n try {\n data = JSON.parse(e.data);\n }catch(e){}\n if (typeof data !== \"undefined\" && typeof data.cbId !== \"undefined\" && typeof _callbacks[data.cbId] === \"function\") {\n _callbacks[data.cbId].apply(null, [data.a, data.b]);\n }\n }\n };\n\n // Listen for message events if need\n if (window.addEventListener) {\n window.addEventListener(\"message\", _receiveMessage, false);\n } else {\n window.attachEvent(\"onmessage\", _receiveMessage);\n }\n\n};\n\nif (typeof module !== 'undefined' && module.exports) {\n module.exports = GlueFrame;\n}\n","/* smoothscroll v0.4.0 - 2018 - Dustan Kasten, Jeremias Menichelli - MIT License */\n(function () {\n 'use strict';\n\n // polyfill\n function polyfill() {\n // aliases\n var w = window;\n var d = document;\n\n // return if scroll behavior is supported and polyfill is not forced\n if (\n 'scrollBehavior' in d.documentElement.style &&\n w.__forceSmoothScrollPolyfill__ !== true\n ) {\n return;\n }\n\n // globals\n var Element = w.HTMLElement || w.Element;\n var SCROLL_TIME = 468;\n\n // object gathering original scroll methods\n var original = {\n scroll: w.scroll || w.scrollTo,\n scrollBy: w.scrollBy,\n elementScroll: Element.prototype.scroll || scrollElement,\n scrollIntoView: Element.prototype.scrollIntoView\n };\n\n // define timing method\n var now =\n w.performance && w.performance.now\n ? w.performance.now.bind(w.performance)\n : Date.now;\n\n /**\n * indicates if a the current browser is made by Microsoft\n * @method isMicrosoftBrowser\n * @param {String} userAgent\n * @returns {Boolean}\n */\n function isMicrosoftBrowser(userAgent) {\n var userAgentPatterns = ['MSIE ', 'Trident/', 'Edge/'];\n\n return new RegExp(userAgentPatterns.join('|')).test(userAgent);\n }\n\n /*\n * IE has rounding bug rounding down clientHeight and clientWidth and\n * rounding up scrollHeight and scrollWidth causing false positives\n * on hasScrollableSpace\n */\n var ROUNDING_TOLERANCE = isMicrosoftBrowser(w.navigator.userAgent) ? 1 : 0;\n\n /**\n * changes scroll position inside an element\n * @method scrollElement\n * @param {Number} x\n * @param {Number} y\n * @returns {undefined}\n */\n function scrollElement(x, y) {\n this.scrollLeft = x;\n this.scrollTop = y;\n }\n\n /**\n * returns result of applying ease math function to a number\n * @method ease\n * @param {Number} k\n * @returns {Number}\n */\n function ease(k) {\n return 0.5 * (1 - Math.cos(Math.PI * k));\n }\n\n /**\n * indicates if a smooth behavior should be applied\n * @method shouldBailOut\n * @param {Number|Object} firstArg\n * @returns {Boolean}\n */\n function shouldBailOut(firstArg) {\n if (\n firstArg === null ||\n typeof firstArg !== 'object' ||\n firstArg.behavior === undefined ||\n firstArg.behavior === 'auto' ||\n firstArg.behavior === 'instant'\n ) {\n // first argument is not an object/null\n // or behavior is auto, instant or undefined\n return true;\n }\n\n if (typeof firstArg === 'object' && firstArg.behavior === 'smooth') {\n // first argument is an object and behavior is smooth\n return false;\n }\n\n // throw error when behavior is not supported\n throw new TypeError(\n 'behavior member of ScrollOptions ' +\n firstArg.behavior +\n ' is not a valid value for enumeration ScrollBehavior.'\n );\n }\n\n /**\n * indicates if an element has scrollable space in the provided axis\n * @method hasScrollableSpace\n * @param {Node} el\n * @param {String} axis\n * @returns {Boolean}\n */\n function hasScrollableSpace(el, axis) {\n if (axis === 'Y') {\n return el.clientHeight + ROUNDING_TOLERANCE < el.scrollHeight;\n }\n\n if (axis === 'X') {\n return el.clientWidth + ROUNDING_TOLERANCE < el.scrollWidth;\n }\n }\n\n /**\n * indicates if an element has a scrollable overflow property in the axis\n * @method canOverflow\n * @param {Node} el\n * @param {String} axis\n * @returns {Boolean}\n */\n function canOverflow(el, axis) {\n var overflowValue = w.getComputedStyle(el, null)['overflow' + axis];\n\n return overflowValue === 'auto' || overflowValue === 'scroll';\n }\n\n /**\n * indicates if an element can be scrolled in either axis\n * @method isScrollable\n * @param {Node} el\n * @param {String} axis\n * @returns {Boolean}\n */\n function isScrollable(el) {\n var isScrollableY = hasScrollableSpace(el, 'Y') && canOverflow(el, 'Y');\n var isScrollableX = hasScrollableSpace(el, 'X') && canOverflow(el, 'X');\n\n return isScrollableY || isScrollableX;\n }\n\n /**\n * finds scrollable parent of an element\n * @method findScrollableParent\n * @param {Node} el\n * @returns {Node} el\n */\n function findScrollableParent(el) {\n var isBody;\n\n do {\n el = el.parentNode;\n\n isBody = el === d.body;\n } while (isBody === false && isScrollable(el) === false);\n\n isBody = null;\n\n return el;\n }\n\n /**\n * self invoked function that, given a context, steps through scrolling\n * @method step\n * @param {Object} context\n * @returns {undefined}\n */\n function step(context) {\n var time = now();\n var value;\n var currentX;\n var currentY;\n var elapsed = (time - context.startTime) / SCROLL_TIME;\n\n // avoid elapsed times higher than one\n elapsed = elapsed > 1 ? 1 : elapsed;\n\n // apply easing to elapsed time\n value = ease(elapsed);\n\n currentX = context.startX + (context.x - context.startX) * value;\n currentY = context.startY + (context.y - context.startY) * value;\n\n context.method.call(context.scrollable, currentX, currentY);\n\n // scroll more if we have not reached our destination\n if (currentX !== context.x || currentY !== context.y) {\n w.requestAnimationFrame(step.bind(w, context));\n }\n }\n\n /**\n * scrolls window or element with a smooth behavior\n * @method smoothScroll\n * @param {Object|Node} el\n * @param {Number} x\n * @param {Number} y\n * @returns {undefined}\n */\n function smoothScroll(el, x, y) {\n var scrollable;\n var startX;\n var startY;\n var method;\n var startTime = now();\n\n // define scroll context\n if (el === d.body) {\n scrollable = w;\n startX = w.scrollX || w.pageXOffset;\n startY = w.scrollY || w.pageYOffset;\n method = original.scroll;\n } else {\n scrollable = el;\n startX = el.scrollLeft;\n startY = el.scrollTop;\n method = scrollElement;\n }\n\n // scroll looping over a frame\n step({\n scrollable: scrollable,\n method: method,\n startTime: startTime,\n startX: startX,\n startY: startY,\n x: x,\n y: y\n });\n }\n\n // ORIGINAL METHODS OVERRIDES\n // w.scroll and w.scrollTo\n w.scroll = w.scrollTo = function() {\n // avoid action when no arguments are passed\n if (arguments[0] === undefined) {\n return;\n }\n\n // avoid smooth behavior if not required\n if (shouldBailOut(arguments[0]) === true) {\n original.scroll.call(\n w,\n arguments[0].left !== undefined\n ? arguments[0].left\n : typeof arguments[0] !== 'object'\n ? arguments[0]\n : w.scrollX || w.pageXOffset,\n // use top prop, second argument if present or fallback to scrollY\n arguments[0].top !== undefined\n ? arguments[0].top\n : arguments[1] !== undefined\n ? arguments[1]\n : w.scrollY || w.pageYOffset\n );\n\n return;\n }\n\n // LET THE SMOOTHNESS BEGIN!\n smoothScroll.call(\n w,\n d.body,\n arguments[0].left !== undefined\n ? ~~arguments[0].left\n : w.scrollX || w.pageXOffset,\n arguments[0].top !== undefined\n ? ~~arguments[0].top\n : w.scrollY || w.pageYOffset\n );\n };\n\n // w.scrollBy\n w.scrollBy = function() {\n // avoid action when no arguments are passed\n if (arguments[0] === undefined) {\n return;\n }\n\n // avoid smooth behavior if not required\n if (shouldBailOut(arguments[0])) {\n original.scrollBy.call(\n w,\n arguments[0].left !== undefined\n ? arguments[0].left\n : typeof arguments[0] !== 'object' ? arguments[0] : 0,\n arguments[0].top !== undefined\n ? arguments[0].top\n : arguments[1] !== undefined ? arguments[1] : 0\n );\n\n return;\n }\n\n // LET THE SMOOTHNESS BEGIN!\n smoothScroll.call(\n w,\n d.body,\n ~~arguments[0].left + (w.scrollX || w.pageXOffset),\n ~~arguments[0].top + (w.scrollY || w.pageYOffset)\n );\n };\n\n // Element.prototype.scroll and Element.prototype.scrollTo\n Element.prototype.scroll = Element.prototype.scrollTo = function() {\n // avoid action when no arguments are passed\n if (arguments[0] === undefined) {\n return;\n }\n\n // avoid smooth behavior if not required\n if (shouldBailOut(arguments[0]) === true) {\n // if one number is passed, throw error to match Firefox implementation\n if (typeof arguments[0] === 'number' && arguments[1] === undefined) {\n throw new SyntaxError('Value could not be converted');\n }\n\n original.elementScroll.call(\n this,\n // use left prop, first number argument or fallback to scrollLeft\n arguments[0].left !== undefined\n ? ~~arguments[0].left\n : typeof arguments[0] !== 'object' ? ~~arguments[0] : this.scrollLeft,\n // use top prop, second argument or fallback to scrollTop\n arguments[0].top !== undefined\n ? ~~arguments[0].top\n : arguments[1] !== undefined ? ~~arguments[1] : this.scrollTop\n );\n\n return;\n }\n\n var left = arguments[0].left;\n var top = arguments[0].top;\n\n // LET THE SMOOTHNESS BEGIN!\n smoothScroll.call(\n this,\n this,\n typeof left === 'undefined' ? this.scrollLeft : ~~left,\n typeof top === 'undefined' ? this.scrollTop : ~~top\n );\n };\n\n // Element.prototype.scrollBy\n Element.prototype.scrollBy = function() {\n // avoid action when no arguments are passed\n if (arguments[0] === undefined) {\n return;\n }\n\n // avoid smooth behavior if not required\n if (shouldBailOut(arguments[0]) === true) {\n original.elementScroll.call(\n this,\n arguments[0].left !== undefined\n ? ~~arguments[0].left + this.scrollLeft\n : ~~arguments[0] + this.scrollLeft,\n arguments[0].top !== undefined\n ? ~~arguments[0].top + this.scrollTop\n : ~~arguments[1] + this.scrollTop\n );\n\n return;\n }\n\n this.scroll({\n left: ~~arguments[0].left + this.scrollLeft,\n top: ~~arguments[0].top + this.scrollTop,\n behavior: arguments[0].behavior\n });\n };\n\n // Element.prototype.scrollIntoView\n Element.prototype.scrollIntoView = function() {\n // avoid smooth behavior if not required\n if (shouldBailOut(arguments[0]) === true) {\n original.scrollIntoView.call(\n this,\n arguments[0] === undefined ? true : arguments[0]\n );\n\n return;\n }\n\n // LET THE SMOOTHNESS BEGIN!\n var scrollableParent = findScrollableParent(this);\n var parentRects = scrollableParent.getBoundingClientRect();\n var clientRects = this.getBoundingClientRect();\n\n if (scrollableParent !== d.body) {\n // reveal element inside parent\n smoothScroll.call(\n this,\n scrollableParent,\n scrollableParent.scrollLeft + clientRects.left - parentRects.left,\n scrollableParent.scrollTop + clientRects.top - parentRects.top\n );\n\n // reveal parent in viewport unless is fixed\n if (w.getComputedStyle(scrollableParent).position !== 'fixed') {\n w.scrollBy({\n left: parentRects.left,\n top: parentRects.top,\n behavior: 'smooth'\n });\n }\n } else {\n // reveal element in viewport\n w.scrollBy({\n left: clientRects.left,\n top: clientRects.top,\n behavior: 'smooth'\n });\n }\n };\n }\n\n if (typeof exports === 'object' && typeof module !== 'undefined') {\n // commonjs\n module.exports = { polyfill: polyfill };\n } else {\n // global\n polyfill();\n }\n\n}());\n","/**\r\n * Application\r\n *\r\n * @author dkvistgaard \r\n */\r\n\r\n// Framework\r\nimport BackboneView from '../framework/view';\r\nimport Modal from '../framework/modal';\r\n\r\n// Importing views\r\nimport views from './views';\r\n\r\nconst App = new BackboneView();\r\nApp.start = function start() {\r\n\tthis.trigger('start');\r\n};\r\n\r\nglobal.App = App;\r\n\r\n// Initialize framework scripts\r\nApp.modal = new Modal();\r\n\r\nApp.on('start', () => {\r\n\tconsole.log('app start');\r\n\r\n\t// Initializing all views\r\n\tviews.forEach((View) => {\r\n\t\tnew View(); // eslint-disable-line no-new\r\n\t});\r\n});\r\n\r\nexport default App;\r\n","/**\r\n * Importing and exporting all views\r\n *\r\n * @author Daniel Kvistgaard \r\n */\r\n\r\nimport HubSpot from './views/hubspot';\r\nimport GTM from './views/google-tag-manager';\r\n\r\nimport BtnToggleContent from './views/btn-toggle-content';\r\nimport FormValidation from './views/form-validation';\r\n\r\nimport Navigation from './views/navigation';\r\n\r\nimport Hero from './views/hero';\r\nimport Tabs from './views/tabs';\r\nimport DownloadGrid from './views/download-grid';\r\nimport ArticleVideo from './views/article-video';\r\nimport HotspotImage from './views/hotspot-image';\r\nimport InteractiveHero from './views/interactive-hero';\r\nimport BeforeAfter from './views/before-after';\r\nimport Products from './views/products';\r\nimport M10Packages from './views/m10Packages';\r\n\r\nexport default [\r\n\tHubSpot,\r\n\tGTM,\r\n\r\n\tBtnToggleContent,\r\n\tFormValidation,\r\n\tNavigation,\r\n\r\n\tHero,\r\n\tTabs,\r\n\tDownloadGrid,\r\n\tArticleVideo,\r\n\tHotspotImage,\r\n\tInteractiveHero,\r\n\tBeforeAfter,\r\n\tProducts,\r\n\tM10Packages\r\n];\r\n","/**\r\n * Article Video\r\n *\r\n * @author Rasmus Seindal \r\n */\r\n\r\nimport ServerView from '../../framework/server-side-view';\r\nimport GlueFrame from \"glueframe\";\r\n\r\nconst View = ServerView.extend({\r\n el: '.article.video',\r\n\r\n player: null,\r\n\r\n playButtonDirty: false,\r\n\r\n isVideo23: false,\r\n\r\n v23: false,\r\n\r\n // Allow for multiple youtube videos\r\n iframes: {},\r\n\r\n events: {\r\n 'click button.play': 'playVideo',\r\n 'click button.pause': 'pauseVideo',\r\n },\r\n\r\n initialize() {\r\n this.isVideo23 = this.el.classList.contains('video23');\r\n if (!this.isVideo23) {\r\n this.iframes[this.el.querySelector('iframe').id] = this;\r\n window.onYouTubePlayerAPIReady = this.onYouTubePlayerAPIReady.bind(this);\r\n } else {\r\n let iframeId = this.el.querySelector('iframe').id;\r\n this.v23 = new GlueFrame(document.getElementById(iframeId), \"Player\");\r\n //listen to end of the video\r\n var self = this;\r\n this.v23.bind(\"player:video:ended\", function (eventName) {\r\n console.log(\"The event \" + eventName);\r\n self.v23.set(\"currentTime\", 0);\r\n self.pauseVideo();\r\n });\r\n }\r\n },\r\n\r\n onRender() {\r\n if (!this.isVideo23) this.injectYoutubeAPIScript();\r\n },\r\n\r\n injectYoutubeAPIScript() {\r\n const scriptId = 'YTS';\r\n\r\n if (!document.getElementById(scriptId)) {\r\n const tag = document.createElement('script');\r\n tag.id = scriptId;\r\n tag.src = '//www.youtube.com/player_api';\r\n const firstScriptTag = document.getElementsByTagName('script')[0];\r\n firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\r\n }\r\n },\r\n\r\n onYouTubePlayerAPIReady() {\r\n const iframes = this.iframes;\r\n\r\n Object.keys(iframes).forEach(function (iframeId) {\r\n if (window.YT) {\r\n iframes[iframeId].player = new window.YT.Player(iframeId);\r\n }\r\n });\r\n\r\n },\r\n\r\n playVideo() {\r\n if (this.isVideo23) {\r\n this.v23.set(\"playing\", true);\r\n this.el.querySelector('.article__mid-content__video-container__controls').classList.add('is-playing');\r\n } else {\r\n if (this.player && this.player.playVideo) {\r\n this.player.playVideo();\r\n this.el.querySelector('.article__mid-content__video-container__thumbnail').style.display = 'none';\r\n }\r\n }\r\n },\r\n\r\n pauseVideo() {\r\n if (this.isVideo23) {\r\n this.v23.set(\"playing\", false);\r\n this.el.querySelector('.article__mid-content__video-container__controls').classList.remove('is-playing');\r\n }\r\n }\r\n});\r\n\r\nexport default View;\r\n","/**\r\n * Before After\r\n *\r\n * @author Rasmus Seindal \r\n */\r\n\r\nimport ServerView from '../../framework/server-side-view';\r\n\r\nconst View = ServerView.extend({\r\n el: '.before-after',\r\n\r\n events: {\r\n 'input .before-after__slider': 'beforeAfterSliding',\r\n 'change .before-after__slider': function (e) {\r\n this.beforeAfterSliding(e);\r\n this.logGTMEvent(e);\r\n },\r\n },\r\n\r\n beforeAfterSliding: function () {\r\n this.el.querySelector('.before-after__sliding-overlay').style.width = 'calc(' + this.el.querySelector('.before-after__slider').value + '% + 25px)';\r\n },\r\n\r\n logGTMEvent: function () {\r\n if (this.el.dataset.jsGtmData) {\r\n const { event, eventaction, eventcategory, eventlabel } = JSON.parse(this.el.dataset.jsGtmData);\r\n\r\n dataLayer.push({\r\n event,\r\n eventaction,\r\n eventcategory,\r\n eventlabel,\r\n });\r\n }\r\n }\r\n});\r\n\r\nexport default View;\r\n","/**\r\n * btn-toggle-content\r\n *\r\n * @author Rasmus Seindal \r\n */\r\n\r\nimport ServerView from '../../framework/server-side-view';\r\n\r\nconst View = ServerView.extend({\r\n\tel: '.btn-toggle-content',\r\n\r\n\tevents: {\r\n\t\tclick: 'onClickBtnToggleContent',\r\n\t},\r\n\r\n\tonClickBtnToggleContent() {\r\n\t\tif (window.innerWidth < 768) {\r\n\t\t\tconst btn = this.el;\r\n\t\t\tbtn.classList.toggle('btn-toggle-content-hidden');\r\n\t\t\tbtn.classList.toggle('red-dark');\r\n\r\n\t\t\tconst arrow = btn.querySelector('.arrow');\r\n\t\t\tarrow.classList.toggle('up');\r\n\t\t\tarrow.classList.toggle('white');\r\n\t\t\tarrow.classList.toggle('black');\r\n\t\t}\r\n\t},\r\n});\r\n\r\nexport default View;\r\n\r\n","/**\r\n * Download Grid\r\n *\r\n * @author Rasmus Seindal \r\n */\r\n\r\nimport Hammer from 'hammerjs';\r\nimport ServerView from '../../framework/server-side-view';\r\n\r\nconst View = ServerView.extend({\r\n\tel: '.download-grid',\r\n\r\n\tstate: {},\r\n\r\n\tevents: {\r\n\t\t'click .download-grid__carousel__controls__range-slider': 'onRangeSliderClick',\r\n\t\t'click .download-grid__carousel__controls__arrows button': 'onArrowBtnClick',\r\n\t},\r\n\r\n\tinitialize() {\r\n\t\twindow.addEventListener('resize', this.onResize.bind(this));\r\n\t},\r\n\r\n\tonRender() {\r\n\t\tthis.hammerRangeSlider = new Hammer(this.el.querySelector('.download-grid__carousel__controls__range-slider'));\r\n\t\tthis.hammerRangeSlider.get('pan').set({\r\n\t\t\tdirection: Hammer.DIRECTION_HORIZONTAL,\r\n\t\t});\r\n\r\n\t\tthis.hammerRangeSlider.on('panleft', this.onRangeSliderPan.bind(this));\r\n\t\tthis.hammerRangeSlider.on('panright', this.onRangeSliderPan.bind(this));\r\n\r\n\t\tthis.hammer = new Hammer(this.el.querySelector('.download-grid__carousel__hammerjs'), {\r\n\t\t\tinputClass: Hammer.TouchInput,\r\n\t\t});\r\n\r\n\t\tthis.hammer.get('pan').set({\r\n\t\t\tdirection: Hammer.DIRECTION_HORIZONTAL,\r\n\t\t});\r\n\r\n\t\tthis.hammer.on('panleft', this.onCarouselPan.bind(this));\r\n\t\tthis.hammer.on('panright', this.onCarouselPan.bind(this));\r\n\t\tthis.hammer.on('panend', this.onCarouselPan.bind(this));\r\n\r\n\t\tthis.setState();\r\n\t\tthis.configureRangeSlider();\r\n\r\n\t\tthis.state.carousel.style.transform = 'translateX(0px)';\r\n\r\n\t\t//if it doesn't have enough slides, center slides\r\n\t\tif(this.state.center) this.centerSlides(); \r\n\t},\r\n\r\n\tsetState() {\r\n\t\tthis.state = {\r\n\t\t\tcarousel: this.el.querySelector('.download-grid__carousel__slides'),\r\n\t\t\tslidesCount: this.el.querySelectorAll('.download-grid__carousel__slides__slide').length,\r\n\t\t\trangeSlider: this.el.querySelector('.download-grid__carousel__controls__range-slider'),\r\n\t\t\tslidesToMove: 1,\r\n\t\t\tcurrentIndex: 1,\r\n\t\t\tcanSwipe: true,\r\n\t\t\tbreakpoints: {\r\n\t\t\t\tphone: {\r\n\t\t\t\t\tgreater: false,\r\n\t\t\t\t\tslidesInFocus: 1,\r\n\t\t\t\t\tslideWidth: 75, // in %\r\n\t\t\t\t\tcontrolsMargin: 10, // in px\r\n\t\t\t\t\twidth: 767,\r\n\t\t\t\t},\r\n\t\t\t\ttablet: {\r\n\t\t\t\t\tgreater: true,\r\n\t\t\t\t\tslidesInFocus: 2,\r\n\t\t\t\t\tslideWidth: 45, // in %\r\n\t\t\t\t\tcontrolsMargin: 0, // in px\r\n\t\t\t\t\twidth: 768,\r\n\t\t\t\t},\r\n\t\t\t\tdesktop: {\r\n\t\t\t\t\tgreater: true,\r\n\t\t\t\t\tslidesInFocus: 3,\r\n\t\t\t\t\tslideWidth: 100 / 3, // in %\r\n\t\t\t\t\tcontrolsMargin: 0,\r\n\t\t\t\t\twidth: 992,\r\n\t\t\t\t},\r\n\t\t\t\tlargeDesktop: {\r\n\t\t\t\t\tgreater: true,\r\n\t\t\t\t\tslidesInFocus: 4,\r\n\t\t\t\t\tslideWidth: 100 / 4, // in %\r\n\t\t\t\t\tcontrolsMargin: 0,\r\n\t\t\t\t\twidth: 1440,\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t\tlastSlideInBreakpoint: null,\r\n\t\t\tdeviceWidth: window.innerWidth,\r\n\t\t\tcenter: false\r\n\t\t};\r\n\t},\r\n\r\n\tneedToCenter(breakpoint){\r\n\t\tif (this.state.slidesCount <= this.state.breakpoints[breakpoint].slidesInFocus) {\r\n\t\t\tthis.el.querySelector('.download-grid__carousel__controls').style.display = 'none';\r\n\t\t\tthis.el.querySelector('.download-grid__carousel').style.paddingBottom = '65px';\r\n\t\t\tthis.state.center = true;\r\n\t\t} else {\r\n\t\t\tthis.state.rangeSlider.dataset.max = this.state.slidesCount - (this.state.breakpoints[breakpoint].slidesInFocus - this.state.slidesToMove);\r\n\t\t\tthis.el.querySelector('.download-grid__carousel__controls').style.display = '';\r\n\t\t\tthis.el.querySelector('.download-grid__carousel').style.paddingBottom = '';\r\n\t\t\tthis.state.center = false;\r\n\t\t}\r\n\t},\r\n\r\n\tcenterSlides(){\r\n\t\tconst slidesWidth = (this.el.querySelector('.download-grid__carousel__slides__slide').offsetWidth + 30) * this.state.slidesCount;\r\n\t\tvar sliderWidth = this.el.querySelector('.download-grid__carousel__hammerjs').offsetWidth;\r\n\t\tvar diff = sliderWidth - slidesWidth;\r\n\t\tvar x = diff >= 0 ? diff/2 : 0;\r\n\t\tthis.state.carousel.style.transform = \"translateX(\" + x + \"px)\";\r\n\t},\r\n\r\n\tconfigureRangeSlider() {\r\n\t\tif (this.state.deviceWidth >= this.state.breakpoints.largeDesktop.width) {\r\n\t\t\tthis.needToCenter(\"largeDesktop\");\r\n\t\t}\r\n\t\telse if (this.state.deviceWidth >= this.state.breakpoints.desktop.width) {\r\n\t\t\tthis.needToCenter(\"desktop\");\r\n\t\t} else if (this.state.deviceWidth >= this.state.breakpoints.tablet.width) {\r\n\t\t\tthis.needToCenter(\"tablet\");\r\n\t\t} else if (this.state.deviceWidth <= this.state.breakpoints.phone.width) {\r\n\t\t\tthis.state.rangeSlider.dataset.max = this.state.slidesCount;\r\n\t\t\tthis.state.center = false;\r\n\t\t}\r\n\t\tthis.setRangeSliderThumbWidth();\r\n\t},\r\n\r\n\tgetLastSlide() {\r\n\t\tif (this.state.deviceWidth >= this.state.breakpoints.largeDesktop.width) {\r\n\t\t\tthis.state.lastSlideInBreakpoint = (this.state.slidesCount - this.state.breakpoints.largeDesktop.slidesInFocus) + this.state.slidesToMove;\r\n\t\t} else if (this.state.deviceWidth >= this.state.breakpoints.desktop.width) {\r\n\t\t\tthis.state.lastSlideInBreakpoint = (this.state.slidesCount - this.state.breakpoints.desktop.slidesInFocus) + this.state.slidesToMove;\r\n\t\t} else if (this.state.deviceWidth >= this.state.breakpoints.tablet.width) {\r\n\t\t\tthis.state.lastSlideInBreakpoint = (this.state.slidesCount - this.state.breakpoints.tablet.slidesInFocus) + this.state.slidesToMove;\r\n\t\t} else if (this.state.deviceWidth <= this.state.breakpoints.phone.width) {\r\n\t\t\tthis.state.lastSlideInBreakpoint = this.state.slidesCount;\r\n\t\t}\r\n\t},\r\n\r\n\tsetIndexAndSlide() {\r\n\t\tthis.getLastSlide();\r\n\t\tconst slideToIndex = this.state.rangeSlider.dataset.value;\r\n\t\tthis.state.currentIndex = parseInt(slideToIndex, 10);\r\n\r\n\t\tconst lastSlideInBreakPoint = this.state.lastSlideInBreakpoint;\r\n\t\tif (lastSlideInBreakPoint !== this.state.currentIndex) { // not last slide\r\n\t\t\tconst pos = (this.state.currentIndex * 100) - 100;\r\n\t\t\tthis.state.carousel.style.transform = `translateX(-${pos}%)`;\r\n\t\t} else { // last slide\r\n\t\t\tconst carouselWidth = document.querySelector('.download-grid__carousel__hammerjs').offsetWidth;\r\n\t\t\tconst slideWidth = document.querySelector('.download-grid__carousel__slides__slide').offsetWidth;\r\n\t\t\tconst remainingOffset = carouselWidth - slideWidth; // calculate remaining offset for last slide to snap right\r\n\t\t\tconst slidesWidth = document.querySelector('.download-grid__carousel__slides').offsetWidth;\r\n\r\n\t\t\tlet pos;\r\n\r\n\t\t\tif (this.state.deviceWidth >= this.state.breakpoints.largeDesktop.width) {\r\n\t\t\t\tpos = `${-((this.state.currentIndex * slidesWidth) - slidesWidth)}`;\r\n\t\t\t} else if (this.state.deviceWidth >= this.state.breakpoints.desktop.width) {\r\n\t\t\t\tpos = `${-((this.state.currentIndex * slidesWidth) - slidesWidth)}`;\r\n\t\t\t} else if (this.state.deviceWidth >= this.state.breakpoints.tablet.width) {\r\n\t\t\t\tpos = `${-((this.state.currentIndex * slidesWidth) - slidesWidth)}`;\r\n\t\t\t} else if (this.state.deviceWidth <= this.state.breakpoints.phone.width) {\r\n\t\t\t\tpos = `${(-((this.state.currentIndex * slidesWidth) - slidesWidth) + remainingOffset) - this.state.breakpoints.phone.controlsMargin}`;\r\n\t\t\t}\r\n\t\t\tthis.state.carousel.style.transform = `translateX(${pos}px)`;\r\n\t\t}\r\n\t},\r\n\r\n\tsetRangeSliderThumbWidth() {\r\n\t\tconst rangeSlider = this.el.querySelector('.download-grid__carousel__controls__range-slider');\r\n\t\tconst rangeSliderThumb = rangeSlider.querySelector('.download-grid__carousel__controls__range-slider__thumb');\r\n\t\trangeSliderThumb.style.width = `${rangeSlider.offsetWidth / rangeSlider.dataset.max}px`;\r\n\t},\r\n\tonRangeSliderClick(e) {\r\n\t\te.stopPropagation();\r\n\r\n\t\tconst newEventObj = {\r\n\t\t\tcenter: {\r\n\t\t\t\tx: e.pageX,\r\n\t\t\t},\r\n\t\t};\r\n\r\n\t\tthis.onRangeSliderPan(newEventObj);\r\n\t},\r\n\tonRangeSliderPan(e) {\r\n\t\tconst rangeSliderWidth = this.state.rangeSlider.offsetWidth;\r\n\t\tconst rangeSliderThumb = this.state.rangeSlider.querySelector('.download-grid__carousel__controls__range-slider__thumb');\r\n\t\tconst rangeSliderThumbWidth = rangeSliderThumb.offsetWidth;\r\n\t\tconst currentThumbPos = e.center.x - this.state.rangeSlider.offsetLeft;\r\n\r\n\t\tif (currentThumbPos >= 0 && currentThumbPos <= (rangeSliderWidth - rangeSliderThumbWidth)) {\r\n\t\t\tconst step = Math.round(rangeSliderWidth / Math.abs(currentThumbPos - rangeSliderWidth));\r\n\t\t\tthis.setRangeSliderValue(step);\r\n\t\t} else if (currentThumbPos < 0) {\r\n\t\t\tthis.setRangeSliderValue(this.state.rangeSlider.dataset.min);\r\n\t\t} else if (currentThumbPos >= (rangeSliderWidth - rangeSliderThumbWidth)) {\r\n\t\t\tthis.setRangeSliderValue(this.state.rangeSlider.dataset.max);\r\n\t\t}\r\n\t},\r\n\tsetRangeSliderValue(value) {\r\n\t\tthis.state.rangeSlider.dataset.value = value;\r\n\t\tthis.onRangeSliderValueChange();\r\n\t\tthis.setIndexAndSlide();\r\n\t},\r\n\trangeSliderStepUp() {\r\n\t\tif (this.state.rangeSlider.dataset.value < this.state.rangeSlider.dataset.max) {\r\n\t\t\tconst newValue = parseInt(this.state.rangeSlider.dataset.value) + 1;\r\n\t\t\tthis.setRangeSliderValue(newValue);\r\n\t\t}\r\n\t},\r\n\trangeSliderStepDown() {\r\n\t\tif (this.state.rangeSlider.dataset.value > this.state.rangeSlider.dataset.min) {\r\n\t\t\tconst newValue = parseInt(this.state.rangeSlider.dataset.value) - 1;\r\n\t\t\tthis.setRangeSliderValue(newValue);\r\n\t\t}\r\n\t},\r\n\r\n\tonRangeSliderValueChange() {\r\n\t\tconst rangeSlider = this.el.querySelector('.download-grid__carousel__controls__range-slider');\r\n\t\tconst rangeSliderThumb = rangeSlider.querySelector('.download-grid__carousel__controls__range-slider__thumb');\r\n\t\trangeSliderThumb.style.left = `${(100 / rangeSlider.dataset.max) * (rangeSlider.dataset.value - 1)}%`;\r\n\t},\r\n\r\n\trangeSliderIncrement() {\r\n\t\tif (this.state.rangeSlider.dataset.value < this.state.slidesCount) {\r\n\t\t\tthis.rangeSliderStepUp();\r\n\t\t}\r\n\t},\r\n\r\n\trangeSliderDecrement() {\r\n\t\tif (this.state.rangeSlider.dataset.value > 1) {\r\n\t\t\tthis.rangeSliderStepDown();\r\n\t\t}\r\n\t},\r\n\r\n\tonArrowBtnClick(e) {\r\n\t\tconst direction = e.delegateTarget.dataset.controlsDirection;\r\n\t\tif (direction === 'prev') {\r\n\t\t\tthis.rangeSliderDecrement();\r\n\t\t}\r\n\t\tif (direction === 'next') {\r\n\t\t\tthis.rangeSliderIncrement();\r\n\t\t}\r\n\t\tthis.setIndexAndSlide();\r\n\t},\r\n\r\n\tonCarouselPan(e) {\r\n\t\tif (e.distance > 50 && this.state.canSwipe) {\r\n\t\t\tthis.state.canSwipe = false;\r\n\r\n\t\t\tif (e.type === 'panleft') {\r\n\t\t\t\tthis.rangeSliderIncrement();\r\n\t\t\t}\r\n\r\n\t\t\tif (e.type === 'panright') {\r\n\t\t\t\tthis.rangeSliderDecrement();\r\n\t\t\t}\r\n\r\n\t\t\tthis.setIndexAndSlide();\r\n\t\t}\r\n\r\n\t\tif (e.type === 'panend') {\r\n\t\t\tthis.state.canSwipe = true;\r\n\t\t}\r\n\t},\r\n\r\n\tonResize() {\r\n\t\t// reset slider state\r\n\t\tthis.state.rangeSlider.dataset.value = 1;\r\n\t\tthis.setState();\r\n\t\tthis.configureRangeSlider();\r\n\t\tthis.setRangeSliderValue(this.state.rangeSlider.dataset.value);\r\n\t\tif(this.state.center) this.centerSlides(); \r\n\t},\r\n});\r\n\r\nexport default View;\r\n","/**\r\n * form-validation\r\n *\r\n * @author Rasmus Seindal \r\n */\r\n\r\nimport ServerView from '../../framework/server-side-view';\r\n\r\nconst View = ServerView.extend({\r\n\tel: 'form.js-form-validation',\r\n\r\n\tevents: {\r\n\t\tsubmit: 'onSubmit',\r\n\t\t'keyup input[type=\"email\"]': 'onInputChange',\r\n\t\t'change input[type=\"checkbox\"]': 'onInputChange',\r\n\t},\r\n\r\n\tonRender() {\r\n\t\tthis.el.classList.add('js-form-invalid');\r\n\t\tthis.el.querySelector('.js-form-submit').disabled = true;\r\n\r\n\t\t// @TODO: Remove when HubSpot forms has been implemented\r\n\t},\r\n\r\n\tonSubmit(e) {\r\n\t\te.preventDefault();\r\n\t},\r\n\r\n\tonInputChange(e) {\r\n\t\tconst input = e.target;\r\n\t\tconst form = this.el;\r\n\t\tconst btnSubmit = this.el.querySelector('.js-form-submit');\r\n\r\n\t\tif (input.required) {\r\n\t\t\tif (form.checkValidity()) {\r\n\t\t\t\tbtnSubmit.disabled = false;\r\n\t\t\t\tform.classList.add('js-form-valid');\r\n\t\t\t\tform.classList.remove('js-form-invalid');\r\n\t\t\t} else {\r\n\t\t\t\tbtnSubmit.disabled = true;\r\n\t\t\t\tform.classList.add('js-form-invalid');\r\n\t\t\t\tform.classList.remove('js-form-valid');\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n});\r\n\r\nexport default View;\r\n","/**\r\n * Google Tag Manager\r\n *\r\n * @author Rasmus Seindal \r\n */\r\n\r\nimport ServerView from '../../framework/server-side-view';\r\n\r\nconst View = ServerView.extend({\r\n\tel: 'body .js-gtm-data',\r\n\r\n\tevents: {\r\n\t\t'click': 'onClick',\r\n\t},\r\n\r\n\r\n\tonClick(e) {\r\n\t\tthis.addToDataLayer(e);\r\n\t},\r\n\r\n\taddToDataLayer(e) {\r\n\t\tif (e.currentTarget.dataset.jsGtmData) {\r\n\t\t\tconst { event, eventaction, eventcategory, eventlabel } = JSON.parse(e.currentTarget.dataset.jsGtmData);\r\n\t\t\tdataLayer.push({\r\n\t\t\t\tevent,\r\n\t\t\t\teventaction,\r\n\t\t\t\teventcategory,\r\n\t\t\t\teventlabel,\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (e.currentTarget.dataset.jsGtmDataSubmit) {\r\n\t\t\tconst { event, eventaction, eventcategory, eventlabel } = JSON.parse(e.currentTarget.dataset.jsGtmDataSubmit);\r\n\t\t\twindow.gtmDataSubmit = { event, eventaction, eventcategory, eventlabel };\r\n\t\t}\r\n\r\n\t\tif (e.currentTarget.dataset.jsGtmDataSubmitMarketing) {\r\n\t\t\tconst { event, eventaction, eventcategory, eventlabel } = JSON.parse(e.currentTarget.dataset.jsGtmDataSubmitMarketing);\r\n\t\t\twindow.gtmDataSubmitMarketing = { event, eventaction, eventcategory, eventlabel };\r\n\t\t}\r\n\t},\r\n});\r\n\r\nexport default View;\r\n","/**\r\n * Hero\r\n *\r\n * @author Rasmus Seindal \r\n */\r\n\r\n\r\nimport ServerView from '../../framework/server-side-view';\r\n\r\nconst View = ServerView.extend({\r\n\tel: '.hero',\r\n\r\n\tevents: {\r\n\t\t'click .hs-submit .hs-button': 'onFormSubmit',\r\n\t\t'click label.hero__signup-area__btn': 'onLabelClick',\r\n\t\t'change .hs-marketing_material_consent input.hs-input': 'onCheckboxValueChange',\r\n\t},\r\n\r\n\tthankYouModal: {},\r\n\tonLabelClick(e) {\r\n\t\tif (window.innerWidth >= 768) {\r\n\t\t\te.preventDefault();\r\n\t\t}\r\n\t},\r\n\r\n\tonCheckboxValueChange(e) {\r\n\t\twindow.gtmDataMarketingCheckboxChecked = e.delegateTarget.checked;\r\n\t},\r\n\r\n\tonRender() {\r\n\t\tthis.populateModal();\r\n\t},\r\n\r\n\tpopulateModal() {\r\n\t\tconst mobileSignupArea = this.el.querySelector('.hero__signup-area__signup');\r\n\r\n\t\t//if there's a link, there will be no hubspot form, so it won't try to attach it\r\n\t\tif(mobileSignupArea !== null){\r\n\t\t\tconst data = JSON.parse(mobileSignupArea.dataset.hubspotdata);\r\n\t\t\t// inject hubspot form\r\n\t\t\tconst hubSpotScript = document.createElement('script');\r\n\t\t\tconst hubSpotForm = `hbspt.forms.create({\r\n\t\t\t\tportalId: \"${data.portalId}\",\r\n\t\t\t\tformId: \"${data.formId}\"\r\n\t\t\t})`;\r\n\r\n\t\t\thubSpotScript.appendChild(document.createTextNode(hubSpotForm));\r\n\t\t\tmobileSignupArea.appendChild(hubSpotScript);\r\n\t\t\tthis.thankYouModal = data.thankYouModal;\r\n\t\t}\r\n\t},\r\n\r\n\tonFormSubmit() {\r\n\t\twindow.thankYouModal = this.thankYouModal;\r\n\t},\r\n});\r\n\r\nexport default View;\r\n","/**\r\n * Hotspot Image\r\n *\r\n * @author Rasmus Seindal \r\n */\r\n\r\nimport ServerView from '../../framework/server-side-view';\r\n\r\nconst View = ServerView.extend({\r\n\tel: '.hotspot-image',\r\n\r\n\tevents: {\r\n\t\t'click .hotspot-image__container__hotspots__spot__btn': 'onSpotClick',\r\n\t\tclick: 'setSpotInactive',\r\n\t},\r\n\r\n\tinitialize() {\r\n\t\twindow.addEventListener('resize', this.onResize.bind(this));\r\n\t},\r\n\r\n\tsetSpotActive(element) {\r\n\t\telement.classList.add('active');\r\n\t\tthis.setTooltipContentMobile(element);\r\n\t\tif (window.innerWidth >= 768) {\r\n\t\t\tthis.setDesktopTooltipPos(element, this);\r\n\t\t}\r\n\t},\r\n\r\n\tsetSpotInactive() {\r\n\t\tconst activeSpot = this.el.querySelector('.hotspot-image__container__hotspots__spot.active');\r\n\t\tif (activeSpot) {\r\n\t\t\tactiveSpot.classList.remove('active');\r\n\t\t\tthis.removeTooltipContentMobile();\r\n\t\t\tthis.el.style.paddingBottom = 0;\r\n\t\t}\r\n\t},\r\n\r\n\tonSpotClick(e) {\r\n\t\te.stopImmediatePropagation();\r\n\r\n\t\tconst spot = e.delegateTarget.parentNode;\r\n\r\n\t\tif (spot.classList.contains('active')) {\r\n\t\t\tthis.setSpotInactive();\r\n\t\t} else {\r\n\t\t\tthis.setSpotInactive();\r\n\t\t\tthis.setSpotActive(spot);\r\n\t\t}\r\n\t},\r\n\r\n\tremoveTooltipContentMobile() {\r\n\t\tconst contentMobile = this.el.querySelector('.hotspot-image__text-content-mobile');\r\n\t\tcontentMobile.classList.remove('tooltip-visible');\r\n\t\tconst tooltipContainer = this.el.querySelector('.hotspot-image__text-content-mobile__tooltip');\r\n\t\ttooltipContainer.innerHTML = '';\r\n\t},\r\n\r\n\tsetTooltipContentMobile(element) {\r\n\t\tconst contentMobile = this.el.querySelector('.hotspot-image__text-content-mobile');\r\n\t\tcontentMobile.classList.add('tooltip-visible');\r\n\t\tconst tooltipContainer = this.el.querySelector('.hotspot-image__text-content-mobile__tooltip');\r\n\r\n\t\tconst contentToSet = {\r\n\t\t\tlabel: element.querySelector('.js-hotspot-spot-label').cloneNode(true),\r\n\t\t\ttext: element.querySelector('.js-hotspot-spot-text').cloneNode(true),\r\n\t\t};\r\n\t\ttooltipContainer.appendChild(contentToSet.label);\r\n\t\ttooltipContainer.appendChild(contentToSet.text);\r\n\t},\r\n\r\n\tsetDesktopTooltipPos(element, $this) {\r\n\t\tconst hotspotContainer = this.el.querySelector('.hotspot-image__container__hotspots');\r\n\t\tconst spot = element.closest('.active');\r\n\t\tconst btn = element.querySelector('.hotspot-image__container__hotspots__spot__btn');\r\n\t\tconst tooltip = element.querySelector('.hotspot-image__container__hotspots__spot__tooltip-desktop');\r\n\t\tconst tooltipArrow = tooltip.querySelector('.js-hotspot-spot-arrow');\r\n\t\tconst leftWindowSpace = window.innerWidth * 0.1;\r\n\r\n\t\tconst parentTranslateX = 35;\r\n\t\tconst halfRemainingSpace = (window.innerWidth - tooltip.offsetWidth) / 2;\r\n\r\n\t\tconst parent = {\r\n\t\t\toffsetTop: spot.offsetTop,\r\n\t\t\toffsetLeft: spot.offsetLeft,\r\n\t\t};\r\n\r\n\t\tconst tooltipBottom = hotspotContainer.offsetHeight - (parent.offsetTop + tooltip.offsetHeight + btn.offsetHeight + 40);\r\n\t\tif (tooltipBottom < 0) {\r\n\t\t\t$this.el.style.paddingBottom = `${Math.abs(tooltipBottom) + 50}px`;\r\n\t\t}\r\n\t\tif ((spot.offsetLeft - (spot.offsetWidth / 2)) <= leftWindowSpace) { // if spot has a lower x axis value than tooltip box\r\n\t\t\ttooltip.style.left = 0;\r\n\t\t} else if (spot.offsetLeft > (leftWindowSpace + tooltip.offsetWidth)) { // if spot has a greater x axis value than tooltip box\r\n\t\t\tconst missingSpace = spot.offsetLeft - (leftWindowSpace + tooltip.offsetWidth);\r\n\t\t\ttooltip.style.left = `${-(parent.offsetLeft - parentTranslateX) + halfRemainingSpace + missingSpace + (btn.offsetWidth / 2)}px`;\r\n\t\t} else { // if spot x axis value is in between the width of the tooltip box\r\n\t\t\ttooltip.style.left = `${-(parent.offsetLeft - parentTranslateX) + halfRemainingSpace}px`;\r\n\t\t}\r\n\r\n\t\tconst spotOffsetFromTooltipLeft = Math.abs(tooltip.offsetLeft) + (tooltipArrow.offsetWidth / 2) + 5;\r\n\r\n\t\ttooltipArrow.style.left = `${spotOffsetFromTooltipLeft}px`;\r\n\t},\r\n\r\n\tonResize() {\r\n\t\tconst activeSpot = this.el.querySelector('.hotspot-image__container__hotspots__spot.active');\r\n\t\tif (window.innerWidth >= 768 && activeSpot) {\r\n\t\t\tthis.setDesktopTooltipPos(activeSpot, this);\r\n\t\t} else {\r\n\t\t\tthis.el.style.paddingBottom = 0;\r\n\t\t}\r\n\t},\r\n});\r\n\r\nexport default View;\r\n","/**\r\n * Hubspot\r\n *\r\n * @author Rasmus Seindal \r\n */\r\n\r\nimport ServerView from '../../framework/server-side-view';\r\n\r\nconst View = ServerView.extend({\r\n\tel: '.js-hubspot-modal-btn',\r\n\r\n\tevents: {\r\n\t\tclick: 'onClickOpenModal',\r\n\t},\r\n\r\n\topenModal(type, hubSpot) {\r\n\t\tApp.modal.create({\r\n\t\t\ttype,\r\n\t\t\tmodel: {\r\n\t\t\t\thubSpot,\r\n\t\t\t},\r\n\t\t});\r\n\t},\r\n\r\n\tonClickOpenModal() {\r\n\t\tif (this.el.classList.contains('js-hubspot-desktop-only') && window.innerWidth <= 768) return;\r\n\t\tconst hubSpotData = JSON.parse(this.el.dataset.hubspotdata);\r\n\r\n\t\tthis.openModal('generic-signup-modal', hubSpotData);\r\n\t},\r\n});\r\n\r\nexport default View;\r\n","/**\r\n * Interactive Hero\r\n *\r\n * @author Rasmus Seindal \r\n */\r\n\r\nimport ServerView from '../../framework/server-side-view';\r\n\r\nconst View = ServerView.extend({\r\n\tel: '.interactive-hero',\r\n\r\n state: {},\r\n\r\n ima: false,\r\n images: false,\r\n\r\n\tevents: {\r\n\t\t'input .interactive-hero__content-area__controls__range-slider': 'onRangeSliderValueChange',\r\n\t\t'change .interactive-hero__content-area__controls__range-slider': 'onRangeSliderValueChangeIE',\r\n\t},\r\n\r\n\tinitialize() {\r\n window.addEventListener('resize', this.onResize.bind(this));\r\n // is it images?\r\n this.ima = this.el.classList.contains('image-area');\r\n this.images = this.el.querySelectorAll('img.interactive-hero__video-area__video-main');\r\n\t},\r\n\r\n onRender() {\r\n if (this.ima) {\r\n this.setState();\r\n this.configureRangeSlider();\r\n //hide controls if it's only one image\r\n if (this.images.length === 1) {\r\n this.el.querySelector(\".interactive-hero__content-area__titles\").style.width = 'auto';\r\n this.el.querySelector(\".interactive-hero__content-area.content-area-mobile \").style.display = 'none';\r\n this.el.querySelector(\".interactive-hero__content-area__controls\").style.display = 'none';\r\n }\r\n } else {\r\n const vid = this.el.querySelector('.interactive-hero__video-area__video-main');\r\n vid.onloadeddata = () => {\r\n this.setState();\r\n this.configureRangeSlider();\r\n vid.currentTime = parseInt(this.state.rangeSlider.min);\r\n };\r\n\r\n vid.ontimeupdate = () => {\r\n if (vid.currentTime >= this.state.pausePlayingAt) {\r\n vid.pause();\r\n }\r\n };\r\n }\r\n\t},\r\n\r\n\tgetSlider() {\r\n\t\tconst sliders = this.el.querySelectorAll('.interactive-hero__content-area__controls__range-slider');\r\n\t\treturn (window.innerWidth <= 1199) ? sliders[1] : sliders[0];\r\n\t},\r\n\r\n\tsetState() {\r\n\t\tthis.state = {\r\n\t\t\trangeSlider: this.getSlider(),\r\n\t\t\tvideoMain: {\r\n\t\t\t\telement: this.el.querySelector('.interactive-hero__video-area__video-main'),\r\n\t\t\t\tduration: this.el.querySelector('.interactive-hero__video-area__video-main').duration,\r\n\t\t\t\tpulseElement: this.el.querySelector('.interactive-hero__video-area__pulse'),\r\n\t\t\t},\r\n steps: this.ima ? this.images.length : 3,\r\n pausePlayingAt: 0,\r\n\t\t};\r\n\t},\r\n\r\n configureRangeSlider() {\r\n if (this.ima) {\r\n this.state.rangeSlider.max = this.images.length - 1;\r\n this.state.rangeSlider.step = 1;\r\n this.state.rangeSlider.min = 0;\r\n } else {\r\n this.state.rangeSlider.max = this.state.videoMain.duration.toFixed(2);\r\n this.state.rangeSlider.step = Math.floor((this.state.videoMain.duration / 3) * 100) / 100;\r\n this.state.rangeSlider.min = this.state.rangeSlider.step;\r\n }\r\n\t\tthis.state.rangeSlider.value = this.state.rangeSlider.min;\r\n\t\tthis.state.rangeSlider.disabled = false;\r\n\t},\r\n\r\n\tonRangeSliderValueChange() {\r\n\t\tthis.handleRangeSliderValueChange();\r\n\t},\r\n\r\n\tonRangeSliderValueChangeIE() {\r\n\t\tconst ua = navigator.userAgent;\r\n\t\tif (ua.indexOf('MSIE ') > -1 || ua.indexOf('Trident/') > -1) {\r\n\t\t\tthis.handleRangeSliderValueChange();\r\n\t\t}\r\n\t},\r\n\thandleRangeSliderValueChange() {\r\n const value = parseInt(this.state.rangeSlider.value);\r\n\r\n if (this.ima) {\r\n for (let i = 0; i < this.images.length; i++) {\r\n this.images[i].style.opacity = (i == value) ? 1 : 0;\r\n }\r\n } else {\r\n if (value >= this.state.pausePlayingAt) {\r\n this.state.pausePlayingAt = value;\r\n this.state.videoMain.pulseElement.style.display = 'none';\r\n this.state.videoMain.element.play();\r\n } else {\r\n this.state.pausePlayingAt = value;\r\n this.state.videoMain.element.currentTime = value;\r\n }\r\n }\r\n\r\n\t\tif (this.el.dataset.jsGtmData) {\r\n\t\t\tconst { event, eventaction, eventcategory, eventlabel } = JSON.parse(this.el.dataset.jsGtmData);\r\n\r\n\t\t\tdataLayer.push({\r\n\t\t\t\tevent,\r\n\t\t\t\teventaction,\r\n\t\t\t\teventcategory,\r\n\t\t\t\teventlabel,\r\n\t\t\t});\r\n\t\t}\r\n\t},\r\n\r\n\tonResize() {\r\n\t\tconst vid = this.el.querySelector('.interactive-hero__video-area__video-main');\r\n\t\tthis.setState();\r\n\t\tthis.configureRangeSlider();\r\n\t\tif(!this.ima) vid.currentTime = parseInt(this.state.rangeSlider.min);\r\n\t},\r\n});\r\n\r\nexport default View;\r\n","/**\r\n * Interactive Hero\r\n *\r\n * @author Rasmus Seindal \r\n */\r\n\r\nimport ServerView from '../../framework/server-side-view';\r\n\r\nconst View = ServerView.extend({\r\n el: \".m10-packages\",\r\n modal: document.getElementById(\"modal-frame\"),\r\n form: document.getElementById(\"package-form\"),\r\n thankyou: document.getElementById(\"package-thankyou\"),\r\n M10PackagesId: 0,\r\n PackageId: 0,\r\n Language: 0,\r\n title: 0,\r\n\r\n events: {\r\n 'click .open-click': \"openLb\",\r\n 'click .send-email': \"emailForm\",\r\n 'click #dropdownOpen': \"onClickEmailDropdown\"\r\n },\r\n\r\n initialize() {\r\n //console.log(\" initialize m10-packages\", this);\r\n\r\n // If a modal can be found, find the content element inside\r\n if (this.modal) this.content = this.modal.getElementsByClassName(\"modal__content\")[0];\r\n },\r\n\r\n\r\n\r\n onRender() {\r\n //console.log(\"onRender m10-packages\");\r\n },\r\n\r\n openLb(e) {\r\n var x = document.getElementById(e.target.dataset.idp);\r\n var fromimage = document.getElementById(e.delegateTarget.dataset.idp);\r\n\r\n if (x === null) {\r\n x = fromimage;\r\n }\r\n this.content.innerHTML = x.innerHTML;\r\n\r\n //Block body scroll when modal is opened\r\n const scrollY = document.documentElement.style.getPropertyValue('--scroll-y');\r\n const body = document.body;\r\n body.style.position = 'fixed';\r\n body.style.top = `-${scrollY}`;\r\n\r\n //track\r\n //go to product page link\r\n var vd = this.content.querySelectorAll('.product-category__link a');\r\n\r\n if (vd.length) {\r\n for (var i = 0; i < vd.length; ++i) {\r\n vd[i].addEventListener('click', function (e) {\r\n dataLayer.push({\r\n \"event\": \"interactionevent\",\r\n \"eventaction\": \"Click\",\r\n \"eventcategory\": \"interaction\",\r\n \"eventlabel\": \"Product page\"\r\n });\r\n }, false);\r\n }\r\n }\r\n \r\n //CTAs\r\n var ct = this.content.querySelectorAll('.product-details__top-area__links a');\r\n var receiveEmail = this.content.querySelector('.dropdown-open');\r\n receiveEmail.addEventListener(\"click\", function (event) {\r\n event.preventDefault()\r\n });\r\n if (ct.length) {\r\n this.onClickEmailDropdown(ct[0]);\r\n for (var i = 0; i < ct.length; ++i) {\r\n \r\n ct[i].addEventListener('click', function (e) {\r\n \r\n dataLayer.push({\r\n \"event\": \"interactionevent\",\r\n \"eventaction\": \"Click\",\r\n \"eventcategory\": \"interaction\",\r\n \"eventlabel\": this.innerText\r\n });\r\n }, false);\r\n }\r\n }\r\n },\r\n emailForm(e) {\r\n //open modal\r\n this.content.innerHTML = this.form.innerHTML.replace(/xxxPackage/g, \"pkg\");\r\n \r\n //set vars\r\n this.M10PackagesId = e.delegateTarget.dataset.m10id;\r\n this.PackageId = e.delegateTarget.dataset.idp;\r\n this.Language = e.delegateTarget.dataset.language;\r\n this.title = e.delegateTarget.dataset.title;\r\n //attach send email event\r\n var send = this.content.querySelector(\".send-email-button\");\r\n //console.log('send: >', send)\r\n send.addEventListener(\"click\", this.sendEmail.bind(null, this, send));\r\n //track\r\n dataLayer.push({\r\n \"event\": \"interactionevent\",\r\n \"eventaction\": \"Click\",\r\n \"eventcategory\": \"interaction\",\r\n \"eventlabel\": \"Send via e-mail\"\r\n });\r\n },\r\n validation(t, v, type) {\r\n let vv = false;\r\n\r\n switch (type) {\r\n case \"name\":\r\n vv = /[a-zA-Z\\xC0-\\uFFFF '-]{2,}/i.test(v);\r\n t.modal.querySelector(\".pkg_fullname .pkg-error-msgs\").style.display = !vv ? \"block\" : \"\";\r\n break;\r\n case \"email\":\r\n vv = /^[\\w\\.-]+@[\\w\\.-]+\\.\\w{2,10}$/i.test(v);\r\n t.modal.querySelector(\".pkg_email .pkg-error-msgs\").style.display = !vv ? \"block\" : \"\";\r\n break;\r\n case \"privacy\":\r\n vv = v;\r\n t.modal.querySelector(\".pkg_privacy_policy_ .pkg-error-msgs\").style.display = !vv ? \"block\" : \"\";\r\n break;\r\n }\r\n\r\n return vv;\r\n },\r\n onClickEmailDropdown(el) {\r\n var drop = this.content.querySelector('#dropdownContainer');\r\n var formContainer = this.content.querySelector('.dropdownItem');\r\n formContainer.innerHTML = this.form.innerHTML.replace(/xxxPackage/g, \"pkg\");\r\n var dropCont = this.content.querySelector('#dropdownCont');\r\n var send = this.content.querySelector(\".send-email-button\");\r\n var sendEmail = this.sendEmail;\r\n var t = this;\r\n\r\n el.addEventListener('click', function (e) {\r\n e.preventDefault(e);\r\n t.M10PackagesId = e.target.dataset.m10id;\r\n t.PackageId = e.target.dataset.idp;\r\n t.Language = e.target.dataset.language;\r\n t.title = e.target.dataset.title;\r\n\r\n //attach send email event\r\n send.addEventListener(\"click\", sendEmail.bind(null, t, send));\r\n\r\n dataLayer.push({\r\n \"event\": \"interactionevent\",\r\n \"eventaction\": \"Click\",\r\n \"eventcategory\": \"interaction\",\r\n \"eventlabel\": \"Send via e-mail\"\r\n });\r\n if (this.className === 'open') {\r\n this.className = '';\r\n drop.removeAttribute('style');\r\n } else {\r\n this.className = 'open';\r\n drop.style.height = dropCont.offsetHeight + \"px\";\r\n\r\n }\r\n })\r\n\r\n },\r\n sendEmail(t, b) {\r\n var drop = t.modal.querySelector('#dropdownContainer');\r\n var dropCont = t.modal.querySelector('#dropdownCont');\r\n var rName = t.modal.querySelector(\"#fullname-pkg\").value;\r\n var rEmail = t.modal.querySelector(\"#email-pkg\").value;\r\n var privacy = t.modal.querySelector(\"#privacy_policy-pkg\").checked ? true : false;\r\n var consent = t.modal.querySelector(\"#marketing_material_consent-pkg\").checked ? true : false;\r\n\r\n //validation\r\n let nameV = t.validation(t, rName, \"name\");\r\n let emailV = t.validation(t, rEmail, \"email\");\r\n let privacyV = t.validation(t, privacy, \"privacy\");\r\n\r\n if (!nameV || !emailV || !privacyV) {\r\n drop.style.height = dropCont.offsetHeight + \"px\";\r\n return;\r\n }\r\n //\r\n\r\n var customerInfo = {\r\n Name: rName,\r\n Email: rEmail,\r\n HasCheckedPrivacy: privacy,\r\n HasCheckedMarketing: consent, // not mandatory\r\n PageUrl: window.location.href,\r\n PageName: window.location.pathname.replace(\"/\", \"\")\r\n };\r\n\r\n var lpfRequestPdf = {\r\n M10PackagesId: t.M10PackagesId,\r\n PackageId: t.PackageId,\r\n Language: t.Language\r\n }\r\n\r\n var requestSendEmail = {\r\n CustomerInfo: customerInfo,\r\n RequestPdf: lpfRequestPdf\r\n }\r\n\r\n //disable button when sending form\r\n b.classList.add(\"disabled\");\r\n\r\n var xhr = new XMLHttpRequest();\r\n var url = \"/api/sitecore/LandingPage/LpfSendEmail\";\r\n xhr.open(\"POST\", url, true);\r\n xhr.setRequestHeader(\"Content-Type\", \"application/json\");\r\n xhr.onreadystatechange = function () {\r\n if (xhr.readyState === 4 && xhr.status === 200) {\r\n //thank you message\r\n t.thanks();\r\n //track\r\n dataLayer.push({\r\n \"event\": \"interactionevent\",\r\n \"eventaction\": \"Submitted email\",\r\n \"eventcategory\": \"Hubspot submission\",\r\n \"eventlabel\": \"Inspiration \" + t.title\r\n });\r\n }\r\n };\r\n var data = JSON.stringify(requestSendEmail);\r\n xhr.send(data);\r\n\r\n },\r\n\r\n thanks() {\r\n //load thanks message\r\n var formContainer = this.content.querySelector('.dropdownItem');\r\n formContainer.innerHTML = this.thankyou.innerHTML;\r\n //open modal\r\n //this.content.innerHTML = this.thankyou.innerHTML;\r\n }\r\n});\r\n\r\nexport default View;\r\n","/**\r\n * Modal View\r\n * Used as the default base modal view in modal.js\r\n *\r\n * @author dkvistgaard \r\n */\r\n\r\nimport Handlebars from 'handlebars';\r\n\r\n// Framework\r\nimport BackboneView from '../../framework/view';\r\n\r\nconst View = BackboneView.extend({\r\n\tclassName() {\r\n\t\treturn this.options && this.options.type ? `modal__body is-modal--${this.options.type}` : 'modal__body';\r\n\t},\r\n\r\n\tevents: {\r\n\t\t'click .products__card__details button': 'onViewDetailsClick',\r\n\t\t'change .hs-marketing_material_consent input': 'onCheckboxValueChange',\r\n\t},\r\n\r\n\tonCheckboxValueChange(e) {\r\n\t\twindow.gtmDataMarketingCheckboxChecked = e.delegateTarget.checked;\r\n\t},\r\n\r\n\tgetTemplate() {\r\n\t\tlet templateElement;\r\n\t\tlet template = '';\r\n\r\n\t\tswitch (this.options.type) {\r\n\t\t\tcase 'generic-signup-modal':\r\n\t\t\t\ttemplateElement = 'modal-signup';\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'generic-signup-complete':\r\n\t\t\t\ttemplateElement = 'modal-signup-complete';\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'generic-productdetails-modal':\r\n\t\t\t\ttemplateElement = 'modal-productdetails';\r\n\t\t\t\tthis.el.classList.add('overlay');\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\ttemplateElement = '';\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tif (templateElement) {\r\n\t\t\tconst element = document.getElementById(templateElement);\r\n\t\t\ttemplate = element.innerText;\r\n\t\t}\r\n\r\n\t\treturn Handlebars.compile(template);\r\n\t},\r\n\r\n\trender() {\r\n\t\tthis.el.innerHTML = this.getTemplate()(this.model.toJSON());\r\n\r\n\t\tsetTimeout(() => {\r\n\t\t\tthis.el.classList.add('modal--show');\r\n\t\t}, 0);\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\tonViewDetailsClick(e) {\r\n\t\tconst productId = {\r\n\t\t\tid: e.delegateTarget.dataset.productId,\r\n\t\t};\r\n\t\tthis.api.get('/api/products', productId, this.openDetailsModal.bind(this), false);\r\n\t},\r\n\r\n\topenDetailsModal(productData) {\r\n\t\tconst productDetails = JSON.parse(productData.response);\r\n\r\n\t\tApp.modal.create({\r\n\t\t\ttype: 'generic-productdetails-modal',\r\n\t\t\tmodel: {\r\n\t\t\t\tproductDetails,\r\n\t\t\t},\r\n\t\t});\r\n\t},\r\n\r\n\tapi: {\r\n\t\tget(baseUrl, params, callback, emptyContainer) {\r\n\t\t\tconst queryString = Object.keys(params).map((key) => {\r\n\t\t\t\treturn `${key}=${params[key]}`;\r\n\t\t\t}).join('&');\r\n\r\n\t\t\tconst url = encodeURI(`${baseUrl}?${queryString}`);\r\n\r\n\t\t\tconst xhttp = new XMLHttpRequest();\r\n\t\t\txhttp.onreadystatechange = function onreadystatechange() {\r\n\t\t\t\tif (this.readyState === 4 && this.status === 200) {\r\n\t\t\t\t\tcallback(this, emptyContainer);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\txhttp.open('GET', url, true);\r\n\t\t\txhttp.send();\r\n\t\t},\r\n\t},\r\n});\r\n\r\nexport default View;\r\n","/**\r\n * Navigation\r\n *\r\n * @author Rasmus Seindal \r\n */\r\n\r\nimport smoothscroll from 'smoothscroll-polyfill';\r\nimport ServerView from '../../framework/server-side-view';\r\n\r\nconst View = ServerView.extend({\r\n\tel: '.navigation',\r\n\r\n\r\n\tevents: {\r\n\t\t'click .navigation__mobile__burger': 'onClickBurger',\r\n\t\t'click a.js-menu-item-scroll': 'onClickMenuItem',\r\n\t\t'click .navigation__mobile .begin-vde': 'onClickVdeMobile',\r\n\t\t'click .navigation__desktop .begin-vde': 'onClickVdeDesktop',\r\n\t},\r\n\r\n\tinitialize() {\r\n\t\twindow.addEventListener('resize', this.onResize.bind(this));\r\n\t\t/* If we want to keep smooth scrolling on ios etc, keep this */\r\n\t\tsmoothscroll.polyfill();\r\n\t},\r\n\r\n\tscrollElementIntoView(element) {\r\n\t\tconst navH = document.querySelector(\".utility__menu\").clientHeight + document.querySelector(\".navigation\").clientHeight;\r\n\t\tconst bodyOffset = (window.innerWidth >= 768) ? navH : element.classList.contains(\"hero__bottom-area\") ? 120 : 60;\r\n\t\tconst elementPosition = element.getBoundingClientRect().top,\r\n\t\t\toffsetPosition = (window.pageYOffset + elementPosition) - bodyOffset;\r\n\r\n\t\tsetTimeout(() => {\r\n\t\t\twindow.scrollTo({ top: offsetPosition, behavior: 'smooth' });\r\n\t\t}, 0);\r\n\t},\r\n\r\n\tcloseBurger() {\r\n\t\tdocument.getElementById(\"lpMobileMenuState\").checked = false;\r\n\t\tdocument.body.classList.remove('no-scroll');\r\n\t},\r\n\r\n\tonClickBurger() {\r\n\t\tdocument.body.classList.toggle('no-scroll');\r\n\t},\r\n\r\n\tonClickMenuItem(e) {\r\n\t\te.preventDefault();\r\n\t\tif (e.delegateTarget.classList.contains('navigation__mobile__menu__nav__menu-item')) {\r\n\t\t\tthis.closeBurger();\r\n\t\t}\r\n\r\n\t\t/* If we want to keep smooth scrolling, keep this */\r\n\t\tconst target = e.target.hash;\r\n\t\tconst element = document.getElementById(target.substr(1));\r\n\t\tif (!element) return;\r\n\t\tthis.scrollElementIntoView(element);\r\n\t},\r\n\r\n\tonClickVdeMobile(e) {\r\n\t\tif (e.delegateTarget.dataset.hubspotdata) {\r\n\t\t\te.preventDefault();\t\t\t\r\n\t\t\tthis.closeBurger();\r\n\t\t\t\r\n\t\t\t\tconst hubSpot = JSON.parse(e.delegateTarget.dataset.hubspotdata);\r\n\t\t\t\tApp.modal.create({\r\n\t\t\t\t\ttype: 'generic-signup-modal',\r\n\t\t\t\t\tmodel: {\r\n\t\t\t\t\t\thubSpot,\r\n\t\t\t\t\t},\r\n\t\t\t\t});\r\n\t\t\t\r\n\t\t}\r\n\t},\r\n\r\n\tonClickVdeDesktop(e) {\r\n\r\n\t\tif (e.delegateTarget.dataset.hubspotdata) {\r\n\t\t\te.preventDefault();\r\n\r\n\t\t\t//Block body scroll when modal is opened\r\n\t\t\tconst scrollY = document.documentElement.style.getPropertyValue('--scroll-y');\r\n\t\t\tconst body = document.body;\r\n\t\t\tbody.style.position = 'fixed';\r\n\t\t\tbody.style.top = `-${scrollY}`;\r\n\r\n\t\t}\r\n\t},\r\n\r\n\tonResize() {\r\n\t\tif (window.innerWidth >= 768) {\r\n\t\t\tthis.el.classList.remove('open');\r\n\t\t\tdocument.body.classList.remove('no-scroll');\r\n\t\t}\r\n\t},\r\n});\r\n\r\nexport default View;","/**\r\n * Products\r\n *\r\n * @author Rasmus Seindal \r\n */\r\n\r\nimport Handlebars from 'handlebars';\r\n\r\nimport ServerView from '../../framework/server-side-view';\r\n\r\nconst View = ServerView.extend({\r\n\tel: '.products',\r\n\r\n\tstate: {\r\n\t\tfilters: {},\r\n\t},\r\n\r\n\tevents: {\r\n\t\t'click button.filter': 'onFilterClick',\r\n\t\t'click .products__bottom-area__products__btn-show-more button': 'onShowMoreClick',\r\n\t\t'click .products__card__details button, .products__card__details-desktop button': 'onViewDetailsClick',\r\n\t},\r\n\r\n\tonRender() {\r\n\t\tthis.state.BtnShowMoreContainer = this.el.querySelector('.products__bottom-area__products__btn-show-more');\r\n\t\tthis.state.BtnShowMoreContainer.classList.add('loading');\r\n\r\n\t\tthis.api.get('/api/products', this.state.filters, this.renderProductCard.bind(this), true);\r\n\t},\r\n\r\n\tonFilterClick(e) {\r\n\t\tconst filter = e.delegateTarget;\r\n\t\tthis.toggleFilter(filter);\r\n\t},\r\n\r\n\ttoggleFilter(filter) {\r\n\t\tfilter.classList.toggle('selected');\r\n\t\tthis.setFilters();\r\n\t},\r\n\r\n\tsetFilters() {\r\n\t\tthis.state.BtnShowMoreContainer.classList.add('loading');\r\n\t\tconst filtersCategory = this.el.querySelectorAll('.js-filter-category .filter.selected');\r\n\t\tconst filtersType = this.el.querySelectorAll('.js-filter-type .filter.selected');\r\n\r\n\t\tconst selectedFilters = {\r\n\t\t\tcategory: [],\r\n\t\t\ttype: [],\r\n\t\t};\r\n\r\n\t\tfiltersCategory.forEach((item) => {\r\n\t\t\tselectedFilters.category.push(item.dataset.value.toLowerCase());\r\n\t\t});\r\n\r\n\t\tfiltersType.forEach((item) => {\r\n\t\t\tselectedFilters.type.push(item.dataset.value.toLowerCase());\r\n\t\t});\r\n\r\n\t\tthis.state.filters = selectedFilters;\r\n\r\n\t\tthis.api.get('/api/products', this.state.filters, this.renderProductCard.bind(this), true);\r\n\t},\r\n\r\n\tonShowMoreClick() {\r\n\t\tthis.state.BtnShowMoreContainer.classList.add('loading');\r\n\t\tthis.api.get('/api/products', this.state.filters, this.renderProductCard.bind(this), false);\r\n\t},\r\n\r\n\tonViewDetailsClick(e) {\r\n\t\tconst productId = {\r\n\t\t\tid: e.delegateTarget.dataset.productId,\r\n\t\t};\r\n\t\tthis.api.get('/api/products', productId, this.openDetailsModal.bind(this), false);\r\n\t},\r\n\r\n\topenDetailsModal(productData) {\r\n\t\tconst productDetails = JSON.parse(productData.response);\r\n\r\n\t\tApp.modal.create({\r\n\t\t\ttype: 'generic-productdetails-modal',\r\n\t\t\tmodel: {\r\n\t\t\t\tproductDetails,\r\n\t\t\t},\r\n\t\t});\r\n\t},\r\n\r\n\trenderProductCard(data, emptyContainer) {\r\n\t\tconst response = JSON.parse(data.response);\r\n\t\tconst { isLastItems, items } = response;\r\n\t\tconst source = document.getElementById('products__card__template').innerHTML;\r\n\t\tconst template = Handlebars.compile(source);\r\n\t\tconst showMoreBtn = this.el.querySelector('.products__bottom-area__products__btn-show-more button');\r\n\r\n\t\tif (emptyContainer) {\r\n\t\t\tthis.el.querySelector('.products__bottom-area__products').innerHTML = '';\r\n\t\t}\r\n\r\n\t\titems.forEach((product) => {\r\n\t\t\tconst html = template(product);\r\n\t\t\tthis.el.querySelector('.products__bottom-area__products').innerHTML += html;\r\n\t\t});\r\n\r\n\t\tconst cards = this.el.querySelectorAll('.products__card');\r\n\r\n\t\tif (cards.length <= 2) {\r\n\t\t\tif (cards[0]) cards[0].classList.add('card-big');\r\n\t\t\tif (cards[1]) cards[1].classList.add('card-big');\r\n\t\t}\r\n\r\n\t\tthis.state.BtnShowMoreContainer.classList.remove('loading');\r\n\t\tif (isLastItems) {\r\n\t\t\tshowMoreBtn.disabled = true;\r\n\t\t} else {\r\n\t\t\tshowMoreBtn.disabled = false;\r\n\t\t}\r\n\t},\r\n\r\n\tapi: {\r\n\t\tget(baseUrl, params, callback, emptyContainer) {\r\n\t\t\tconst queryString = Object.keys(params).map((key) => {\r\n\t\t\t\treturn `${key}=${params[key]}`;\r\n\t\t\t}).join('&');\r\n\r\n\t\t\tconst url = encodeURI(`${baseUrl}?${queryString}`);\r\n\r\n\t\t\tconst xhttp = new XMLHttpRequest();\r\n\t\t\txhttp.onreadystatechange = function onreadystatechange() {\r\n\t\t\t\tif (this.readyState === 4 && this.status === 200) {\r\n\t\t\t\t\tcallback(this, emptyContainer);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\txhttp.open('GET', url, true);\r\n\t\t\txhttp.send();\r\n\t\t},\r\n\t},\r\n});\r\n\r\nexport default View;\r\n","/**\r\n * Tabs\r\n *\r\n * @author Rasmus Seindal \r\n */\r\n\r\nimport ServerView from '../../framework/server-side-view';\r\n\r\nconst View = ServerView.extend({\r\n\tel: '.js-tabs',\r\n\r\n\tevents: {\r\n\t\t'click .js-tabs-tab': 'onClickTabs',\r\n\t},\r\n\r\n\tinitialize() {\r\n\t\twindow.addEventListener('resize', this.onResize.bind(this));\r\n\t},\r\n\r\n\tonRender() {\r\n\t\tif (window.innerWidth >= 768) {\r\n\t\t\tthis.setFirstAsDefault();\r\n\t\t}\r\n\t},\r\n\r\n\tsetFirstAsDefault() {\r\n\t\tconst e = {\r\n\t\t\tdelegateTarget: this.el.querySelector('.js-tabs-tab:first-child'),\r\n\t\t};\r\n\r\n\t\tif (!e.delegateTarget.classList.contains('content-visible')) {\r\n\t\t\tthis.onClickTabs(e);\r\n\t\t}\r\n\t},\r\n\r\n\tcreateDeepClone(element) {\r\n\t\treturn element.cloneNode(true);\r\n\t},\r\n\r\n\tonClickTabs(e) {\r\n\t\tconst btn = e.delegateTarget;\r\n\t\tconst previousVisibleTab = this.el.querySelector('.js-tabs-tab.content-visible');\r\n\t\tconst activeBtnClicked = btn.classList.contains('content-visible');\r\n\r\n\t\tif (previousVisibleTab) {\r\n\t\t\tpreviousVisibleTab.classList.remove('content-visible');\r\n\t\t}\r\n\t\tif (!activeBtnClicked && window.innerWidth < 768) {\r\n\t\t\tbtn.classList.add('content-visible');\r\n\r\n\t\t\t/* Position the active element to the top of the page */\r\n\t\t\tconst distance = window.pageYOffset;\r\n\t\t\tconst offset = btn.getBoundingClientRect().top;\r\n\t\t\tconst menuHeight = document.querySelector('.navigation').offsetHeight;\r\n\t\t\twindow.scroll({\r\n\t\t\t\ttop: distance + offset - menuHeight,\r\n\t\t\t\tleft: 0,\r\n\t\t\t\tbehavior: 'smooth'\r\n\t\t\t});\r\n\t\t} else if (window.innerWidth >= 768) {\r\n\t\t\tbtn.classList.add('content-visible');\r\n\t\t}\r\n\r\n\t\tconst selectedTabContent = btn.querySelector('.js-tabs-tab-content');\r\n\t\tconst desktopContentContainer = this.el.querySelector('.js-tabs-desktop-content');\r\n\t\tdesktopContentContainer.innerHTML = '';\r\n\t\tif (btn.classList.contains('content-visible')) {\r\n\t\t\tdesktopContentContainer.appendChild(this.createDeepClone(selectedTabContent));\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tonResize() {\r\n\t\tif (window.innerWidth >= 768) {\r\n\t\t\tthis.setFirstAsDefault();\r\n\t\t}\r\n\t},\r\n});\r\n\r\nexport default View;\r\n","/**\r\n * Modal\r\n *\r\n * @author rkalms \r\n * @author dkvistgaard \r\n */\r\n\r\nimport _ from 'underscore';\r\nimport Backbone from 'backbone';\r\nimport EventEmitter from 'events';\r\nimport Handlebars from 'handlebars';\r\n\r\nimport BackboneView from './view';\r\n\r\n// Views\r\nimport ModalView from '../core/views/modal-view';\r\n\r\nconst defaults = {\r\n\tclassName: 'modal--show',\r\n\tframe: '#modal-frame',\r\n\r\n\t// Optionally pass a different view to the CoreObject\r\n\tview: ModalView,\r\n};\r\n\r\nconst documentListenerTypes = [];\r\nconst documentListeners = [];\r\nfunction documentListener(event) {\r\n\tif (documentListenerTypes.indexOf(event.type) < 0) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tdocumentListeners.forEach((listener) => {\r\n\t\tif (event.target.matches ? event.target.matches(listener.selector) : event.target.msMatchesSelector(listener.selector)) {\r\n\t\t\tlistener.instance.open();\r\n\t\t}\r\n\t});\r\n}\r\n\r\nclass Instance extends EventEmitter {\r\n\tconstructor(options) {\r\n\t\tsuper();\r\n\r\n\t\tthis.options = options;\r\n\t\tthis.modal = options.scope;\r\n\t\tthis.className = options.className;\r\n\t\tthis.force = options.force;\r\n\r\n\t\tthis.setEventType();\r\n\r\n\t\t// Assign event if selector present\r\n\t\t// And if there are no selector, then we'll just open the modal view.\r\n\t\tif (options.selector) {\r\n\t\t\tdocumentListeners.push({\r\n\t\t\t\tselector: options.selector,\r\n\t\t\t\tinstance: this,\r\n\t\t\t});\r\n\r\n\t\t\tif (documentListenerTypes.indexOf(this.eventType) < 0) {\r\n\t\t\t\tdocumentListenerTypes.push(this.eventType);\r\n\t\t\t\tdocument.documentElement.addEventListener(this.eventType, documentListener);\r\n\t\t\t}\r\n\t\t} else if (this.modal.layout.collection.length > 0) {\r\n\t\t\t// If there's another modal open, then we'll close that one before opening a new\r\n\t\t\tthis.modal.layout.close(false, () => {\r\n\t\t\t\tthis.open();\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tthis.open();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Open Modal\r\n\t *\r\n\t * @param {Object} e (optional)\r\n\t */\r\n\topen(e) {\r\n\t\tif (this.modal.layout.isClosing) return;\r\n\t\tif (e && e.type === 'touchend' && e.cancelable === false) return;\r\n\r\n\t\t// Stop if we're trying to reopen the same modal instance\r\n\t\tif (this.view && this.view.isOpen) return;\r\n\r\n\t\t// Instance view\r\n\t\tif (this.modal.layout.collection.length > 0) {\r\n\t\t\tconst openView = this.modal.layout.collection.at(0);\r\n\t\t\topenView.isOpen = false;\r\n\t\t}\r\n\r\n\t\tif (e) e.preventDefault();\r\n\r\n\t\tclearTimeout(this.modal.layout.closeTimeout);\r\n\r\n\t\tlet viewModel = typeof this.options.model === 'function' ? new this.options.model() : this.options.model;\r\n\r\n\t\tif (!(viewModel instanceof Backbone.Model)) {\r\n\t\t\tviewModel = new Backbone.Model(viewModel);\r\n\t\t}\r\n\r\n\t\tviewModel.set('hideClose', this.force);\r\n\r\n\t\tconst viewOptions = {\r\n\t\t\tinstance: this,\r\n\t\t\ttype: this.options.type,\r\n\t\t\tparent: this.options.parent,\r\n\t\t};\r\n\r\n\t\tif (this.options.template) {\r\n\t\t\tconst templateMarkup = this.options.template;\r\n\t\t\tthis.options.view = this.options.view.extend({\r\n\t\t\t\tgetTemplate() {\r\n\t\t\t\t\treturn Handlebars.compile(templateMarkup);\r\n\t\t\t\t},\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis.view = this.options.view;\r\n\r\n\t\tthis.modal.layout.addModal(viewModel, this.view, viewOptions);\r\n\r\n\t\tdocument.documentElement.classList.add('modal--open');\r\n\t}\r\n\r\n\t/**\r\n\t * getEventType\r\n\t * Checking if the current device is touch device or not.\r\n\t *\r\n\t * @return {Boolean}\r\n\t */\r\n\tsetEventType() {\r\n\t\tlet check = false;\r\n\t\t((a) => { if (/(android|ipad|playbook|silk|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(a.substr(0, 4))) check = true; })(navigator.userAgent || navigator.vendor || window.opera);\r\n\r\n\t\tthis.eventType = check ? 'touchend' : 'click';\r\n\t}\r\n}\r\n\r\nclass Modal {\r\n\tconstructor(options) {\r\n\t\tthis.modals = [];\r\n\t\tthis.options = _.extend({}, defaults, options);\r\n\r\n\t\tif (!document.querySelector(this.options.frame)) {\r\n\t\t\tconsole.warn(`No modal frame found with the ${this.options.frame} selector!`);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst Layout = BackboneView.extend({\r\n\t\t\tel: this.options.frame,\r\n\r\n\t\t\tcollection: new Backbone.Collection(),\r\n\r\n\t\t\tevents: {\r\n\t\t\t\t'click .js-modal__close': 'close',\r\n\t\t\t},\r\n\r\n\t\t\tinitialize() {\r\n\t\t\t\tthis.collection.bind('add', this.add, this);\r\n\t\t\t\tthis.collection.bind('reset', this.reset, this);\r\n\r\n\t\t\t\tdocument.body.addEventListener('keydown', this.keyHandler.bind(this));\r\n\t\t\t},\r\n\r\n\t\t\taddModal(model, View = ModalView, viewOptions = {}) {\r\n\t\t\t\tthis.ItemView = View;\r\n\t\t\t\tthis.viewOptions = viewOptions;\r\n\r\n\t\t\t\tthis.collection.add(model);\r\n\t\t\t},\r\n\r\n\t\t\tadd(model) {\r\n\t\t\t\tconst itemView = new this.ItemView({\r\n\t\t\t\t\tmodel,\r\n\t\t\t\t});\r\n\r\n\t\t\t\titemView.options = this.viewOptions;\r\n\t\t\t\titemView.isOpen = true;\r\n\r\n\t\t\t\tthis.View = itemView;\r\n\r\n\t\t\t\tconst content = this.el.querySelector('.modal__content');\r\n\t\t\t\tcontent.appendChild(itemView.render().el);\r\n\t\t\t},\r\n\r\n\t\t\treset() {\r\n\t\t\t\tconst content = this.el.querySelector('.modal__content');\r\n\t\t\t\tcontent.innerHTML = '';\r\n\t\t\t},\r\n\r\n\t\t\tkeyHandler(event) {\r\n\t\t\t\tif (!document.documentElement.classList.contains('modal--open')) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (event.which === 27 && !this.View.options.instance.force) {\r\n\t\t\t\t\tthis.close();\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\tclose(e, cb) {\r\n\t\t\t\tconst contentView = this.View;\r\n\r\n\t\t\t\tif (this.isClosing || (e && contentView && contentView.options.instance.force)) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (e) {\r\n\t\t\t\t\tconst isInner = e.target.classList.contains('modal__inner');\r\n\t\t\t\t\tconst isClose = e.target.classList.contains('js-modal__close');\r\n\t\t\t\t\tconst closestInner = Modal.closest(e.target, '.modal__inner');\r\n\r\n\t\t\t\t\tif ((isInner || closestInner) && !isClose) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tclearTimeout(this.closeTimeout);\r\n\t\t\t\tthis.isClosing = true;\r\n\r\n\t\t\t\tif (contentView && typeof contentView.onBeforeModalClose === 'function') {\r\n\t\t\t\t\tcontentView.onBeforeModalClose();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst modalBody = this.el.querySelector('.modal__body');\r\n\t\t\t\tif (modalBody) {\r\n\t\t\t\t\tmodalBody.classList.remove(this.options.modal.className);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdocument.documentElement.classList.remove('modal--open');\r\n\r\n\r\n // Free the body so it is able to scroll again\r\n const body = document.body;\r\n const scrollY = body.style.top;\r\n body.style.position = '';\r\n body.style.top = '';\r\n body.style.height = '';\r\n body.style.overflowY = '';\r\n window.scrollTo(0, parseInt(scrollY || '0') * -1);\r\n\r\n\t\t\t\tthis.closeTimeout = setTimeout(() => {\r\n\t\t\t\t\t// Instance view\r\n\t\t\t\t\tif (contentView) {\r\n\t\t\t\t\t\tcontentView.isOpen = false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.collection.reset();\r\n\r\n\t\t\t\t\tthis.isClosing = false;\r\n\t\t\t\t\tthis.View = null;\r\n\r\n\t\t\t\t\tif (cb && typeof cb === 'function') cb();\r\n }, 500);\r\n\t\t\t},\r\n\r\n\t\t});\r\n\r\n\t\tthis.layout = new Layout();\r\n\t\tthis.layout.options = {\r\n\t\t\tmodal: this.options,\r\n\t\t};\r\n\t}\r\n\r\n\tcreate(options) {\r\n\t\tconst settings = options.options || {};\r\n\r\n\t\t// Checking if the current modal is forced\r\n\t\tif (!this.layout || (this.layout.currentView && this.layout.currentView.options.instance.force)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst instance = _.extend(new Instance({\r\n\t\t\tselector: options.selector || false,\r\n\t\t\tforce: options.force || false,\r\n\t\t\tview: options.view || this.options.view,\r\n\t\t\tmodel: options.model || Backbone.Model,\r\n\t\t\tclassName: this.options.className,\r\n\t\t\ttype: options.type || 'default',\r\n\t\t\ttemplate: options.template || false,\r\n\t\t\tparent: options.parent || false,\r\n\t\t\tscope: this,\r\n\t\t}), settings);\r\n\r\n\t\tthis.modals.push(instance);\r\n\r\n\t\t// Events\r\n\t\tinstance.on('close', (cb) => {\r\n\t\t\tconst index = this.modals.indexOf(instance);\r\n\r\n this.layout.close();\r\n\r\n\r\n\r\n const body = document.body;\r\n console.log('body??', body)\r\n const scrollY = body.style.top;\r\n body.style.position = '';\r\n body.style.top = '';\r\n window.scrollTo(0, parseInt(scrollY || '0') * -1);\r\n\r\n\r\n\r\n\t\t\tif (cb && typeof cb === 'function') cb();\r\n\r\n\t\t\tthis.modals.splice(index, 1);\r\n\t\t});\r\n\r\n\t\tconst data = instance.options.model;\r\n\t\tthis.populateModal(data);\r\n\t}\r\n\r\n\tpopulateModal(data) {\r\n\t\tconst modal = this.layout.el.querySelector('.modal__inner');\r\n\r\n\t\t// inject hubspot form\r\n\t\tif (data.hubSpot) {\r\n\t\t\tconst hubSpotScript = document.createElement('script');\r\n\t\t\tconst hubSpotForm = `hbspt.forms.create({\r\n\t\t\t\tportalId: \"${data.hubSpot.portalId}\",\r\n\t\t\t\tformId: \"${data.hubSpot.formId}\"\r\n\t\t\t})`;\r\n\r\n\t\t\thubSpotScript.appendChild(document.createTextNode(hubSpotForm));\r\n\t\t\tmodal.appendChild(hubSpotScript);\r\n\t\t\twindow.thankYouModal = data.hubSpot.thankYouModal;\r\n\t\t}\r\n\t}\r\n\r\n\tcloseAll() {\r\n\t\t_.each(this.modals, (modal) => {\r\n\t\t\tif (modal.view && modal.view.isOpen) {\r\n\t\t\t\tmodal.emit('close');\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Finding the closest element in the parent tree.\r\n\t *\r\n\t * @param {HTMLElement} el\r\n\t * @param {String} target\r\n\t */\r\n\tstatic closest(el, target) {\r\n\t\tlet ancestor = el;\r\n\r\n\t\tif (!document.documentElement.contains(el)) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tdo {\r\n\t\t\tif (ancestor.matches ? ancestor.matches(target) : ancestor.msMatchesSelector(target)) {\r\n\t\t\t\treturn ancestor;\r\n\t\t\t}\r\n\r\n\t\t\tancestor = ancestor.parentElement;\r\n\t\t} while (ancestor !== null);\r\n\r\n\t\treturn null;\r\n\t}\r\n}\r\n\r\nexport default Modal;\r\n","/**\r\n * Server-side rendered View\r\n * Binding the Backbone View to all server-side rendered elements\r\n * matching the el selector.\r\n *\r\n * @author Daniel Kvistgaard \r\n */\r\n\r\nimport _ from 'underscore';\r\nimport BackboneView from './view';\r\n\r\nconst getNewView = function newView(view, extendView) {\r\n\tconst viewClone = _.clone(view);\r\n\r\n\t// Creating a new view with the same functionality as this view\r\n\tconst NewView = extendView.extend();\r\n\t_.extend(NewView.prototype, _.omit(viewClone, 'el'));\r\n\r\n\treturn NewView;\r\n};\r\n\r\nconst ServerView = BackboneView.extend({\r\n\tconstructor: function constructor(options) {\r\n\t\t// If the selector is a string and not an id selector\r\n\t\tif (typeof this.el === 'string' && this.el.substr(0, 1) !== '#') {\r\n\t\t\tconst elems = document.querySelectorAll(this.el);\r\n\t\t\tconst hasViewClass = `has-view--${this.el.replace(/\\s/g, '-').replace(/[.,]/g, '')}`;\r\n\r\n\t\t\t// Stop if no elements are found\r\n\t\t\tif (!elems || elems.length === 0) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// Loop through all found elements to initialise a new view per element\r\n\t\t\t[].forEach.call(elems, (elem) => {\r\n\t\t\t\tif (elem.classList.contains(hasViewClass)) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Creating a new view with the same functionality as this view\r\n\t\t\t\tconst ElView = getNewView(this, ServerView);\r\n\t\t\t\tElView.prototype.el = elem;\r\n\r\n\t\t\t\telem.classList.add(hasViewClass);\r\n\r\n\t\t\t\t// Initialize the new view\r\n\t\t\t\tnew ElView(options); // eslint-disable-line no-new\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tif (typeof this.onBeforeRender === 'function') this.onBeforeRender.call(this);\r\n\r\n\t\t\t// Initialize a normal Backbone View\r\n\t\t\tBackboneView.apply(this, [options]);\r\n\r\n\t\t\tif (typeof this.onRender === 'function') this.onRender.call(this);\r\n\t\t}\r\n\t},\r\n});\r\n\r\nexport default ServerView;\r\n","\r\nconst Lazy = {}\r\n/*\r\n* Check for IntersectionObserver support\r\n*/\r\nLazy.support = () => {\r\n return typeof window !== \"undefined\" && window.IntersectionObserver;\r\n};\r\n\r\n/*\r\n* Find height of background-image and add to element style\r\n*/\r\nLazy.addHeightToBackgroundContainer = function (img, element) {\r\n let myImage = new Image();\r\n myImage.src = img;\r\n myImage.onload = () => {\r\n element.style.height = myImage.height + \"px\";\r\n element.style.backgroundSize = \"cover\";\r\n }\r\n}\r\n\r\n/*\r\n* Find element\r\n* 'data-original' and replace 'src'\r\n* or\r\n* 'data-background-image' and add style to element \r\n*/\r\nLazy.loadImages = (element) => {\r\n if (element.getAttribute(\"data-original\")) {\r\n element.src = element.getAttribute(\"data-original\");\r\n\r\n } else if (element.getAttribute(\"data-background-image\")) {\r\n const image = element.getAttribute(\"data-background-image\");\r\n if (image !== \"\") {\r\n Lazy.addHeightToBackgroundContainer(image, element);\r\n element.style.backgroundImage = \"url('\" + image + \"')\";\r\n }\r\n }\r\n};\r\n\r\n/*\r\n* This is called everytime an element comes into view\r\n*/\r\nLazy.lazyLoading = (elements, observer) => {\r\n\r\n elements.forEach((item) => {\r\n const image = item.target;\r\n if (item.intersectionRatio > 0) {\r\n Lazy.loadImages(image);\r\n observer.unobserve(image);\r\n }\r\n });\r\n};\r\n\r\n/*\r\n* Setup IntersectionObserver on elements\r\n*/\r\nLazy.lazyLoadElements = (elements) => {\r\n let hdLazyLoad = document.getElementById(\"hdLazyLoad\"), //value set from content\r\n rootMarginValue = hdLazyLoad && hdLazyLoad.value ? hdLazyLoad.value : 0;\r\n\r\n if (Lazy.support()) {\r\n const observer = new IntersectionObserver(Lazy.lazyLoading, {\r\n rootMargin: rootMarginValue + \"px\",\r\n threshold: 0,\r\n });\r\n for (let i = 0; i < elements.length; i++) {\r\n observer.observe(elements[i]);\r\n }\r\n } else {\r\n /* no IntersectionObserver support - load immediately */\r\n for (let i = 0; i < elements.length; i++) {\r\n Lazy.loadImages(elements[i]);\r\n }\r\n }\r\n};\r\n\r\n/*\r\n* When myEvent happens on baseSelector\r\n* Load src on elementSelector\r\n*/\r\nLazy.loadOnEvent = (baseSelector, elementSelector, myEvent) => {\r\n\r\n const root = document.querySelector(baseSelector),\r\n elements = document.querySelectorAll(elementSelector);\r\n if (root && elements.length) {\r\n root.addEventListener(myEvent, function loadSrcs(event) {\r\n for (let i = 0; i < elements.length; i++) {\r\n Lazy.loadImages(elements[i]);\r\n }\r\n event.currentTarget.removeEventListener(event.type, loadSrcs);\r\n });\r\n }\r\n};\r\n\r\n/*\r\n* add lazy loading to elements with specific selector\r\n*/\r\nLazy.load = (selector) => {\r\n let lazyElements = document.querySelectorAll(selector);\r\n if (lazyElements) {\r\n Lazy.lazyLoadElements(lazyElements);\r\n }\r\n};\r\n//Initialize lazyloading on all .lazy elements \r\nexport default Lazy;\r\n","/**\r\n * View\r\n *\r\n * @description Using Backbone without jQuery\r\n * @author Daniel Kvistgaard \r\n */\r\n\r\nimport Backbone from 'backbone';\r\n\r\nclass ViewEventClass {\r\n\tconstructor() {\r\n\t\tthis.functionMap = {};\r\n\t}\r\n\r\n\taddEventListener(element, event, selector, func) {\r\n\t\tconst eventName = event.split('.')[0];\r\n\t\tconst namespace = event.split('.').slice(1).join('.');\r\n\r\n\t\tthis.functionMap[event] = {\r\n\t\t\teventName,\r\n\t\t\tnamespace,\r\n\t\t\tevent,\r\n\t\t\tselector,\r\n\t\t\tfunc,\r\n\t\t};\r\n\r\n\t\telement.addEventListener(eventName, this.functionMap[event].func);\r\n\t}\r\n\r\n\tremoveEventListener(element, event, selector, func) {\r\n\t\tconst eventName = event.split('.')[0];\r\n\t\tconst namespace = event.split('.').slice(1).join('.');\r\n\r\n\t\tObject.keys(this.functionMap).forEach((key) => {\r\n\t\t\tconst handler = this.functionMap[key];\r\n\r\n\t\t\tif (!eventName && handler.namespace === namespace) {\r\n\t\t\t\tViewEventClass.removeEventListener(element, handler.eventName, handler.func);\r\n\t\t\t\tdelete this.functionMap[key];\r\n\t\t\t} else if (eventName && handler.event === event && handler.selector === selector && handler.func === func) {\r\n\t\t\t\tViewEventClass.removeEventListener(element, eventName, handler.func);\r\n\t\t\t\tdelete this.functionMap[key];\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tstatic removeElementEventListener(element, event, func) {\r\n\t\tconst eventName = event.split('.')[0];\r\n\r\n\t\tif (eventName) {\r\n\t\t\telement.removeEventListener(eventName, func);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nconst ViewEvent = new ViewEventClass();\r\n\r\nconst View = Backbone.View.extend({\r\n\t$(selector) {\r\n\t\treturn this.el.querySelectorAll(selector);\r\n\t},\r\n\r\n\t// Remove this view's element from the document and all event listeners\r\n\t// attached to it. Exposed for subclasses using an alternative DOM\r\n\t// manipulation API.\r\n\t_removeElement() {\r\n\t\tthis.el.parentNode.removeChild(this.el);\r\n\t},\r\n\r\n\t// Creates the `this.el` and `this.$el` references for this view using the\r\n\t// given `el`. `el` can be a CSS selector or an HTML string, a jQuery\r\n\t// context or an element. Subclasses can override this to utilize an\r\n\t// alternative DOM manipulation API and are only required to set the\r\n\t// `this.el` property.\r\n\t_setElement(el) {\r\n\t\tthis.$el = el instanceof HTMLElement ? el : document.querySelector(el);\r\n\t\tthis.el = this.$el;\r\n\t},\r\n\r\n\t// Set attributes from a hash on this view's element. Exposed for\r\n\t// subclasses using an alternative DOM manipulation API.\r\n\t_setAttributes(attributes) {\r\n\t\tObject.keys(attributes).forEach((key) => {\r\n\t\t\tthis.el.setAttribute(key, attributes[key]);\r\n\t\t});\r\n\t},\r\n\r\n\teventFunc(selector, listener, event, ...args) {\r\n\t\tif (!selector) {\r\n\t\t\tlistener.apply(this, [event, ...args]);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst { target } = event;\r\n\t\tlet pathItem = target;\r\n\r\n\t\tdo {\r\n\t\t\tif (pathItem.matches ? pathItem.matches(selector) : pathItem.msMatchesSelector(selector)) {\r\n\t\t\t\tevent.delegateTarget = pathItem;\r\n\t\t\t\tlistener.apply(this, [event, ...args]);\r\n\t\t\t}\r\n\r\n\t\t\tpathItem = pathItem.parentElement;\r\n\t\t} while (pathItem !== this.$el && pathItem !== document.documentElement && pathItem !== null);\r\n\t},\r\n\r\n\t// Add a single event listener to the view's element (or a child element\r\n\t// using `selector`). This only works for delegate-able events: not `focus`,\r\n\t// `blur`, and not `change`, `submit`, and `reset` in Internet Explorer.\r\n\tdelegate(eventName, selectorParam, listenerParam) {\r\n\t\tlet listener = listenerParam;\r\n\t\tlet selector = selectorParam;\r\n\r\n\t\tif (typeof selector === 'function') {\r\n\t\t\tlistener = selector;\r\n\t\t\tselector = null;\r\n\t\t}\r\n\r\n\t\tlistener = this.eventFunc.bind(this, selector, listener);\r\n\r\n\t\tViewEvent.addEventListener(this.el, `${eventName}.delegateEvents${this.cid}`, selector, listener);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// Clears all callbacks previously bound to the view by `delegateEvents`.\r\n\t// You usually don't need to use this, but may wish to if you have multiple\r\n\t// Backbone views attached to the same DOM element.\r\n\tundelegateEvents() {\r\n\t\tif (this.$el) ViewEvent.removeEventListener(this.el, `.delegateEvents${this.cid}`);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// A finer-grained `undelegateEvents` for removing a single delegated event.\r\n\t// `selector` and `listener` are both optional.\r\n\tundelegate(eventName, selectorParam, listenerParam) {\r\n\t\tlet listener = listenerParam;\r\n\t\tlet selector = selectorParam;\r\n\r\n\t\tif (typeof selector === 'function') {\r\n\t\t\tlistener = selector;\r\n\t\t\tselector = null;\r\n\t\t}\r\n\r\n\t\tViewEvent.removeEventListener(this.el, `${eventName}.delegateEvents${this.cid}`, selector, listener);\r\n\t\treturn this;\r\n\t},\r\n});\r\n\r\nexport default View;\r\n","/*\r\n * Vertic JS - Site functional wrapper\r\n * http://labs.vertic.com\r\n *\r\n * Copyright 2015, Vertic A/S\r\n *\r\n *\r\n * NAMING CONVENTIONS:\r\n * -------------------\r\n * Singleton-literals and prototype objects: PascalCase\r\n *\r\n * Functions and public variables: camelCase\r\n *\r\n * Global variables and constants: UPPERCASE\r\n *\r\n * Private variables: _underscorePrefix\r\n */\r\n\r\nimport _ from 'underscore';\r\nimport Handlebars from 'handlebars';\r\n\r\n// Framework\r\nimport hbsHelpers from '../../server/helpers/hbs';\r\n\r\n// Application\r\nimport App from './core/app';\r\nimport Lazy from './framework/vanillaLazyLoad';\r\n\r\n// Polyfill, Support for forEach function on NodeLists\r\nif (window.NodeList && !NodeList.prototype.forEach) {\r\n\tNodeList.prototype.forEach = Array.prototype.forEach;\r\n}\r\n\r\n// Polyfill, Support for .closest and .matches in IE\r\nif (!Element.prototype.matches) Element.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\r\n\r\nif (!Element.prototype.closest) {\r\n\tElement.prototype.closest = function closest(s) {\r\n\t\tlet el = this;\r\n\t\tif (!document.documentElement.contains(el)) return null;\r\n\t\tdo {\r\n\t\t\tif (el.matches(s)) return el;\r\n\t\t\tel = el.parentElement || el.parentNode;\r\n\t\t} while (el !== null && el.nodeType === 1);\r\n\t\treturn null;\r\n\t};\r\n}\r\n\r\nwindow.submittedHubspotForms = [];\r\n\r\nfunction hubSpotForSubmitted(formId) {\r\n\tlet formIdMatch = false;\r\n\twindow.submittedHubspotForms.forEach((item) => {\r\n\t\tif (item === event.data.id) {\r\n\t\t\tformIdMatch = true;\r\n\t\t}\r\n\t});\r\n\tif (!formIdMatch) {\r\n\t\twindow.submittedHubspotForms.push(formId);\r\n\t\treturn false;\r\n\t}\r\n\treturn true;\r\n}\r\n\r\n// Add HubSpot listeners\r\nwindow.addEventListener('message', (event) => {\r\n\tif (event.data.type === 'hsFormCallback' && event.data.eventName === 'onFormSubmit') {\r\n\t\tApp.modal.create({\r\n\t\t\ttype: 'generic-signup-complete',\r\n\t\t\tmodel: {\r\n\t\t\t\tthankYouModal: window.thankYouModal,\r\n\t\t\t},\r\n\t\t});\r\n\r\n\t\tif (window.gtmDataSubmit) {\r\n\t\t\tdataLayer.push(window.gtmDataSubmit);\r\n\t\t}\r\n\r\n\t\tif (window.gtmDataMarketingCheckboxChecked) {\r\n\t\t\tdataLayer.push(window.gtmDataSubmitMarketing);\r\n\t\t}\r\n\t}\r\n});\r\n\r\n// Registering handlebars helpers\r\n_.each(hbsHelpers, (helper, key) => {\r\n\tHandlebars.registerHelper(key, helper);\r\n});\r\n\r\n// Document ready\r\nfunction ready(fn) {\r\n\tif (document.attachEvent ? document.readyState === 'complete' : document.readyState !== 'loading') {\r\n\t\tfn();\r\n\t} else {\r\n\t\tdocument.addEventListener('DOMContentLoaded', fn);\r\n\t}\r\n}\r\n\r\nready(() => {\r\n\tApp.start();\r\n\tLazy.load('.lazy');\r\n});\r\n","/**\r\n * Handlebars helpers\r\n *\r\n * @author dkvistgaard \r\n */\r\n\r\nconst _helpers = {};\r\n\r\n/**\r\n * Various if or unless condition checks or operators.\r\n *\r\n * Usage examples:\r\n *\r\n * Checking if all three values are equal:\r\n * {{#if (eq value1 value2 value3)}} {{/if}}\r\n *\r\n * Checking if value1 === value2 OR value3 <= 500\r\n * {{#if (or (eq value1 value2) (lte value3 500))}}\r\n */\r\n\r\n// Equal (value1 === value2 === ...)\r\n_helpers.eq = (...values) => {\r\n\t// Removing options from values array\r\n\tvalues.splice(-1, 1);\r\n\r\n\treturn values.every((value) => {\r\n\t\treturn value === values[0];\r\n\t});\r\n};\r\n\r\n// Not equal (value1 !== value2 !== ...)\r\n_helpers.ne = (...values) => {\r\n\t// Removing options from values array\r\n\tvalues.splice(-1, 1);\r\n\r\n\treturn values.every((value, index) => {\r\n\t\tconst valuesClone = values.slice();\r\n\t\tvaluesClone.splice(index, 1);\r\n\r\n\t\treturn valuesClone.indexOf(value) === -1;\r\n\t});\r\n};\r\n\r\n// \"and\" operator (value1 && value2 && ...)\r\n_helpers.and = (...values) => {\r\n\t// Removing options from values array\r\n\tvalues.splice(-1, 1);\r\n\r\n\treturn values.every((value) => {\r\n\t\treturn !!value;\r\n\t});\r\n};\r\n\r\n// \"or\" operator (value1 || value2 || ...)\r\n_helpers.or = (...values) => {\r\n\t// Removing options from values array\r\n\tvalues.splice(-1, 1);\r\n\r\n\treturn values.some((value) => {\r\n\t\treturn !!value;\r\n\t});\r\n};\r\n\r\n// Less than check (value1 < value2)\r\n_helpers.lt = (value, check) => {\r\n\treturn value < check;\r\n};\r\n\r\n// Greater than check (value1 > value2)\r\n_helpers.gt = (value, check) => {\r\n\treturn value > check;\r\n};\r\n\r\n// Less than or equal check (value1 <= value2)\r\n_helpers.lte = (value, check) => {\r\n\treturn value <= check;\r\n};\r\n\r\n// Greater than or equal check (value1 >= value2)\r\n_helpers.gte = (value, check) => {\r\n\treturn value >= check;\r\n};\r\n\r\n_helpers.getJsonContext = (data, options) => {\r\n\treturn options.fn(JSON.parse(data));\r\n};\r\n\r\n// /end of various if or unless condition checks or operators.\r\n\r\nmodule.exports = _helpers;\r\n"]}