",d+"
OSZAR »
"))),g},C=function(){t=e.getService("config"),ee(t.getServiceConfig("domCapture")||{})},{init:function(){t=e.getService("config"),T||ee(t.getServiceConfig("domCapture")||{})},destroy:function(){t.unsubscribe("configupdated",C),l&&(l.disconnect(),l=null),p&&Element.prototype.attachShadow===H&&(Element.prototype.attachShadow=p,p=null),T=!1,D&&Object.defineProperty(Document.prototype,"adoptedStyleSheets",D),M&&Object.defineProperty(Document.prototype,"styleSheets",M),k&&Object.defineProperty(ShadowRoot.prototype,"adoptedStyleSheets",k),P&&Object.defineProperty(ShadowRoot.prototype,"styleSheets",P),CSSStyleSheet.prototype.insertRuleOriginal&&(CSSStyleSheet.prototype.insertRule=CSSStyleSheet.prototype.insertRuleOriginal),CSSStyleSheet.prototype.deleteRuleOriginal&&(CSSStyleSheet.prototype.deleteRule=CSSStyleSheet.prototype.deleteRuleOriginal),CSSStyleSheet.prototype.replaceSyncOriginal&&(CSSStyleSheet.prototype.replaceSync=CSSStyleSheet.prototype.replaceSyncOriginal),CSSStyleSheet.prototype.replaceOriginal&&(CSSStyleSheet.prototype.replace=CSSStyleSheet.prototype.replaceOriginal),CSSStyleSheet.prototype.publishOwnership&&delete CSSStyleSheet.prototype.publishOwnership,CSSStyleSheet.prototype.removeOwnership&&delete CSSStyleSheet.prototype.removeOwnership,CSSStyleSheet.prototype.updateOwner&&delete CSSStyleSheet.prototype.updateOwner},observeWindow:function(e){e&&(I.getValue(i,"options.captureFrames",!1)||e===window)&&-1===I.indexOf(d,e)&&(d.push(e),l&&L&&l.observe(e.document,u))},captureDOM:function(e,t){let n,o,r,a=null,s=0;if(!T||I.isIE&&document.documentMode<10)return a;if(t=I.mixin({},i.options,t),e=e||window.document,!S||!c||v||t.forceFullDOM){if(l&&l.disconnect(),a=de(e,t),a.fullDOM=!0,a.forced=!(!v&&!t.forceFullDOM),S=!0,l)for(n=0,o=d.length;nt.maxLength&&(a={errorCode:101,error:"Captured length ("+s+") exceeded limit ("+t.maxLength+")."})),a}}})),TLT.addService("encoder",(function(e){"use strict";let t={},n=null,o=null,i=!1;function r(e){t=e,n.subscribe("configupdated",o),i=!0}return o=function(){n=e.getService("config"),r(n.getServiceConfig("encoder")||{})},{init:function(){n=e.getService("config"),i||r(n.getServiceConfig("encoder")||{})},destroy:function(){n.unsubscribe("configupdated",o),i=!1},encode:function(n,o){let i;const r={data:null,encoding:null,error:null};if("string"!=typeof n&&!n||!o)return r.error="Invalid "+(n?"type":"data")+" parameter.",r;const a=function(n){let o=null;return n?(o=t[n],o&&"string"==typeof o.encode&&(o.encode=e.utils.access(o.encode)),o):o}(o);if(!a)return r.error="Specified encoder ("+o+") not found.",r;if("function"!=typeof a.encode)return r.error="Configured encoder ("+o+") 'encode' method is not a function.",r;try{i=a.encode(n)}catch(e){return r.error="Exception "+(e.name?e.name+" - ":"")+(e.message||e),r}return i&&null!==e.utils.getValue(i,"buffer",null)?(r.data=i.buffer,r.encoding=a.defaultEncoding,r):(r.error="Encoder ("+o+") returned an invalid result.",r)}}})),TLT.addService("message",(function(e){"use strict";const t=e.utils,n=e.getTabId(),o=[];let i=0,r=0;const a=e.getStartTime(),s=window.performance&&performance.timeOrigin&&performance.timeOriginl&&(t=e),t}function X(e){let t="";if(delete e.timestamp,this.type=e.type,this.offset=U(),2===e.type&&"LOAD"===e.screenview.type?(o.push(U()),this.screenviewOffset=0):o.length?(this.screenviewOffset=U()-o[o.length-1],2===e.type&&"UNLOAD"===e.screenview.type&&o.pop()):this.screenviewOffset=0,this.type)for(t in this.count=r+=1,this.fromWeb=!0,e)Object.prototype.hasOwnProperty.call(e,t)&&(this[t]=e[t])}function z(e,n,o){let i=S.PVC_MASK_BASIC;return"string"!=typeof n?n:(e?e.maskType===S.PVC_MASK_EMPTY.maskType?i=S.PVC_MASK_EMPTY:e.maskType===S.PVC_MASK_BASIC.maskType?i=S.PVC_MASK_BASIC:e.maskType===S.PVC_MASK_TYPE.maskType?i=S.PVC_MASK_TYPE:e.maskType===S.PVC_MASK_CUSTOM.maskType&&(i="string"==typeof e.maskFunction?t.access(e.maskFunction):e.maskFunction,"function"!=typeof i&&(i=S.PVC_MASK_BASIC)):i=S.PVC_MASK_BASIC,i(n,o))}function _(e,t){let n;if(e&&t)for(n in t)Object.prototype.hasOwnProperty.call(t,n)&&("value"===n?t[n]=z(e,t[n]):delete t[n])}function q(e,n){return-1!==t.matchTarget(e,n)}function H(e,t){let n,o=null;if(!(e&&e.maskAttributes&&t&&t.attributes))return o;if("function"==typeof e.maskAttributes)try{o=e.maskAttributes(t.id,t.attributes)}catch(e){}else for(n in o=t.attributes,t.attributes)Object.prototype.hasOwnProperty.call(t.attributes,n)&&(o[n]=z(e,t.attributes[n]));return o}function W(e){let n,o,i,r,a=!1;if(!e||!e.currState&&!e.prevState&&!e.attributes||!e.id)return e;const s=e.prevState,l=e.currState;for(n=0,o=w.length;n=0;n-=1)r=v[n],"object"==typeof r.pattern?r.cRegex=new RegExp(r.pattern.regex,r.pattern.flags):v.splice(n,1)}return t.isiOS?90===Math.abs(P)&&(M=k,M=I):(M=I,D=k),S.PVC_MASK_EMPTY=function(e){return""},S.PVC_MASK_BASIC=function(e){return"string"!=typeof e?"":e.length?"XXXXX":""},S.PVC_MASK_TYPE=function(e){let n,o,i="";if("string"!=typeof e)return i;const r=e.split("");for(n=0,o=r.length;nl.hitCount+1&&delete V[a])}}(e.domCapture),B(new X(e))},wrapMessages:function(o){i+=1;const r={messageVersion:"13.0.0.0",serialNumber:i,sessions:[{id:e.getPageId(),tabId:n,startTime:s,timezoneOffset:c,messages:o,clientEnvironment:{webEnvironment:{libVersion:"6.4.70",buildNote:p.buildNote||"",domain:y,page:h,referrer:document.referrer,mouseMovement:e.isMousemovementDetected(),screen:{devicePixelRatio:E,deviceWidth:M,deviceHeight:D,deviceToolbarHeight:j,width:N,height:R,orientation:P}}}}]},a=r.sessions[0].clientEnvironment.webEnvironment;return a.screen.orientationMode=t.getOrientationMode(a.screen.orientation),m&&(a.priorPage={page:b,terminationReason:m}),r},getCurrentOffset:U}})),TLT.addService("serializer",(function(e){"use strict";let t=e.getService("config"),n={},o={},i=null,r=!1;const a={json:void 0!==window.JSON?{serialize:window.JSON.stringify,parse:window.JSON.parse}:{}};function s(t,n,o){let i,r,a;for(i=0,r=(t=t||[]).length;it?localStorage.removeItem(e):o=n[1]),o}function w(e,t){if(!localStorage||!e)return;t=t||y();const n=Date.now()+s;return localStorage.setItem(e,n+"|"+t),b(e)}function v(){return a}function S(u){if(a=[],l=h.getValue(u,"sessionIDUsesCookie",!0),c=h.getValue(u,"sessionIDUsesStorage",!1),u.tlAppKey&&(o=u.tlAppKey,a.push({name:"X-Tealeaf-SaaS-AppKey",value:o})),u.visitorCookieName&&(d=u.visitorCookieName),u.wcxCookieName&&(f=u.wcxCookieName),t=h.getCookieValue(f),t&&a.push({name:"X-WCXSID",value:t}),u.sessionizationCookieName&&(p=u.sessionizationCookieName),c){s=h.getValue(u,"sessionIDStorageTTL",6e5);try{n=b(p)}catch(e){c=!1}}if(!n&&l&&(n=h.getCookieValue(p)),!n)if(t)p=f,n=t;else{if(c)try{n=w(p)}catch(e){c=!1}!n&&l&&(n=function(){const e=y(),t=!!r.secureTLTSID,n=r.samesite;return h.setCookie(p,e,void 0,void 0,void 0,t,n),h.getCookieValue(p)}())}e.setSessionCookieInfo(p,n);const m=void 0!==u?.disableTLTDID&&u.disableTLTDID;!1===m&&(i=h.getCookieValue(g),i&&void 0!==i||(i=y()),h.setCookie(g,i,31536e3,void 0,void 0,false,"Lax")),n||(n="Check7UIC7Cookie7Configuration77"),a.push({name:"X-Tealeaf-SaaS-TLTSID",value:n}),!1===m&&a.push({name:"X-Tealeaf-TLTDID",value:i}),a.length&&TLT.registerBridgeCallbacks([{enabled:!0,cbType:"addRequestHeaders",cbFunction:v}])}function T(e){let t,n,o,i=!1;const a=r.appCookieWhitelist;if(!a||!a.length)return i;for(t=0,n=a.length;t=0)try{a=decodeURIComponent(i.substring(0,n))}catch(e){a=i.substring(0,n)}if(s=i.substring(n+1),T(a))try{c[a]=decodeURIComponent(s)}catch(e){c[a]=s}}u&&!c[d]&&(c[d]=u),e.post({type:14,cookies:c})}}())}}})),TLT&&"function"==typeof TLT.addModule&&TLT.addModule("dataLayer",(function(e){"use strict";let t,n,o=!1,i=!0,r="",a=[],s=0,l=0;const c=e.utils,u=new Set;function d(e,t){let n,o,i,r=-1;if(!e||!t)return r;for(n=0,o=t.length;n5&&!o||t>10)return"Serialization error: Exceeds nesting limit (5) or (10) for a permitted property."}else t=1;for(r in e)if(Object.prototype.hasOwnProperty.call(e,r)&&!(d(r,l)>=0)){if(1===t&&(o="",r in u&&(o=r)),!i&&!o||t>5&&o&&r!==u[o][t-1]&&n.rootProperties[o][t-1])continue;switch(a=e[r],typeof a){case"object":if(a instanceof Node)a.nodeName?(s[r]=a.nodeName.toLowerCase(),a.id&&(s[r]+="#"+a.id)):s[r]="DOMNode: unknown";else if(a instanceof Window)s[r]="DOMWindow: "+a.location.href;else try{s[r]=f(a,t,n,o)}catch(e){s[r]="Serialization error: "+e.message}break;case"function":case"undefined":break;default:n&&n.privacyPatterns&&(a=c.applyPrivacyPatterns(a,n.privacyPatterns)),s[r]=a}}return s}function p(e){let t=null;if(!e)return t;switch(typeof e){case"string":t=c.access(e);break;case"object":t=e;break;case"function":try{t=e()}catch(e){}}return t}function g(){let e,t;if(o)for(t=0;t=0)){let e=p(a[t].dataObject);if(!e)return;const n=a[t].rules;if(n&&(i=void 0===n.includeEverything||n.includeEverything,n.privacyPatterns))for(let e=n.privacyPatterns.length-1;e>=0;e-=1){const t=n.privacyPatterns[e];"object"==typeof t.pattern?t.cRegex=new RegExp(t.pattern.regex,t.pattern.flags):n.privacyPatterns.splice(e,1)}e instanceof Array?(e=e.filter((e=>{if(n&&n.filter)for(const t of n.filter){let n,o;const i=t.matchProperty,r=t.matchValue;let a=!1;return"[object Arguments]"===Object.prototype.toString.call(e)?(n=e[0],o=e[1],a=!0):(n=e[t.matchProperty],o=t.matchValue),h(e,n,o,i,r,a)}return!0})).map((e=>f(e,0,n))),e.forEach((function(e){y(e)}))):y(f(e,0,n)),i=!0}}function h(e,t,n,o,i,r){if(r){if("string"==typeof t&&"string"==typeof o&&"string"==typeof n&&"string"==typeof i&&t===o&&n===i)return!0;if("string"==typeof t&&"string"==typeof o&&"object"==typeof n&&(null===i||""===i||void 0===i)&&t===o)return!0;if("string"==typeof t&&"string"==typeof o&&"string"==typeof n&&"object"==typeof i&&"object"==typeof i){return new RegExp(i).test(n)}if("string"==typeof t&&"object"==typeof o&&"string"==typeof t&&(null===i||""===i||void 0===i)){return new RegExp(o).test(t)}}else{if("string"==typeof t&&"string"==typeof n&&t===n)return!0;if(!("string"!=typeof t||"string"!=typeof o||"object"!=typeof e||null!==n&&""!==n&&void 0!==n||null!==i&&""!==i&&void 0!==i)&&Object.prototype.hasOwnProperty.call(e,o))return!0;if("string"==typeof t&&"string"==typeof o&&"object"==typeof e&&"object"==typeof i){return new RegExp(i).test(e[o])}if("object"==typeof o&&"object"==typeof e&&(null===i||""===i||void 0===i)){const t=Object.keys(e);for(const e of t){if(new RegExp(o).test(e))return!0}}}return!1}function y(t){if(!t)return;let n;try{n=JSON.stringify(t)}catch(e){n=Object.keys(t).map((e=>`${e}=${t[e]}`)).join("_")}if(u.has(n))return;n&&u.add(n);const o={type:19,dataLayer:t};e.post(o)}function m(e,t){return setTimeout((function(){l>=t.length-1?g():(l=t.length,m(e,t))}),e)}function b(e){let t;if(e&&e.dataObject&&"string"==typeof e.dataObject){t=e.dataObject.replace(/\window\./,"");const n=window[t];if(n)w(n,"window['"+e+"']");else{if(s+=300,s>5e4)return;setTimeout((function(){b(e)}),300)}}else{if(!e||!Array.isArray(e.dataObject)&&"object"!=typeof e.dataObject)return;w(e,"trackObj as object")}}function w(e,t){if(e)if(Array.isArray(e))e.oldPush=Array.prototype.push,e.push=function(t){e.onPush(t),e.oldPush(t)},e.onPush=function(t){l=e.length-1,n&&clearTimeout(n),n=setTimeout((function(){m(25,e)}),300)};else if("object"==typeof e&&!Array.isArray(e)&&null!==e){new Proxy(e,{set:function(e,t,n){return g(),!0}})&&g()}}return{init:function(){if(t=e.getConfig(),o=!0,a=[],t.dataObjects){a=t.dataObjects;for(const e of a)if(e.rules&&e.rules.permittedProperties){const t=e.rules.permittedProperties;e.rules.rootProperties={};for(let n=0;n=r("hoverThreshold")){for(this.hoverDuration=Math.min(this.hoverDuration,r("hoverThresholdMax")),a=!0,function(n,o){const i=t.getValue(n,"webEvent.target",{}),r=t.getValue(i,"element.tagName")||"",a="input"===r.toLowerCase()?t.getValue(i,"element.type"):"",s=t.getTlType(i),l={type:9,event:{hoverDuration:n.hoverDuration,hoverToClick:t.getValue(o,"hoverToClick")},target:{id:i.id||"",idType:i.idType||"",name:i.name||"",tlType:s,type:r,subType:a,position:{width:t.getValue(i,"element.offsetWidth",0),height:t.getValue(i,"element.offsetHeight",0),relXY:n.relXY}}};l.target.id&&(i.accessibility&&(l.target.accessibility=i.accessibility),i.attributes&&(l.target.attributes=i.attributes),e.post(l))}(this,{hoverToClick:!!o});void 0!==s&&l++=i&&t.clog("Overstat process() hit iterations limit")}else this.dispose(o);return a},this.clone=function(){const e=new d(this.domNode,this.gridX,this.gridY);return e.parentKey=this.parentKey,e}}function f(e,n,o){const r=function(e){if(e&&e.position)return{x:e.position.x,y:e.position.y};const n=(e=a(e))&&e.getBoundingClientRect?e.getBoundingClientRect():null;let o=0,r=0,l=o,u=r,d=0,f=0,p=c(e),g=0;for(n?(o=n.left,r=n.top):e&&(o=e.offsetLeft,r=e.offsetHeight);p&&g++=i&&t.clog("Overstat calculateNodeOffset() hit iterations limit"),isNaN(o)&&(o=0),isNaN(r)&&(r=0),{x:o,y:r}}(e=a(e));let l=n-r.x,u=o-r.y;return isFinite(l)||(l=0),isFinite(u)||(u=0),{x:l,y:u}}function p(e,t,n){const o=(e=a(e)).getBoundingClientRect?e.getBoundingClientRect():null,i=o?o.width:e.offsetWidth,s=o?o.height:e.offsetHeight,l=i&&i>0?Math.max(i/r("gridCellMaxX"),r("gridCellMinWidth")):r("gridCellMinWidth"),c=s&&s>0?Math.max(s/r("gridCellMaxY"),r("gridCellMinHeight")):r("gridCellMinHeight");let u=Math.min(Math.floor(t/l),r("gridCellMaxX")),d=Math.min(Math.floor(n/c),r("gridCellMaxY"));const f=i>0?t/i:0,p=s>0?n/s:0;let g="";var h,y;return isFinite(u)||(u=0),isFinite(d)||(d=0),h=f,y=p,g=(h=Math.floor(1e4*Math.min(Math.max(h,0),1))/1e4)+","+Math.floor(1e4*Math.min(Math.max(y,0),1))/1e4,{x:u,y:d,relXY:g}}function g(e){let o=e;let r=null,a=!1,s=0;const l={};for(l[e.getKey()]=!0;void 0!==o&&s++=i&&t.clog("Overstat cleanupHoverEvents() hit iterations limit"),o=n[o.parentKey];for(r in n)Object.prototype.hasOwnProperty.call(n,r)&&!l[r]&&(o=n[r],o&&(a?o.dispose():a=o.process()))}function h(e,o,i){if(o||(o=e.target),s(o))return null;if(t.isiOS||t.isAndroid)return null;let r,a,l,y,m,b,w;return u(o)?l=h(e,c(o),i):(r=f(o,e.position.x,e.position.y),a=p(o,r.x,r.y),l=new d(o,a.x,a.y,e),l.relXY=a.relXY,y=l.getKey(),n[y]?l=n[y]:n[y]=l,l.update(),i||(w=c(o),w&&(b=h(e,w,!0),null!==b&&(m=b.getKey(),y=l.getKey(),y!==m&&(l.parentKey=m))),g(l))),l}function y(e){(function(e,n){let o=0;if(!n||n===e)return!1;for(n=l(n);!s(n)&&o++=i&&t.clog("Overstat isChildOf() hit iterations limit"),!1})((e=function(e){return e.nativeEvent&&(e=e.nativeEvent),e}(e)).target,e.relatedTarget)||function(e,t){let o=null,i=null,r=!1;for(i in n)Object.prototype.hasOwnProperty.call(n,i)&&(o=n[i],o&&o.domNode===e&&o.getKey()!==t&&(r?o.dispose():r=o.process()))}(e.target)}function m(o){if(t.getValue(o,"target.id"))switch(o.type){case"mousemove":h(o);break;case"mouseout":y(o);break;case"click":!function(e){let t=null,o=null,i=!1;for(o in n)Object.prototype.hasOwnProperty.call(n,o)&&(t=n[o],t&&(i?t.dispose():i=t.process(!0)))}();break;case"submit":e.performFormCompletion(!0)}}return{init:function(){},destroy:function(){let e;for(e in n)Object.prototype.hasOwnProperty.call(n,e)&&(n[e].dispose(),delete n[e])},onevent:function(e){"object"==typeof e&&e.type&&m(e)},onmessage:function(e){},createHoverEvent:function(e,t,n,o){return new d(e,t,n,o)},cleanupHoverEvents:g,eventMap:n}})),TLT&&"function"==typeof TLT.addModule&&TLT.addModule("performance",(function(e){"use strict";const t={loadReceived:!1,unloadReceived:!1,perfEventSent:!1};let n,o=null,i=null,r={},a=0;const s=e.utils,l="https:"===window.location.protocol;let c,u,d=[],f=0;const p={enabled:!1,resourceTypes:[],blacklist:[]};function g(i,r){let l,c,u;const d={type:7,performance:{}};let f,p;if(!i||t.perfEventSent)return;const g=i.performance||{},h=g.timing,y=g.navigation;if(h){if(!h.loadEventStart&&!r)return;d.performance.timing=function(e){let t=0,n="",o=0;const i={};if(!e||"object"!=typeof e||!e.navigationStart)return{};for(n in t=e.navigationStart,e)(Object.prototype.hasOwnProperty.call(e,n)||"number"==typeof e[n])&&(o=e[n],i[n]="number"==typeof o&&o&&"navigationStart"!==n?o-t:o);return i}(h),d.performance.timing.renderTime=function(e){let t,n,o=0;return e&&(t=e.responseEnd>0&&e.responseEndt&&(o=n-t)),o}(h)}else{if(!n.calculateRenderTime)return;d.performance.timing={renderTime:a,calculated:!0}}const m=d.performance.timing;if(n.renderTimeThreshold&&m.renderTime>n.renderTimeThreshold&&(m.invalidRenderTime=m.renderTime,delete m.renderTime),g.getEntriesByType)for(f=g.getEntriesByType("paint"),l=0,c=f.length;l0&&(m[p.name]=Math.round(p.startTime));if(!m["first-paint"]&&m.msFirstPaint&&(m["first-paint"]=m.msFirstPaint,delete m.msFirstPaint),y){switch(y.type){case 0:u="NAVIGATE";break;case 1:u="RELOAD";break;case 2:u="BACKFORWARD";break;default:u="UNKNOWN"}d.performance.navigation={type:u,redirectCount:y.redirectCount}}e.post(d),t.perfEventSent=!0,o&&(clearInterval(o),o=null)}function h(t){let n;const o=u.blacklist;let i,r,a;if(!t||!t.name)return;const s=t.name,c=t.initiatorType;if(l&&0===s.indexOf("http:")&&d.push(s),!(Object.prototype.hasOwnProperty.call(u,"maxAlerts")&&f>=u.maxAlerts||Object.prototype.hasOwnProperty.call(u,"threshold")&&t.duration0&&-1===u.resourceTypes.indexOf(c))){for(r=!1,n=0;nn&&!a&&(a=t.timestamp-n)}(r),t.perfEventSent||o||(o=setInterval((function(){e.isInitialized()&&g(window)}),s.getValue(n,"delay",2e3))),function(){if(!u.enabled||"function"!=typeof window.PerformanceObserver)return;c=new window.PerformanceObserver((function(e,t){s.forEach(e.getEntries(),h)}));const e=window.performance.getEntriesByType("resource");setTimeout((function(){s.forEach(e,h)})),c.observe({entryTypes:["resource"]})}();break;case"screenview_load":!function(){if(!n||!n.pageExperience||!n.pageExperience.enabled)return;y();const e=n.pageExperience.api;e.getCLS(b),e.getLCP(b),e.getFID(b),i=setTimeout(m,3e5)}(),t.perfEventSent||g(window);break;case"screenview_unload":default:break;case"unload":t.unloadReceived=!0,m(),t.perfEventSent||g(window)}},onmessage:function(e){}}})),TLT.addModule("replay",(function(e){"use strict";const t=e.utils;let n=0;let o={},i=null,r=[],a=!0,s=null,l=null,c=0,u=null;const d=(new Date).getTime();let f=null;const p="root";let g,h=null,y=null,m=null,b=null,w={inFocus:!1},v=null,S=e.getConfig()||{};const T=t.getValue(S,"viewPortWidthHeightLimit",1e4);let O=1,x=1;const C={},E=t.getValue(S,"mousemove")||{},L=t.getValue(S,"tab",!1),I=E.sampleRate,k=E.ignoreRadius;let P=null,M={},D=0;let j=0,N=[],R="visible"===document.visibilityState;const A=[],V=[],F=[];function U(e){let t=!1,n=null;if("object"!=typeof e||!e.type)return t;switch(e.type.toLowerCase()){case"input":n="|"+(e.subType||"")+"|",t=-1!=="|button|image|submit|reset|".indexOf(n.toLowerCase());break;case"select":case"textarea":break;default:t=!0}return t}function X(e){let t=e.type;const n=e.target;if(t="string"==typeof t?t.toLowerCase():"unknown","blur"===t&&(t="focusout"),"change"===t)if("INPUT"===n.type)switch(n.subType){case"text":case"date":case"time":t=n.subType+"Change";break;default:t="valueChange"}else t="TEXTAREA"===n.type?"textChange":"valueChange";return t}function z(e,t,n){let o,i,r;if(document.querySelector(e))return!0;for(o=0;o=0&&(r.timerId=window.setTimeout((function(){!function(t){let n,o,i;for(n=0;n=1e3&&(t=!0);const n={type:18,mousemove:{elements:F.slice(0),data:V.slice(0),config:{ignoreRadius:E.ignoreRadius,sampleRate:E.sampleRate},limitReached:t,maxInactivity:j}};e.post(n),F.length=0,V.length=0,M={},j=0}()),y}function W(e){let n=null;const o=t.getValue(e,"webEvent.target",{}),i=o.type,r=o.subType||"",a=t.getTlType(o),s=function(e){const t=[];for(e=e.parentNode;e;)t.push(e),e=e.parentNode;return t}(t.getValue(o,"element")),l=t.getValue(e,"webEvent.subType",null),c={timestamp:t.getValue(e,"webEvent.timestamp",0),type:4,target:{id:o.id||"",idType:o.idType,name:o.name,tlType:a,type:i,position:{width:t.getValue(o,"size.width"),height:t.getValue(o,"size.height")},currState:e.currState||null},event:{tlEvent:X(t.getValue(e,"webEvent")),type:t.getValue(e,"webEvent.type","UNKNOWN")}};return o.accessibility&&(c.target.accessibility=o.accessibility),o.attributes&&(c.target.attributes=o.attributes),r&&(c.target.subType=r),"number"==typeof e.dwell&&e.dwell>0&&(c.target.dwell=e.dwell),"number"==typeof e.visitedCount&&(c.target.visitedCount=e.visitedCount),void 0!==e.prevState&&(c.prevState=e.prevState),l&&(c.event.subType=l),n=function(e){return t.some(e,(function(e){const n=t.getTagName(e);return"a"===n||"button"===n?e:null}))}(s),c.target.isParentLink=!!n,n&&(n.href&&(c.target.currState=c.target.currState||{},c.target.currState.href=c.target.currState.href||n.href),n.value&&(c.target.currState=c.target.currState||{},c.target.currState.value=c.target.currState.value||n.value),(n.innerText||n.textContent)&&(c.target.currState=c.target.currState||{},c.target.currState.innerText=t.trim(c.target.currState.innerText||n.innerText||n.textContent))),t.isUndefOrNull(c.target.currState)&&delete c.target.currState,t.isUndefOrNull(c.target.name)&&delete c.target.name,c}function B(t){e.post(t)}function K(t){let n,o,i,r,a;const s={mouseout:!0,mouseover:!0},l=[],c=t.length;for(n=0;n0&&e.viewPortHeight0&&e.viewPortWidthd.pageHeight&&(d.viewPortY=d.pageHeight-d.viewPortHeight),d.viewPortY<0&&(d.viewPortY=0);const f=d.viewPortWidth?c/d.viewPortWidth:1;return d.deviceScale=f.toFixed(3),d.viewTime=0,y&&m&&(d.viewTime=m.getTime()-y.getTime()),"scroll"===e.type&&(d.viewPortXStart=l.clientState.viewPortX,d.viewPortYStart=l.clientState.viewPortY),u}(e),"scroll"===e.type||"resize"===e.type?(Z.timeoutId&&window.clearTimeout(Z.timeoutId),Z.timeoutId=window.setTimeout(Z,t.getValue(S,"scrollTimeout",2e3))):"touchstart"===e.type||"load"===e.type?s&&(x=parseFloat(s.clientState.deviceScale)):"touchend"===e.type&&s&&(O=parseFloat(s.clientState.deviceScale),Z()),"load"!==e.type&&"unload"!==e.type||("unload"===e.type&&d&&(n=t.clone(s),n.clientState.event="attention",n.clientState.viewTime=(new Date).getTime()-d),Z(),n&&(s=n,Z())),s}function te(e){const n={},o=t.getValue(e,"nativeEvent.rotation",0)||t.getValue(e,"nativeEvent.touches[0].webkitRotationAngle",0);let i=null;const r={type:4,event:{type:"touchend"},target:{id:t.getValue(e,"target.id"),idType:t.getValue(e,"target.idType")}};2===t.getValue(e,"nativeEvent.changedTouches.length",0)+t.getValue(e,"nativeEvent.touches.length",0)&&(ee(e),i={rotation:o?o.toFixed(2):0,scale:O?O.toFixed(2):1},i.pinch=function(){let e;const t=O-x;return e=isNaN(t)?"INVALID":t<0?"CLOSE":t>0?"OPEN":"NONE",e}(),n.scale=x?x.toFixed(2):1,r.target.prevState=n,r.target.currState=i,B(r))}function ne(t){let n,o,i=null;for(n in C)Object.prototype.hasOwnProperty.call(C,n)&&(o=C[n].exception,o.repeats>1&&(i={type:6,exception:o},e.post(i)));r&&K(r),m=new Date,ee(t),g!==p&&e.normalizeUrl(location.hash,2)!==g||TLT.logScreenviewUnload(g)}function oe(){g=t.getValue(S,"forceRootScreenview",!1)?p:e.normalizeUrl(location.hash,2)||p}return{init:function(){r=[]},destroy:function(){J(i),r=[],Z.timeoutId&&(window.clearTimeout(Z.timeoutId),Z.timeoutId=0)},onevent:function(a){let s,l,u=null,d=null;if("object"==typeof a&&a.type){if(!function(e,n){const o=["type","name","target.id"];let i,r,a=null,s=!0,l=0,c=0,u=0;if(!e||!n||"object"!=typeof e||"object"!=typeof n)return!1;for(i=0,r=o.length;s&&i10)&&(s=!1))),s}(a,f)){switch(f=a,u=t.getValue(a,"target.id"),o[u]||(o[u]={}),function(e,n){let i=!1;const a=r.length,s=a?r[a-1]:null;if(!s)return i;const l=s.target.id;l!==e&&"selectList"!==s.target.tltype&&("focus"!==n.type&&"click"!==n.type&&"change"!==n.type&&"blur"!==n.type&&"unload"!==n.type||(J(l),i=!0)),l===e&&("click"===n.type&&o[e].processedClick||"change"===n.type&&o[e].processedChange||"pointerup"===n.type&&o[e].processedClick&&t.getValue(n.target,"state.disabled",!1))&&(J(l,null,!0),i=!0)}(u,a),a.type){case"hashchange":break;case"focus":Q(u,a);break;case"blur":J(u,a);break;case"pointerdown":case"pointerup":$(u,a);break;case"click":G(u,a);break;case"change":!function(e,n){Q(e,n);const i=r[r.length-1];i.event.type="change",i.event.tlEvent=X(n),i.target.currState=n.target.state,o[e].prevState&&(i.target.prevState=o[e].prevState,"boolean"==typeof i.target.currState.checked&&(i.target.prevState.checked=!i.target.currState.checked)),o[e].webEvent=n,o[e].processedChange=!0,-1!==t.matchTarget(N,n.target)&&J(e,n)}(u,a);break;case"orientationchange":!function(e){const o=e.orientation;B({type:4,event:{type:"orientationchange"},target:{prevState:{orientation:n,orientationMode:t.getOrientationMode(n)},currState:{orientation:o,orientationMode:t.getOrientationMode(o)}}}),n=o}(a);break;case"touchstart":!function(e){2===t.getValue(e,"nativeEvent.touches.length",0)&&ee(e)}(a);break;case"touchend":te(a);break;case"loadWithFrames":TLT.logScreenviewLoad("rootWithFrames");break;case"load":n=a.orientation,y=new Date,("number"!=typeof t.getOrientationAngle()||t.isAndroid)&&(l=window.screen.width>window.screen.height?90:0,s=t.getOrientationAngle(),Math.abs(s)===l||180===s&&0===l||270===s&&90===l||(t.isLandscapeZeroDegrees=!0,180===Math.abs(s)||0===Math.abs(s)?n=90:90!==Math.abs(s)&&270!==Math.abs(s)||(n=0))),setTimeout((function(){e.isInitialized()&&ee(a)}),100),oe(),TLT.logScreenviewLoad(g);break;case"screenview_load":h=new Date,function(){let e;for(e in o)Object.prototype.hasOwnProperty.call(o,e)&&(o[e].visitedCount=0)}(),d=H("load",null,a.name);break;case"screenview_unload":d=H("unload",null,a.name);break;case"resize":case"scroll":m||(m=new Date),b=new Date,ee(a);break;case"unload":ne(a);break;case"mousemove":!function(n){let o,i,r,a=0,s=0;if(!E.enabled||Object.prototype.hasOwnProperty.call(window,"ontouchstart"))return;if(D>=1e3)return;const l={element:{id:n.target.id,idType:n.target.idType},x:n.position.x,y:n.position.y,offset:e.getCurrentOffset()};if(null!==P){if(a=l.offset-P.offset,I&&ar?i:r,k&&sj&&(j=a)}const c=JSON.stringify(l.element);o=M[c],void 0===o&&(F.push(l.element),o=F.length-1,M[c]=o);const u=t.getValue(n,"target.position.relXY").split(",");V.push([o,u[0],u[1],l.offset]),D+=1,P=l}(a);break;case"error":!function(n){let o;const i=t.getValue(n,"nativeEvent.message");let r=t.getValue(n,"nativeEvent.filename","");const a=t.getValue(n,"nativeEvent.lineno",-1),s=t.getValue(n,"nativeEvent.error");if("string"==typeof i){if(r&&(r=e.normalizeUrl(r,6)),o=s&&s.stack?s.stack.toString():(i+" "+r+" "+a).toString(),C[o])C[o].exception.repeats=C[o].exception.repeats+1;else{const t={type:6,exception:{description:i,url:r,line:a}};e.post(t),C[o]={exception:{description:i,url:r,line:a,repeats:1}}}c+=1}}(a);break;case"visibilitychange":!function(e){const t="visible"===document.visibilityState,n={type:4,event:{type:"visibilitychange"},target:{prevState:{visible:R},currState:{visible:t}}},o=H(e.type,e.target);o&&(n.dcid=o),B(n),R=t}(a),L&&(!1===R&&TLT?(ne(a),TLT.flushAll(),TLT.updatePageId()):(g||oe(),g!==p&&e.normalizeUrl(location.hash,2)!==g||TLT.logScreenviewLoad(g)));break;default:!function(e){const n={type:4,event:{tlEvent:X(e),type:e.type},target:{id:t.getValue(e,"target.id"),idType:t.getValue(e,"target.idType"),currState:t.getValue(e,"target.state")}},o=H(e.type,e.target);o&&(n.dcid=o),B(n)}(a)}return i=u,d}f=a}},onmessage:function(){}}})); // eslint-disable-line /*! - Use Chrome snippet to determine if Shadow DOM, Dynamic Styles, or iframes need to be captured - Test replay by injecting the UIC - Audit PII on site and in replay - Build privacy rules and privacy patterns - Use "::OPTIONAL::" code if required (to exclude pages, to support multiple app keys) - Validate privacy is working */ // -------------------------------------------------------------------------------------- // ------------------------------------------------------- flushQueue custom module ----- // -------------------------------------------------------------------------------------- // Triggers TLT.flushAll on visibilitychange. Use with iOS tuning at end of config. TLT.addModule("flushQueue", function () { return { onevent: function (webEvent) { if (webEvent) { switch (webEvent.type) { case "visibilitychange": TLT.flushAll(); break; default: break; } } } }; }); // -------------------------------------------------------------------------------------- // ---------------------------------------------------------- Tealeaf configuration ----- // -------------------------------------------------------------------------------------- (function () { "use strict"; var config, TLT = window.TLT; if (TLT.utils.isLegacyIE) { if (console) { console.warn("This version of the UIC does not support Internet Explorer 8."); console.info("Applications requiring Internet Explorer 8 (or below) support should use UIC 5.2.0"); } TLT.terminationReason = "Unsupported browser"; return; } config = { core: { buildNote: "THE 2024-04-15", blockedElements: [], ieExcludedLinks: ["a[href*=\"javascript:void\"]", "input[onclick*='javascript:']"], blockedUserAgents: [ { regex: "(Google|Bing|Face|DuckDuck|Yandex|Exa)bot|spider|archiver", flags: "i" }, "PhantomJS" ], inactivityTimeout: 1000 * 60 * 29, // 29 minutes modules: { replay: { events: [ { name: "change", attachToShadows: true, recurseFrames: true }, { name: "click", recurseFrames: true }, { name: "dblclick", recurseFrames: true }, { name: "contextmenu", recurseFrames: true }, { name: "pointerdown", recurseFrames: true }, { name: "pointerup", recurseFrames: true }, { name: "hashchange", target: window }, { name: "focus", recurseFrames: true }, { name: "blur", recurseFrames: true }, { name: "load", target: window }, { name: "unload", target: window }, { name: "resize", target: window }, { name: "scroll", target: window }, { name: "mousemove", recurseFrames: true }, { name: "orientationchange", target: window }, { name: "touchend" }, { name: "touchstart" }, { name: "error", target: window }, { name: "visibilitychange" } ] }, flushQueue: { events: [] }, overstat: { enabled: true, events: [ { name: "click", recurseFrames: true }, { name: "mousemove", recurseFrames: true }, { name: "mouseout", recurseFrames: true }, { name: "submit", recurseFrames: true } ] }, performance: { enabled: true, events: [ { name: "load", target: window }, { name: "unload", target: window } ] }, dataLayer: { enabled: false, events: [ { name: "load", target: window }, { name: "unload", target: window } ] }, TLCookie: { enabled: true } }, // Normalize URL, path, or fragment // normalization: {}, // Share session identifier with other libraries // sessionData: {}, screenviewAutoDetect: true, framesBlacklist: [] }, services: { queue: { asyncReqOnUnload: true, queues: [{ qid: "DEFAULT", endpoint: "https://lib-eu-1.brilliantcollector.com/collector/collectorPost", maxEvents: 30, timerInterval: 30000, maxSize: 300000, checkEndpoint: true, endpointCheckTimeout: 3000, encoder: "gzip" }] }, message: { privacy: [{ targets: ["input[type=password]"], // Mask all password fields maskType: 2 // Mask with XXXXX }, { // Un-mask ONLY the following fields, which are very unlikely to contain PII exclude: true, targets: [ "input[type=hidden]", "input[type=radio]", "input[type=checkbox]", "input[type=submit]", "input[type=button]", "input[type=search]" ], maskAttributes: true, maskType: 2 } ], privacyPatterns: [] }, encoder: { gzip: { encode: "window.pako.gzip", defaultEncoding: "gzip" } }, domCapture: { diffEnabled: true, // Options are set to these defaults: // // maxMutations: 100 // If this threshold is reached, the full DOM is captured instead of a diff // maxLength: 1000000 // If this threshold is reached, the DOM snapshot will not be sent // captureShadowDOM: false // Enable ONLY if app is using shadown DOM. Also set allowHitSplit to false in org properties. // captureFrames: false // Enable ONLY if child frames/iframes need to be captured for replay // captureDynamicStyles: false // Enable ONLY if dynamic/constructable/CSSOM styles are present // captureHREFStyles: false // Enable ONLY if all styles need to be inserted inline (e.g if CSS files unreachable) // removeScripts: true // Disable ONLY if script tags need to be preserved // removeComments: true // Disable ONLY if comments need to be preserved // discardBase64: 0 // Not present by default! Discard all base64 encoded inline image data that exceeds N characters. // captureStyle: true // Disable to remove inline CSS. Reduces the size of the DOM snapshots, but may affect replay. // keepImports: false // Enable to honor the "import" link type, a now deprecated and Chrome specific feature // // Override as needed below: options: { maxLength: 7000000, captureDynamicStyles: true } }, browser: { normalizeTargetToParentLink: true, } }, modules: { overstat: { hoverThreshold: 3000 }, performance: { calculateRenderTime: true, renderTimeThreshold: 600000, performanceAlert: { enabled: true, threshold: 3000, maxAlerts: 100, resourceTypes: ["script", "img", "css", "xmlhttprequest", "fetch", "iframe", "beacon"], blacklist: [{ regex: "brilliantcollector\\.com" }] }, }, replay: { domCapture: { enabled: true, screenviewBlacklist: [], triggers: [ { event: "change" }, { event: "click" }, { event: "dblclick" }, { event: "contextmenu" }, { event: "visibilitychange" }, { event: "load", fullDOMCapture: true, delay: 300 } ] }, mousemove: { enabled: false, sampleRate: 200, ignoreRadius: 3 } }, dataLayer: { dataObjects: [ { dataObject: "window.dataLayer", rules: { screenviewBlocklist: [], propertyBlocklist: ["gtm.element"], permittedProperties: [], includeEverything: true } } ] }, TLCookie: { appCookieWhitelist: [{ regex: ".*" }], tlAppKey: "359bdc335927442995bc24c41eed73c0" // EU-1/THEWUI/Prod } } }; // ---------------------------------------------------------------------------------- // ------------------------------------------------------- Alternate IE Configs ----- // ---------------------------------------------------------------------------------- if (TLT.utils.isIE) { // Disable DOM Capture and Ajax Monitor in IE9 if (document.documentMode === 9) { config.modules.replay.domCapture.enabled = false; config.modules.ajaxListener.enabled = false; } // Disable DOM Diff, limit DOM Capture triggers in IE10 if (document.documentMode === 10) { config.services.domCapture.diffEnabled = false; config.modules.replay.domCapture.triggers = [ { event: "click", targets: ["a", "a *", "button", "button *"] }, { event: "change" }, { event: "load", delay: 100 } ]; } } // ---------------------------------------------------------------------------------- // ----------------------------------------------------- Android and iOS Tuning ----- // ---------------------------------------------------------------------------------- if (TLT.utils.isiOS || TLT.utils.isAndroid) { (function () { var uaMatch; // Reduce batch size, increase frequency, increase endpoint timeout config.services.queue.queues[0].maxEvents = 10; config.services.queue.queues[0].maxSize = 10000; config.services.queue.queues[0].timerInterval = 10000; config.services.queue.queues[0].endpointCheckTimeout = 10000; if (TLT.utils.isiOS) { // Disable Beacon in iOS 12 and earlier due to Safari on iOS bug uaMatch = window.navigator.userAgent.match(/OS (\d+)_/); if (uaMatch && uaMatch[1] < 13) { config.services.queue.useBeacon = false; } // Flush queue on visibilitychange as unload is not a reliable trigger in iOS. if (config.core.modules.flushQueue && config.core.modules.flushQueue.events) { config.core.modules.flushQueue.events.push({ name: "visibilitychange" }); } else { console.log("Tealeaf Error: include the flushQueue module!"); } } }()); } // ---------------------------------------------------------------------------------- // -------------------------------------------------------- Cross Domain TLTSID ----- // ---------------------------------------------------------------------------------- (function () { var domains = [ "www.timeshighereducation.com", "www.timeshighered-events.com" ], cookieName = "TLTSID", secureTLTSID = config.modules.TLCookie.secureTLTSID || false, queryStringValue, cookieValue, url, i, kvp, eventPath, target, onclickCode, hash; if (domains.length) { queryStringValue = TLT.utils.getQueryStringValue(cookieName); cookieValue = TLT.utils.getCookieValue(cookieName); if (queryStringValue) { if (queryStringValue !== cookieValue) { TLT.utils.setCookie(cookieName, queryStringValue, undefined, undefined, undefined, secureTLTSID); cookieValue = queryStringValue; } url = window.location.href; kvp = cookieName + "=" + queryStringValue; url = url.replace("?" + kvp, ""); url = url.replace("&" + kvp, ""); window.history.pushState({ withoutTLTSID: url }, "", url); } if (cookieValue) { kvp = cookieName + "=" + cookieValue; document.addEventListener("mouseup", function (event) { if (!event.target.hostname) { if (typeof event.composedPath === "function") { eventPath = event.composedPath(); if (eventPath && eventPath.length) { target = eventPath[0]; for (i = 0; i < eventPath.length; i++) { if (TLT.utils.getTagName(eventPath[i]) === "a") { target = eventPath[i]; break; } } } } } else { target = event.target; } if (window.location.hostname !== target.hostname && domains.indexOf(window.location.hostname) !== -1 && domains.indexOf(target.hostname) !== -1 && target.href && target.href.indexOf(kvp) === -1) { onclickCode = target.getAttribute("onclick"); if (onclickCode && onclickCode.indexOf(kvp) === -1) { url = target.href; hash = url.split("#")[1]; url = url.split("#")[0]; if (url.split("?")[1] === "") { url += kvp; } else { url = url.indexOf("?") !== -1 ? url + "&" + kvp : url + "?" + kvp; } url = hash ? url + "#" + hash : url; onclickCode = onclickCode.replace(new RegExp(target.href, "g"), url); target.setAttribute("onclick", onclickCode); } target.search += target.search ? "&" + kvp : "?" + kvp; } }); } } }()); // ---------------------------------------------------------------------------------- // ----------------------------------------------- Run AFTER UIC Initialization ----- // ---------------------------------------------------------------------------------- function afterInit() { // ------------------------------------------------------------------------------ // ---------------------------------------------------- Restart TLT for SPA ----- // ------------------------------------------------------------------------------ (function () { var origDestroy = window.TLT.destroy, prevConfig; // Check if document is active (visible and focused) function checkVisibility() { if (document.visibilityState === "visible" && document.hasFocus()) { if (prevConfig && window.TLT && !TLT.isInitialized()) { console.log("Restarting TLT"); TLT.init(prevConfig); prevConfig = null; } window.removeEventListener("visibilitychange", checkVisibility); window.removeEventListener("focus", checkVisibility); } } // If termination reason was inactivity, set listener for active document window.TLT.destroy = function (se, tr) { if (tr === "inactivity") { prevConfig = TLT.getConfig(); window.addEventListener("visibilitychange", checkVisibility); window.addEventListener("focus", checkVisibility); } origDestroy.call(window.TLT, se, tr); }; }()); } window.TLT.init(config, afterInit); }());
OSZAR »