view src/reporting.js @ 3:b016e4b7c8da default tip

add read_me
author Franklin Schmidt <fschmidt@gmail.com>
date Sat, 12 Jul 2025 12:51:36 -0600
parents 8f4df159f06b
children
line wrap: on
line source

'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);
}

})();