70 lines
1.9 KiB
JavaScript
70 lines
1.9 KiB
JavaScript
// Loads PostHog only when the CookieConsent cookie grants Statistics; the
|
|
// cookie is host-scoped, so a landing-page answer covers the docs.
|
|
;(function () {
|
|
var KEY = 'phc_1yrzzcgywqXGcerkkI4g7C0YfyPMcAKNOOvGcjTCiUk'
|
|
var loaded = false
|
|
|
|
function granted() {
|
|
var m = document.cookie.match(/(?:^|;\s*)CookieConsent=([^;]*)/)
|
|
if (!m) return false
|
|
var v = decodeURIComponent(m[1])
|
|
// "-1" is Cookiebot's consent-not-required marker.
|
|
return v === '-1' || /statistics\s*:\s*true/.test(v)
|
|
}
|
|
|
|
function loadPosthog() {
|
|
if (loaded) return
|
|
loaded = true
|
|
var s = document.createElement('script')
|
|
s.src = 'https://us-assets.i.posthog.com/static/array.js'
|
|
s.async = true
|
|
s.onerror = function () {
|
|
loaded = false
|
|
}
|
|
s.onload = function () {
|
|
// Consent withdrawn while array.js was downloading: skip init, allow a retry on re-grant.
|
|
if (!granted()) {
|
|
loaded = false
|
|
return
|
|
}
|
|
window.posthog.init(KEY, {
|
|
api_host: 'https://us.i.posthog.com',
|
|
ui_host: 'https://us.posthog.com',
|
|
cross_subdomain_cookie: true,
|
|
person_profiles: 'identified_only',
|
|
capture_pageview: 'history_change',
|
|
})
|
|
}
|
|
document.head.appendChild(s)
|
|
}
|
|
|
|
function sync() {
|
|
if (granted()) {
|
|
if (!loaded) {
|
|
loadPosthog()
|
|
} else if (
|
|
window.posthog &&
|
|
window.posthog.has_opted_out_capturing &&
|
|
window.posthog.has_opted_out_capturing()
|
|
) {
|
|
window.posthog.opt_in_capturing()
|
|
}
|
|
return
|
|
}
|
|
// Withdrawal mid-session: an already running instance must stop.
|
|
if (loaded && window.posthog && window.posthog.opt_out_capturing) {
|
|
window.posthog.opt_out_capturing()
|
|
}
|
|
}
|
|
|
|
sync()
|
|
var events = [
|
|
'CookiebotOnConsentReady',
|
|
'CookiebotOnAccept',
|
|
'CookiebotOnDecline',
|
|
]
|
|
for (var i = 0; i < events.length; i++) {
|
|
window.addEventListener(events[i], sync)
|
|
}
|
|
})()
|