1 !function() { 2 var a, o = window.location, 3 r = window.document, 4 t = r.currentScript, 5 l = t.getAttribute("data-api") || new URL(t.src).origin + "/api/event", 6 s = t.getAttribute("data-domain"); 7 8 function c(t, e, n) { 9 e && console.warn("Ignoring Event: " + e), n && n.callback && n.callback(), "pageview" === t && (a = !0) 10 } 11 var d = o.href, 12 u = {}, 13 w = -1, 14 v = !1, 15 p = null, 16 h = 0; 17 18 var customLoc = t.getAttribute("data-loc"); 19 20 function f() { 21 var t = r.body || {}, 22 e = r.documentElement || {}; 23 return Math.max(t.scrollHeight || 0, t.offsetHeight || 0, t.clientHeight || 0, e.scrollHeight || 0, e.offsetHeight || 0, e.clientHeight || 0) 24 } 25 26 function g() { 27 var t = r.body || {}, 28 e = r.documentElement || {}, 29 n = window.innerHeight || e.clientHeight || 0, 30 e = window.scrollY || e.scrollTop || t.scrollTop || 0; 31 return b <= n ? b : e + n 32 } 33 34 function e() { 35 return p ? h + (Date.now() - p) : h 36 } 37 var b = f(), 38 m = g(); 39 40 function y() { 41 var t = e(); 42 !a && (w < m || 3e3 <= t) && (w = m, t = { 43 n: "engagement", 44 sd: Math.round(m / b * 100), 45 d: s, 46 u: d, 47 p: u, 48 e: t, 49 v: 3 50 }, p = null, h = 0, E(l, t)) 51 } 52 53 function S() { 54 "visible" === r.visibilityState && r.hasFocus() && null === p ? p = Date.now() : "hidden" !== r.visibilityState && r.hasFocus() || (h = e(), p = null, y()) 55 } 56 57 function n(t, e) { 58 var n = "pageview" === t; 59 if (n && v && (y(), b = f(), m = g()), /^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(o.hostname) || "file:" === o.protocol) return c(t, "localhost", e); 60 if ((window._phantom || window.__nightmare || window.navigator.webdriver || window.Cypress) && !window.__plausible) return c(t, null, e); 61 try { 62 if ("true" === window.localStorage.plausible_ignore) return c(t, "localStorage flag", e) 63 } catch (t) {} 64 var i = {}; 65 i.n = t, i.v = 3, i.u = (customLoc ? "/" + customLoc : "") + o.pathname + (o.search ? o.search : "") + "?utm_source=" + (customLoc || "website") , i.d = s, i.r = r.referrer || null, e && e.meta && (i.m = JSON.stringify(e.meta)), e && e.props && (i.p = e.props), n && (a = !1, d = i.u, u = i.p, w = -1, h = 0, p = Date.now(), v || (r.addEventListener("visibilitychange", S), window.addEventListener("blur", S), window.addEventListener("focus", S), v = !0)), E(l, i, e) 66 } 67 68 function E(t, e, n) { 69 window.fetch && fetch(t, { 70 method: "POST", 71 headers: { 72 "Content-Type": "text/plain" 73 }, 74 keepalive: !0, 75 body: JSON.stringify(e) 76 }).then(function(t) { 77 n && n.callback && n.callback({ 78 status: t.status 79 }) 80 }).catch(function() {}) 81 } 82 window.addEventListener("load", function() { 83 b = f(); 84 var t = 0, 85 e = setInterval(function() { 86 b = f(), 15 == ++t && clearInterval(e) 87 }, 200) 88 }), r.addEventListener("scroll", function() { 89 b = f(); 90 var t = g(); 91 m < t && (m = t) 92 }); 93 var i = window.plausible && window.plausible.q || []; 94 window.plausible = n; 95 for (var L, H = 0; H < i.length; H++) n.apply(this, i[H]); 96 97 function _(t) { 98 t && L === o.pathname || (L = o.pathname, n("pageview")) 99 } 100 101 function k() { 102 _(!0) 103 } 104 var T, t = window.history; 105 t.pushState && (T = t.pushState, t.pushState = function() { 106 T.apply(this, arguments), k() 107 }, window.addEventListener("popstate", k)), "prerender" === r.visibilityState ? r.addEventListener("visibilitychange", function() { 108 L || "visible" !== r.visibilityState || _() 109 }) : _(), window.addEventListener("pageshow", function(t) { 110 t.persisted && _() 111 }) 112}();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.