"+csvTxt.join('')+"";
function csvToFile(csv, filename) {
var blob = new Blob(csv, {type: "text/csv", endings: "native"}),
dl = document.createElement("A");
dl.href = URL.createObjectURL(blob);
dl.download = filename;
document.body.appendChild(dl); // FF doesn't support forced events unless element is part of the document
dl.click(); // so we make it so and click,
dl.remove(); // then immediately remove it
return dl;
}
};//}}} formatCSV
this.include = function(value) {
this.results.push(value);
};
function _parseRewards(rewards,value) {
if (!isNaN(rewards)) {
if (value === "pay")
return Number(rewards).toFixed(2);
else
return "0.00";
} else {
if (value === "pay")
return Number(rewards.pay).toFixed(2);
else
return Number(rewards.bonus).toFixed(2);
}
} // _parse
function _collate(data, index) {
var r = {
totalPay: 0, totalBonus: 0, totalEntries: data.length,
totalSub: 0, totalApp: 0, totalRej: 0, totalPen: 0
};
for (var e of data) {
if (!r[e[index]]) { r[e[index]] = []; r[e[index]].pay = 0; }
r[e[index]].push(e);
if (index === "date") {
r.totalSub += e.submitted;
r.totalApp += e.approved;
r.totalRej += e.rejected;
r.totalPen += e.pending;
r.totalPay += e.earnings;
} else {
r[e[index]].pay += (+_parseRewards(e.reward,"pay"));
r.totalPay += (+_parseRewards(e.reward,"pay"));
r.totalBonus += (+_parseRewards(e.reward,"bonus"));
}
}
return r;
} // _collate
}//}}} databaseresult
/*
*
* Above contains the core functions. Below is the
* main body, interface, and tangential functions.
*
*///{{{
// the Set() constructor is never actually used other than to test for Chrome v38+
if (!("indexedDB" in window && "Set" in window)) alert("HITDB::Your browser is too outdated or otherwise incompatible with this script!");
else {
/*
var tdbh = window.indexedDB.open(DB_NAME);
tdbh.onerror = function(e) { 'use strict'; console.log("[TESTDB]",e.target.error.name+":", e.target.error.message, e); };
tdbh.onsuccess = INFLATEDUMMYVALUES;
tdbh.onupgradeneeded = BLANKSLATE;
var dbh = null;
*/
if (document.location.pathname.search(/dashboard/) > 0) {
var dbh = window.indexedDB.open(DB_NAME, DB_VERSION);
dbh.onerror = function(e) { 'use strict'; console.log("[HITDB]",e.target.error.name+":", e.target.error.message, e); };
dbh.onupgradeneeded = HITStorage.versionChange;
dbh.onsuccess = function() { 'use strict'; this.result.close(); };
dashboardUI();
ProjectedEarnings.updateDate();
ProjectedEarnings.draw(true);
}
else
beenThereDoneThat();
}
/*}}}
*
* Above is the main body and core functions. Below
* defines UI layout/appearance and tangential functions.
*
*/
// {{{ css injection
var css = "";
document.head.innerHTML += css;
// }}}
function beenThereDoneThat() {//{{{
//
// TODO refine searching
//
'use strict';
var qualNode = document.querySelector('td[colspan="11"]');
if (qualNode) { // we're on the preview page!
var requester = document.querySelector('input[name="requesterId"]').value,
//hitId = document.querySelector('input[name="hitId"]').value,
autoApproval = document.querySelector('input[name="hitAutoAppDelayInSeconds"]').value,
hitTitle = document.querySelector('div[style*="ellipsis"]').textContent.trim().replace(/\|/g,""),
insertionNode = qualNode.parentNode.parentNode;
var row = document.createElement("TR"), cellL = document.createElement("TD"), cellR = document.createElement("TD");
var _resultsTable = document.createElement("TABLE");
_resultsTable.id = "resultsTableFor"+requester;
insertionNode.parentNode.parentNode.appendChild(_resultsTable);
cellR.innerHTML = 'Auto-Approval: '+_ftime(autoApproval);
var rbutton = document.createElement("BUTTON");
rbutton.classList.add("hitdbRTButtons","hitdbRTButtons-large");
rbutton.textContent = "Requester";
rbutton.onclick = function(e) {
e.preventDefault();
showResults(requester);
};
var tbutton = rbutton.cloneNode(false);
rbutton.dataset.id = requester;
rbutton.title = "Show HITs completed from this requester";
tbutton.textContent = "HIT Title";
tbutton.onclick = function(e) { e.preventDefault(); };
HITStorage.recall("HIT", {index: "requesterId", range: window.IDBKeyRange.only(requester)})
.then(processResults.bind(rbutton));
HITStorage.recall("HIT", {index: "title", range: window.IDBKeyRange.only(hitTitle)})
.then(processResults.bind(tbutton));
row.appendChild(cellL);
row.appendChild(cellR);
cellL.appendChild(rbutton);
cellL.appendChild(tbutton);
cellL.colSpan = "3";
cellR.colSpan = "8";
insertionNode.appendChild(row);
} else { // browsing HITs n sutff
var titleNodes = document.querySelectorAll('a[class="capsulelink"]');
if (titleNodes.length < 1) return; // nothing left to do here!
var requesterNodes = document.querySelectorAll('a[href*="hitgroups&requester"]');
var insertionNodes = [];
for (var i=0;i