(function () { 'use strict'; var script = document.currentScript || (function () { var scripts = document.getElementsByTagName('script'); return scripts[scripts.length - 1]; }()); var appId = script && script.getAttribute('data-app') || 'O01St67R'; var siteName = script && script.getAttribute('data-site') || ''; var endpoint = script && script.getAttribute('data-endpoint') || new URL('api/collect.php', script && script.src || window.location.href).href; var startedAt = Date.now(); var lastReportedStay = 0; function uuid() { if (window.crypto && crypto.randomUUID) { return crypto.randomUUID(); } return String(Date.now()) + '-' + Math.random().toString(16).slice(2); } function storageValue(key, fallbackFactory) { try { var value = localStorage.getItem(key); if (!value) { value = fallbackFactory(); localStorage.setItem(key, value); } return value; } catch (error) { return fallbackFactory(); } } function sessionValue(key, fallbackFactory) { try { var value = sessionStorage.getItem(key); if (!value) { value = fallbackFactory(); sessionStorage.setItem(key, value); } return value; } catch (error) { return fallbackFactory(); } } function channelId(url) { var text = String(url || ''); var compositePathMatch = text.match(/(?:^|\/)(\d+_[a-f0-9]{16,64})(?=\/|$|\?|#)/i); var compositeLooseMatch = text.match(/(?:^|[^a-z0-9_])(\d+_[a-f0-9]{16,64})(?=$|[^a-z0-9_])/i); var pathMatch = text.match(/(?:^|\/)([a-f0-9]{32})(?=\/|$|\?|#)/i); var looseMatch = text.match(/[a-f0-9]{32}/i); return (compositePathMatch ? compositePathMatch[1] : (compositeLooseMatch ? compositeLooseMatch[1] : (pathMatch ? pathMatch[1] : (looseMatch ? looseMatch[0] : '')))).toLowerCase(); } function payload(type, extra) { var data = { app: appId, eventId: uuid(), site: siteName, type: type, url: location.href, title: document.title || '', referrer: document.referrer || '', channel: channelId(location.href), visitorId: storageValue('simple_stats_visitor_id', uuid), sessionId: sessionValue('simple_stats_session_id', uuid), screen: [screen.width, screen.height, window.devicePixelRatio || 1].join('x'), language: navigator.language || '' }; for (var key in extra || {}) { if (Object.prototype.hasOwnProperty.call(extra, key)) { data[key] = extra[key]; } } return data; } function send(data, useBeacon) { var body = JSON.stringify(data); if (useBeacon && navigator.sendBeacon) { try { var blob = new Blob([body], { type: 'text/plain;charset=UTF-8' }); if (navigator.sendBeacon(endpoint, blob)) { return; } } catch (error) {} } try { fetch(endpoint, { method: 'POST', mode: 'cors', credentials: 'omit', keepalive: !!useBeacon, headers: { 'Content-Type': 'text/plain;charset=UTF-8' }, body: body }).catch(function () {}); } catch (error) { var image = new Image(); image.src = endpoint + '?' + new URLSearchParams(data).toString(); } } function elapsedSeconds() { return Math.max(1, Math.round((Date.now() - startedAt) / 1000)); } function sendStay(useBeacon) { var seconds = elapsedSeconds(); if (seconds <= lastReportedStay) { return; } lastReportedStay = seconds; send(payload('stay', { staySeconds: seconds }), !!useBeacon); } function startStayHeartbeat() { window.setTimeout(function () { sendStay(false); }, 1000); window.setInterval(function () { if (!document.hidden) { sendStay(false); } }, 5000); } send(payload('pageview'), false); startStayHeartbeat(); document.addEventListener('visibilitychange', function () { if (document.visibilityState === 'hidden') { sendStay(true); } }); window.addEventListener('pagehide', function () { sendStay(true); }); window.addEventListener('beforeunload', function () { sendStay(true); }); }());