var wheAnalyticsData = {}; var wheAnalyticsSent = false; var wheAnalyticsExcludedReferrers = [ 'anonymised.io', ]; function wheAnalyticsPageview() { wheAnalyticsRecord('pageview'); } function wheAnalyticsArticleread() { wheAnalyticsRecord('articleread'); } function wheAnalyticsCTR(r_category, r_item, r_component, r_action, r_frequency,callback) { if (['view','click'].includes(r_action.toLowerCase())) { let apiUrl = new URL(window.location.protocol+'//'+window.location.host+'/analytics/?p=ctr'); r_category = r_category || ''; r_item = r_item || ''; r_component = r_component || ''; r_action = r_action || ''; r_frequency = r_frequency || 'm'; if (!['d','m','y','*'].includes(r_frequency.toLowerCase())) { r_frequency = 'm'; } let postData = { category: r_category.toLowerCase(), item: r_item.toLowerCase(), component: r_component.toLowerCase(), action: r_action.toLowerCase(), frequency: r_frequency, }; const myHeaders = new Headers(); myHeaders.append("Content-Type", "application/json"); fetch(apiUrl, { method: "POST", body: JSON.stringify(postData), headers: myHeaders, }).then((response) => response.json()).then((result)=>{ if (result.status >= 400) { console.error('WHE Analytics:','CTR error',result); } else { console.log('WHE Analytics:','CTR recorded',postData); } if (typeof callback == 'function') { callback(); } }); } else { console.error('wheAnalyticsCTR(): Invalid action. Must be "view" or "click".'); } } function wheAnalyticsRecord(path) { let pathname = new URL(window.location).pathname; let canonical; if (!isBot() && !wheAnalyticsExcludedReferrers.some(v => document.referrer.includes(v))) { wheAnalyticsData = { p : path, guid : AHE.ci_id, lang : AHE.contentLang || document.querySelector('html').getAttribute('lang').substr(0,2), author : AHE.ci_author, author_id : AHE.ci_author_id, translator : AHE.ci_translator, translator_id : AHE.ci_translator_id, url : pathname, ab : AHE.ab, known : AHE.knownUser, }; if (canonical = document.querySelector('link[rel=canonical]')) { if (typeof canonical.href == 'string') { canonical = canonical.href.replace(new URL(canonical.href).origin,''); wheAnalyticsData.url = canonical; } } if (!getCookie('wheAnalyticsUserKnown')) { wheAnalyticsData.new_user = 1; } if (!getCookie('wheAnalyticsSessionKnown')) { wheAnalyticsData.new_session = 1; } let apiUrl = new URL(window.location.protocol+'//'+window.location.host+'/analytics/'); Object.keys(wheAnalyticsData).forEach(key => apiUrl.searchParams.append(key, wheAnalyticsData[key])) wheAnalyticsSent = true; fetch(apiUrl) .then((response) => response.json()) .then((result)=>{ if (result.status >= 400) { console.error('WHE Analytics:','error',result); } else { console.log('WHE Analytics:','pageview sent',result); } setCookie('wheAnalyticsUserKnown',1,365); setCookie('wheAnalyticsSessionKnown',1); }); } } function isBot() { return navigator.webdriver || /bot|crawl|spider|googleother|google-extended|apis-google|mediapartners|baidu|bing|msn|teoma|slurp|yandex|anthropic|claude|chatgpt|cohere/i.test(navigator.userAgent); } function getCookie(c_name) { var i,x,y,ARRcookies=document.cookie.split(";"); for (i=0;i 0) { var date = new Date(); date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); expires = "; expires=" + date.toGMTString(); } if (!sameSite) { sameSite = 'Lax'; } let domain = ''; if (AHE.domain) { domain = ' domain='+AHE.domain+';'; } let cookiestring = name+"="+value+expires+";"+domain+" path=/; SameSite="+sameSite+"; Secure"; document.cookie = cookiestring; }