Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Ryan778
GitHub Repository: Ryan778/Ryan778.github.io
Path: blob/master/email-stats/script.js
574 views
1
(function() {
2
var days = ['Sun','Mon','Tue','Wed','Thur','Fri','Sat'];
3
4
Date.prototype.getDayName = function() {
5
return days[ this.getDay() ];
6
};
7
})();
8
9
function showInfo(n){
10
switch(n){
11
case 0:
12
alertify.alert('<b>About</b><br>A personal page for automatically calculating stats on Outlook (helpful when you have 500+ emails), which can then be imported into Excel/Sheets to make graphs. Not configured for specific people, can be used by anyone! :D');
13
break;
14
case 1:
15
alertify.alert('<b>Legal</b><br>&copy; Ryan Zhang 2017. All rights reserved.<br>Contact me @ryanz778 or [email protected] if you want to use code or just say hi. ');
16
break;
17
case 2:
18
alertify.alert('<b>Contact</b><br>Suggestions? Comments? Contact me!<br>GitHub Issues: <a href="https://github.com/Ryan778/Ryan778.github.io/issues" target="_blank">Issues and/or Suggestions</a><br>Twitter: <a href="https://twitter.com/ryanz778" target="_blank">@ryanz778</a>')
19
break;
20
}
21
}
22
23
var addFillerDates = true; //If a day in between has zero emails, add "0" for that day
24
function genStats(){
25
var senders = {};
26
var emailsByDate = {};
27
var earliestEmail = 999999999999999;
28
var latestEmail = 0;
29
var email = ' \n'+document.getElementById('email').value;
30
var mostEmailsOnOneDay = {amount: -1, date: Date.now()};
31
var leastEmailsOnOneDay = {amount: 9999999, date: Date.now()};
32
email = email.split('\nFrom: '); //Separate emails into an array
33
email = email.slice(1); //Remove empty item in array (first item)
34
for(var i = 0; i < email.length; i++){
35
var sender = email[i].slice(0, email[i].indexOf('\n'));
36
if(sender.indexOf('<') > 2){
37
sender = sender.replace(/\W<.+>/g, ''); //Remove the <[email protected]> part of emails
38
}
39
if(sender.slice(-10) === ' - Student'){sender = sender.slice(0, -10)}
40
if(senders[sender] === undefined){
41
senders[sender] = 1; //If sender doesn't exist, create sender
42
}
43
else{
44
senders[sender] ++; //If sender exists, add one to email count
45
}
46
email[i] = email[i].slice(email[i].indexOf('\n')+1);
47
var time = new Date(email[i].slice(6, email[i].indexOf('\n')).replace('at ', ''));
48
time.setHours(0);
49
time.setMinutes(0);
50
time.setSeconds(0);
51
time.setMilliseconds(0);
52
if(time.getTime() < earliestEmail){earliestEmail = time.getTime()}
53
if(time.getTime() > latestEmail){latestEmail = time.getTime()}
54
var t = time.toISOString();
55
if(emailsByDate[t] === undefined){
56
emailsByDate[t] = {
57
formatted: time.getDayName()+' '+(time.getMonth()+1)+'/'+time.getDate(),
58
emails: 1,
59
senders: {}
60
}
61
emailsByDate[t]['senders'][sender] = 1;
62
}
63
else{
64
emailsByDate[t]['emails'] ++;
65
if(emailsByDate[t]['senders'][sender] === undefined){
66
emailsByDate[t]['senders'][sender] = 1;
67
}
68
else{
69
emailsByDate[t]['senders'][sender] ++;
70
}
71
}
72
}
73
//console.log(email);
74
var t = earliestEmail;
75
while(t < latestEmail){
76
t += 86400000;
77
var tm = new Date(t).toISOString();
78
if(emailsByDate[tm] !== undefined){
79
if(emailsByDate[tm]['emails'] > mostEmailsOnOneDay.amount){
80
mostEmailsOnOneDay.amount = emailsByDate[tm]['emails'];
81
mostEmailsOnOneDay.date = tm;
82
}
83
if(emailsByDate[tm]['emails'] < leastEmailsOnOneDay.amount){
84
leastEmailsOnOneDay.amount = emailsByDate[tm]['emails'];
85
leastEmailsOnOneDay.date = tm;
86
}
87
}
88
if(emailsByDate[tm] === undefined && addFillerDates){
89
emailsByDate[tm] = {
90
formatted: tm.getDayName()+' '+(tm.getMonth()+1)+'/'+tm.getDate(),
91
emails: 0,
92
senders: {}
93
}
94
}
95
}
96
97
results.innerHTML = '';
98
var res = '';
99
res += '<b>Email Senders</b>: <br>';
100
for(var i in senders){
101
res += `${i}: ${senders[i]} emails<br>`
102
}
103
res += '<br><b>Emails by Date</b>: <table id="restbl"><tr><th>Date</th><th>Total Emails</th>';
104
var tbl_senders = [];
105
for(var i in senders){
106
tbl_senders[tbl_senders.length] = i;
107
res += `<th>From ${i}</th>`
108
}
109
res += '</tr>';
110
var cnt = 0;
111
var emailsByDate_sorted = Object.keys(emailsByDate).sort();
112
console.log(emailsByDate_sorted);
113
for(var k = 0; k < emailsByDate_sorted.length; k++){
114
var i = emailsByDate_sorted[k];
115
res += `<tr><td>${emailsByDate[i]['formatted']}</td><td>${emailsByDate[i]['emails']}</td>`;
116
for(var j = 0; j < tbl_senders.length; j++){
117
console.log(i);
118
console.log(emailsByDate[i]);
119
if(emailsByDate[i]['senders'][tbl_senders[j]] === undefined){
120
res += '<td>0</td>';
121
}
122
else{
123
res += `<td>${emailsByDate[i]['senders'][tbl_senders[j]]}</td>`;
124
}
125
}
126
res += '</tr>';
127
}
128
results.innerHTML = res;
129
}
130