{"version":3,"sources":["webpack:///./assets/src/js/plugins/store-params.js","webpack:///./assets/src/js/modules/utm_generator/utm_generator.js","webpack:///./assets/src/js/plugins/navigator-saywho.js","webpack:///./assets/src/js/modules/utm_generator/utm_generator_tests.js","webpack:///./assets/src/js/misc/share.js","webpack:///./assets/src/js/misc/appsBrowser.js","webpack:///./assets/src/js/misc/solutionsAccordion.js","webpack:///./assets/src/js/misc/personCards.js","webpack:///./assets/src/js/misc/productNavigation.js","webpack:///./assets/src/js/misc/mainNavBlur.js","webpack:///./assets/src/js/misc/statsCounter.js","webpack:///./assets/src/js/misc/heroPatternTransitions.js","webpack:///./assets/src/js/misc/lottieAnimations.js","webpack:///./assets/src/js/misc/marketoScripts.js","webpack:///./assets/src/js/misc/blogPaginationTitles.js","webpack:///./assets/src/js/templates lazy ^\\.\\/.*$ namespace object","webpack:///./assets/src/js/parts lazy ^\\.\\/.*$ namespace object","webpack:///./assets/src/js/misc/utm.js","webpack:///./assets/src/js/plugins/php-date-formatter.js","webpack:///./assets/src/js/misc/date.js","webpack:///./assets/src/js/misc/heroTyping.js","webpack:///./assets/src/js/common.js"],"names":["StoreParams","options","self","Object","create","prototype","storage","cookieDuration","cookieDomain","storeUTMs","storeReferrer","storePrefix","include","exclude","callback","keys","forEach","key","referrer","document","parseUrl","location","href","searchParams","assign","has","name","get","param","_typeof","length","query","resource","replace","utms","required","concat","store","value","days","expires","date","Date","setTime","getTime","toUTCString","cookie","read","nameEQ","ca","split","i","c","charAt","substring","indexOf","erase","localStorage","window","setItem","getItem","removeItem","sessionStorage","filter","u","flush","rewrite","includes","utm_source","o","init","getUtmTestData","require","Array","defineProperty","enumerable","obj","this","el","UtmGenerator","_classCallCheck","oldCookiesModel","storeModel","url","utm","prefix","params","analyzedParams","source","medium","campaign","content","term","gclid","fbaid","licid","mkt_tok","utmStorage","hasOldUtm","isTestMode","testParams","processUtmData","setDrUTM","testUtmGenerator","e","console","error","Sentry","captureException","_createClass","cleanStore","storeParams","getStoredParams","analyzeParams","setParam","decodeURIComponent","trim","analyseReferrer","getParam","match","captureMessage","level","tags","type","extra","maybeCollectOldUtmData","needToUpdateUTMs","dr","setTestData","organicDomain","getOrganicDomain","getOrganicUtmTerm","isValidUTMs","isDrRelatedReferrer","isSavedSourceNotImportant","_this","AccessData","clearDomain","replaceWwwDomain","socialDomain","getSocialDomain","pathname","Cookie","oldUtms","cookieName","getOldUtmValue","cookieStructure","paramName","paramValue","clearName","cookieDomainMatch","hostname","remove","path","domain","isReferrerMoreImportant","isTrafficSourceMoreImportant","localSource","localMedium","localCampaign","isEmptyValue","isEmpty","searchEng","RegExp","engine","j","socialMedia","separator","cookieNameStart","valueStart","valueEnd","testGroup","arguments","undefined","log","referralLinks","group","clearUtmObj","hasOwnProperty","getDefParamValue","cta","model","id","creative","position","tmp","search","substr","item","tem","ua","M","mobile","navigator","sayswho","userAgent","test","exec","appName","appVersion","splice","module","exports","manual","marketo","referral","social","organic","shareThis","top","screen","height","left","width","open","toString","addEventListener","toggleTabs","tabs","panels","activeTabClass","activePanelClass","tab","index","t","classList","p","add","accordionWrapper","querySelector","querySelectorAll","desktopWrapper","accordions","toggleAccordionItem","contains","closeAccordionItem","style","maxHeight","scrollHeight","openAccordionItem","accordion","items","innerWidth","otherItem","isMobile","openItem","from","find","openButtons","overlay","button","popup","closest","documentElement","overflow","openPopup","event","activePopup","target","matches","siteHeader","productPageContainers","productPageContent","sidebarLinks","offsetHeight","isManualScroll","isMenuOpen","productPageHeadings","mainContent","closeSidebarMenu","sidebarInner","sidebarToggle","sidebar","createElement","appendChild","productPageContainer","headingId","setAttribute","sidebarLink","sidebarHeading","icon","sidebarIcon","innerHTML","title","sidebarTitle","innerText","description","sidebarDescription","descriptionText","push","preventDefault","scrollOffset","isSidebarExpanded","collapsedSidebarHeight","expandedSidebarHeight","targetPosition","getBoundingClientRect","scrollY","navOffset","scrollTo","behavior","link","setTimeout","productPageMain","insertBefore","remainingContent","observer","IntersectionObserver","entries","entry","targetId","getAttribute","correspondingLink","isIntersecting","root","threshold","rootMargin","container","observe","stopPropagation","body","toggleBlurClass","dropdown","MutationObserver","attributes","attributeFilter","navigation","solutionsHero","heroSection","productHero","disconnect","childList","subtree","handleScroll","scrollTop","counter","targetValue","parseFloat","textContent","isNaN","element","duration","startValue","startTime","isDecimal","step","timestamp","progress","Math","min","currentValue","toFixed","floor","toLocaleString","requestAnimationFrame","animateCountUp","unobserve","updatePseudoElementWidth","patternContainer","ukContainer","adjustedWidth","setProperty","resetAndPlayLottieAnimation","lottieInstance","animation","dataset","animationPath","goToAndPlay","warn","lottie","loadAnimation","renderer","loop","autoplay","triggerPseudoElementAnimation","heroLottieContainers","initializedCount","swiperContainer","swiperInstance","swiper","on","activeSlide","slides","activeIndex","heroLottieContainer","titleSlideElement","offsetWidth","initialSlide","initialTitleSlideElement","setupSlideAnimations","_container$closest","isHovered","totalFrames","animationData","op","hoverEndFrame","stop","playSegments","currentFrame","loadLottieAnimation","dataLayer","didInit","initMunchkin","Munchkin","s","async","src","onreadystatechange","readyState","onload","getElementsByTagName","links","attributionValues","storedData","ATTRIBUTION_MAP","parameter","api","getUrlParams","URLSearchParams","hasAttributionLocalStorage","hasAttributionParameters","some","elem","setAttributionLocalStorage","data","urlParams","reduce","acc","expiration","now","JSON","stringify","getAttributionValues","parse","waitForError","input","mktoErrorMsg","className","URL","set","origin","invalidDomains","isEmailGood","email","lowerCaseEmail","toLowerCase","endsWith","MktoForms2","excludedFormIds","whenReady","form","currentFormId","getId","onValidate","vals","Email","emailElem","getFormElem","submittable","showErrorMessage","onSubmit","pollForForms","delay","forms2","fields","addHiddenFields","setHiddenAttributionFields","allFieldsFilled","getValues","valid","thisForm","attr","text","uuid","r","random","onSuccess","values","followUpUrl","baseURL","append","encodeURIComponent","handleRedirectsForForm","whenRendered","bind","checkInterval","setInterval","elements","display","clearInterval","map","webpackAsyncContext","req","__webpack_require__","Promise","resolve","then","Error","code","ids","all","slice","$h","DAY","HOUR","defaults","dateSettings","daysShort","months","monthsShort","meridiem","ordinal","number","n","suffixes","1","2","3","separators","validParts","intParts","tzParts","tzClip","getInt","str","radix","parseInt","compare","str1","str2","lpad","chr","val","merge","out","getIndex","arr","dateFormatter","DateFormatter","config","vDate","vFormat","vFormatParts","vDateParts","vDatePart","iDatePart","vMonth","vMeriIndex","vMeriOffset","len","mer","vDateFlag","vTimeFlag","vSettings","year","month","day","hour","sec","getMonth","varY","varM","varD","vDateStr","vYear","iPart","iSec","vParts","vDigit","setMonth","setDate","getFullYear","setFullYear","setHours","setMinutes","setSeconds","vChar","fmt","backslash","doFormat","d","D","w","getDate","l","N","getDay","z","a","Y","b","round","W","F","m","L","y","A","G","B","H","getUTCHours","getUTCMinutes","getUTCSeconds","g","getHours","h","getMinutes","getSeconds","getMilliseconds","String","I","UTC","O","tzo","getTimezoneOffset","abs","P","T","pop","Z","U","parseDate","parseFormat","format","formattedDate","formatDate","heroTyping","mutationTimeout","mutations","mutation","attributeName","h1","startTypingOnce","resetText","initialActiveSlide","paginationContainer","hasAttribute","fullHtml","visibility","typeText","typingTimer","clearTimeout","removeAttribute","measureText","measureSpan","whiteSpace","styles","getComputedStyle","font","letterSpacing","textTransform","padding","removeChild","parentElement","fullText","wrapper","currentLine","cursorSpan","words","currentWord","currentWordStart","char","tagEnd","start","end","isTag","isSpace","getWordBoundaries","wordIndex","charIndex","updateCursorPosition","span","nextSibling","parentNode","typeNextCharacter","lastElementChild","nextWord","word","containerWidth","lineWithWord","lineWidth","widthWithBothWords","tolerancePixels","shouldWrapWord","UIkit","x","util","$","use","careers","events","webinars","parts_config","lightbox","slider","loadmore","timeline","countup","err","loadWistia","script","wistiaElements","_wq","video","videoId","currentTarget","startsWith","onReady","popover","show","play","getElementsByClassName"],"mappings":"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,EAAS,oEAAoEI,KAAKN,GAChF,WAAWM,KAAKL,EAAE,IAEb,CACN,QAAW,KACX,SAHDF,EAAM,kBAAkBQ,KAAKP,IAAO,IAGpB,IAAM,GACrB,OAAUE,GAGD,WAARD,EAAE,IAEK,OADTF,EAAKC,EAAGvE,MAAM,wBACQ,CACrB,QAAWsE,EAAI,GAAG5J,QAAQ,MAAO,SACjC,QAAW4J,EAAI,IAAM,GACrB,OAAUG,IAGZD,EAAGA,EAAE,GAAI,CAACA,EAAE,GAAIA,EAAE,IAAK,CAACE,UAAUK,QAASL,UAAUM,WAAY,MACzB,OAApCV,EAAKC,EAAGvE,MAAM,qBAA4BwE,EAAES,OAAO,EAAG,EAAGX,EAAI,IACtD,UAARE,EAAE,KAAeA,EAAE,GAAI,UACnB,CACN,QAAWA,EAAE,GACb,QAAWA,EAAE,GACb,OAAUC,M,iBC0FZS,EAAOC,QApHP,SAAwB/E,GAiHvB,MAhHW,CACVgF,OAAQ,CACPvH,IAAK,CACJ,yCACA,wDACA,0DACA,yEACA,0KACA,oCACA,mDACA,kEACA,oEACA,mFACA,sCACA,0CAEDwH,QAAS,CACR,seACA,yNAGFC,SAAU,CACT,SAAU,CACT,oCACA,oCAEDC,OAAQ,CACP,4BACA,8BACA,8BACA,+BACA,kCACA,6BACA,4BACA,2BACA,uBACA,iBAEDC,QAAS,CACR,0BACA,6BACA,yBACA,uBACA,qCACA,iCACA,8BACA,yBACA,2BACA,0BACA,+BACA,4CACA,4BACA,8BACA,wBACA,yBACA,0BACA,uBACA,qBACA,6BACA,yBACA,0BACA,4BACA,8BACA,qBACA,yBACA,2BACA,4BACA,0BACA,4BACA,4BACA,mCACA,oCACA,4BACA,mCACA,wCACA,0BACA,yCACA,6BACA,6BACA,yBACA,sBACA,4BAEDF,SAAU,CACT,0BACA,+BACA,2BACA,gCACA,yBACA,yBACA,yBACA,wBACA,8BACA,4BACA,2BACA,0BACA,yBACA,kCACA,wBACA,6BACA,gCACA,uCACA,0BACA,qEACA,8BACA,uBACA,sBACA,+BAKSlF,K,iBCjHbjE,OAAOsJ,UAAY,SAAU1L,GAC5B,IA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EAAMT,EAAIE,GAAMtT,EAAK6T,EAAI,GAC7B,OAAOL,QAAQM,IAAID,EAAIE,MAAM,GAAGX,IAAIG,EAAoBrY,IAAIwY,MAAK,WAChE,OAAOH,EAAoBvT,MAG7BqT,EAAoB5d,KAAO,WAC1B,OAAOZ,OAAOY,KAAK2d,IAEpBC,EAAoBrT,GAAK,GACzBmB,EAAOC,QAAUiS,G,mBCpFjB,IAAID,EAAM,CACT,cAAe,CACd,GACA,GAED,iBAAkB,CACjB,GACA,GAED,iBAAkB,CACjB,GACA,GACA,GAED,oBAAqB,CACpB,GACA,GACA,GAED,mBAAoB,CACnB,GACA,EACA,GAED,sBAAuB,CACtB,GACA,EACA,GAED,iCAAkC,CACjC,GACA,GACA,GAED,oCAAqC,CACpC,GACA,GACA,GAED,YAAa,CACZ,GACA,GAED,eAAgB,CACf,GACA,GAED,WAAY,CACX,GACA,EACA,IAED,cAAe,CACd,GACA,EACA,IAED,SAAU,CACT,GACA,EACA,IAED,YAAa,CACZ,GACA,EACA,IAED,aAAc,CACb,GACA,EACA,GACA,IAED,gBAAiB,CAChB,GACA,EACA,GACA,IAED,aAAc,CACb,GACA,IAED,gBAAiB,CAChB,GACA,IAED,8BAA+B,CAC9B,GACA,IAED,iCAAkC,CACjC,GACA,IAED,kBAAmB,CAClB,GACA,EACA,IAED,qBAAsB,CACrB,GACA,EACA,IAED,WAAY,CACX,GACA,EACA,GACA,IAED,cAAe,CACd,GACA,EACA,GACA,IAED,gBAAiB,CAChB,GACA,IAED,mBAAoB,CACnB,GACA,IAED,WAAY,CACX,GACA,EACA,IAED,cAAe,CACd,GACA,EACA,IAED,qBAAsB,CACrB,GACA,IAED,wBAAyB,CACxB,GACA,IAED,kBAAmB,CAClB,GACA,IAED,qBAAsB,CACrB,GACA,IAED,aAAc,CACb,GACA,IAED,gBAAiB,CAChB,GACA,IAED,wBAAyB,CACxB,GACA,IAED,2BAA4B,CAC3B,GACA,IAED,qBAAsB,CACrB,GACA,IAED,wBAAyB,CACxB,GACA,KAGF,SAASC,EAAoBC,GAC5B,IAAIC,E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","file":"main/common-1409b502.js","sourcesContent":["import parseUrl from \"parse-url\";\n// ------------------------------------------\n// store-params.js - v1.0.0\n// Store URL Params\n// Author: Łukasz Łabędzki\n// Copyright (c) 2017 Livechat Software S.A.\n// MIT license\n//\n// ------------------------------------------\n\nvar StoreParams = function(options){\n\t\"use strict\";\n\n\tvar self = Object.create(StoreParams.prototype);\n\n\t// Default Settings\n\tself.options = {\n\t\tstorage: 'cookies',\n\t\tcookieDuration: 14,\n\t\tcookieDomain: false,\n\t\tstoreUTMs: true,\n\t\tstoreReferrer: true,\n\t\tstorePrefix: '',\n\t\tinclude: [],\n\t\texclude: [],\n\t\tcallback: function() {},\n\t};\n\n\t// User defined options (might have more in the future)\n\tif (options){\n\t\tObject.keys(options).forEach(function(key){\n\t\t\tself.options[key] = options[key];\n\t\t});\n\t}\n\n\tvar referrer = document.referrer ? parseUrl(document.referrer) : null,\n\t\tlocation = parseUrl(document.location.href),\n\t\tsearchParams = Object.assign({\n\t\t\thas: function (name) {\n\t\t\t\treturn typeof searchParams[name] !== 'undefined';\n\t\t\t},\n\t\t\tget: function (name) {\n\t\t\t\tlet param = searchParams[name];\n\t\t\t\tif (typeof param === 'object' && param.length) {\n\t\t\t\t\tparam = param[param.length - 1];\n\t\t\t\t}\n\t\t\t\treturn param;\n\t\t\t}\n\t\t}, location.query);\n\n\tif(!self.options.cookieDomain) {\n\t\tself.options.cookieDomain = '.' + location.resource.replace(/^(www\\.)/,'');\n\t}\n\n\n\tif(self.options.storeUTMs) {\n\t\tvar utms = [\n\t\t\t{\n\t\t\t\tparam: 'utm_source',\n\t\t\t\trequired: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tparam: 'utm_medium',\n\t\t\t\trequired: false\n\t\t\t},\n\t\t\t{\n\t\t\t\tparam: 'utm_campaign',\n\t\t\t\trequired: false\n\t\t\t},\n\t\t\t{\n\t\t\t\tparam: 'utm_term',\n\t\t\t\trequired: false\n\t\t\t},\n\t\t\t{\n\t\t\t\tparam: 'utm_content',\n\t\t\t\trequired: false\n\t\t\t}\n\t\t];\n\n\t\tself.options.include = self.options.include.concat(utms)\n\t}\n\n\tswitch (self.options.storage) {\n\t\t// Define create, read, earse functions for cookie\n\t\tcase 'cookies':\n\t\t\tvar store = function(name,value) {\n\t\t\t\tvar days = self.options.cookieDuration\n\n\t\t\t\tif(value=='') {\n\t\t\t\t\tdays = -1\n\t\t\t\t}\n\n\t\t\t\tvar expires = \"\";\n\t\t\t\tif (self.options.cookieDuration) {\n\t\t\t\t\tvar date = new Date();\n\t\t\t\t\tdate.setTime(date.getTime() + (days*24*60*60*1000));\n\t\t\t\t\texpires = \"; expires=\" + date.toUTCString();\n\t\t\t\t}\n\t\t\t\tdocument.cookie = self.options.storePrefix + name + \"=\" + value + expires + \";domain=\" + self.options.cookieDomain + \"; path=/\";\n\t\t\t}\n\n\t\t\tvar read = function(name) {\n\t\t\t\tvar nameEQ = self.options.storePrefix + name + \"=\";\n\t\t\t\tvar ca = document.cookie.split(';');\n\t\t\t\tfor(var i=0;i < ca.length;i++) {\n\t\t\t\t\tvar c = ca[i];\n\t\t\t\t\twhile (c.charAt(0)==' ') c = c.substring(1,c.length);\n\t\t\t\t\tif (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tvar erase = function(name) {\n\t\t\t\tstore(self.options.storePrefix + name,\"\");\n\t\t\t}\n\n\t\t\tbreak;\n\t\t// Define create, read, earse functions for localStorage\n\t\tcase 'localStorage':\n\t\t\tvar localStorage = window.localStorage;\n\n\t\t\tvar store = function(name, value) {\n\t\t\t\tlocalStorage.setItem(self.options.storePrefix + name, value)\n\t\t\t}\n\n\t\t\tvar read = function(name) {\n\t\t\t\treturn localStorage.getItem(self.options.storePrefix + name);\n\t\t\t}\n\n\t\t\tvar erase = function(name) {\n\t\t\t\tlocalStorage.removeItem(self.options.storePrefix + name)\n\t\t\t}\n\n\t\t\tbreak;\n\t\t// Define create, read, earse functions for sessionStorage\n\t\tcase 'sessionStorage':\n\t\t\tvar sessionStorage = window.sessionStorage;\n\n\t\t\tvar store = function(name, value) {\n\t\t\t\tsessionStorage.setItem(self.options.storePrefix + name, value)\n\t\t\t}\n\n\t\t\tvar read = function(name) {\n\t\t\t\treturn sessionStorage.getItem(self.options.storePrefix + name);\n\t\t\t}\n\n\t\t\tvar erase = function(name) {\n\t\t\t\tsessionStorage.removeItem(self.options.storePrefix + name)\n\t\t\t}\n\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tbreak;\n\t}\n\n\tvar init = function() {\n\t\t// check if we have required params before continue\n\t\tvar required = utms.filter(function (u) {\n\t\t\treturn u.required ? searchParams.has(u.param) : false;\n\t\t});\n\n\t\t// store UTMs\n\t\tif (self.options.storeUTMs) {\n\t\t\tif (required.length >= 1) {\n\t\t\t\t// prevent utm params overlapping\n\t\t\t\t// when any utm is present, remove all\n\t\t\t\tvar flush = utms.filter(function (u) {\n\t\t\t\t\treturn searchParams.has(u.param);\n\t\t\t\t});\n\t\t\t\tvar rewrite = self.options.include.filter(function (u) {\n\t\t\t\t\treturn u.rewrite;\n\t\t\t\t});\n\n\t\t\t\tif (flush.length || rewrite.length || (referrer && referrer.resource !== location.resource)) {\n\t\t\t\t\tvar i;\n\t\t\t\t\tfor (i = 0; i < utms.length; i++) {\n\t\t\t\t\t\terase(utms[i].param)\n\t\t\t\t\t}\n\t\t\t\t\tfor (i = 0; i < rewrite.length; i++) {\n\t\t\t\t\t\tvar param = rewrite[i].storage ? rewrite[i].storage : rewrite[i].param;\n\t\t\t\t\t\terase(param)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// store utm_source, if no present - use referrer\n\t\t\t\tif (!self.options.exclude.includes('utm_source')) {\n\t\t\t\t\tvar utm_source = null;\n\n\t\t\t\t\tif (searchParams.has('utm_source')) {\n\t\t\t\t\t\tutm_source = searchParams.get('utm_source');\n\t\t\t\t\t} else if (referrer && referrer.resource !== location.resource) {\n\t\t\t\t\t\tutm_source = referrer.resource.replace(/^(www\\.)/, '');\n\t\t\t\t\t}\n\n\t\t\t\t\tif (utm_source !== null) {\n\t\t\t\t\t\tstore('utm_source', utm_source);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tself.options.include = self.options.include.filter(function (o) {\n\t\t\t\t\treturn !o.param.includes('utm');\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// store params\n\t\tfor (var i = 0; i < self.options.include.length; i++) {\n\t\t\tif(searchParams.has(self.options.include[i].param) === true && !self.options.exclude.includes(self.options.include[i].param)) {\n\t\t\t\tif(self.options.include[i].storage) {\n\t\t\t\t\tstore(self.options.include[i].storage, searchParams.get(self.options.include[i].param))\n\t\t\t\t} else {\n\t\t\t\t\tstore(self.options.include[i].param, searchParams.get(self.options.include[i].param))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// store referrer (session, not rewritten)\n\t\tif (self.options.storeReferrer) {\n\t\t\terase('referrer');\n\t\t\tif(referrer && referrer.resource !== location.resource) {\n\t\t\t\tstore('referrer', referrer.href)\n\t\t\t}\n\t\t}\n\t}\n\n\tself.read = function(storage) {\n\t\treturn read(storage);\n\t}\n\n\tself.store = function(name,value) {\n\t\treturn store(name,value);\n\t}\n\n\tself.erase = function(name) {\n\t\treturn erase(name);\n\t}\n\n\tinit();\n\treturn self;\n};\n\nexport default StoreParams;\n","import StoreParams from \"../../plugins/store-params\"\nimport AccessData from \"access-data-parser\"\nimport Cookie from \"js-cookie\"\n\nimport parseUrl from \"parse-url\";\nconst getUtmTestData = require(\"./utm_generator_tests\");\n\nif (!Array.prototype.includes) {\n\tObject.defineProperty(Array.prototype, \"includes\", {\n\t\tenumerable: false,\n\t\tvalue: function (obj) {\n\t\t\tlet newArr = this.filter(function (el) {\n\t\t\t\treturn el == obj;\n\t\t\t});\n\t\t\treturn newArr.length > 0;\n\t\t}\n\t});\n}\n\nexport default class UtmGenerator {\n\tconstructor() {\n\t\tthis.oldCookiesModel = {\n\t\t\t'__utmz=': {\n\t\t\t\t'utmcsr=': 'source',\n\t\t\t\t'utmcmd=': 'medium',\n\t\t\t\t'utmccn=': 'campaign',\n\t\t\t\t'utmctr=': 'term',\n\t\t\t\t'utmcct=': 'content',\n\t\t\t\t'utmgclid=': 'gclid',\n\t\t\t},\n\t\t\t'drfbaid=': 'fbaid',\n\t\t\t'drlicid=': 'licid',\n\t\t};\n\t\tthis.storeModel = [\n\t\t\t{url: 'utm_source', \tutm: 'source'},\n\t\t\t{url: 'utm_medium', \tutm: 'medium'},\n\t\t\t{url: 'utm_campaign', \tutm: 'campaign'},\n\t\t\t{url: 'utm_content', \tutm: 'content'},\n\t\t\t{url: 'utm_term', \t\tutm: 'term'},\n\t\t\t{url: 'gclid', \t\t\tutm: 'gclid'},\n\t\t\t{url: 'fbaid', \t\t\tutm: 'fbaid'},\n\t\t\t{url: 'licid', \t\t\tutm: 'licid'},\n\t\t\t{url: 'mkt_tok', \t\tutm: 'mkt_tok'},\n\t\t];\n\t\tthis.prefix = 'dr_';\n\t\tthis.referrer = null;\n\t\tthis.params = {};\n\t\tthis.analyzedParams = {};\n\t\tthis.utm = {\n\t\t\tsource: '-',\n\t\t\tmedium: '-',\n\t\t\tcampaign: '-',\n\t\t\tcontent: '-',\n\t\t\tterm: '-',\n\t\t\tgclid: '-',\n\t\t\tfbaid: '-',\n\t\t\tlicid: '-',\n\t\t\tmkt_tok: '-',\n\t\t};\n\t\tthis.utmStorage = null;\n\t\tthis.hasOldUtm = false;\n\t\tthis.isTestMode = false;\n\t\tthis.testParams = {};\n\n\t\ttry {\n\t\t\t// Do main stuff\n\t\t\tthis.processUtmData();\n\t\t\tthis.setDrUTM();\n\t\t\t// Do tests\n\t\t\tif (this.isTestMode) {\n\t\t\t\tthis.testUtmGenerator();\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(e);\n\t\t\tif (typeof Sentry !== 'undefined') {\n\t\t\t\tSentry.captureException(e);\n\t\t\t}\n\t\t}\n\t}\n\n\tprocessUtmData() {\n\t\tthis.cleanStore();\n\t\tthis.storeParams();\n\t\tthis.getStoredParams();\n\t\tthis.analyzeParams();\n\t\t// Set UTM data\n\t\tfor (let key in this.analyzedParams) {\n\t\t\tif (this.analyzedParams[key]) {\n\t\t\t\tthis.setParam(key, decodeURIComponent(this.analyzedParams[key]).trim());\n\t\t\t}\n\t\t}\n\t\t// Do some adjustments to match GA tracking\n\t\tthis.analyseReferrer();\n\t\t// Start debugging\n\t\tif (typeof Sentry !== 'undefined'\n\t\t\t&& this.utmStorage.read('referrer')\n\t\t\t&& this.getParam('source').match('facebook|instagram|linkedin|twitter|quora|reddit')\n\t\t\t&& this.getParam('medium') !== 'social'\n\t\t) {\n\t\t\tSentry.captureMessage('UTM Parser - medium channel incorrect', {\n\t\t\t\tlevel: 'info',\n\t\t\t\ttags: {\n\t\t\t\t\ttype: \"UtmParser\",\n\t\t\t\t},\n\t\t\t\textra: {\n\t\t\t\t\t'URL': document.location.href,\n\t\t\t\t\t'Referrer': document.referrer,\n\t\t\t\t\t'Referrer Info': this.referrer,\n\t\t\t\t\t'UTM': this.utm,\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\t// End debugging\n\t\tthis.maybeCollectOldUtmData();\n\t\t// Check do we need to update UTM params in local store\n\t\tif (!this.needToUpdateUTMs() && !this.hasOldUtm) {\n\t\t\treturn false;\n\t\t}\n\t\t// Update local store\n\t\tfor (let i in this.storeModel) {\n\t\t\tlet param = this.storeModel[i];\n\t\t\twindow.localStorage.setItem(this.prefix + param['url'], this.getParam(param['utm']));\n\t\t}\n\t}\n\n\tsetDrUTM() {\n\t\t// Put found utm into global window.dr.utm\n\t\twindow.dr = window.dr || {};\n\t\twindow.dr.utm = window.dr.utm || {};\n\t\tfor (let i in this.storeModel) {\n\t\t\tlet param = this.storeModel[i];\n\t\t\twindow.dr.utm[param['utm']] = window.localStorage.getItem(this.prefix + param['url']);\n\t\t}\n\t}\n\n\tcleanStore() {\n\t\tfor (let i in this.storeModel) {\n\t\t\tlet param = this.storeModel[i];\n\t\t\twindow.sessionStorage.removeItem(this.prefix + param['url']);\n\t\t}\n\t}\n\n\tstoreParams() {\n\t\t// Collect current UTM data to session store\n\t\t// Only existed and relevant params will be written to session store\n\t\tthis.utmStorage = new StoreParams({\n\t\t\tstorage: 'sessionStorage',\n\t\t\tstoreReferrer: true,\n\t\t\tstoreUTMs: true,\n\t\t\tstorePrefix: this.prefix,\n\t\t\tinclude: [\n\t\t\t\t{param: 'gclid', rewrite: true},\n\t\t\t\t{param: 'fbclid', storage: 'fbaid', rewrite: true},\n\t\t\t\t{param: 'li_fat_id', storage: 'licid', rewrite: true},\n\t\t\t\t{param: 'mkt_tok', rewrite: true},\n\t\t\t]\n\t\t});\n\t\tif (this.isTestMode) {\n\t\t\t// Rewrite current data in sessionStorage by test data\n\t\t\tthis.setTestData();\n\t\t}\n\t\t// Add (not set) here for keeping union logic according to GA that\n\t\t// utm_source, utm_medium and utm_campaign must always be set.\n\t\t// utm_term also has default value.\n\t\t// Also, this.isValidUTMs() will always return true for these known cases\n\t\tif (this.utmStorage.read('gclid')) {\n\t\t\t// Google payed advertising\n\t\t\tif (!this.utmStorage.read('utm_source')) {\n\t\t\t\tthis.utmStorage.store('utm_source', 'google');\n\t\t\t}\n\t\t\tthis.utmStorage.store('utm_medium', 'cpc');\n\t\t} else if (this.utmStorage.read('licid')) {\n\t\t\t// Linkedin payed advertising\n\t\t\tif (!this.utmStorage.read('utm_source')) {\n\t\t\t\tthis.utmStorage.store('utm_source', 'linkedin');\n\t\t\t}\n\t\t\tif (!this.utmStorage.read('utm_medium')) {\n\t\t\t\tthis.utmStorage.store('utm_medium', 'display');\n\t\t\t}\n\t\t} else if (this.utmStorage.read('mkt_tok')) {\n\t\t\t// Marketo email\n\t\t\tif (!this.utmStorage.read('utm_source')) {\n\t\t\t\tthis.utmStorage.store('utm_source', 'drdatabase');\n\t\t\t}\n\t\t\tif (!this.utmStorage.read('utm_medium')) {\n\t\t\t\tthis.utmStorage.store('utm_medium', 'marketo');\n\t\t\t}\n\t\t} else if (this.utmStorage.read('fbaid')) {\n\t\t\t// Facebook click id\n\t\t\tif (!this.utmStorage.read('utm_source')) {\n\t\t\t\tthis.utmStorage.store('utm_source', 'facebook');\n\t\t\t}\n\t\t\tif (!this.utmStorage.read('utm_medium')) {\n\t\t\t\tthis.utmStorage.store('utm_medium', 'social');\n\t\t\t}\n\t\t}\n\t\tif (this.utmStorage.read('utm_source')) {\n\t\t\tif (!this.utmStorage.read('utm_medium')) {\n\t\t\t\tthis.utmStorage.store('utm_medium', '(not set)');\n\t\t\t}\n\t\t\tif (!this.utmStorage.read('utm_campaign')) {\n\t\t\t\tthis.utmStorage.store('utm_campaign', '(not set)');\n\t\t\t}\n\t\t}\n\t\tif (this.utmStorage.read('referrer')) {\n\t\t\tthis.referrer = parseUrl(this.utmStorage.read('referrer'));\n\t\t\tlet organicDomain = this.getOrganicDomain(this.referrer.resource);\n\t\t\tif (!this.utmStorage.read('utm_term') && organicDomain) {\n\t\t\t\tthis.utmStorage.store('utm_term', this.getOrganicUtmTerm(organicDomain));\n\t\t\t}\n\t\t}\n\t}\n\n\tgetStoredParams() {\n\t\t// Process referrer\n\t\tif (this.utmStorage.read('referrer')) {\n\t\t\tlet referrer = this.utmStorage.read('referrer');\n\t\t\tif (this.isValidUTMs() || (this.isDrRelatedReferrer() && this.isSavedSourceNotImportant())) {\n\t\t\t\t// Keep referrer for analyse in Sentry reports\n\t\t\t\tthis.setParam('referrer', referrer);\n\t\t\t\t// According to GA logic if URL has valid utm params\n\t\t\t\t// (e.g. url has utm_source) - referrer must be ignored\n\t\t\t\tthis.utmStorage.erase('referrer');\n\t\t\t\treferrer = null;\n\t\t\t}\n\t\t\tthis.params['referrer'] = referrer;\n\t\t}\n\t\t// Process other params\n\t\tfor (let i in this.storeModel) {\n\t\t\tlet param = this.storeModel[i];\n\t\t\tthis.params[param['url']] = this.utmStorage.read(param['url']);\n\t\t}\n\t}\n\n\tanalyzeParams() {\n\t\tthis.analyzedParams = new AccessData(this.params);\n\t\t// Add additional params\n\t\t['fbaid', 'licid'].forEach((value) => {\n\t\t\tif (this.params[value]) {\n\t\t\t\tthis.analyzedParams[value] = this.params[value];\n\t\t\t}\n\t\t});\n\t\t// Fix incorrect params\n\t\tif (this.analyzedParams['source'] === 'googleads' && this.analyzedParams['channel'] === 'paid') {\n\t\t\tthis.analyzedParams['source'] = 'google';\n\t\t} else if (this.analyzedParams['source'] === 'direct' && this.analyzedParams['channel'] === 'direct') {\n\t\t\tthis.analyzedParams['source'] = '(direct)';\n\t\t\tthis.analyzedParams['medium'] = '(none)';\n\t\t\tthis.analyzedParams['campaign'] = '(direct)';\n\t\t}\n\t}\n\n\tanalyseReferrer() {\n\t\t// If there are no utm params in link - we need to process referrer to get traffic source\n\t\tif (this.utmStorage.read('referrer')) {\n\t\t\tlet clearDomain = this.replaceWwwDomain(this.referrer.resource),\n\t\t\t\torganicDomain = this.getOrganicDomain(this.referrer.resource),\n\t\t\t\tsocialDomain = this.getSocialDomain(this.referrer.resource),\n\t\t\t\tcontent = this.referrer.pathname ? this.referrer.pathname : '/';\n\t\t\tif (organicDomain) {\n\t\t\t\t// Organic source\n\t\t\t\tthis.setParam('channel', 'organic');\n\t\t\t\tthis.setParam('source', organicDomain);\n\t\t\t\tthis.setParam('medium', 'organic');\n\t\t\t\tthis.setParam('campaign', '(organic)');\n\t\t\t} else if (this.getParam('medium') === 'social' || socialDomain) {\n\t\t\t\t// Social Media source\n\t\t\t\tthis.setParam('channel', 'social');\n\t\t\t\tthis.setParam('source', socialDomain);\n\t\t\t\tthis.setParam('medium', 'social');\n\t\t\t\tthis.setParam('campaign', '(social)');\n\t\t\t\tthis.setParam('content', content);\n\t\t\t} else {\n\t\t\t\t// Referrer source\n\t\t\t\tthis.setParam('channel', 'referrer');\n\t\t\t\tthis.setParam('source', clearDomain);\n\t\t\t\tthis.setParam('medium', 'referral');\n\t\t\t\tthis.setParam('campaign', '(referral)');\n\t\t\t\tthis.setParam('content', content);\n\t\t\t}\n\t\t}\n\t}\n\n\tmaybeCollectOldUtmData() {\n\t\tif (!Cookie.get('__utmz')) return false;\n\t\tlet oldUtms = {};\n\t\tfor (var cookieName in this.oldCookiesModel) {\n\t\t\tvar cookie = this.getOldUtmValue(document.cookie, cookieName, ';');\n\t\t\tif (cookie) {\n\t\t\t\tif (cookie && typeof this.oldCookiesModel[cookieName] === 'string') {\n\t\t\t\t\toldUtms[this.oldCookiesModel[cookieName]] = decodeURIComponent(cookie).trim();\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tvar cookieStructure = this.oldCookiesModel[cookieName];\n\t\t\t\tfor (var paramName in cookieStructure) {\n\t\t\t\t\tvar paramValue = this.getOldUtmValue(cookie, paramName);\n\t\t\t\t\tif(paramValue) {\n\t\t\t\t\t\toldUtms[cookieStructure[paramName]] = decodeURIComponent(paramValue).trim();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlet clearName = cookieName.replace('=', '');\n\t\t\t\tlet cookieDomainMatch = window.location.hostname.match(/\\..+\\..+$/);\n\t\t\t\tif (cookieDomainMatch) {\n\t\t\t\t\tCookie.remove(clearName, {path: '/', domain: cookieDomainMatch[0]});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif(Object.keys(oldUtms).length\n\t\t\t&& oldUtms.source && oldUtms.source !== '(direct)'\n\t\t\t&& oldUtms.medium && oldUtms.medium !== 'organic'\n\t\t\t&& oldUtms.campaign && oldUtms.campaign !== '(organic)'\n\t\t\t&& !this.isValidUTMs()\n\t\t\t&& !this.isReferrerMoreImportant()\n\t\t) {\n\t\t\tfor(let name in oldUtms) {\n\t\t\t\tif(oldUtms[name]) {\n\t\t\t\t\tthis.utm[name] = oldUtms[name];\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.hasOldUtm = true;\n\t\t}\n\t}\n\n\t// Helper functions\n\tneedToUpdateUTMs() {\n\t\t// Functions are placed depending on their priority\n\t\treturn this.isValidUTMs()\n\t\t\t|| this.isReferrerMoreImportant()\n\t\t\t|| this.isTrafficSourceMoreImportant();\n\t}\n\n\tisValidUTMs() {\n\t\treturn this.utmStorage.read('utm_source')\n\t\t\t&& this.utmStorage.read('utm_medium')\n\t\t\t&& this.utmStorage.read('utm_campaign');\n\t}\n\n\tisReferrerMoreImportant() {\n\t\treturn this.utmStorage.read('referrer')\n\t\t\t&& this.referrer\n\t\t\t&& !this.getOrganicDomain(this.referrer.resource);\n\t}\n\n\tisDrRelatedReferrer() {\n\t\treturn this.referrer\n\t\t\t&& this.referrer.resource.match(/\\.datarobot\\.com$/);\n\t}\n\n\tisSavedSourceNotImportant() {\n\t\treturn window.localStorage.getItem(this.prefix + 'utm_source')\n\t\t\t&& window.localStorage.getItem(this.prefix + 'utm_source') !== '(direct)'\n\t}\n\n\tisTrafficSourceMoreImportant() {\n\t\t// Compare current UTM data with stored UTM data\n\t\tlet localSource = window.localStorage.getItem(this.prefix + 'utm_source');\n\t\tlet localMedium = window.localStorage.getItem(this.prefix + 'utm_medium');\n\t\tlet localCampaign = window.localStorage.getItem(this.prefix + 'utm_campaign');\n\t\treturn this.isEmptyValue(localSource)\n\t\t\t|| localSource === '(direct)'\n\t\t\t|| (localMedium === 'organic' && localCampaign === '(organic)'\n\t\t\t\t&& !this.isEmpty('source')\n\t\t\t\t&& this.getParam('source') !== '(direct)')\n\t}\n\n\tgetOrganicDomain(domain) {\n\t\tdomain = this.replaceWwwDomain(domain);\n\t\tlet searchEng = {\n\t\t\t'google': '^google\\\\.(com(\\\\.[a-z]{2})?$|[a-z]{2}$)',\t// search, mail, etc. on high-level domains\n\t\t\t'ask': '(^|\\\\.)ask\\\\.com$',\t\t\t\t\t\t\t\t// many sub-domains with ask.com but only search\n\t\t\t'baidu': '^(m\\\\.)?baidu\\\\.com$',\t\t\t\t\t\t// search, mail, etc. on high-level domains\n\t\t\t'duckduckgo': '(^|\\\\.)duckduckgo\\\\.com$',\t\t\t\t// only search\n\t\t\t'ecosia': '^ecosia\\\\.org$',\t\t\t\t\t\t\t\t// only search\n\t\t\t'lycos': '^search(\\\\d+)?\\\\.lycos\\\\.com$',\t\t\t\t// search, mail, etc. on high-level domains\n\t\t\t'bing': '(^|\\\\.)bing\\\\.com$',\t\t\t\t\t\t\t// search, mail, etc. but only one domain\n\t\t\t'qwant': '^qwant\\\\.com$',\t\t\t\t\t\t\t\t// search, mail, etc. on high-level domains\n\t\t\t'sogou': '(^|\\\\.)sogou\\\\.com$',\t\t\t\t\t\t\t// only search\n\t\t\t'startpage': '(^|\\\\.)startpage\\\\.com$',\t\t\t\t\t// only search\n\t\t\t'webcrawler': '^webcrawler\\\\.com$',\t\t\t\t\t\t// only search\n\t\t\t'yahoo': 'search\\\\.yahoo\\\\.(com|co\\\\.[a-z]{2})$',\t\t// search, mail, etc. on high-level domains\n\t\t\t'yandex': '^yandex\\\\.(com(\\\\.[a-z]{2})?|[a-z]{2})$',\t// search, mail, etc. on high-level domains\n\t\t\t'daum': 'search\\\\.daum\\\\.net$',\t\t\t\t\t\t\t// search, mail, etc. on high-level domains\n\t\t\t'naver': 'search\\\\.naver\\\\.com$',\t\t\t\t\t\t// search, mail, etc. on high-level domains\n\t\t\t'aol': 'search\\\\.aol\\\\.com$',\t\t\t\t\t\t\t// search, mail, etc. on high-level domains\n\t\t\t'seznam': 'search\\\\.seznam\\\\.cz$',\t\t\t\t\t\t// search, mail, etc. but domain structure is not clear\n\t\t\t'rakuten': 'search\\\\.rakuten\\\\.co\\\\.[a-z]{2}$',\t\t\t// search and shop portal with high-level domains\n\t\t\t'biglobe': 'search\\\\.biglobe\\\\.ne\\\\.[a-z]{2}$',\t\t\t// search, mail, etc. on high-level domains\n\t\t\t'goo.ne': 'search\\\\.goo\\\\.ne\\\\.[a-z]{2}$',\t\t\t\t// search, mail, etc. on high-level domains\n\t\t\t'search.smt.docomo': 'search\\\\.smt\\\\.docomo\\\\.',\t\t// search portal on high-level domains\n\t\t\t'onet': '^szukaj\\\\.onet\\\\.pl$',\t\t\t\t\t\t\t// search, mail, etc. on high-level domains\n\t\t\t'kvasir': '^kvasir\\\\.no$',\t\t\t\t\t\t\t\t// only search\n\t\t\t'startsiden': '^startsiden\\\\.no$',\t\t\t\t\t\t// only search\n\t\t\t'centrum.cz': 'search\\\\.centrum\\\\.cz$',\t\t\t\t\t// search, mail, etc. on high-level domains\n\t\t\t'tut.by': 'search\\\\.tut\\\\.by$',\t\t\t\t\t\t\t// search, mail, etc. on high-level domains\n\t\t\t'so.com': '^so\\\\.com$',\t\t\t\t\t\t\t\t\t// search, mail, etc. on high-level domains\n\t\t\t'auone': 'search\\\\.auone\\\\.[a-z]{2}$',\t\t\t\t\t// search, mail, etc. on high-level domains\n\t\t};\n\t\tfor (let name in searchEng) {\n\t\t\tif (domain.match(new RegExp(searchEng[name], 'i'))) {\n\t\t\t\treturn name;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tgetOrganicUtmTerm(name) {\n\t\t// If server setting allow put full url in document.referrer we can fill\n\t\t// utm_term value with search terms user used to find current page\n\t\t// Example: https://www.baidu.com/s?wd=datarobot\n\t\tlet searchEng = 'google:q ask:q baidu:word/wd duckduckgo:q ecosia:q lycos:query/q bing:q qwant:q sogou:query webcrawler:q yahoo:p/q yandex:text daum:q naver:query aol:query/q seznam:q rakuten:qt biglobe:q goo.ne:MT search.smt.docomo:MT onet:qt/q kvasir:q startsiden:q centrum.cz:q tut.by:query so.com:q auone:q'.split(' ');\n\t\tfor (let i in searchEng) {\n\t\t\tlet engine = searchEng[i].split(':');\n\t\t\tlet domain = engine[0];\n\t\t\tif (domain === name) {\n\t\t\t\tlet searchParams = engine[1].split('/');\n\t\t\t\tfor (let j = 0; j < searchParams.length; j++) {\n\t\t\t\t\tlet param = searchParams[j];\n\t\t\t\t\tif (typeof this.referrer.query[param] !== 'undefined') {\n\t\t\t\t\t\treturn this.referrer.query[param];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn '(not provided)';\n\t}\n\n\tgetSocialDomain(domain) {\n\t\tdomain = this.replaceWwwDomain(domain);\n\t\tlet socialMedia = {\n\t\t\t'facebook': '(^|\\\\.)facebook\\\\.com$',\n\t\t\t'instagram': '(^|\\\\.)instagram\\\\.com$',\n\t\t\t'linkedin': '(^|\\\\.)linkedin\\\\.|(^|\\\\.)lnkd\\\\.in$',\n\t\t\t'youtube': '(^|\\\\.)youtube\\\\.com$',\n\t\t\t'twitter': '^twitter\\\\.com$|^t\\\\.co$',\n\t\t\t'quora': '(^|\\\\.)quora\\\\.com$',\n\t\t\t'reddit': '(^|\\\\.)reddit\\\\.com$',\n\t\t};\n\t\tfor (let name in socialMedia) {\n\t\t\tif (domain.match(new RegExp(socialMedia[name], 'i'))) {\n\t\t\t\treturn name;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\treplaceWwwDomain(domain) {\n\t\tif (domain.match(/^www\\./)) {\n\t\t\tdomain = domain.replace(/^www\\./, '');\n\t\t}\n\t\treturn domain;\n\t}\n\n\tisEmptyValue(value) {\n\t\treturn !value || value === '-';\n\t}\n\n\tisEmpty(param) {\n\t\treturn this.isEmptyValue(this.getParam(param));\n\t}\n\n\tgetParam(param) {\n\t\treturn this.utm[param];\n\t}\n\n\tsetParam(param, value) {\n\t\tthis.utm[param] = value;\n\t}\n\n\tgetOldUtmValue(source, paramName, separator) {\n\t\tif (!source || source === \"\" || !paramName || paramName === \"\") return null;\n\t\tif (!separator || separator === \"\") separator = '|';\n\t\tvar utm = null;\n\t\tvar cookieNameStart = source.indexOf(paramName);\n\t\tvar valueStart = cookieNameStart + paramName.indexOf(\"=\") + 1;\n\t\tif (cookieNameStart > -1) {\n\t\t\tvar valueEnd = source.indexOf(separator, cookieNameStart);\n\t\t\tif (valueEnd < 0) {\n\t\t\t\tvalueEnd = source.length;\n\t\t\t}\n\t\t\tutm = source.substring(valueStart, valueEnd);\n\t\t}\n\t\treturn utm;\n\t}\n\n\t// Static functions\n\tstatic getUtmValue(name) {\n\t\tif (!dr.hasOwnProperty('utm')) {\n\t\t\tdr.utm = {}\n\t\t}\n\t\treturn dr.utm.hasOwnProperty(name) && dr.utm[name] ? dr.utm[name] : UtmGenerator.getDefParamValue(name, 'utm');\n\t}\n\n\tstatic getCtaValue(name) {\n\t\tif (!dr.hasOwnProperty('cta')) {\n\t\t\tdr.cta = {}\n\t\t}\n\t\treturn dr.cta.hasOwnProperty(name) && dr.cta[name] ? dr.cta[name] : UtmGenerator.getDefParamValue(name, 'cta');\n\t}\n\n\tstatic getDefParamValue(name, type) {\n\t\tvar model = {\n\t\t\tutm: {\n\t\t\t\tsource: 'utm_source',\n\t\t\t\tmedium: 'utm_medium',\n\t\t\t\tcampaign: 'utm_campaign',\n\t\t\t\tcontent: 'utm_content',\n\t\t\t\tterm: 'utm_term',\n\t\t\t\tgclid: 'gclid',\n\t\t\t\tfbaid: 'fbclid',\n\t\t\t\tlicid: 'li_fat_id',\n\t\t\t},\n\t\t\tcta: {\n\t\t\t\tid: 'cta_id',\n\t\t\t\tname: 'cta_name',\n\t\t\t\tcreative: 'cta_creative',\n\t\t\t\tposition: 'positions',\n\t\t\t},\n\t\t};\n\t\tvar value = '-';\n\t\tvar tmp = [];\n\n\t\tlocation.search.substr(1).split(\"&\").forEach(function (item) {\n\t\t\ttmp = item.split(\"=\");\n\t\t\tif (tmp[0] === model[type][name]) {\n\t\t\t\tvalue = tmp[1];\n\t\t\t\treturn false;\t// to break forEach function\n\t\t\t}\n\t\t});\n\n\t\treturn value;\n\t}\n\n\t// Tests\n\ttestUtmGenerator(testGroup = '') {\n\t\tconsole.log('<-------start tests------->');\n\t\tlet referralLinks = getUtmTestData('referral');\n\t\tfor (let group in referralLinks) {\n\t\t\tif (testGroup && group !== testGroup) continue;\n\t\t\tfor (let i in referralLinks[group]) {\n\t\t\t\tconsole.log(referralLinks[group][i]);\n\n\t\t\t\t// Process utm data\n\t\t\t\tthis.testParams = {'referrer': referralLinks[group][i]};\n\t\t\t\tthis.processUtmData();\n\n\t\t\t\t// Compare test results\n\t\t\t\tif (this.getParam('medium') !== group) {\n\t\t\t\t\tconsole.error('Not match!')\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t// Clean current utm data\n\t\t\t\tthis.clearUtmObj();\n\t\t\t\tconsole.log('-------');\n\t\t\t}\n\t\t}\n\t\tconsole.log('<-------end tests------->');\n\t}\n\n\tsetTestData() {\n\t\tthis.cleanStore();\n\t\tfor (let name in this.testParams) {\n\t\t\twindow.sessionStorage.setItem(this.prefix + name, this.testParams[name])\n\t\t}\n\t}\n\n\tclearUtmObj() {\n\t\tfor (let key in this.utm) {\n\t\t\tthis.setParam(key, '-');\n\t\t}\n\t}\n}\n","navigator.sayswho= (function(){\n\tvar ua= navigator.userAgent, tem,\n\t\tM= ua.match(/(opera|chrome|crios|safari|firefox|msie|trident(?=\\/))\\/?\\s*(\\d+)/i) || [],\n\t\tmobile = /Android.+Mobile|webOS|iPhone|iPod|BlackBerry|IEMobile|Opera Mini/i.test(ua);\n\tif(/trident/i.test(M[1])){\n\t\ttem= /\\brv[ :]+(\\d+)/g.exec(ua) || [];\n\t\treturn {\n\t\t\t'browser': 'IE',\n\t\t\t'version': tem[1] || '',\n\t\t\t'mobile': mobile,\n\t\t};\n\t}\n\tif(M[1]=== 'Chrome'){\n\t\ttem= ua.match(/\\b(OPR|Edge)\\/(\\d+)/);\n\t\tif(tem!= null) return {\n\t\t\t'browser': tem[1].replace('OPR', 'Opera'),\n\t\t\t'version': tem[2] || '',\n\t\t\t'mobile': mobile,\n\t\t}\n\t}\n\tM= M[2]? [M[1], M[2]]: [navigator.appName, navigator.appVersion, '-?'];\n\tif((tem= ua.match(/version\\/(\\d+)/i))!= null) M.splice(1, 1, tem[1]);\n\tif(M[0]=== 'CriOS') M[0]= 'Chrome';\n\treturn {\n\t\t'browser': M[0],\n\t\t'version': M[1],\n\t\t'mobile': mobile,\n\t};\n})();\n","function getUtmTestData(type) {\n\tlet data = {\n\t\tmanual: {\n\t\t\tutm: [\n\t\t\t\t'https://localhost:3000/?utm_source=111',\n\t\t\t\t'https://localhost:3000/?utm_source=112&utm_medium=211',\n\t\t\t\t'https://localhost:3000/?utm_source=113&utm_campaign=311',\n\t\t\t\t'https://localhost:3000/?utm_source=114&utm_medium=213&utm_campaign=312',\n\t\t\t\t'https://localhost:3000/resources/banking-industry-overview/?utm_source=tsource&utm_medium=tmedium&utm_campaign=DEMO2021&utm_term=%2Bdata%2Brobot&utm_content=variation4',\n\t\t\t\t'https://localhost:3000/?gclid=411',\n\t\t\t\t'https://localhost:3000/?utm_source=115&gclid=412',\n\t\t\t\t'https://localhost:3000/?utm_source=116&utm_medium=214&gclid=413',\n\t\t\t\t'https://localhost:3000/?utm_source=117&utm_campaign=313&gclid=414',\n\t\t\t\t'https://localhost:3000/?utm_source=118&utm_medium=215&utm_campaign=314&gclid=415',\n\t\t\t\t'https://localhost:3000/?fbclid=1234',\n\t\t\t\t'https://localhost:3000/?li_fat_id=1234',\n\t\t\t],\n\t\t\tmarketo: [\n\t\t\t\t'https://localhost:3000/webinars/combating-aml-compliance-problem/?utm_content=Event%20Reminder%20&utm_campaign=FY22-Q2-GLOB-FD-FIN-TRANSFORMING-AML-AND-KY-EXW&utm_medium=email-marketing&utm_source=marketo&utm_term=Banking%20and%20Finance%20Customers%20and%20Prospects&utm_source=automationanywhere&utm_medium=techalliance&utm_campaign=WAARPA21A&mkt_tok=MDQ1LUxRUy0wMjIAAAF8T8vba-SYckl5Z2G3yK4o_VoPfLL_5L9wPK7D1LDj8-Z5WemHTjTpdFUXcsvB4mYOUUJ3d-YNScTbymK5TLWjJnCdNRlHK4jNrr1UgyHDlmXe8g',\n\t\t\t\t'https://localhost:3000/preference-center/?email=natali.surhova@datarobot.com&mkt_tok=Nzg5LVVXVi01OTcAAAF8S0kjEjN4RARju0aReAyH7vnzQFSUQah4Ezf88yvpv7qcOOBmLzqYRi1qhobtADi85WKu305h3c07n-Iha4zNN8aO2Q9hIkbpgbUrl8S0BYY'\n\t\t\t],\n\t\t},\n\t\treferral: {\n\t\t\t'(none)': [\n\t\t\t\t'https://pathfinder.datarobot.com/',\n\t\t\t\t'https://community.datarobot.com/',\n\t\t\t],\n\t\t\tsocial: [\n\t\t\t\t'https://www.facebook.com/',\n\t\t\t\t'https://www.l.facebook.com/',\n\t\t\t\t'https://www.m.facebook.com/',\n\t\t\t\t'https://www.lm.facebook.com/',\n\t\t\t\t'https://www.ja-jp.facebook.com/',\n\t\t\t\t'https://www.instagram.com/',\n\t\t\t\t'https://www.linkedin.com/',\n\t\t\t\t'https://www.youtube.com/',\n\t\t\t\t'https://twitter.com/',\n\t\t\t\t'https://t.co/',\n\t\t\t],\n\t\t\torganic: [\n\t\t\t\t'https://www.google.com/',\n\t\t\t\t'https://www.google.com.ua/',\n\t\t\t\t'https://www.google.de/',\n\t\t\t\t'https://www.ask.com/',\n\t\t\t\t'https://nortonsafe.search.ask.com/',\n\t\t\t\t'https://int.search.tb.ask.com/',\n\t\t\t\t'https://www.search.ask.com/',\n\t\t\t\t'https://www.baidu.com/',\n\t\t\t\t'https://www.m.baidu.com/',\n\t\t\t\t'https://duckduckgo.com/',\n\t\t\t\t'https://html.duckduckgo.com/',\n\t\t\t\t'https://www.ecosia.org/search?q=datarobot',\n\t\t\t\t'https://search.lycos.com/',\n\t\t\t\t'https://search14.lycos.com/',\n\t\t\t\t'https://www.bing.com/',\n\t\t\t\t'https://www2.bing.com/',\n\t\t\t\t'https://m2.cn.bing.com/',\n\t\t\t\t'https://cn.bing.com/',\n\t\t\t\t'https://sogou.com/',\n\t\t\t\t'https://english.sogou.com/',\n\t\t\t\t'https://startpage.com/',\n\t\t\t\t'https://webcrawler.com/',\n\t\t\t\t'https://search.yahoo.com/',\n\t\t\t\t'https://search.yahoo.co.jp/',\n\t\t\t\t'https://yandex.ru/',\n\t\t\t\t'https://yandex.com.tr/',\n\t\t\t\t'https://search.daum.net/',\n\t\t\t\t'https://search.naver.com/',\n\t\t\t\t'https://search.aol.com/',\n\t\t\t\t'https://r.search.aol.com/',\n\t\t\t\t'https://search.seznam.cz/',\n\t\t\t\t'https://websearch.rakuten.co.jp/',\n\t\t\t\t'https://cgi.search.biglobe.ne.jp/',\n\t\t\t\t'https://search.goo.ne.jp/',\n\t\t\t\t'https://search.smt.docomo.ne.jp/',\n\t\t\t\t'https://news.search.smt.docomo.ne.jp/',\n\t\t\t\t'https://szukaj.onet.pl/',\n\t\t\t\t'https://www.kvasir.no/alle?q=datarobot',\n\t\t\t\t'https://www.startsiden.no/',\n\t\t\t\t'https://search.centrum.cz/',\n\t\t\t\t'https://search.tut.by/',\n\t\t\t\t'https://www.so.com/',\n\t\t\t\t'https://search.auone.jp/',\n\t\t\t],\n\t\t\treferral: [\n\t\t\t\t'https://www.github.com/',\n\t\t\t\t'https://www.mail.google.com/',\n\t\t\t\t'https://maps.google.com/',\n\t\t\t\t'https://google.community.com/',\n\t\t\t\t'https://googleaps.com/',\n\t\t\t\t'https://www.flask.com/',\n\t\t\t\t'https://map.baidu.com/',\n\t\t\t\t'https://me.baidu.com/',\n\t\t\t\t'https://www.mail.lycos.com/',\n\t\t\t\t'http://sg.news.yahoo.com/',\n\t\t\t\t'https://map.yahoo.co.jp/',\n\t\t\t\t'https://mail.yandex.by/',\n\t\t\t\t'https://mail.daum.net/',\n\t\t\t\t'https://section.blog.naver.com/',\n\t\t\t\t'https://mail.aol.com/',\n\t\t\t\t'https://slovnik.seznam.cz/',\n\t\t\t\t'https://travel.rakuten.co.jp/',\n\t\t\t\t'https://auth.sso.biglobe.ne.jp/mail/',\n\t\t\t\t'https://news.goo.ne.jp/',\n\t\t\t\t'https://service.smt.docomo.ne.jp/portal/search/src/search_how.html',\n\t\t\t\t'https://gameplanet.onet.pl/',\n\t\t\t\t'https://mail.tut.by/',\n\t\t\t\t'http://news.so.com/',\n\t\t\t\t'https://article.auone.jp/',\n\t\t\t],\n\t\t}\n\t};\n\n\treturn data[type];\n}\n\nmodule.exports = getUtmTestData;\n","window.shareThis = function (href) {\n\tlet top = (screen.height / 2) - 200;\n\tlet left = (screen.width / 2) - 320;\n\twindow.open(\n\t\thref,\n\t\t'Share',\n\t\t'height=400, width=640, toolbar=no, menubar=no, scrollbars=no, resizable=yes, location=no, directories=no, status=no, top=' + top.toString() + ', left=' + left.toString()\n\t);\n};\n","// appsBrowser JS, for content block in new theme \n// datarobot6/views/gutenberg/content/dr-apps-browser.twig\n\ndocument.addEventListener('DOMContentLoaded', function() {\n // Helper function to toggle tabs\n const toggleTabs = (tabs, panels, activeTabClass, activePanelClass) => {\n tabs.forEach((tab, index) => {\n tab.addEventListener('click', () => {\n // Remove active class from all tabs and hide all panels\n tabs.forEach(t => t.classList.remove(activeTabClass));\n if (panels) panels.forEach(p => p.classList.remove(activePanelClass));\n\n // Add active class to the clicked tab and show the corresponding panel\n tab.classList.add(activeTabClass);\n if (panels) panels[index].classList.add(activePanelClass);\n });\n });\n\n // Open the first tab and panel by default\n if (tabs.length > 0) {\n tabs[0].classList.add(activeTabClass);\n if (panels) panels[0].classList.add(activePanelClass);\n }\n };\n\n // Handle mobile accordion (js-accordionWrapper)\n const accordionWrapper = document.querySelector('.js-accordionWrapper');\n if (accordionWrapper) {\n const accordionTabs = accordionWrapper.querySelectorAll('.accordionTabToggle');\n toggleTabs(accordionTabs, null, '-tabOpen', null);\n }\n\n // Handle desktop accordion (js-accordionPanelWrapper)\n const desktopWrapper = document.querySelector('.js-accordionPanelWrapper');\n if (desktopWrapper) {\n const desktopTabs = desktopWrapper.querySelectorAll('.accordionPanelToggle');\n const desktopSlides = desktopWrapper.querySelectorAll('.accordionPanel__slide');\n toggleTabs(desktopTabs, desktopSlides, '-tabOpen', '-panelVisible');\n }\n\n // console.log(\"accordion load test\");\n});\n","// solutionsAccordion JS, for collapsing accordion block in new theme \n// datarobot6/views/gutenberg/content/dr-solutions-accordion.twig\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n const accordions = document.querySelectorAll('.solutionsAccordion__accordion');\n\n accordions.forEach(accordion => {\n const items = accordion.querySelectorAll('.solutionsAccordion__accordionItem');\n\n // Set the first accordion item to be open by default\n items.forEach((item, index) => {\n const content = item.querySelector('.solutionsAccordion__content');\n if (index === 0) {\n item.classList.add('-accordionOpen');\n content.style.maxHeight = content.scrollHeight + 'px';\n } else {\n content.style.maxHeight = 0;\n }\n\n // Add click event listener to the toggle\n const toggle = item.querySelector('.solutionsAccordion__heading');\n toggle.addEventListener('click', () => {\n const isMobile = window.innerWidth < 768;\n\n if (isMobile) {\n // For mobile, toggle the current item independently\n toggleAccordionItem(item);\n } else {\n // For desktop, close all items except the one being clicked\n items.forEach(otherItem => {\n if (otherItem !== item) {\n closeAccordionItem(otherItem);\n }\n });\n toggleAccordionItem(item);\n }\n });\n });\n });\n\n function toggleAccordionItem(item) {\n const content = item.querySelector('.solutionsAccordion__content');\n const isOpen = item.classList.contains('-accordionOpen');\n\n if (isOpen) {\n closeAccordionItem(item);\n } else {\n openAccordionItem(item);\n }\n }\n\n function openAccordionItem(item) {\n const content = item.querySelector('.solutionsAccordion__content');\n item.classList.add('-accordionOpen');\n content.style.maxHeight = content.scrollHeight + 'px';\n }\n\n function closeAccordionItem(item) {\n const content = item.querySelector('.solutionsAccordion__content');\n item.classList.remove('-accordionOpen');\n content.style.maxHeight = 0;\n }\n\n // Update accordions on resize to handle mobile/desktop behavior\n window.addEventListener('resize', () => {\n accordions.forEach(accordion => {\n const items = accordion.querySelectorAll('.solutionsAccordion__accordionItem');\n const isMobile = window.innerWidth < 768;\n\n items.forEach(item => {\n const content = item.querySelector('.solutionsAccordion__content');\n if (isMobile) {\n // For mobile, keep current state\n if (item.classList.contains('-accordionOpen')) {\n content.style.maxHeight = content.scrollHeight + 'px';\n }\n } else {\n // For desktop, ensure only one is open\n const openItem = Array.from(items).find(i => i.classList.contains('-accordionOpen'));\n if (openItem && openItem !== item) {\n closeAccordionItem(item);\n } else if (item.classList.contains('-accordionOpen')) {\n content.style.maxHeight = content.scrollHeight + 'px';\n }\n }\n });\n });\n });\n\n // console.log(\"accordion loading test\");\n});\n","// personCards JS, for content block in new theme \n// datarobot6/views/gutenberg/content/dr-person-cards.twig\n\ndocument.addEventListener('DOMContentLoaded', () => {\n\t\n // Check if at least one expanded card exists\n const expandedCards = document.querySelectorAll('.personCards__card.-expanded');\n \n // If no expanded cards are found, exit the script\n if (expandedCards.length === 0) {\n return;\n }\n\n const openButtons = document.querySelectorAll('.personCards__card');\n const overlay = document.querySelector('.personCards__popupOverlay');\n\n // Function to open the popup and lock scrolling\n function openPopup(popup) {\n if (popup) {\n popup.classList.add('-popupActive');\n overlay.classList.add('-overlayActive');\n\n // Lock the scroll on both body and html\n document.documentElement.style.overflow = 'hidden'; // Lock the scroll on \n }\n }\n\n // Function to close the popup and unlock scrolling\n function closePopup() {\n const activePopup = document.querySelector('.personCards__popup.-popupActive');\n if (activePopup) {\n activePopup.classList.remove('-popupActive');\n }\n overlay.classList.remove('-overlayActive');\n\n // Unlock the scroll on \n document.documentElement.style.overflow = ''; // Unlock the scroll on \n }\n\n // Event listeners for opening each popup\n openButtons.forEach((button) => {\n const card = button.closest('.personCards__card');\n const popup = card.querySelector('.personCards__popup');\n\n button.addEventListener('click', () => {\n openPopup(popup);\n });\n });\n\n // Event listeners for closing the popup via close button and overlay\n document.addEventListener('click', (event) => {\n if (event.target.matches('.personCards__popupClose') || event.target === overlay) {\n closePopup();\n }\n });\n\n // console.log(\"popup load test\");\n});\n\n","// productPage JS, for page template in datarobot6 theme \n// datarobot6/views/templates/product-page.twig \n\ndocument.addEventListener('DOMContentLoaded', function() {\n var siteHeader = document.querySelector('.siteHeader__navigation'); // fixed nav\n var heroSection = document.querySelector('.productPage__hero'); // hero section\n var productPageContainers = document.querySelectorAll('.productPage__container'); // content sections\n var siteMainContent = document.querySelector('.siteMain'); // main page container\n var productPageContent = document.querySelector('.productPage__content'); // main content container\n var headerHeight = siteHeader ? siteHeader.offsetHeight : 0; // get height of the nav\n var sectionPadding = 4 * 16; // 4rem converted to px (1rem = 16px)\n var isSidebarFixed = false; // track if the sidebar is currently fixed\n var sidebarLinks = []; // keep track of sidebar links\n var isManualScroll = false; // handle scroll-triggered active state\n var isMenuOpen = false; // track the mobile menu state\n\n var productPageHeadings = document.querySelectorAll('.productPage__heading');\n var mainContent = document.querySelector('.productPage__main');\n \n // Check if there are NO productPage__heading elements\n if (productPageHeadings.length > 0 && mainContent) {\n mainContent.classList.add('-sidebarPresent');\n }\n\n // Continue with sidebar creation if productPage__heading elements exist\n if (productPageHeadings.length > 0 && productPageContent) {\n\n var sidebar = document.createElement('div');\n sidebar.classList.add('productPage__sidebar');\n\n var sidebarInner = document.createElement('div');\n sidebarInner.classList.add('productPage__sidebarMenu');\n\n // Create toggle button for mobile menu\n var sidebarToggle = document.createElement('div');\n sidebarToggle.classList.add('productPage__sidebarMenuToggle');\n sidebarToggle.classList.remove('-open');\n sidebar.appendChild(sidebarToggle);\n\n // Iterate over each productPage__container and create sidebar links\n productPageContainers.forEach(function(productPageContainer, index) {\n var heading = productPageContainer.querySelector('.productPage__heading');\n\n var headingId = 'heading-' + (index + 1);\n heading.setAttribute('id', headingId);\n\n var sidebarLink = document.createElement('a');\n sidebarLink.classList.add('productPage__sidebarLink');\n sidebarLink.href = '#' + headingId;\n\n var sidebarHeading = document.createElement('div');\n sidebarHeading.classList.add('productPage__sidebarHeading');\n\n // Create icon (if present) and include it\n var icon = productPageContainer.querySelector('.productPage__icon');\n if (icon) {\n var sidebarIcon = document.createElement('div');\n sidebarIcon.classList.add('productPage__icon', '-sidebar');\n sidebarIcon.innerHTML = icon.innerHTML; // Copy the icon content\n sidebarHeading.appendChild(sidebarIcon);\n }\n\n var title = productPageContainer.querySelector('.productPage__headingTitle');\n if (title) {\n var sidebarTitle = document.createElement('div');\n sidebarTitle.classList.add('productPage__sidebarTitle');\n sidebarTitle.innerText = title.innerText;\n sidebarHeading.appendChild(sidebarTitle);\n }\n\n sidebarLink.appendChild(sidebarHeading);\n\n // Add description if available\n // Optionally get the description (if it exists) and create a new sidebar description\n var description = productPageContainer.querySelector('.productPage__headingDescription');\n if (description) {\n var sidebarDescription = document.createElement('div');\n sidebarDescription.classList.add('productPage__sidebarDescription');\n \n // Create a new span with class productPage__sidebarDescriptionText and copy the description text into it\n var descriptionText = document.createElement('span');\n descriptionText.classList.add('productPage__sidebarDescriptionText');\n descriptionText.innerText = description.innerText; // Copy the text content\n \n // Append the span inside the sidebar description\n sidebarDescription.appendChild(descriptionText);\n sidebarLink.appendChild(sidebarDescription);\n }\n \n // Add sidebar link to the array for tracking later\n sidebarLinks.push(sidebarLink);\n\n // Smooth scrolling when a sidebar link is clicked\n sidebarLink.addEventListener('click', function(event) {\n event.preventDefault();\n\n isManualScroll = true; // Prevent observer-triggered active state during smooth scrolling\n\n // Determine if the sidebar is expanded or collapsed\n const isSidebarExpanded = sidebarInner.classList.contains('-expanded');\n \n // Calculate the sidebar height based on its state for mobile\n const collapsedSidebarHeight = sidebar.offsetHeight;\n const expandedSidebarHeight = isSidebarExpanded ? sidebarInner.offsetHeight : 0;\n\n // Calculate the target position after ensuring the layout is settled\n const targetPosition = productPageContainer.getBoundingClientRect().top + window.scrollY;\n\n // Calculate offsets for sticky navigation and sidebar\n const navOffset = siteHeader ? siteHeader.offsetHeight : 0;\n let scrollOffset;\n\n if (window.innerWidth >= 1024) {\n // For desktop, add an 8rem (128px) gap below the fixed nav\n scrollOffset = navOffset + (4 * 16); // 4rem converted to pixels\n } else {\n // For mobile, apply dynamic offset based on sidebar state\n scrollOffset = navOffset + (isSidebarExpanded ? expandedSidebarHeight : collapsedSidebarHeight);\n }\n\n // Perform smooth scrolling with the calculated offset\n window.scrollTo({\n top: targetPosition - scrollOffset,\n behavior: 'smooth'\n });\n\n // Set active class manually when clicked\n sidebarLinks.forEach(function(link) {\n link.classList.remove('-active');\n });\n sidebarLink.classList.add('-active');\n\n // Disable manual scroll flag after smooth scroll\n setTimeout(() => {\n isManualScroll = false;\n }, 500);\n\n // Collapse the mobile menu after clicking\n closeSidebarMenu();\n });\n sidebarInner.appendChild(sidebarLink);\n });\n\n sidebar.appendChild(sidebarInner);\n var productPageMain = productPageContent.querySelector('.productPage__main');\n if (productPageMain) {\n productPageContent.insertBefore(sidebar, productPageMain);\n }\n\n // Set the first link as active on page load\n if (sidebarLinks.length > 0) {\n sidebarLinks[0].classList.add('-active');\n }\n\n document.addEventListener('DOMContentLoaded', () => {\n const remainingContent = document.querySelector('.remaining-content');\n if (remainingContent) {\n remainingContent.style.width = '100%'; // Ensure full-width for remaining content\n }\n });\n\n\t\t// Intersection Observer to set active class based on scroll\n\t\tvar observerOptions = {\n\t\t root: null,\n\t\t threshold: 0.1, // Lower the threshold for earlier detection\n\t\t rootMargin: \"0px 0px -40% 0px\" // Trigger when the container is 40% below the viewport\n\t\t};\n\n\t\tvar observer = new IntersectionObserver(function(entries) {\n\t\t if (isManualScroll) return; // Skip observer during manual scroll\n\n\t\t entries.forEach(function(entry) {\n\t\t var targetId = entry.target.querySelector('.productPage__heading').getAttribute('id');\n\t\t var correspondingLink = document.querySelector(`a[href=\"#${targetId}\"]`);\n\t\t \n\t\t if (entry.isIntersecting) {\n\t\t // Remove active class from all links and add to the current one\n\t\t sidebarLinks.forEach(function(link) {\n\t\t link.classList.remove('-active');\n\t\t });\n\t\t correspondingLink.classList.add('-active');\n\t\t }\n\t\t });\n\t\t}, observerOptions);\n\n\n // Observe each productPage__container to track its position\n productPageContainers.forEach(function(container) {\n observer.observe(container);\n });\n\n // Toggle sidebar menu for mobile\n\t\tfunction toggleSidebarMenu() {\n\t\t isMenuOpen = !isMenuOpen;\n\t\t if (isMenuOpen) {\n\t\t sidebarInner.classList.add('-expanded');\n\t\t sidebarToggle.classList.add('-open');\n\t\t // Force a reflow to account for the expanded height\n\t\t sidebarInner.offsetHeight;\n\t\t } else {\n\t\t closeSidebarMenu();\n\t\t sidebarToggle.classList.remove('-open');\n\t\t }\n\t\t}\n\n // Close sidebar menu\n function closeSidebarMenu() {\n isMenuOpen = false;\n sidebarInner.classList.remove('-expanded');\n sidebarToggle.classList.remove('-open');\n }\n\n // Toggle the sidebar menu on click\n sidebarToggle.addEventListener('click', function(event) {\n toggleSidebarMenu();\n event.stopPropagation();\n });\n\n // Close the sidebar menu when clicking outside\n document.addEventListener('click', function(event) {\n if (isMenuOpen && !sidebarInner.contains(event.target) && !sidebarToggle.contains(event.target)) {\n closeSidebarMenu();\n }\n });\n\n // Remove mobile styles at 1024px and up\n window.addEventListener('resize', function() {\n if (window.innerWidth >= 1024) {\n closeSidebarMenu();\n }\n });\n }\n});\n\n","// mainNavBlur JS, adds blur and darkens body when megamenu is open. \n// Components for this are in three separate files: \n// datarobot/wp-content/themes/datarobot6/views/base.twig - includes .siteMain__overlay \n// datarobot/wp-content/themes/datarobot6/views/header.twig - includes .siteHeader \n// datarobot/wp-content/themes/datarobot6/views/blocks/header/menu.twig - actual menu items \n\n\n// controller for adding .blur class when main desktop submenus are open \ndocument.addEventListener('DOMContentLoaded', function () {\n\tconst body = document.body;\n\n\t// Function to toggle the .blur class based on whether any dropdown is open\n\tfunction toggleBlurClass() {\n\t\tconst isOpen = document.querySelector('.uk-navbar-dropdown.uk-open');\n\t\tif (isOpen) {\n\t\t\tbody.classList.add('blur');\n\t\t} else {\n\t\t\tbody.classList.remove('blur');\n\t\t}\n\t}\n\n\t// Add event listeners for hover and click events on dropdown menus\n\tdocument.querySelectorAll('.uk-navbar-dropdown').forEach(dropdown => {\n\t\tdropdown.addEventListener('mouseenter', toggleBlurClass);\n\t\tdropdown.addEventListener('mouseleave', toggleBlurClass);\n\n\t\t// Listen for dropdown open/close events\n\t\tconst observer = new MutationObserver(() => toggleBlurClass());\n\t\tobserver.observe(dropdown, { attributes: true, attributeFilter: ['class'] });\n\t});\n\n\t// Remove .blur class when navigating away from the page\n\twindow.addEventListener('pagehide', () => body.classList.remove('blur'));\n});\n\n\n\n\n// this is to flip the colors of the buttons in the main nav when the hero background is purple or green \n// modified to allow hero elements loaded in vue components have time to appear before adding color flip \n// this also adds \"uk-light\" class to navigation if there is a .solutionsHero div present \ndocument.addEventListener(\"DOMContentLoaded\", () => {\n\tconst navigation = document.querySelector('.siteHeader__navigation');\n\tconst solutionsHero = document.querySelector('.solutionsHero');\n\n\tconst observer = new MutationObserver(() => {\n\t\tconst heroSection = document.querySelector('.heroSection');\n\t\tconst productHero = document.querySelector('.productHero');\n\n\t\t// Check conditions and add classes\n\t\tif (\n\t\t\t(heroSection && (heroSection.classList.contains('-green') || heroSection.classList.contains('-purple') || heroSection.classList.contains('-gray'))) ||\n\t\t\t(productHero && (productHero.classList.contains('-green') || productHero.classList.contains('-purple') || productHero.classList.contains('-gray')))\n\t\t) {\n\t\t\tnavigation?.classList.add('-buttonColorFlip');\n\t\t\tobserver.disconnect(); // Stop observing once the class is added\n\t\t}\n\n\t\t// Add uk-light class if solutionsHero is present\n\t\tif (solutionsHero) {\n\t\t\tnavigation?.classList.add('uk-light');\n\t\t}\n\t});\n\n\tobserver.observe(document.body, { childList: true, subtree: true });\n\n\t// Function to toggle uk-light class on scroll\n\tconst handleScroll = () => {\n\t\tconst scrollTop = window.scrollY;\n\n\t\tif (solutionsHero) {\n\t\t\tif (scrollTop === 0) {\n\t\t\t\t// Add uk-light back at the top of the page\n\t\t\t\tnavigation.classList.add('uk-light');\n\t\t\t} else if (navigation.classList.contains('uk-active')) {\n\t\t\t\t// Remove uk-light when uk-active is present\n\t\t\t\tnavigation.classList.remove('uk-light');\n\t\t\t}\n\t\t}\n\t};\n\n\t// Initial check on load\n\thandleScroll();\n\n\t// Listen for scroll events\n\twindow.addEventListener(\"scroll\", handleScroll);\n});\n\n\n\n\n\n\n","// statsCounter JS, for animating number counts in new theme \n// datarobot6/views/gutenberg/content/dr-stats-module.twig\n// datarobot6/views/gutenberg/content/dr-stats-module-light.twig\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n\n\n // Function to animate counting up for integers and decimals\n function animateCountUp(element, targetValue, duration = 2000) {\n let startValue = 0;\n let startTime = null;\n\n // Determine if the target value is a decimal\n const isDecimal = targetValue % 1 !== 0;\n\n function step(timestamp) {\n if (!startTime) startTime = timestamp;\n const progress = Math.min((timestamp - startTime) / duration, 1);\n const currentValue = startValue + progress * (targetValue - startValue);\n\n // Format the number: decimals keep 1 digit, integers are rounded\n element.textContent = isDecimal\n ? currentValue.toFixed(1)\n : Math.floor(currentValue).toLocaleString();\n\n if (progress < 1) {\n requestAnimationFrame(step);\n } else {\n // Ensure the final value is accurate\n element.textContent = isDecimal\n ? targetValue.toFixed(1)\n : targetValue.toLocaleString();\n }\n }\n\n requestAnimationFrame(step);\n }\n\n // Set up IntersectionObserver to trigger the animation when visible\n const observerOptions = {\n root: null,\n rootMargin: \"0px\",\n threshold: 0.3 // Trigger when 30% visible\n };\n\n const observer = new IntersectionObserver((entries, observer) => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n const counter = entry.target;\n const targetValue = parseFloat(counter.textContent.replace(/,/g, ''));\n\n if (!isNaN(targetValue) && !counter.classList.contains('counted')) {\n animateCountUp(counter, targetValue);\n counter.classList.add('counted'); // Prevents re-triggering\n }\n\n observer.unobserve(counter); // Stops observing after animation\n }\n });\n }, observerOptions);\n\n // Target all counters on the page\n const counters = document.querySelectorAll('.statsModule__statsCounter');\n counters.forEach(counter => {\n observer.observe(counter);\n });\n\n\n\n\t// console.log(\"statsCounter loading test\");\n});\n","document.addEventListener(\"DOMContentLoaded\", function () {\n // Function to update the pseudo-element width\n function updatePseudoElementWidth(patternContainer) {\n const ukContainer = patternContainer.querySelector('.uk-container');\n\n if (ukContainer && patternContainer) {\n const ukContainerOffset = ukContainer.getBoundingClientRect().left;\n const ukContainerPadding = 32; // Padding-left in px\n const adjustedWidth = ukContainerOffset + ukContainerPadding;\n\n patternContainer.style.setProperty('--pseudo-width', `${adjustedWidth}px`);\n }\n }\n\n // Function to reset and play the Lottie animation\n function resetAndPlayLottieAnimation(container) {\n if (container?.lottieInstance) {\n const animation = container.lottieInstance;\n\n console.log('Resetting and playing Lottie animation:', container.dataset.animationPath);\n\n // Stop and restart the animation\n animation.goToAndPlay(0, true);\n } else {\n console.warn('No Lottie instance found, reinitializing:', container);\n\n // Reinitialize the animation if the instance is missing\n const animationPath = container.dataset.animationPath;\n if (animationPath) {\n const animation = window.lottie.loadAnimation({\n container: container,\n renderer: 'svg',\n loop: false,\n autoplay: true, // Start automatically\n path: animationPath,\n });\n\n container.lottieInstance = animation; // Save the instance for future use\n }\n }\n }\n\n // Function to initialize Lottie animations\n function loadHeroLottieAnimations(callback) {\n const heroLottieContainers = document.querySelectorAll('.heroLottieContainer');\n let initializedCount = 0;\n\n heroLottieContainers.forEach((container) => {\n const animationPath = container.dataset.animationPath;\n if (animationPath) {\n const animation = window.lottie.loadAnimation({\n container: container,\n renderer: 'svg',\n loop: false, // Play once\n autoplay: false, // Controlled manually\n path: animationPath,\n });\n\n // Store the Lottie instance for later use\n container.lottieInstance = animation;\n\n animation.addEventListener('DOMLoaded', () => {\n initializedCount++;\n if (initializedCount === heroLottieContainers.length && typeof callback === 'function') {\n callback();\n }\n });\n } else {\n console.warn('No animation path provided for container:', container);\n }\n });\n }\n\n // Function to animate the pseudo-element\n function triggerPseudoElementAnimation(patternContainer) {\n if (patternContainer) {\n updatePseudoElementWidth(patternContainer);\n\n patternContainer.classList.add('animate-expand');\n\n setTimeout(() => {\n patternContainer.classList.remove('animate-expand');\n patternContainer.classList.add('animate-retract');\n\n setTimeout(() => {\n patternContainer.classList.remove('animate-retract');\n }, 1500);\n }, 4500);\n }\n }\n\n // Set up slide-specific animations\n\tfunction setupSlideAnimations() {\n\t const swiperContainer = document.querySelector('.heroSection__slider');\n\t const swiperInstance = swiperContainer?.swiper;\n\n\t if (swiperInstance) {\n\t swiperInstance.on('slideChangeTransitionEnd', function () {\n\t const activeSlide = swiperInstance.slides[swiperInstance.activeIndex];\n\t const heroLottieContainer = activeSlide.querySelector('.heroLottieContainer');\n\t const patternContainer = activeSlide.querySelector('.heroSection__sliderPattern.-desktopSlider');\n\t const titleSlideElement = activeSlide.querySelector('.heroSection__titleSlideDown');\n\n\t // Trigger pseudo-element animations\n\t triggerPseudoElementAnimation(patternContainer);\n\n\t // Reset and replay the Lottie animation for the active slide\n\t resetAndPlayLottieAnimation(heroLottieContainer);\n\n\t // Trigger slide-down animation after 4 seconds\n\t if (titleSlideElement) {\n\t titleSlideElement.classList.remove(\"slideDownActive\"); // Reset animation\n\t void titleSlideElement.offsetWidth; // Force reflow\n\n\t setTimeout(() => {\n\t titleSlideElement.classList.add(\"slideDownActive\");\n\t }, 4200); // Delay of 4.2 seconds, seems to be the sweet spot with the current slide timing \n\t }\n\t });\n\n\t // Initial slide setup\n\t const initialSlide = swiperInstance.slides[swiperInstance.activeIndex];\n\t const heroLottieContainer = initialSlide.querySelector('.heroLottieContainer');\n\t const patternContainer = initialSlide.querySelector('.heroSection__sliderPattern.-desktopSlider');\n\t const initialTitleSlideElement = initialSlide.querySelector('.heroSection__titleSlideDown');\n\n\t triggerPseudoElementAnimation(patternContainer);\n\t resetAndPlayLottieAnimation(heroLottieContainer);\n\n\t // Trigger slide-down animation for the initial slide\n\t if (initialTitleSlideElement) {\n\t initialTitleSlideElement.classList.remove(\"slideDownActive\");\n\t void initialTitleSlideElement.offsetWidth;\n\n\t setTimeout(() => {\n\t initialTitleSlideElement.classList.add(\"slideDownActive\");\n\t }, 4200);\n\t }\n\t }\n\t}\n\n // Initialize everything\n loadHeroLottieAnimations(() => {\n setupSlideAnimations(); // Set up animations after Lottie is fully loaded\n });\n\n window.addEventListener('resize', () => {\n const patternContainers = document.querySelectorAll('.heroSection__sliderPattern.-desktopSlider');\n patternContainers.forEach(updatePseudoElementWidth);\n });\n});\n","// lottieAnimations JS, animates illustration card graphics on hover . \n// datarobot6/views/gutenberg/content/dr-illustration-cards.twig\n\n// Function to load and initialize Lottie animations with hover events\nfunction loadLottieAnimation(container) {\n const animationPath = container.dataset.animationPath;\n\n if (animationPath) {\n const animation = window.lottie.loadAnimation({\n container: container,\n renderer: 'svg', // SVG renderer\n loop: false, // Manual loop control\n autoplay: false, // Do not autoplay\n path: animationPath // Path to the animation JSON\n });\n\n const button = container.closest('.illustrationCards__card')?.querySelector('.illustrationCards__button');\n let isHovered = false;\n\n // Wait for animation data to load\n animation.addEventListener('config_ready', () => {\n const totalFrames = animation.animationData.op;\n const hoverEndFrame = Math.min(30, totalFrames); // Ensure hover animation doesn't exceed total frames\n\n if (button) {\n // Play the first 30 frames on hover\n button.addEventListener('mouseenter', () => {\n if (isHovered) return; // Prevent re-triggering\n isHovered = true;\n\n animation.stop(); // Stop any lingering animation state\n animation.playSegments([0, hoverEndFrame], true); // Play frames 0 to 30\n\n // Pause at the last frame of the segment once complete\n //animation.addEventListener(\n // 'complete',\n //() => {\n //if (isHovered) {\n //animation.goToAndStop(hoverEndFrame, true); // Pause at frame 30\n //console.log(`Hover Hold: Paused at frame ${hoverEndFrame}`);\n //}\n // },\n //{ once: true }\n //);\n console.log(`Hover Start: Playing frames 0 to ${hoverEndFrame}`);\n });\n\n // Reverse back to frame 0 on mouseleave\n button.addEventListener('mouseleave', () => {\n if (!isHovered) return; // Ignore redundant events\n isHovered = false;\n\n const currentFrame = animation.currentFrame;\n\n if (currentFrame > 0) {\n animation.stop(); // Stop any lingering animation state\n animation.playSegments([currentFrame, 0], true); // Reverse to frame 0\n console.log(`Hover End: Reversing from frame ${currentFrame} to 0`);\n } else {\n console.log(`Hover End: Already at frame 0`);\n }\n });\n }\n });\n }\n}\n\n// Lazy load animations using Intersection Observer\ndocument.addEventListener('DOMContentLoaded', function () {\n const observer = new IntersectionObserver((entries) => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n loadLottieAnimation(entry.target);\n observer.unobserve(entry.target);\n }\n });\n });\n\n document.querySelectorAll('.lottieContainer').forEach(container => {\n observer.observe(container);\n });\n});\n","/**\n * ================================\n * DataRobot Web Form Tracking & Validation Script\n * ================================\n * \n * This script is responsible for:\n * \n * 1. **Munchkin Tracking (Marketo)**\n * - Loads and initializes Marketo's Munchkin script for tracking.\n * \n * 2. **Attribution Tracking**\n * - Captures UTM parameters (campaign, source, medium, etc.).\n * - Stores them in localStorage for 24 hours.\n * - Populates hidden fields in forms with attribution data.\n * \n * 3. **Email Validation**\n * - Blocks free/disposable email domains.\n * - Ensures only work emails are accepted.\n * - Prevents form submission for invalid emails.\n * \n * 4. **Marketo Form Enhancements**\n * - Attaches event listeners to track form submission & validation.\n * - Ensures correct form redirection after submission.\n * - Sends error details to Google Tag Manager (GTM).\n * \n * 5. **Link Attribution**\n * - Appends tracking parameters to links pointing to `app.datarobot.com`.\n * \n * 6. **Utility Functions**\n * - UUID generation, localStorage management, delayed form polling.\n */\n\n//------------------------------- \n// MUNCHKIN SCRIPT (Marketo Tracking)\n//------------------------------- \n\n// testing the build\n\nwindow.dataLayer = window.dataLayer || [];\n\n(function() {\n var didInit = false;\n\n // Initialize Munchkin tracking if not already initialized\n function initMunchkin() {\n if(didInit === false) {\n didInit = true;\n Munchkin.init('229-XUK-217');\n }\n }\n\n // Load Marketo's Munchkin script\n var s = document.createElement('script');\n s.type = 'text/javascript';\n s.async = true;\n s.src = '//munchkin.marketo.net/munchkin.js';\n s.onreadystatechange = function() {\n if (this.readyState == 'complete' || this.readyState == 'loaded') {\n initMunchkin();\n }\n };\n s.onload = initMunchkin;\n document.getElementsByTagName('head')[0].appendChild(s);\n })();\n\n//------------------------------- \n// ATTRIBUTION SCRIPT (UTM & Referrer Tracking)\n//------------------------------- \n\nvar ATTRIBUTION_MAP = [\n { name: 'campaign', parameter: 'utm_campaign', \"default\": '', api: 'utm_campaign', marketo: 'Campaign_Name__c' },\n { name: 'medium', parameter: 'utm_medium', \"default\": '', api: 'utm_medium', marketo: 'Campaign_Medium__c' },\n { name: 'source', parameter: 'utm_source', \"default\": '', api: 'utm_source', marketo: 'Campaign_Source__c' },\n { name: 'content', parameter: 'utm_content', \"default\": '', api: 'utm_content', marketo: 'Campaign_Content__c' },\n { name: 'term', parameter: 'utm_term', \"default\": '', api: 'utm_term', marketo: 'Campaign_Term__c' },\n { name: 'gclid', parameter: 'gclid', \"default\": '', api: 'gclid', marketo: 'Gclid__c' },\n { name: 'msclkid', parameter: 'msclkid', \"default\": '', api: 'msclkid', marketo: 'Microsoft_Click_ID__c' },\n { name: 'fbclid', parameter: 'fbclid', \"default\": '', api: 'fbclid', marketo: 'Facebook_Click_ID__c' },\n { name: 'li_fat_id', parameter: 'li_fat_id', \"default\": '', api: 'li_fat_id', marketo: 'Licid__c' }\n];\n\n// Retrieves URL parameters from the current page.\nfunction getUrlParams() {\n return new URLSearchParams(window.location.search);\n}\n\n// Checks if attribution data is already stored in localStorage.\nfunction hasAttributionLocalStorage() {\n return !!localStorage.getItem('attribution');\n}\n\n// Checks if any known attribution parameters exist in the URL.\nfunction hasAttributionParameters() {\n return ATTRIBUTION_MAP.some(function (elem) {\n return getUrlParams().has(elem.parameter);\n });\n}\n\n// Extracts attribution data from URL parameters and referrer.\nfunction getAttributionParameters() {\n var urlParams = getUrlParams();\n var referrer = document.referrer || 'direct';\n return ATTRIBUTION_MAP.reduce(function (acc, elem) {\n acc[elem.api] = urlParams.get(elem.parameter) || \n (elem.name === 'medium' && !document.referrer ? '' : \n elem.name === 'source' ? referrer : elem[\"default\"]);\n return acc;\n }, {});\n}\n\n// Stores or updates attribution data in localStorage.\nfunction setAttributionLocalStorage() {\n if (!hasAttributionLocalStorage() || hasAttributionParameters()) {\n var data = {\n value: getAttributionParameters(),\n expiration: Date.now() + 24 * 60 * 60 * 1000 // 24 hours from now\n };\n localStorage.setItem('attribution', JSON.stringify(data));\n return data.value;\n }\n}\n\n// Retrieves stored attribution data or refreshes it if expired.\nfunction getAttributionValues() {\n if (hasAttributionLocalStorage() && !hasAttributionParameters()) {\n var storedData = JSON.parse(localStorage.getItem('attribution'));\n if (Date.now() > storedData.expiration) {\n localStorage.removeItem('attribution');\n return setAttributionLocalStorage();\n }\n return storedData.value;\n }\n return setAttributionLocalStorage();\n}\n\n// Set hidden attribution fields in form\nfunction setHiddenAttributionFields(form) {\n var attributionValues = getAttributionValues();\n var fields = ATTRIBUTION_MAP.reduce(function (acc, elem) {\n if (attributionValues[elem.api]) {\n acc[elem.marketo] = attributionValues[elem.api];\n }\n return acc;\n }, {});\n form.addHiddenFields(fields);\n}\n\n// Attribute links\nfunction attributeLinks() {\n var links = document.querySelectorAll('[href*=\"app.datarobot.com\"]');\n var attributionValues = getAttributionValues();\n links.forEach(function (link) {\n var url = new URL(link.href);\n var params = new URLSearchParams(url.search);\n ATTRIBUTION_MAP.forEach(function (elem) {\n if (attributionValues[elem.api]) {\n params.set(elem.parameter, attributionValues[elem.api]);\n }\n });\n link.href = url.origin + url.pathname + '?' + params.toString();\n });\n}\n\n// Clear expired localStorage items\nfunction clearExpiredLocalStorage() {\n var storedData = JSON.parse(localStorage.getItem('attribution'));\n if (storedData && Date.now() > storedData.expiration) {\n localStorage.removeItem('attribution');\n }\n}\n\n\nfunction pollForForms(delay) {\n if (window.MktoForms2 !== undefined) {\n setMarketoFormListeners(window.MktoForms2);\n } else {\n setTimeout(pollForForms.bind(null, 2 * delay), delay);\n }\n}\n\n// Helper function to generate a UUID\nfunction generateUUID() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = Math.random() * 16 | 0,\n v = c === 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n}\n\n/**\n * helper function to push invalid Marketo field errors to GTM\n * @returns {undefined}\n */\nfunction waitForError () {\n var element, input, mktoErrorMsg;\n // check for error message\n element = document.querySelector(\".mktoErrorMsg\");\n if (element) {\n mktoErrorMsg = element.textContent || element.innerText;\n // look for invalid input\n input = document.querySelector(\"input.mktoInvalid, .mktoInvalid input\");\n window.dataLayer.push({\n \"event\": \"mkto.form.error\",\n \"mkto.form.error.message\": mktoErrorMsg,\n \"gtm.element\": input,\n \"gtm.elementClasses\": input && input.className || \"\",\n \"gtm.elementId\": input && input.id || \"\",\n \"gtm.elementName\": input && input.name || \"\",\n \"gtm.elementTarget\": input && input.target || \"\"\n });\n }\n}\n\n// Main execution\nattributeLinks();\nclearExpiredLocalStorage();\n\n//------------------------------- \n// INVALID EMAIL DOMAINS SCRIPT\n//------------------------------- \n\nvar invalidDomains = [\"@gmail.com\", \"@aol.com\", \"@hotmail.com\", \"@yahoo.com\", \"@ymail.com\", \"@0815.ru\", \"@0wnd.net\", \"@0wnd.org\", \"@10minutemail.co.za\", \"@10minutemail.com\", \"@123-m.com\", \"@1fsdfdsfsdf.tk\", \"@1pad.de\", \"@20minutemail.com\", \"@21cn.com\", \"@2fdgdfgdfgdf.tk\", \"@2prong.com\", \"@30minutemail.com\", \"@33mail.com\", \"@3trtretgfrfe.tk\", \"@4gfdsgfdgfd.tk\", \"@4warding.com\", \"@5ghgfhfghfgh.tk\", \"@6hjgjhgkilkj.tk\", \"@6paq.com\", \"@7tags.com\", \"@9ox.net\", \"@a-bc.net\", \"@agedmail.com\", \"@ama-trade.de\", \"@amilegit.com\", \"@amiri.net\", \"@amiriindustries.com\", \"@anonmails.de\", \"@anonymbox.com\", \"@antichef.com\", \"@antichef.net\", \"@antireg.ru\", \"@antispam.de\", \"@antispammail.de\", \"@armyspy.com\", \"@artman-conception.com\", \"@azmeil.tk\", \"@baxomale.ht.cx\", \"@beefmilk.com\", \"@bigstring.com\", \"@binkmail.com\", \"@bio-muesli.net\", \"@bobmail.info\", \"@bodhi.lawlita.com\", \"@bofthew.com\", \"@bootybay.de\", \"@boun.cr\", \"@bouncr.com\"];\n\nfunction isEmailGood(email) {\n if (!email) return false; // Handle empty email case\n var lowerCaseEmail = email.toLowerCase();\n return !invalidDomains.some(function(domain) {\n return lowerCaseEmail.endsWith(domain);\n });\n}\n\nif (typeof MktoForms2 !== \"undefined\") {\n var excludedFormIds = window.excludedFormIds || [1019, 1018, 1015, 1];\n\n MktoForms2.whenReady(function(form) {\n var currentFormId = form.getId();\n\n if (!excludedFormIds.includes(currentFormId)) {\n form.onValidate(function() {\n var email = form.vals().Email;\n var formElement = form.getFormElem();\n var emailElem = formElement.find(\"input[name='Email']\");\n\n if (!isEmailGood(email)) {\n form.submittable(false);\n form.showErrorMessage('Must be a valid work email.', emailElem);\n } else {\n form.submittable(true);\n }\n });\n\n form.onSubmit(function() {\n var email = form.vals().Email;\n if (!isEmailGood(email)) {\n form.submittable(false);\n return false; // Prevent form submission\n }\n });\n }\n });\n}\n\nfunction handleRedirectsForForm(form, uuid) {\n var baseURL;\n // Construct the redirect URL dynamically\n if(form.getId() === 1090) {\n baseURL = 'https://app.datarobot.com/account/oidc/redirect?initialDisplay=signup';\n } else if(form.getId() === 1120) {\n baseURL = 'https://app.datarobot.com/account/oidc/redirect?initialDisplay=signup&language=ja®ion=app-jp';\n } else {\n return;\n }\n \n var url = new URL(baseURL);\n\n // Append the Form_Submission_Id__c as formSubmissionId\n url.searchParams.append('formSubmissionId', encodeURIComponent(uuid));\n window.location.href = url.toString();\n}\n\n//------------------------------- \n// FORM EVENT TRACKING (Marketo)\n//------------------------------- \n\n// Attaches Marketo form listeners for tracking, validation, and redirection.\nfunction setMarketoFormListeners(forms2) {\n forms2.whenReady(function(form) {\n setHiddenAttributionFields(form);\n\n window.dataLayer.push({\n \"event\": \"mkto.form.ready\",\n \"mkto.form.id\": form.getId(),\n \"mkto.form.submittable\": form.submittable(),\n \"mkto.form.allFieldsFilled\": form.allFieldsFilled(),\n \"mkto.form.values\": form.getValues()\n });\n\n form.onValidate(function handleValidate (valid) {\n window.dataLayer.push({\n \"event\": \"mkto.form.validate\",\n \"mkto.form.valid\": valid\n });\n // wait for the error message to appear\n setTimeout(waitForError, 0);\n });\n\n form.onSubmit(function handleSubmit (thisForm) {\n var button;\n button = thisForm.getFormElem().find(\"button[type=\\\"submit\\\"]\");\n window.dataLayer.push({\n \"event\": \"mkto.form.submit\",\n \"mkto.form.id\": thisForm.getId(),\n \"mkto.form.submittable\": thisForm.submittable(),\n \"mkto.form.allFieldsFilled\": thisForm.allFieldsFilled(),\n \"mkto.form.values\": thisForm.getValues(),\n \"mkto.form.button\": {\n \"classes\": button.attr(\"class\"),\n \"text\": button.text(),\n \"type\": \"submit\"\n }\n });\n });\n\n if (form.getId() === 1090 || form.getId() === 1120) {\n // Generate the UUID and set it as the hidden field value\n var uuid = generateUUID();\n form.addHiddenFields({\n \"Form_Submission_Id__c\": uuid\n });\n\n form.onSuccess(function (values, followUpUrl) {\n window.dataLayer.push({\n \"event\": \"mkto.form.success\",\n \"mkto.form.values\": values,\n \"mkto.form.followUpUrl\": followUpUrl\n });\n window.dataLayer.push({\n 'event': 'formSuccess',\n 'formSubmissionId': uuid\n });\n handleRedirectsForForm(form, uuid);\n return false;\n });\n } else {\n form.onSuccess(function handleSuccess (values, followUpUrl) {\n window.dataLayer.push({\n \"event\": \"mkto.form.success\",\n \"mkto.form.values\": values,\n \"mkto.form.followUpUrl\": followUpUrl\n });\n });\n }\n\n });\n\n forms2.whenRendered(function handleRendered (form) {\n window.dataLayer.push({\n \"event\": \"mkto.form.rendered\",\n \"mkto.form.id\": form.getId(),\n \"mkto.form.submittable\": form.submittable(),\n \"mkto.form.allFieldsFilled\": form.allFieldsFilled(),\n \"mkto.form.values\": form.getValues()\n });\n });\n}\n\npollForForms(10);\n","// Hide '.dr-blog-post .postArchive' elements if the URL contains '/blog/page/{number}/'\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n\n const match = window.location.pathname.match(/\\/blog\\/page\\/(\\d+)\\//);\n\n if (match) {\n\n // Function to check for the elements and hide them\n function hideElements() {\n const elements = document.querySelectorAll(\".dr-blog-posts-wrapper .postArchive\");\n\n if (elements.length > 0) {\n elements.forEach(element => {\n element.style.display = 'none';\n });\n clearInterval(checkInterval); // Stop checking once elements are found\n }\n }\n\n // Repeatedly check for elements\n const checkInterval = setInterval(hideElements, 10);\n\n // Optional: Stop checking if elements never appear\n setTimeout(() => clearInterval(checkInterval), 10);\n } \n});\n","var map = {\n\t\"./ai-experience\": [\n\t\t51,\n\t\t0,\n\t\t25\n\t],\n\t\"./ai-experience.js\": [\n\t\t51,\n\t\t0,\n\t\t25\n\t],\n\t\"./algolia-search\": [\n\t\t48,\n\t\t34,\n\t\t26\n\t],\n\t\"./algolia-search.js\": [\n\t\t48,\n\t\t34,\n\t\t26\n\t],\n\t\"./careers\": [\n\t\t46,\n\t\t3,\n\t\t35,\n\t\t27\n\t],\n\t\"./careers.js\": [\n\t\t46,\n\t\t3,\n\t\t35,\n\t\t27\n\t],\n\t\"./events\": [\n\t\t44,\n\t\t0,\n\t\t1,\n\t\t3,\n\t\t4,\n\t\t28\n\t],\n\t\"./events.js\": [\n\t\t44,\n\t\t0,\n\t\t1,\n\t\t3,\n\t\t4,\n\t\t28\n\t],\n\t\"./webinars\": [\n\t\t45,\n\t\t0,\n\t\t1,\n\t\t3,\n\t\t4,\n\t\t29\n\t],\n\t\"./webinars.js\": [\n\t\t45,\n\t\t0,\n\t\t1,\n\t\t3,\n\t\t4,\n\t\t29\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(1).map(__webpack_require__.e)).then(function() {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = function webpackAsyncContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackAsyncContext.id = 89;\nmodule.exports = webpackAsyncContext;","var map = {\n\t\"./card-grid\": [\n\t\t34,\n\t\t5\n\t],\n\t\"./card-grid.js\": [\n\t\t34,\n\t\t5\n\t],\n\t\"./code-snippet\": [\n\t\t52,\n\t\t30,\n\t\t6\n\t],\n\t\"./code-snippet.js\": [\n\t\t52,\n\t\t30,\n\t\t6\n\t],\n\t\"./content-slider\": [\n\t\t49,\n\t\t1,\n\t\t7\n\t],\n\t\"./content-slider.js\": [\n\t\t49,\n\t\t1,\n\t\t7\n\t],\n\t\"./content-with-video-animation\": [\n\t\t53,\n\t\t31,\n\t\t8\n\t],\n\t\"./content-with-video-animation.js\": [\n\t\t53,\n\t\t31,\n\t\t8\n\t],\n\t\"./countup\": [\n\t\t54,\n\t\t9\n\t],\n\t\"./countup.js\": [\n\t\t54,\n\t\t9\n\t],\n\t\"./filter\": [\n\t\t35,\n\t\t2,\n\t\t10\n\t],\n\t\"./filter.js\": [\n\t\t35,\n\t\t2,\n\t\t10\n\t],\n\t\"./form\": [\n\t\t47,\n\t\t0,\n\t\t11\n\t],\n\t\"./form.js\": [\n\t\t47,\n\t\t0,\n\t\t11\n\t],\n\t\"./lightbox\": [\n\t\t36,\n\t\t2,\n\t\t32,\n\t\t12\n\t],\n\t\"./lightbox.js\": [\n\t\t36,\n\t\t2,\n\t\t32,\n\t\t12\n\t],\n\t\"./loadmore\": [\n\t\t37,\n\t\t13\n\t],\n\t\"./loadmore.js\": [\n\t\t37,\n\t\t13\n\t],\n\t\"./media-text-video-autoplay\": [\n\t\t38,\n\t\t14\n\t],\n\t\"./media-text-video-autoplay.js\": [\n\t\t38,\n\t\t14\n\t],\n\t\"./nav-side-menu\": [\n\t\t55,\n\t\t0,\n\t\t15\n\t],\n\t\"./nav-side-menu.js\": [\n\t\t55,\n\t\t0,\n\t\t15\n\t],\n\t\"./slider\": [\n\t\t39,\n\t\t2,\n\t\t33,\n\t\t16\n\t],\n\t\"./slider.js\": [\n\t\t39,\n\t\t2,\n\t\t33,\n\t\t16\n\t],\n\t\"./sticky-tabs\": [\n\t\t40,\n\t\t17\n\t],\n\t\"./sticky-tabs.js\": [\n\t\t40,\n\t\t17\n\t],\n\t\"./swiper\": [\n\t\t56,\n\t\t1,\n\t\t18\n\t],\n\t\"./swiper.js\": [\n\t\t56,\n\t\t1,\n\t\t18\n\t],\n\t\"./table-of-content\": [\n\t\t41,\n\t\t19\n\t],\n\t\"./table-of-content.js\": [\n\t\t41,\n\t\t19\n\t],\n\t\"./tabs-switcher\": [\n\t\t42,\n\t\t20\n\t],\n\t\"./tabs-switcher.js\": [\n\t\t42,\n\t\t20\n\t],\n\t\"./timeline\": [\n\t\t57,\n\t\t21\n\t],\n\t\"./timeline.js\": [\n\t\t57,\n\t\t21\n\t],\n\t\"./trust-radius-widget\": [\n\t\t43,\n\t\t22\n\t],\n\t\"./trust-radius-widget.js\": [\n\t\t43,\n\t\t22\n\t],\n\t\"./video-with-steps\": [\n\t\t50,\n\t\t23\n\t],\n\t\"./video-with-steps.js\": [\n\t\t50,\n\t\t23\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(1).map(__webpack_require__.e)).then(function() {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = function webpackAsyncContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackAsyncContext.id = 90;\nmodule.exports = webpackAsyncContext;","import UtmGenerator from './../modules/utm_generator/utm_generator'\n\nnew UtmGenerator();\n","/*!\n * @copyright Copyright © Kartik Visweswaran, Krajee.com, 2014 - 2020\n * @version 1.3.6\n *\n * Date formatter utility library that allows formatting date/time variables or Date objects using PHP DateTime format.\n * This library is a standalone javascript library and does not depend on other libraries or plugins like jQuery. The\n * library also adds support for Universal Module Definition (UMD).\n *\n * @see http://php.net/manual/en/function.date.php\n *\n * For more JQuery plugins visit http://plugins.krajee.com\n * For more Yii related demos visit http://demos.krajee.com\n */\n\tvar $h;\n\t/**\n\t * Global helper object\n\t */\n\t$h = {\n\t\tDAY: 1000 * 60 * 60 * 24,\n\t\tHOUR: 3600,\n\t\tdefaults: {\n\t\t\tdateSettings: {\n\t\t\t\tdays: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n\t\t\t\tdaysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n\t\t\t\tmonths: [\n\t\t\t\t\t'January', 'February', 'March', 'April', 'May', 'June', 'July',\n\t\t\t\t\t'August', 'September', 'October', 'November', 'December'\n\t\t\t\t],\n\t\t\t\tmonthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n\t\t\t\tmeridiem: ['AM', 'PM'],\n\t\t\t\tordinal: function (number) {\n\t\t\t\t\tvar n = number % 10, suffixes = {1: 'st', 2: 'nd', 3: 'rd'};\n\t\t\t\t\treturn Math.floor(number % 100 / 10) === 1 || !suffixes[n] ? 'th' : suffixes[n];\n\t\t\t\t}\n\t\t\t},\n\t\t\tseparators: /[ \\-+\\/.:@]/g,\n\t\t\tvalidParts: /[dDjlNSwzWFmMntLoYyaABgGhHisueTIOPZcrU]/g,\n\t\t\tintParts: /[djwNzmnyYhHgGis]/g,\n\t\t\ttzParts: /\\b(?:[PMCEA][SDP]T|(?:Australian )?(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\\d{4})?)\\b/g,\n\t\t\ttzClip: /[^-+\\dA-Z]/g\n\t\t},\n\t\tgetInt: function (str, radix) {\n\t\t\treturn parseInt(str, (radix ? radix : 10));\n\t\t},\n\t\tcompare: function (str1, str2) {\n\t\t\treturn typeof (str1) === 'string' && typeof (str2) === 'string' && str1.toLowerCase() === str2.toLowerCase();\n\t\t},\n\t\tlpad: function (value, length, chr) {\n\t\t\tvar val = value.toString();\n\t\t\tchr = chr || '0';\n\t\t\treturn val.length < length ? $h.lpad(chr + val, length) : val;\n\t\t},\n\t\tmerge: function (out) {\n\t\t\tvar i, obj;\n\t\t\tout = out || {};\n\t\t\tfor (i = 1; i < arguments.length; i++) {\n\t\t\t\tobj = arguments[i];\n\t\t\t\tif (!obj) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tfor (var key in obj) {\n\t\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\t\tif (typeof obj[key] === 'object') {\n\t\t\t\t\t\t\t$h.merge(out[key], obj[key]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tout[key] = obj[key];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn out;\n\t\t},\n\t\tgetIndex: function (val, arr) {\n\t\t\tfor (var i = 0; i < arr.length; i++) {\n\t\t\t\tif (arr[i].toLowerCase() === val.toLowerCase()) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn -1;\n\t\t}\n\t};\n\n\t/**\n\t * DateFormatter Class\n\t */\n\tclass DateFormatter {\n\t\tconstructor(options) {\n\t\t\tvar self = this, config = $h.merge($h.defaults, options);\n\t\t\tself.dateSettings = config.dateSettings;\n\t\t\tself.separators = config.separators;\n\t\t\tself.validParts = config.validParts;\n\t\t\tself.intParts = config.intParts;\n\t\t\tself.tzParts = config.tzParts;\n\t\t\tself.tzClip = config.tzClip;\n\t\t}\n\t\tgetMonth(val) {\n\t\t\tvar self = this, i;\n\t\t\ti = $h.getIndex(val, self.dateSettings.monthsShort) + 1;\n\t\t\tif (i === 0) {\n\t\t\t\ti = $h.getIndex(val, self.dateSettings.months) + 1;\n\t\t\t}\n\t\t\treturn i;\n\t\t}\n\t\tparseDate(vDate, vFormat) {\n\t\t\tvar self = this, vFormatParts, vDateParts, i, vDateFlag = false, vTimeFlag = false, vDatePart, iDatePart,\n\t\t\t\tvSettings = self.dateSettings, vMonth, vMeriIndex, vMeriOffset, len, mer,\n\t\t\t\tout = {date: null, year: null, month: null, day: null, hour: 0, min: 0, sec: 0};\n\t\t\tif (!vDate) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (vDate instanceof Date) {\n\t\t\t\treturn vDate;\n\t\t\t}\n\t\t\tif (vFormat === 'U') {\n\t\t\t\ti = $h.getInt(vDate);\n\t\t\t\treturn i ? new Date(i * 1000) : vDate;\n\t\t\t}\n\t\t\tswitch (typeof vDate) {\n\t\t\t\tcase 'number':\n\t\t\t\t\treturn new Date(vDate);\n\t\t\t\tcase 'string':\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treturn null;\n\t\t\t}\n\t\t\tvFormatParts = vFormat.match(self.validParts);\n\t\t\tif (!vFormatParts || vFormatParts.length === 0) {\n\t\t\t\tthrow new Error('Invalid date format definition.');\n\t\t\t}\n\t\t\tfor (i = vFormatParts.length - 1; i >= 0; i--) {\n\t\t\t\tif (vFormatParts[i] === 'S') {\n\t\t\t\t\tvFormatParts.splice(i, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t\tvDateParts = vDate.replace(self.separators, '\\0').split('\\0');\n\t\t\tfor (i = 0; i < vDateParts.length; i++) {\n\t\t\t\tvDatePart = vDateParts[i];\n\t\t\t\tiDatePart = $h.getInt(vDatePart);\n\t\t\t\tswitch (vFormatParts[i]) {\n\t\t\t\t\tcase 'y':\n\t\t\t\t\tcase 'Y':\n\t\t\t\t\t\tif (iDatePart) {\n\t\t\t\t\t\t\tlen = vDatePart.length;\n\t\t\t\t\t\t\tout.year = len === 2 ? $h.getInt((iDatePart < 70 ? '20' : '19') + vDatePart) : iDatePart;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvDateFlag = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'm':\n\t\t\t\t\tcase 'n':\n\t\t\t\t\tcase 'M':\n\t\t\t\t\tcase 'F':\n\t\t\t\t\t\tif (isNaN(iDatePart)) {\n\t\t\t\t\t\t\tvMonth = self.getMonth(vDatePart);\n\t\t\t\t\t\t\tif (vMonth > 0) {\n\t\t\t\t\t\t\t\tout.month = vMonth;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (iDatePart >= 1 && iDatePart <= 12) {\n\t\t\t\t\t\t\t\tout.month = iDatePart;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvDateFlag = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'd':\n\t\t\t\t\tcase 'j':\n\t\t\t\t\t\tif (iDatePart >= 1 && iDatePart <= 31) {\n\t\t\t\t\t\t\tout.day = iDatePart;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvDateFlag = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'g':\n\t\t\t\t\tcase 'h':\n\t\t\t\t\t\tvMeriIndex = (vFormatParts.indexOf('a') > -1) ? vFormatParts.indexOf('a') :\n\t\t\t\t\t\t\t((vFormatParts.indexOf('A') > -1) ? vFormatParts.indexOf('A') : -1);\n\t\t\t\t\t\tmer = vDateParts[vMeriIndex];\n\t\t\t\t\t\tif (vMeriIndex !== -1) {\n\t\t\t\t\t\t\tvMeriOffset = $h.compare(mer, vSettings.meridiem[0]) ? 0 :\n\t\t\t\t\t\t\t\t($h.compare(mer, vSettings.meridiem[1]) ? 12 : -1);\n\t\t\t\t\t\t\tif (iDatePart >= 1 && iDatePart <= 12 && vMeriOffset !== -1) {\n\t\t\t\t\t\t\t\tout.hour = iDatePart % 12 === 0 ? vMeriOffset : iDatePart + vMeriOffset;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (iDatePart >= 0 && iDatePart <= 23) {\n\t\t\t\t\t\t\t\t\tout.hour = iDatePart;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (iDatePart >= 0 && iDatePart <= 23) {\n\t\t\t\t\t\t\t\tout.hour = iDatePart;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvTimeFlag = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'G':\n\t\t\t\t\tcase 'H':\n\t\t\t\t\t\tif (iDatePart >= 0 && iDatePart <= 23) {\n\t\t\t\t\t\t\tout.hour = iDatePart;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvTimeFlag = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'i':\n\t\t\t\t\t\tif (iDatePart >= 0 && iDatePart <= 59) {\n\t\t\t\t\t\t\tout.min = iDatePart;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvTimeFlag = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 's':\n\t\t\t\t\t\tif (iDatePart >= 0 && iDatePart <= 59) {\n\t\t\t\t\t\t\tout.sec = iDatePart;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvTimeFlag = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (vDateFlag === true) {\n\t\t\t\tvar varY = out.year || 0, varM = out.month ? out.month - 1 : 0, varD = out.day || 1;\n\t\t\t\tout.date = new Date(varY, varM, varD, out.hour, out.min, out.sec, 0);\n\t\t\t} else {\n\t\t\t\tif (vTimeFlag !== true) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tout.date = new Date(0, 0, 0, out.hour, out.min, out.sec, 0);\n\t\t\t}\n\t\t\treturn out.date;\n\t\t}\n\t\tguessDate(vDateStr, vFormat) {\n\t\t\tif (typeof vDateStr !== 'string') {\n\t\t\t\treturn vDateStr;\n\t\t\t}\n\t\t\tvar self = this, vParts = vDateStr.replace(self.separators, '\\0').split('\\0'), vPattern = /^[djmn]/g, len,\n\t\t\t\tvFormatParts = vFormat.match(self.validParts), vDate = new Date(), vDigit = 0, vYear, i, n, iPart, iSec;\n\n\t\t\tif (!vPattern.test(vFormatParts[0])) {\n\t\t\t\treturn vDateStr;\n\t\t\t}\n\n\t\t\tfor (i = 0; i < vParts.length; i++) {\n\t\t\t\tvDigit = 2;\n\t\t\t\tiPart = vParts[i];\n\t\t\t\tiSec = $h.getInt(iPart.substr(0, 2));\n\t\t\t\tif (isNaN(iSec)) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tswitch (i) {\n\t\t\t\t\tcase 0:\n\t\t\t\t\t\tif (vFormatParts[0] === 'm' || vFormatParts[0] === 'n') {\n\t\t\t\t\t\t\tvDate.setMonth(iSec - 1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvDate.setDate(iSec);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tif (vFormatParts[0] === 'm' || vFormatParts[0] === 'n') {\n\t\t\t\t\t\t\tvDate.setDate(iSec);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvDate.setMonth(iSec - 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\tvYear = vDate.getFullYear();\n\t\t\t\t\t\tlen = iPart.length;\n\t\t\t\t\t\tvDigit = len < 4 ? len : 4;\n\t\t\t\t\t\tvYear = $h.getInt(len < 4 ? vYear.toString().substr(0, 4 - len) + iPart : iPart.substr(0, 4));\n\t\t\t\t\t\tif (!vYear) {\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvDate.setFullYear(vYear);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\tvDate.setHours(iSec);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 4:\n\t\t\t\t\t\tvDate.setMinutes(iSec);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 5:\n\t\t\t\t\t\tvDate.setSeconds(iSec);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tn = iPart.substr(vDigit);\n\t\t\t\tif (n.length > 0) {\n\t\t\t\t\tvParts.splice(i + 1, 0, n);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn vDate;\n\t\t}\n\t\tparseFormat(vChar, vDate) {\n\t\t\tvar self = this, vSettings = self.dateSettings, fmt, backslash = /\\\\?(.?)/gi, doFormat = function (t, s) {\n\t\t\t\treturn fmt[t] ? fmt[t]() : s;\n\t\t\t};\n\t\t\tfmt = {\n\t\t\t\t/////////\n\t\t\t\t// DAY //\n\t\t\t\t/////////\n\t\t\t\t/**\n\t\t\t\t * Day of month with leading 0: `01..31`\n\t\t\t\t * @return {string}\n\t\t\t\t */\n\t\t\t\td: function () {\n\t\t\t\t\treturn $h.lpad(fmt.j(), 2);\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * Shorthand day name: `Mon...Sun`\n\t\t\t\t * @return {string}\n\t\t\t\t */\n\t\t\t\tD: function () {\n\t\t\t\t\treturn vSettings.daysShort[fmt.w()];\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * Day of month: `1..31`\n\t\t\t\t * @return {number}\n\t\t\t\t */\n\t\t\t\tj: function () {\n\t\t\t\t\treturn vDate.getDate();\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * Full day name: `Monday...Sunday`\n\t\t\t\t * @return {string}\n\t\t\t\t */\n\t\t\t\tl: function () {\n\t\t\t\t\treturn vSettings.days[fmt.w()];\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * ISO-8601 day of week: `1[Mon]..7[Sun]`\n\t\t\t\t * @return {number}\n\t\t\t\t */\n\t\t\t\tN: function () {\n\t\t\t\t\treturn fmt.w() || 7;\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * Day of week: `0[Sun]..6[Sat]`\n\t\t\t\t * @return {number}\n\t\t\t\t */\n\t\t\t\tw: function () {\n\t\t\t\t\treturn vDate.getDay();\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * Day of year: `0..365`\n\t\t\t\t * @return {number}\n\t\t\t\t */\n\t\t\t\tz: function () {\n\t\t\t\t\tvar a = new Date(fmt.Y(), fmt.n() - 1, fmt.j()), b = new Date(fmt.Y(), 0, 1);\n\t\t\t\t\treturn Math.round((a - b) / $h.DAY);\n\t\t\t\t},\n\n\t\t\t\t//////////\n\t\t\t\t// WEEK //\n\t\t\t\t//////////\n\t\t\t\t/**\n\t\t\t\t * ISO-8601 week number\n\t\t\t\t * @return {number}\n\t\t\t\t */\n\t\t\t\tW: function () {\n\t\t\t\t\tvar a = new Date(fmt.Y(), fmt.n() - 1, fmt.j() - fmt.N() + 3), b = new Date(a.getFullYear(), 0, 4);\n\t\t\t\t\treturn $h.lpad(1 + Math.round((a - b) / $h.DAY / 7), 2);\n\t\t\t\t},\n\n\t\t\t\t///////////\n\t\t\t\t// MONTH //\n\t\t\t\t///////////\n\t\t\t\t/**\n\t\t\t\t * Full month name: `January...December`\n\t\t\t\t * @return {string}\n\t\t\t\t */\n\t\t\t\tF: function () {\n\t\t\t\t\treturn vSettings.months[vDate.getMonth()];\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * Month w/leading 0: `01..12`\n\t\t\t\t * @return {string}\n\t\t\t\t */\n\t\t\t\tm: function () {\n\t\t\t\t\treturn $h.lpad(fmt.n(), 2);\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * Shorthand month name; `Jan...Dec`\n\t\t\t\t * @return {string}\n\t\t\t\t */\n\t\t\t\tM: function () {\n\t\t\t\t\treturn vSettings.monthsShort[vDate.getMonth()];\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * Month: `1...12`\n\t\t\t\t * @return {number}\n\t\t\t\t */\n\t\t\t\tn: function () {\n\t\t\t\t\treturn vDate.getMonth() + 1;\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * Days in month: `28...31`\n\t\t\t\t * @return {number}\n\t\t\t\t */\n\t\t\t\tt: function () {\n\t\t\t\t\treturn (new Date(fmt.Y(), fmt.n(), 0)).getDate();\n\t\t\t\t},\n\n\t\t\t\t//////////\n\t\t\t\t// YEAR //\n\t\t\t\t//////////\n\t\t\t\t/**\n\t\t\t\t * Is leap year? `0 or 1`\n\t\t\t\t * @return {number}\n\t\t\t\t */\n\t\t\t\tL: function () {\n\t\t\t\t\tvar Y = fmt.Y();\n\t\t\t\t\treturn (Y % 4 === 0 && Y % 100 !== 0 || Y % 400 === 0) ? 1 : 0;\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * ISO-8601 year\n\t\t\t\t * @return {number}\n\t\t\t\t */\n\t\t\t\to: function () {\n\t\t\t\t\tvar n = fmt.n(), W = fmt.W(), Y = fmt.Y();\n\t\t\t\t\treturn Y + (n === 12 && W < 9 ? 1 : n === 1 && W > 9 ? -1 : 0);\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * Full year: `e.g. 1980...2010`\n\t\t\t\t * @return {number}\n\t\t\t\t */\n\t\t\t\tY: function () {\n\t\t\t\t\treturn vDate.getFullYear();\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * Last two digits of year: `00...99`\n\t\t\t\t * @return {string}\n\t\t\t\t */\n\t\t\t\ty: function () {\n\t\t\t\t\treturn fmt.Y().toString().slice(-2);\n\t\t\t\t},\n\n\t\t\t\t//////////\n\t\t\t\t// TIME //\n\t\t\t\t//////////\n\t\t\t\t/**\n\t\t\t\t * Meridian lower: `am or pm`\n\t\t\t\t * @return {string}\n\t\t\t\t */\n\t\t\t\ta: function () {\n\t\t\t\t\treturn fmt.A().toLowerCase();\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * Meridian upper: `AM or PM`\n\t\t\t\t * @return {string}\n\t\t\t\t */\n\t\t\t\tA: function () {\n\t\t\t\t\tvar n = fmt.G() < 12 ? 0 : 1;\n\t\t\t\t\treturn vSettings.meridiem[n];\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * Swatch Internet time: `000..999`\n\t\t\t\t * @return {string}\n\t\t\t\t */\n\t\t\t\tB: function () {\n\t\t\t\t\tvar H = vDate.getUTCHours() * $h.HOUR, i = vDate.getUTCMinutes() * 60, s = vDate.getUTCSeconds();\n\t\t\t\t\treturn $h.lpad(Math.floor((H + i + s + $h.HOUR) / 86.4) % 1000, 3);\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * 12-Hours: `1..12`\n\t\t\t\t * @return {number}\n\t\t\t\t */\n\t\t\t\tg: function () {\n\t\t\t\t\treturn fmt.G() % 12 || 12;\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * 24-Hours: `0..23`\n\t\t\t\t * @return {number}\n\t\t\t\t */\n\t\t\t\tG: function () {\n\t\t\t\t\treturn vDate.getHours();\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * 12-Hours with leading 0: `01..12`\n\t\t\t\t * @return {string}\n\t\t\t\t */\n\t\t\t\th: function () {\n\t\t\t\t\treturn $h.lpad(fmt.g(), 2);\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * 24-Hours w/leading 0: `00..23`\n\t\t\t\t * @return {string}\n\t\t\t\t */\n\t\t\t\tH: function () {\n\t\t\t\t\treturn $h.lpad(fmt.G(), 2);\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * Minutes w/leading 0: `00..59`\n\t\t\t\t * @return {string}\n\t\t\t\t */\n\t\t\t\ti: function () {\n\t\t\t\t\treturn $h.lpad(vDate.getMinutes(), 2);\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * Seconds w/leading 0: `00..59`\n\t\t\t\t * @return {string}\n\t\t\t\t */\n\t\t\t\ts: function () {\n\t\t\t\t\treturn $h.lpad(vDate.getSeconds(), 2);\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * Microseconds: `000000-999000`\n\t\t\t\t * @return {string}\n\t\t\t\t */\n\t\t\t\tu: function () {\n\t\t\t\t\treturn $h.lpad(vDate.getMilliseconds() * 1000, 6);\n\t\t\t\t},\n\n\t\t\t\t//////////////\n\t\t\t\t// TIMEZONE //\n\t\t\t\t//////////////\n\t\t\t\t/**\n\t\t\t\t * Timezone identifier: `e.g. Atlantic/Azores, ...`\n\t\t\t\t * @return {string}\n\t\t\t\t */\n\t\t\t\te: function () {\n\t\t\t\t\tvar str = /\\((.*)\\)/.exec(String(vDate))[1];\n\t\t\t\t\treturn str || 'Coordinated Universal Time';\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * DST observed? `0 or 1`\n\t\t\t\t * @return {number}\n\t\t\t\t */\n\t\t\t\tI: function () {\n\t\t\t\t\tvar a = new Date(fmt.Y(), 0), c = Date.UTC(fmt.Y(), 0),\n\t\t\t\t\t\tb = new Date(fmt.Y(), 6), d = Date.UTC(fmt.Y(), 6);\n\t\t\t\t\treturn ((a - c) !== (b - d)) ? 1 : 0;\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * Difference to GMT in hour format: `e.g. +0200`\n\t\t\t\t * @return {string}\n\t\t\t\t */\n\t\t\t\tO: function () {\n\t\t\t\t\tvar tzo = vDate.getTimezoneOffset(), a = Math.abs(tzo);\n\t\t\t\t\treturn (tzo > 0 ? '-' : '+') + $h.lpad(Math.floor(a / 60) * 100 + a % 60, 4);\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * Difference to GMT with colon: `e.g. +02:00`\n\t\t\t\t * @return {string}\n\t\t\t\t */\n\t\t\t\tP: function () {\n\t\t\t\t\tvar O = fmt.O();\n\t\t\t\t\treturn (O.substr(0, 3) + ':' + O.substr(3, 2));\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * Timezone abbreviation: `e.g. EST, MDT, ...`\n\t\t\t\t * @return {string}\n\t\t\t\t */\n\t\t\t\tT: function () {\n\t\t\t\t\tvar str = (String(vDate).match(self.tzParts) || ['']).pop().replace(self.tzClip, '');\n\t\t\t\t\treturn str || 'UTC';\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * Timezone offset in seconds: `-43200...50400`\n\t\t\t\t * @return {number}\n\t\t\t\t */\n\t\t\t\tZ: function () {\n\t\t\t\t\treturn -vDate.getTimezoneOffset() * 60;\n\t\t\t\t},\n\n\t\t\t\t////////////////////\n\t\t\t\t// FULL DATE TIME //\n\t\t\t\t////////////////////\n\t\t\t\t/**\n\t\t\t\t * ISO-8601 date\n\t\t\t\t * @return {string}\n\t\t\t\t */\n\t\t\t\tc: function () {\n\t\t\t\t\treturn 'Y-m-d\\\\TH:i:sP'.replace(backslash, doFormat);\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * RFC 2822 date\n\t\t\t\t * @return {string}\n\t\t\t\t */\n\t\t\t\tr: function () {\n\t\t\t\t\treturn 'D, d M Y H:i:s O'.replace(backslash, doFormat);\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * Seconds since UNIX epoch\n\t\t\t\t * @return {number}\n\t\t\t\t */\n\t\t\t\tU: function () {\n\t\t\t\t\treturn vDate.getTime() / 1000 || 0;\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn doFormat(vChar, vChar);\n\t\t}\n\t\tformatDate(vDate, vFormat) {\n\t\t\tvar self = this, i, n, len, str, vChar, vDateStr = '', BACKSLASH = '\\\\';\n\t\t\tif (typeof vDate === 'string') {\n\t\t\t\tvDate = self.parseDate(vDate, vFormat);\n\t\t\t\tif (!vDate) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (vDate instanceof Date) {\n\t\t\t\tlen = vFormat.length;\n\t\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\t\tvChar = vFormat.charAt(i);\n\t\t\t\t\tif (vChar === 'S' || vChar === BACKSLASH) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (i > 0 && vFormat.charAt(i - 1) === BACKSLASH) {\n\t\t\t\t\t\tvDateStr += vChar;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tstr = self.parseFormat(vChar, vDate);\n\t\t\t\t\tif (i !== (len - 1) && self.intParts.test(vChar) && vFormat.charAt(i + 1) === 'S') {\n\t\t\t\t\t\tn = $h.getInt(str) || 0;\n\t\t\t\t\t\tstr += self.dateSettings.ordinal(n);\n\t\t\t\t\t}\n\t\t\t\t\tvDateStr += str;\n\t\t\t\t}\n\t\t\t\treturn vDateStr;\n\t\t\t}\n\t\t\treturn '';\n\t\t}\n\t}\n\texport default DateFormatter;\n","import DateFormatter from '../plugins/php-date-formatter';\n\nlet dateFormatter = new DateFormatter();\n\ndocument.querySelectorAll('.js-date').forEach(function (item) {\n\tif (item.dataset.timestamp && item.dataset.format) {\n\t\tlet date = new Date(item.dataset.timestamp * 1000);\n\t\tlet formattedDate = dateFormatter.formatDate(date, item.dataset.format);\n\t\titem.innerHTML = formattedDate;\n\t\titem.title = formattedDate;\n\t}\n});\n","/**\n * heroTyping.js\n * \n * This script manages a typing animation effect for the titles on the homepage's hero section. \n * It observes changes to the active slide in a Swiper carousel and triggers typing animations \n * when a new slide becomes active, resetting the text when the slide deactivates.\n * \n * Key Features:\n * - Ensures the typing effect only applies on the homepage.\n * - Uses a MutationObserver to detect active slide changes in the Swiper.\n * - Manages timers to handle smooth text animation and resets.\n * - Adds ARIA attributes to improve accessibility for screen readers.\n * - Throttles the observer callback to improve performance.\n */\n\nexport default function heroTyping() {\n // Check if the body has the 'home' class\n if (!document.body.classList.contains('home')) return; // Exit if not on homepage\n\n const swiperContainer = document.querySelector('.swiper-container');\n if (!swiperContainer) return; // Exit if Swiper container is not found\n\n // Throttle the MutationObserver callback to prevent performance issues\n let mutationTimeout;\n const observer = new MutationObserver((mutations) => {\n if (mutationTimeout) return; // Prevent rapid calls\n\n mutationTimeout = setTimeout(() => {\n mutations.forEach((mutation) => {\n if (mutation.type === 'attributes' && mutation.attributeName === 'class') {\n if (!mutation.target.classList.contains('swiper-slide')) return;\n\n if (mutation.target.classList.contains('swiper-slide-active')) {\n const activeSlide = mutation.target;\n const h1 = activeSlide.querySelector('h1.heroSection__title');\n if (h1) {\n startTypingOnce(h1); // Start typing effect only if it hasn't started\n }\n } else {\n const slide = mutation.target;\n const h1 = slide.querySelector('h1.heroSection__title');\n if (h1) resetText(h1); // Reset text on inactive slides\n }\n }\n });\n mutationTimeout = null; // Reset timeout\n }, 100); // Adjust delay if needed\n });\n\n // Start observing the Swiper container for attribute changes\n observer.observe(swiperContainer, {\n attributes: true,\n subtree: true,\n attributeFilter: ['class'],\n });\n\n // Trigger typing effect for the initial active slide if present\n const initialActiveSlide = swiperContainer.querySelector('.swiper-slide-active');\n if (initialActiveSlide) {\n const h1 = initialActiveSlide.querySelector('h1.heroSection__title');\n if (h1) {\n startTypingOnce(h1, 500); // Start typing after 0.5 seconds, only once\n }\n }\n\n // Add event listener for pagination bullets\n const paginationContainer = swiperContainer.querySelector('.swiper-pagination');\n if (paginationContainer) {\n paginationContainer.addEventListener('click', (event) => {\n if (event.target.classList.contains('swiper-pagination-bullet')) {\n setTimeout(() => {\n const activeSlide = swiperContainer.querySelector('.swiper-slide-active');\n if (activeSlide) {\n const h1 = activeSlide.querySelector('h1.heroSection__title');\n if (h1) {\n resetText(h1); // Reset the text in case it was already typed\n startTypingOnce(h1, 500); // Delay typing effect by 500ms\n }\n }\n }, 100); // Allow Swiper to update active slide\n }\n });\n }\n\n // Function to initialize typing with accessibility enhancements\n function startTypingOnce(element, delay = 1000) {\n // Prevent re-initialization if the typing effect has already started\n if (element.hasAttribute('data-typed')) return;\n\n if (!element.dataset.fullHtml) {\n element.dataset.fullHtml = element.innerHTML;\n }\n element.setAttribute('aria-live', 'polite'); // Announce content changes to screen readers\n element.setAttribute('aria-hidden', 'false'); // Ensure visibility for accessibility\n element.style.visibility = 'visible'; // Make visible when typing starts\n\n element.innerHTML = ''; // Clear the text\n setTimeout(() => typeText(element), delay); // Start typing after the specified delay\n element.setAttribute('data-typed', 'true'); // Mark as typed to avoid restart\n }\n\n // Function to reset the text content and clear any active timers\n function resetText(element) {\n if (element.typingTimer) {\n clearTimeout(element.typingTimer); // Clear existing timer\n delete element.typingTimer;\n }\n if (element.dataset.fullHtml) {\n element.innerHTML = element.dataset.fullHtml; // Restore original text\n }\n element.setAttribute('aria-hidden', 'true'); // Hide from screen readers when inactive\n element.style.visibility = 'hidden'; // Hide text when inactive\n element.removeAttribute('data-typed'); // Remove typed marker on reset\n }\n\n // Previous helper functions remain the same...\n function measureText(text, element) {\n const measureSpan = document.createElement('span');\n measureSpan.style.visibility = 'hidden';\n measureSpan.style.position = 'absolute';\n measureSpan.style.whiteSpace = 'pre';\n const styles = window.getComputedStyle(element);\n measureSpan.style.font = styles.font;\n measureSpan.style.letterSpacing = styles.letterSpacing;\n measureSpan.style.textTransform = styles.textTransform;\n measureSpan.style.padding = styles.padding;\n measureSpan.innerHTML = text;\n document.body.appendChild(measureSpan);\n const width = measureSpan.offsetWidth;\n document.body.removeChild(measureSpan);\n return width;\n }\n\n function shouldWrapWord(currentLine, word, element, nextWord) {\n const containerWidth = element.offsetWidth;\n const tolerancePixels = 5;\n \n const lineWithWord = currentLine + word;\n const lineWidth = measureText(lineWithWord, element);\n \n if (lineWidth > containerWidth + tolerancePixels) {\n return true;\n }\n \n if (nextWord && !nextWord.isTag) {\n const lineWithBothWords = lineWithWord + nextWord.text;\n const widthWithBothWords = measureText(lineWithBothWords, element);\n \n if (widthWithBothWords <= containerWidth + tolerancePixels) {\n return false;\n }\n \n if (word.length <= 3) {\n return widthWithBothWords > containerWidth + tolerancePixels * 2;\n }\n }\n \n return lineWidth > containerWidth;\n }\n\n function getWordBoundaries(text) {\n const words = [];\n let currentWord = '';\n let currentWordStart = 0;\n\n for (let i = 0; i < text.length; i++) {\n const char = text[i];\n if (char === '<') {\n // Skip HTML tags\n let tagEnd = text.indexOf('>', i);\n if (tagEnd === -1) tagEnd = text.length;\n if (currentWord) {\n words.push({\n text: currentWord,\n start: currentWordStart,\n end: i\n });\n currentWord = '';\n }\n words.push({\n text: text.substring(i, tagEnd + 1),\n start: i,\n end: tagEnd + 1,\n isTag: true\n });\n i = tagEnd;\n } else if (/\\s/.test(char)) {\n if (currentWord) {\n words.push({\n text: currentWord,\n start: currentWordStart,\n end: i\n });\n currentWord = '';\n }\n words.push({\n text: char,\n start: i,\n end: i + 1,\n isSpace: true\n });\n } else {\n if (!currentWord) {\n currentWordStart = i;\n }\n currentWord += char;\n }\n }\n\n if (currentWord) {\n words.push({\n text: currentWord,\n start: currentWordStart,\n end: text.length\n });\n }\n\n return words;\n } \n\n function typeText(element) {\n if (element.typingTimer) {\n clearTimeout(element.typingTimer);\n delete element.typingTimer;\n }\n \n const parentElement = element.closest('.heroSection__titleSlideDown');\n const fullText = element.dataset.fullHtml;\n element.innerHTML = ''; // Clear the text\n \n // Add the blinking cursor class to the parent element\n if (parentElement) parentElement.classList.add('initial-cursor');\n \n // Create a wrapper for the typewriter effect\n const wrapper = document.createElement('div');\n wrapper.style.position = 'relative';\n element.appendChild(wrapper);\n \n let currentLine = document.createElement('div');\n wrapper.appendChild(currentLine);\n \n const cursorSpan = document.createElement('span'); // Dynamic cursor\n cursorSpan.classList.add('active-span');\n currentLine.appendChild(cursorSpan);\n \n const words = getWordBoundaries(fullText);\n let wordIndex = 0;\n let charIndex = 0;\n const typingSpeed = 50;\n \n function updateCursorPosition(span) {\n if (span && span.nextSibling !== cursorSpan) {\n span.parentNode.insertBefore(cursorSpan, span.nextSibling);\n }\n }\n \n function typeNextCharacter() {\n if (wordIndex >= words.length) {\n // Typing complete; ensure the cursor stays on the last character\n const lastSpan = currentLine.lastElementChild;\n updateCursorPosition(lastSpan);\n delete element.typingTimer;\n return;\n }\n \n const currentWord = words[wordIndex];\n const nextWord = words[wordIndex + 1];\n \n if (currentWord.isTag || charIndex === 0) {\n if (!currentWord.isTag && !currentWord.isSpace) {\n if (shouldWrapWord(currentLine.textContent, currentWord.text, element, nextWord)) {\n currentLine = document.createElement('div');\n wrapper.appendChild(currentLine);\n \n // Move the cursor span to the new line\n currentLine.appendChild(cursorSpan);\n }\n }\n }\n \n if (currentWord.isTag) {\n currentLine.innerHTML += currentWord.text;\n wordIndex++;\n charIndex = 0;\n typeNextCharacter();\n return;\n }\n \n const char = currentWord.text[charIndex];\n const span = document.createElement('span');\n span.textContent = char;\n currentLine.insertBefore(span, cursorSpan); // Insert before the cursor span\n \n updateCursorPosition(span); // Ensure the cursor follows\n \n charIndex++;\n \n if (charIndex >= currentWord.text.length) {\n wordIndex++;\n charIndex = 0;\n }\n \n element.typingTimer = setTimeout(typeNextCharacter, typingSpeed);\n }\n \n // Remove the initial blinking cursor from the parent element and start typing\n setTimeout(() => {\n if (parentElement) parentElement.classList.remove('initial-cursor');\n typeNextCharacter();\n }, 0); // No delay in starting typing\n } \n}\n","import \"../scss/screen.scss\";\nimport \"./plugins/navigator-saywho\";\n\nimport UIkit from \"uikit/dist/js/uikit-core\";\nimport \"./misc/utm\";\nimport \"./misc/date\";\nimport \"./misc/share\";\n\n// Load Lottie animation library - this is for the animated illustration card graphics\nimport lottie from \"lottie-web\";\nwindow.lottie = lottie; // Make Lottie globally available\n\n// ACF Gutenberg block scripts for 2024 refresh\nimport \"./misc/appsBrowser\"; // toggling tabbed content\nimport \"./misc/solutionsAccordion\"; // accordion content block\nimport \"./misc/personCards\";\nimport \"./misc/productNavigation\";\nimport \"./misc/mainNavBlur\";\nimport \"./misc/statsCounter\"; // stats module counting animations\nimport \"./misc/heroPatternTransitions\"; // hero slider animations\nimport \"./misc/lottieAnimations\"; // lottie animations on homepage\n\nimport \"./misc/marketoScripts\";\nimport heroTyping from \"./misc/heroTyping\";\nimport \"./misc/blogPaginationTitles\"; // Handles pagination titles on the blog\n\nwindow.UIkit = UIkit;\nwindow.UIkit.icon.add({\n\tx: '',\n});\n\nlet util = UIkit.util;\nwindow.$ = util.$;\nlet body = $(\"body\");\n\n// loads the Icon plugin\nimport(/* webpackChunkName: \"icons\" */ \"uikit/dist/js/uikit-icons\").then((module) => {\n\tUIkit.use(module.default);\n});\n\nconst config = {\n\t// : \n\tcareers: \"(page-template-careers|page-template-careers-job)\",\n\tevents: \"archive-events\", // it is technically a page, this is used not to load vue on single event pages\n\twebinars: \"archive-webinars\",\n\t\"ai-experience\": \"tax-recording_type\",\n\t//'blog': '(single-blog|post-type-archive-blog)',\n\t\"algolia-search\": \"(post-type-archive-resource|post-type-archive-webinar|post-type-archive-hol|post-type-archive-partnersolution|post-type-archive-aiaccelerator|page-template-page-partner-finder|post-type-archive-usecase)\",\n};\n\nconst parts_config = {\n\t// : \n\tlightbox: \"[uk-lightbox]\",\n\tfilter: \"[uk-filter]\",\n\tslider: \"[uk-slider]\",\n\t\"content-with-video-animation\": \".dr-sticky-scroll\",\n\t\"video-with-steps\": \".js-videoSlider\",\n\t\"content-slider\": \".dr-content-slider\",\n\t\"card-grid\": \".js-card-filter\",\n\t\"trust-radius-widget\": \".trustradius-tqw\",\n\t\"tabs-switcher\": \".js-tabs-switcher\",\n\t\"sticky-tabs\": \".js-sticky-tabs\",\n\t\"table-of-content\": \".js-table-of-content\",\n\t\"nav-side-menu\": \".js-nav-side-menu\", //technically not a block, bot works as a block on several pages\n\tloadmore: \".js-load-more\",\n\tswiper: \"[swiper]\",\n\tform: \".dr-form\",\n\ttimeline: \".dr-timeline\",\n\t\"media-text-video-autoplay\": \".wp-block-media-text video\",\n\tcountup: \".js-countup-block\",\n\t\"code-snippet\": \".wp-block-code\",\n};\n\nfor (let name in config) {\n\tlet re = new RegExp(config[name]);\n\tif (re.test(body.classList.toString())) {\n\t\timport(/* webpackChunkName: \"templates/[request]\" */ \"./templates/\" + `${name}`)\n\t\t\t.then((module) => {\n\t\t\t\tmodule.default();\n\t\t\t})\n\t\t\t.catch((err) => {\n\t\t\t\tconsole.log(err);\n\t\t\t});\n\t\tbreak;\n\t}\n}\n\nfor (let name in parts_config) {\n\tif (document.querySelector(parts_config[name])) {\n\t\timport(/* webpackChunkName: \"parts/[request]\" */ \"./parts/\" + `${name}`)\n\t\t\t.then((module) => {\n\t\t\t\tmodule.default();\n\t\t\t})\n\t\t\t.catch((err) => {\n\t\t\t\tconsole.log(err);\n\t\t\t});\n\t}\n}\n\nfunction loadWistia() {\n\tif (typeof \"Wistia\" !== \"undefined\") {\n\t\tlet script = document.createElement(\"script\");\n\t\tscript.src = \"https://fast.wistia.com/assets/external/E-v1.js\";\n\t\tscript.async = true;\n\t\tdocument.body.appendChild(script);\n\t}\n}\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n\tlet wistiaElements = document.querySelectorAll(\".js-wistia-trigger\");\n\tif (wistiaElements.length > 0) {\n\t\twindow._wq = window._wq || [];\n\t\twistiaElements.forEach((video) => {\n\t\t\tvideo.addEventListener(\"click\", (el) => {\n\t\t\t\t// Dynamically load Wistia JavaScript API\n\t\t\t\t// Play video after API has loaded\n\t\t\t\tlet videoId = \"\";\n\t\t\t\tel.currentTarget.parentElement.classList.forEach((className) => {\n\t\t\t\t\tif (className.startsWith(\"wistia_async_\")) {\n\t\t\t\t\t\tvideoId = className.slice().slice(13);\n\t\t\t\t\t\t_wq.push({\n\t\t\t\t\t\t\tid: videoId,\n\t\t\t\t\t\t\tonReady: function (video) {\n\t\t\t\t\t\t\t\tif (video.popover != undefined) {\n\t\t\t\t\t\t\t\t\tvideo.popover.show();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tvideo.play();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tloadWistia();\n\t\t\t});\n\t\t});\n\t}\n\n\tif (\n\t\t// load if we have content with video animation block\n\t\tdocument.getElementsByClassName(\"dr-sticky-scroll\").length ||\n\t\t// if we have direct link to video\n\t\t(window.location.search && window.location.search.includes(\"wvideo\")) ||\n\t\t// if we have autoplay videos\n\t\tdocument.getElementsByClassName(\"autoPlay=true\").length\n\t) {\n\t\tloadWistia();\n\t}\n\n\tif (document.body.classList.contains(\"home\")) {\n\t\theroTyping();\n\t}\n});\n"],"sourceRoot":""}