comparison 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
comparison
equal deleted inserted replaced
-1:000000000000 0:8f4df159f06b
1 'use strict';
2
3 (function() {
4
5 if(!hasCookies) return;
6
7 let hour = 60*60*1000;
8 let day = 24*hour;
9 let offsetFromGMT = 7*hour;
10 let today = Math.floor((Date.now() - offsetFromGMT) / day) * day + offsetFromGMT;
11 // today -= 28*day;
12 let expired = today - 30*day;
13
14 let owner = window.Owner;
15 let page = window.Page;
16 let changed = false;
17 let values = {};
18
19 let data = localStorage && localStorage.reporting;
20 data = data ? JSON.parse(data) : {};
21 for( let key in data ) {
22 //console.log(key);
23 if( data[key] < expired ) {
24 //console.log(`delete ${key} ${data[key]} ${expired}`);
25 delete data[key];
26 changed = true;
27 }
28 }
29
30 function recordChange() {
31 if( !changed || !localStorage )
32 return;
33 localStorage.reporting = JSON.stringify(data);
34 if( Object.keys(values).length > 0 ) {
35 let url = `/report.js?owner=${encodeURIComponent(owner)}&today=${today}`;
36 for( let type in values ) {
37 url += `&type=${type}`;
38 let info = values[type];
39 let value = info.value;
40 let before = info.before;
41 if( value )
42 url += `&${type}=${encodeURIComponent(value)}`;
43 if( before )
44 url += `&${type}_before=${before}`;
45 }
46 ajax(url);
47 values = {};
48 }
49 changed = false;
50 }
51
52 function reportDay(type) {
53 let key = JSON.stringify({ type:type, owner:owner });
54 let val = data[key];
55 if( !val || val < today ) {
56 values[type] = {};
57 data[key] = today
58 changed = true;
59 }
60 }
61
62 function reportMonth(type,value) {
63 let key = JSON.stringify({ type:type, owner:owner, value:value });
64 let val = data[key];
65 if( !val || val < today ) {
66 let info = {};
67 if( value )
68 info.value = value;
69 if( val )
70 info.before = val;
71 values[type] = info;
72 data[key] = today;
73 changed = true;
74 }
75 }
76
77 reportDay('visit');
78 reportMonth('monthly_visit');
79 reportMonth('page_view',page);
80
81 let referringDomain = document.referrer;
82 referringDomain = referringDomain ? new URL(referringDomain).hostname : 'direct';
83 if( referringDomain && referringDomain !== location.hostname ) {
84 reportMonth('referrer',referringDomain);
85 }
86
87 recordChange();
88
89 function onclick(event) {
90 //console.log(event);
91 //console.log(event.target.textContent);
92 reportDay('click');
93 reportMonth('monthly_click');
94 let link = page + ' - ' + event.target.textContent;
95 reportMonth('link_click',link);
96 recordChange();
97 //return false;
98 }
99 let links = document.querySelectorAll('a[link]');
100 for( let i=0; i<links.length; i++ ) {
101 let link = links[i];
102 link.onclick = onclick;
103 //link.addEventListener('click',onclick);
104 }
105
106 })();