in site/js/ponymail.js [3545:3661]
function loadNgrams() {
// get list, timespan and query from the html page
var args = document.location.search.substr(1)
var a_arr = args.split(/:/, 3)
var list = a_arr[0]
var dspan = a_arr[1]
var query = a_arr[2]
// Try to detect header searches, if present
var queries = unescape(query ? query : "").split("||")
var ngrams = []
var avg = false
var topics = false
var stack = false
var plaw = false
for (var n in queries) {
var nquery = []
var q = encodeURIComponent(queries[n])
if (q == 'avg') {
avg = true
continue
} else if (q == 'stack') {
stack = true
continue
} else if (q == 'plaw') {
plaw = true
continue
} else if (q == 'topics') {
topics = true
continue
} else if (q.length == 0) {
continue
} else if (q == '*') {
ngrams.push("q=")
continue
}
else if (q && q.length > 0) {
var stuff = ['from', 'subject', 'body', 'to']
for (var k in stuff) {
// can we find 'header=foo' stuff?
var r = RegExp(stuff[k] + "=([^&=]+)&?", "mi")
var m = q.match(r)
if (m) {
q = q.replace(m[0], "")
// append to the header_foo query
nquery.push("header_" + stuff[k] + "=" + encodeURIComponent(m[1]))
}
}
}
if (q.length > 0) {
nquery.push("q=" + q)
}
ngrams.push(nquery.join("&"))
}
// default to 1 month view if nothing else is supplied
if (!dspan || dspan.length == 0) {
dspan = DEFAULT_RETENTION
}
// figure out when this is and what the double is (for comparisons)
var xa = datePickerDouble(dspan)
// split list name for stats.lua
var arr = list.split(/@/)
var listname = arr[0]
var domain = arr[1]
// make the ngram generator div
var nobj = document.getElementById('ngram_query')
// options for ngram generator
nobj.appendChild(generateFormDivs('listname', 'List(s):', 'text', list))
var tspanner = generateFormDivs('timespan', 'Date range:', 'text', datePickerValue(dspan))
tspanner.childNodes[1].childNodes[0].setAttribute("onmousedown", 'datePicker(this);')
tspanner.childNodes[1].childNodes[0].setAttribute("data", dspan)
nobj.appendChild(tspanner)
nobj.appendChild(generateFormDivs('stack', 'Stack n-grams:', 'checkbox', stack))
nobj.appendChild(generateFormDivs('avg', 'Use rolling averages:', 'checkbox', avg))
nobj.appendChild(generateFormDivs('topics', 'Group messages by topics:', 'checkbox', topics))
nobj.appendChild(generateFormDivs('plaw', 'Check for PL distribution:', 'checkbox', plaw))
// query fields
for (var n in queries) {
var q = unescape(queries[n]);
if (q != 'stack' && q != 'topics' && q!= 'avg' && q != 'plaw') {
ngramboxes++;
nobj.appendChild(generateFormDivs('query' + ngramboxes, 'Query #' + ngramboxes + ':', 'text', q != undefined ? q : ""))
}
}
// submit button
var btn = document.createElement('input')
btn.setAttribute("id", "ngrambutton")
btn.setAttribute("type", "button")
btn.setAttribute("value", "Generate n-grams")
btn.setAttribute("onclick", "makeNgramURL()")
nobj.appendChild(btn)
// add an empty field
addNgramBox(2)
// Get us some data
if (ngrams.length > 0) {
var nngram = ngrams.pop()
GetAsync('/api/stats.lua?' + (topics ? "" : "quick=true&") + 'list='+listname+'&domain='+domain+'&d=' + dspan + "&" + nngram, { plaw: plaw, topics: topics, stack: stack, avg: avg, ngram: nngram, ngrams: ngrams, listname: listname, domain: domain, dbl: dspan, dfrom: xa[1], dto: xa[2], tspan: xa[3], dspan: dspan, query: query }, addNgram)
document.title = "n-gram stats for " + list + " - Pony Mail!"
} else {
document.getElementById('trends').innerHTML = ""
}
}