// ==UserScript==
// @name Mturk Dashboard
// @namespace http://kadauchi.com/
// @version 1.5.6
// @description Modifies the MTurk dashboard.
// @author Kadauchi
// @icon http://kadauchi.com/avatar1.jpg
// @include https://www.mturk.com/mturk/dashboard*
// @grant GM_log
// @grant GM_setClipboard
// @require https://code.jquery.com/jquery-3.0.0-beta1.min.js
// @downloadURL none
// ==/UserScript==
Todays_Projected_Earnings(); // Code cleanup needed, export button styling. Possible way to track bonuses.
Best_Worst_Case();
Real_Stats();
Changes();
Yearly();
function Todays_Projected_Earnings(){
var TPEhitLOG = {}; var TPEdetailsLOG = {};
if (localStorage.TPEhitLOG){
TPEhitLOG = JSON.parse(localStorage.TPEhitLOG);
}
var today = $("a[href^='/mturk/statusdetail?encodedDate']:contains(Today)").eq(0).prop("href");
var pe = Number(localStorage.TPE_pe) || 0;
var $peTR = $('
');
var $peTD1 = $('');
var $peTD2 = $(' | ');
var $peA = $('Today\'s Projected Earnings');
var $TPE_details = $('Details ');
var $peSPAN = $('');
$("td.metrics-table-first-value:contains(Total Earnings)").parent().after($peTR);
$peTR.append($peTD1.append($peA,$TPE_details),$peTD2.append($peSPAN));
var $TPED_table = $('');
var $TPED_tboday = $('');
var $TPED_tr_1 = $(' | Today\'s Projected Earnings Details | | ');
var $TPED_tr_2 = $(' | ');
var $TPED_tr_h = $('');
$("#table_yearly_earnings").after($TPED_table);
$TPED_table.append($TPED_tboday);
$TPED_tboday.append($TPED_tr_1,$TPED_tr_2);
$("#tbody2").append($TPED_tr_h);
var $export = $('');
$("#TPE_tr").children().eq(2).append($export);
$export.click(function(){
var exportcode = "[b]Today's Projected Earnings: $"+Number(pe).toFixed(2)+"[/b]\n"+
"[spoiler=Today's Projected Earnings Full Details][table][tr][th][b]Requester[/b][/th][th][b]Submitted[/b][/th][th][b]Projected[/b][/th][/tr]";
var x_sorted = Object.keys(TPEdetailsLOG).sort(function(a,b){return TPEdetailsLOG[a].reward - TPEdetailsLOG[b].reward;});
for (var j = x_sorted.length-1; j > -1; j--){
var xkey = x_sorted[j];
var x_req = TPEdetailsLOG[xkey].req;
var x_submitted = TPEdetailsLOG[xkey].submit;
var x_reward = Number(TPEdetailsLOG[xkey].reward).toFixed(2);
exportcode += "[tr][td]"+x_req+"[/td][td]"+x_submitted+"[/td][td]$"+x_reward+"[/td][/tr]\n";
}
exportcode += "[/table][/spoiler]";
GM_setClipboard(exportcode);
alert("Forum Export copied to your clipboard.");
});
$peA.click(function(){
if ($peA.text() === "Today's Projected Earnings"){
var confirmation = confirm("Are you sure you want to recalculate Today's Projected Earnings?");
if (confirmation === true){
TPEhitLOG = {}; TPEdetailsLOG = {}; pe = 0;
$("#tbody2").find("tr.odd, tr.even").remove();
getDATA(today);
$peSPAN.text("$0.00");
}
}
});
$TPE_details.click(function(){
$TPE_details.find("img").attr("src", ($TPE_details.find("img").attr("src") === "/media/more.gif") ? "/media/less.gif" : "/media/more.gif");
$TPED_table.toggle();
});
if (today){
var date = today.split("encodedDate=")[1];
if (date === localStorage.TPE_date){
$peSPAN.text("$"+Number(pe).toFixed(2));
getDATA(localStorage.TPE_lastpage);
}
else {
localStorage.TPE_date = date;
TPEhitLOG = {}; pe = 0;
getDATA(today);
$peSPAN.text("$0.00");
}
}
else {
$peA.text("Today's Projected Earnings");
$peSPAN.text("$0.00");
}
function getDATA(URL){
var page = URL.match(/Number=([0-9]*)/g);
if (page){
$peA.text("Calculating Page "+page.toString().replace(/[^0-9.]/g, ""));
}
else {
$peA.text("Calculating Page 1");
}
$.get(URL, function(data){
var $data = $(data);
var $hits = $data.find("#dailyActivityTable").find("tr[valign='top']");
if ($hits.length){
var url = $data.find("a:contains(Next)").eq(0).prop("href");
for (var i = 0; i < $hits.length; i++){
var req = $hits.eq(i).find("td.statusdetailRequesterColumnValue").text().trim();
var title = $hits.eq(i).find("td.statusdetailTitleColumnValue").text().trim();
var reward = $hits.eq(i).find("td.statusdetailAmountColumnValue").text().trim();
var status = $hits.eq(i).find("td.statusdetailStatusColumnValue").text().trim();
var reqid = $hits.eq(i).find("a").prop("href").split("requesterId=")[1].split("&")[1];
var hitid = $hits.eq(i).find("a").prop("href").split("HIT+")[1];
if (!TPEhitLOG[hitid]){
TPEhitLOG[hitid] = {
req : req,
title : title,
reward : reward,
status : status,
reqid : reqid,
hitid : hitid
};
}
}
if (url){
getDATA(url);
}
else {
pe = 0;
for(var key in TPEhitLOG){
if (TPEhitLOG[key].status !== "Rejected"){
pe += parseFloat(TPEhitLOG[key].reward.replace(/[^0-9.]/g, ""));
}
if (!TPEdetailsLOG[TPEhitLOG[key].reqid]){
TPEdetailsLOG[TPEhitLOG[key].reqid] = {
req : TPEhitLOG[key].req,
submit : 1,
reward : parseFloat(TPEhitLOG[key].reward.replace(/[^0-9.]/g, ""))
};
}
else {
TPEdetailsLOG[TPEhitLOG[key].reqid].submit = TPEdetailsLOG[TPEhitLOG[key].reqid].submit + 1;
TPEdetailsLOG[TPEhitLOG[key].reqid].reward = TPEdetailsLOG[TPEhitLOG[key].reqid].reward + parseFloat(TPEhitLOG[key].reward.replace(/[^0-9.]/g, ""));
}
}
var d_sorted = Object.keys(TPEdetailsLOG).sort(function(a,b){return TPEdetailsLOG[a].reward - TPEdetailsLOG[b].reward;});
var oddeven = true;
for (var j = d_sorted.length-1; j > -1; j--){
var dkey = d_sorted[j];
var d_req = TPEdetailsLOG[dkey].req;
var d_submitted = TPEdetailsLOG[dkey].submit;
var d_reward = Number(TPEdetailsLOG[dkey].reward).toFixed(2);
if (oddeven){
oddeven = false;
$("#tbody2").append(''+d_req+' | '+d_submitted+' | $'+d_reward+' | ');
}
else {
oddeven = true;
$("#tbody2").append(''+d_req+' | '+d_submitted+' | $'+d_reward+' | ');
}
}
localStorage.TPEhitLOG = JSON.stringify(TPEhitLOG);
localStorage.TPE_lastpage = URL;
localStorage.TPE_pe = pe;
$peA.text("Today's Projected Earnings");
$peSPAN.text("$"+Number(pe).toFixed(2));
}
}
else {
window.setTimeout(getDATA(URL), 2000);
}
});
}
}
function Real_Stats(){
var approved = Number($("td.metrics-table-first-value:contains(... Approved)").next().text());
var rejected = Number($("td.metrics-table-first-value:contains(... Rejected)").next().text());
$("td.metrics-table-first-value:contains(... Approved)").next().next().text(Math.round(((approved)/(approved+rejected))*1000000)/10000+"%");
$("td.metrics-table-first-value:contains(... Rejected)").next().next().text(Math.round(((rejected)/(approved+rejected))*1000000)/10000+"%");
}
function Best_Worst_Case(){
var submitted = Number($("td.metrics-table-first-value:contains(HITs Submitted)").next().text());
var rejected = Number($("td.metrics-table-first-value:contains(... Rejected)").next().text());
var $under99 = $(' ('+Math.round((rejected-((1.0 - 99/100)*submitted))/((1.0 - 99/100)-1))+' ≥ 99%)');
var $under95 = $(' ('+Math.round((rejected-((1.0 - 95/100)*submitted))/((1.0 - 95/100)-1))+' ≥ 95%)');
$("td.metrics-table-first-value:contains(... Pending)").append($under99,$under95);
$("td.metrics-table-first-value:contains(... Pending)").next().next().text(Math.round(((submitted-rejected)/submitted)*1000000)/10000+"%").css({"color": "green"});
}
function Changes(){
var today = $("a[href^='/mturk/statusdetail?encodedDate']:contains(Today)").eq(0).prop("href");
if (today){
var date = today.split("encodedDate=")[1];
if (date !== localStorage.Changes_date){
localStorage.Changes_date = date;
localStorage.today_submitted = 0;
localStorage.today_approved = 0;
localStorage.today_rejected = 0;
localStorage.today_pending = 0;
}
}
var earnings_hits = Number($("#approved_hits_earnings_amount").text().replace(/[^0-9.]/g, ""));
var earnings_bonuses = Number($("#bonus_earnings_amount").text().replace(/[^0-9.]/g, ""));
var earnings_total = Number($("#total_earnings_amount").text().replace(/[^0-9.]/g, ""));
var earnings_transfer = Number($("#transfer_earnings").text().replace(/[^0-9.]/g, ""));
var hits_submitted = Number($("td.metrics-table-first-value:contains(HITs Submitted)").next().text());
var hits_approved = Number($("td.metrics-table-first-value:contains(... Approved)").next().text());
var hits_rejected = Number($("td.metrics-table-first-value:contains(... Rejected)").next().text());
var hits_pending = Number($("td.metrics-table-first-value:contains(... Pending)").next().text());
var today_submitted = Number($("td.metrics-table-first-value:contains(Today)").next().text());
var today_approved = Number($("td.metrics-table-first-value:contains(Today)").next().next().text());
var today_rejected = Number($("td.metrics-table-first-value:contains(Today)").next().next().next().text());
var today_pending = Number($("td.metrics-table-first-value:contains(Today)").next().next().next().next().text());
if (Number(localStorage.earnings_hits) !== earnings_hits){
$("#approved_hits_earnings_amount").prev().append('+$'+(Math.round((earnings_hits-Number(localStorage.earnings_hits))*100)/100)+'');
localStorage.earnings_hits = earnings_hits;
}
if (Number(localStorage.earnings_bonuses) !== earnings_bonuses){
$("#bonus_earnings_amount").prev().append('+$'+(Math.round((earnings_bonuses-Number(localStorage.earnings_bonuses))*100)/100)+'');
localStorage.earnings_bonuses = earnings_bonuses;
}
if (Number(localStorage.earnings_total) !== earnings_total){
$("#total_earnings_amount").prev().append('+$'+(Math.round((earnings_total-Number(localStorage.earnings_total))*100)/100)+'');
localStorage.earnings_total = earnings_total;
}
if (Number(localStorage.earnings_transfer) !== earnings_transfer){
$("#transfer_earnings").prev().append('+$'+(Math.round((earnings_transfer-Number(localStorage.earnings_transfer))*100)/100)+'');
localStorage.earnings_transfer = earnings_transfer;
}
if (Number(localStorage.hits_submitted) !== hits_submitted){
$("td.metrics-table-first-value:contains(HITs Submitted)").append('+'+(hits_submitted-Number(localStorage.hits_submitted))+'');
localStorage.hits_submitted = hits_submitted;
}
if (Number(localStorage.hits_approved) !== hits_approved){
$("td.metrics-table-first-value:contains(... Approved)").append('+'+(hits_approved-Number(localStorage.hits_approved))+'');
localStorage.hits_approved = hits_approved;
}
if (Number(localStorage.hits_rejected) !== hits_rejected){
$("td.metrics-table-first-value:contains(... Rejected)").append('+'+(hits_rejected-Number(localStorage.hits_rejected))+'');
localStorage.hits_rejected = hits_rejected;
}
if (Number(localStorage.hits_pending) !== hits_pending){
if (Number(localStorage.hits_pending) > hits_pending){
$("td.metrics-table-first-value:contains(... Pending)").append('-'+(Number(localStorage.hits_pending)-hits_pending)+'');
}
else {
$("td.metrics-table-first-value:contains(... Pending)").append('+'+(hits_pending-Number(localStorage.hits_pending))+'');
}
localStorage.hits_pending = hits_pending;
}
if (Number(localStorage.today_submitted) !== today_submitted){
$("td.metrics-table-first-value:contains(Today)").next().append('+'+(today_submitted-Number(localStorage.today_submitted))+'');
localStorage.today_submitted = today_submitted;
}
if (Number(localStorage.today_approved) !== today_approved){
$("td.metrics-table-first-value:contains(Today)").next().next().append('+'+(today_approved-Number(localStorage.today_approved))+'');
localStorage.today_approved = today_approved;
}
if (Number(localStorage.today_rejected) !== today_rejected){
$("td.metrics-table-first-value:contains(Today)").next().next().next().append('+'+(today_rejected-Number(localStorage.today_rejected))+'');
localStorage.today_rejected = today_rejected;
}
if (Number(localStorage.today_pending) !== today_pending){
if (Number(localStorage.today_pending) > today_pending){
$("td.metrics-table-first-value:contains(Today)").next().next().next().next().append('-'+(Number(localStorage.today_pending)-today_pending)+'');
}
else {
$("td.metrics-table-first-value:contains(Today)").next().next().next().next().append('+'+(today_pending-Number(localStorage.today_pending))+'');
}
localStorage.today_pending = today_pending;
}
}
function Yearly(){
var totalearnings = Number($("#total_earnings_amount").text().replace(/[^0-9.]/g, ""));
var $reward = $("#table_yearly_earnings").find("span.reward");
for (var i = 0; i < $reward.length; i++){
totalearnings -= Number($reward.eq(i).text().replace(/[^0-9.]/g, ""));
}
var earnings2016 = Number((totalearnings).toFixed(2)).toLocaleString("en");
var $thisyear = $('2016 | $'+earnings2016+' | ');
$("#table_yearly_earnings").find("tr.metrics-table-header-row").after($thisyear);
} |