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);
+}
+
+})();