in site/js/dev/ponymail_pagebuilder.js [145:253]
function buildStats(json, state, show) {
var stats = document.getElementById('stats')
stats.style.width = "300px"
stats.innerHTML = "<br/><h4>Stats for this blob of emails:</h4>"
if (!json.emails || json.emails.length == 0) {
stats.innerHTML = "<br/><br/>No emails found matching this criteria"
document.getElementById('emails').innerHTML = ""
return;
}
// See bug 335 for why only equality matters here
if (json.emails && json.emails.length == json.max) {
stats.innerHTML += "<font color='#FA0'>Reached the limit of " + json.max.toLocaleString() + " emails, truncation may have occurred</font><br/>"
}
var ap = ""
if (json.numparts && json.numparts > 1) {
ap = " by " + json.numparts + " people"
}
stats.innerHTML += (json.emails.length ? json.emails.length : 0) + " emails sent" + ap + ", divided into " + json.no_threads + " topics."
stats.innerHTML += "[<a href='trends.html" + document.location.search + "'>details</a>]"
stats.innerHTML += "<br/>"
var ts = "<table border='0'><tr>"
var ms = dailyStats(json.emails)
var max = 1
for (var i in ms) {
max = Math.max(max, ms[i])
}
for (var i in ms) {
ts += "<td style='padding-left: 2px; vertical-align: bottom'><div title='" + ms[i] + " emails' style='background: #369; width: 6px; height: " + parseInt((ms[i] / max) * 60) + "px;'> </div></td>"
}
ts += "</tr></table>"
stats.innerHTML += ts
stats.innerHTML += "<h4>Top 10 contributors:</h4>"
for (var i in json.participants) {
if (i >= 10) {
break;
}
var par = json.participants[i]
if (par.name.length > 24) {
par.name = par.name.substr(0, 23) + "..."
}
if (par.name.length == 0) {
par.name = par.email
}
// Only logged-in users should be able to see actual email addresses here
if (login && login.credentials) {
stats.innerHTML += "<img src='https://secure.gravatar.com/avatar/" + par.gravatar + ".jpg?s=32&r=g&d=mm' style='vertical-align:middle'/> <a href='javascript:void(0)' onclick='searchTop(\"" + par.email + "\", current_retention);'><b>" + par.name.replace(/[<>]/g, "") + "</a>:</b> " + par.count + " email(s)<br/>";
}
else {
stats.innerHTML += "<img src='https://secure.gravatar.com/avatar/" + par.gravatar + ".jpg?s=32&r=g&d=mm' style='vertical-align:middle'/> <b title='Log in to see the email address of this person'>" + par.name.replace(/[<>]/g, "") + ":</b> " + par.count + " email(s)<br/>";
}
}
var btn = document.createElement('a')
btn.setAttribute("href", "javascript:void(0);")
btn.setAttribute("class", "btn btn-warning")
btn.setAttribute("onclick", "prefs.hideStats='yes'; saveEphemeral(); buildStats(old_json, old_state, false);")
btn.style.marginRight = "10px"
btn.style.marginTop = "10px"
btn.innerHTML = "Hide stats"
stats.appendChild(btn)
if (prefs.hideStats == 'yes' || show == false) {
var dwidth = document.getElementById('datepicker').offsetParent === null ? 0 : document.getElementById('datepicker').offsetWidth
var sw = dwidth + 20;
document.getElementById('emails_parent').style.width = "calc(100% - " + sw + "px)"
// Resize on resize to work around CSS bug. Might wanna move this elsewhere later on..
window.onresize = function() {
// If calendar is hidden, we set it to 0 px, otherwise use the offset width
var dwidth = document.getElementById('datepicker').offsetParent === null ? 0 : document.getElementById('datepicker').offsetWidth
var sw = dwidth + 20;
// set list view to 99% - calendar
document.getElementById('emails_parent').style.width = "calc(100% - " + sw + "px)"
}
document.getElementById('emails_parent').style.width = "calc(100% - " + sw + "px)"
stats.setAttribute("class", "col-md-1 vertical-text")
stats.innerHTML = "<div onclick=\"prefs.hideStats='no'; saveEphemeral(); buildStats(old_json, old_state, true);\">Show stats panel..</div>"
}
if (prefs.hideStats == 'no' || show == true) {
stats.setAttribute("class", "hidden-xs hidden-sm col-md-3 col-lg-3")
var dwidth = document.getElementById('datepicker').offsetParent === null ? 0 : document.getElementById('datepicker').offsetWidth
var sw = dwidth + 30 + stats.offsetWidth;
document.getElementById('emails_parent').style.width = "calc(100% - " + sw + "px)"
// Resize on resize to work around CSS bug. Might wanna move this elsewhere later on..
window.onresize = function() {
// If calendar is hidden, we set it to 0 px, otherwise use the offset width
var dwidth = document.getElementById('datepicker').offsetParent === null ? 0 : document.getElementById('datepicker').offsetWidth
// include stats width
var sw = dwidth + 30 + stats.offsetWidth;
// set list view to 99% - calendar - stats
document.getElementById('emails_parent').style.width = "calc(99% - " + sw + "px)"
}
stats.removeAttribute("onclick")
//stats.style.display = "block"
if (json.cloud) {
for (var i in json.cloud) {
stats.innerHTML += "<h4 style='text-align: center;'>Hot topics:</h4>"
stats.appendChild(wordCloud(json.cloud, 250, 80, pm_config.debug))
break // so..this'll run if cloud has stuff, otherwise not.
}
}
}
}