Mercurial Hosting > linkmystyle
diff src/reporting.js @ 0:8f4df159f06b
start public repo
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Fri, 11 Jul 2025 20:57:49 -0600 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/reporting.js Fri Jul 11 20:57:49 2025 -0600 @@ -0,0 +1,106 @@ +'use strict'; + +(function() { + +if(!hasCookies) return; + +let hour = 60*60*1000; +let day = 24*hour; +let offsetFromGMT = 7*hour; +let today = Math.floor((Date.now() - offsetFromGMT) / day) * day + offsetFromGMT; +// today -= 28*day; +let expired = today - 30*day; + +let owner = window.Owner; +let page = window.Page; +let changed = false; +let values = {}; + +let data = localStorage && localStorage.reporting; +data = data ? JSON.parse(data) : {}; +for( let key in data ) { + //console.log(key); + if( data[key] < expired ) { + //console.log(`delete ${key} ${data[key]} ${expired}`); + delete data[key]; + changed = true; + } +} + +function recordChange() { + if( !changed || !localStorage ) + return; + localStorage.reporting = JSON.stringify(data); + if( Object.keys(values).length > 0 ) { + let url = `/report.js?owner=${encodeURIComponent(owner)}&today=${today}`; + for( let type in values ) { + url += `&type=${type}`; + let info = values[type]; + let value = info.value; + let before = info.before; + if( value ) + url += `&${type}=${encodeURIComponent(value)}`; + if( before ) + url += `&${type}_before=${before}`; + } + ajax(url); + values = {}; + } + changed = false; +} + +function reportDay(type) { + let key = JSON.stringify({ type:type, owner:owner }); + let val = data[key]; + if( !val || val < today ) { + values[type] = {}; + data[key] = today + changed = true; + } +} + +function reportMonth(type,value) { + let key = JSON.stringify({ type:type, owner:owner, value:value }); + let val = data[key]; + if( !val || val < today ) { + let info = {}; + if( value ) + info.value = value; + if( val ) + info.before = val; + values[type] = info; + data[key] = today; + changed = true; + } +} + +reportDay('visit'); +reportMonth('monthly_visit'); +reportMonth('page_view',page); + +let referringDomain = document.referrer; +referringDomain = referringDomain ? new URL(referringDomain).hostname : 'direct'; +if( referringDomain && referringDomain !== location.hostname ) { + reportMonth('referrer',referringDomain); +} + +recordChange(); + +function onclick(event) { + //console.log(event); + //console.log(event.target.textContent); + reportDay('click'); + reportMonth('monthly_click'); + let link = page + ' - ' + event.target.textContent; + reportMonth('link_click',link); + recordChange(); + //return false; +} +let links = document.querySelectorAll('a[link]'); +for( let i=0; i<links.length; i++ ) { + let link = links[i]; + link.onclick = onclick; + //link.addEventListener('click',onclick); +} + +})();