Mturk Dashboard

Modifies the MTurk dashboard.

目前為 2016-04-22 提交的版本,檢視 最新版本

// ==UserScript==
// @name         Mturk Dashboard
// @namespace    http://kadauchi.com/
// @version      1.5.4
// @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
// ==/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 = $('<tr class="even">');
    var $peTD1 = $('<td class="metrics-table-first-value">');
    var $peTD2 = $('<td>');
    var $peA = $('<a href="javascript:void(0)">Today\'s Projected Earnings</a>');
    var $TPE_details = $('<span style="color: blue; font-size: 10px; cursor: pointer; float: right;">Details<img style="margin-left: 5px;" src="/media/more.gif" border="0/"></span>');
    var $peSPAN = $('<span class="reward"></span>');
    $("td.metrics-table-first-value:contains(Total Earnings)").parent().after($peTR);
    $peTR.append($peTD1.append($peA,$TPE_details),$peTD2.append($peSPAN));

    var $TPED_table = $('<table style="display: none;" width="760" align="center" cellspacing="0" cellpadding="0">');
    var $TPED_tboday = $('<tbody>');
    var $TPED_tr_1 = $('<tr id="TPE_tr"  height="25px"><td width="10" bgcolor="#7fb4cf" style="padding-left: 10px;"></td><td width="100%" bgcolor="#7fb4cf" class="white_text_14_bold">Today\'s Projected Earnings Details</td><td width="10" align="right" bgcolor="#7fb4cf"></td></tr>');
    var $TPED_tr_2 = $('<tr><td class="container-content" colspan="3"><table class="metrics-table" width="100%"><tbody><tr><td width="100%"><table class="metrics-table" width="100%"><tbody id="tbody2"></tbody></table></td></tr></tbody></table></td></tr>');
    var $TPED_tr_h = $('<tr class="metrics-table-header-row"><th class="metrics-table-first-header">Requester</th><th>Submitted</th><th>Projected</th></tr>');

    $("#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 = $('<button type="button" class="scanpostdbutton">Forum Export</button>');
    $("#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);
            var x_status = TPEdetailsLOG[xkey].status;
            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 = {}; pe = 0;
                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('<tr class="odd"><td class="metrics-table-first-value">'+d_req+'</td><td>'+d_submitted+'</td><td><span class="reward">$'+d_reward+'</span></td></tr>');
                        }
                        else {
                            oddeven = true;
                            $("#tbody2").append('<tr class="odd"><td class="metrics-table-first-value">'+d_req+'</td><td>'+d_submitted+'</td><td><span class="reward">$'+d_reward+'</span></td></tr>');
                        }
                    }
                    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 submitted = Number($("td.metrics-table-first-value:contains(HITs Submitted)").next().text());
    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 = $('<span style="color: orange;"> ('+Math.round((rejected-((1.0 - 99/100)*submitted))/((1.0 - 99/100)-1))+' ≥ 99%)</span>');
    var $under95 = $('<span style="color: red;"> ('+Math.round((rejected-((1.0 - 95/100)*submitted))/((1.0 - 95/100)-1))+' ≥ 95%)</span>');
    $("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 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('<span style="float:right;">+$'+(earnings_hits-Number(localStorage.earnings_hits))+'</span>');
        localStorage.earnings_hits = earnings_hits;
    }
    if (Number(localStorage.earnings_bonuses) !== earnings_bonuses){
        $("#bonus_earnings_amount").prev().append('<span style="float:right;">+$'+(earnings_bonuses-Number(localStorage.earnings_bonuses))+'</span>');
        localStorage.earnings_bonuses = earnings_bonuses;
    }
    if (Number(localStorage.earnings_total) !== earnings_total){
        $("#total_earnings_amount").prev().append('<span style="float:right;">+$'+(earnings_total-Number(localStorage.earnings_total))+'</span>');
        localStorage.earnings_total = earnings_total;
    }
    if (Number(localStorage.earnings_transfer) !== earnings_transfer){
        $("#transfer_earnings").prev().append('<span style="float:right;">+$'+(earnings_transfer-Number(localStorage.earnings_transfer))+'</span>');
        localStorage.earnings_transfer = earnings_transfer;
    }
    if (Number(localStorage.hits_submitted) !== hits_submitted){
        $("td.metrics-table-first-value:contains(HITs Submitted)").append('<span style="float:right;">+'+(hits_submitted-Number(localStorage.hits_submitted))+'</span>');
        localStorage.hits_submitted = hits_submitted;
    }
    if (Number(localStorage.hits_approved) !== hits_approved){
        $("td.metrics-table-first-value:contains(... Approved)").append('<span style="float:right;">+'+(hits_approved-Number(localStorage.hits_approved))+'</span>');
        localStorage.hits_approved = hits_approved;
    }
    if (Number(localStorage.hits_rejected) !== hits_rejected){
        $("td.metrics-table-first-value:contains(... Rejected)").append('<span style="float:right;">+'+(hits_rejected-Number(localStorage.hits_rejected))+'</span>');
        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('<span style="float:right;">-'+(Number(localStorage.hits_pending)-hits_pending)+'</span>');
        }
        else {
            $("td.metrics-table-first-value:contains(... Pending)").append('<span style="float:right;">+'+(hits_pending-Number(localStorage.hits_pending))+'</span>');
        }
        localStorage.hits_pending = hits_pending;
    }
    if (Number(localStorage.today_submitted) !== today_submitted){
        $("td.metrics-table-first-value:contains(Today)").next().append('<span style="float:left;">+'+(today_submitted-Number(localStorage.today_submitted))+'</span>');
        localStorage.today_submitted = today_submitted;
    }
    if (Number(localStorage.today_approved) !== today_approved){
        $("td.metrics-table-first-value:contains(Today)").next().next().append('<span style="float:left;">+'+(today_approved-Number(localStorage.today_approved))+'</span>');
        localStorage.today_approved = today_approved;
    }
    if (Number(localStorage.today_rejected) !== today_rejected){
        $("td.metrics-table-first-value:contains(Today)").next().next().next().append('<span style="float:left;">+'+(today_rejected-Number(localStorage.today_rejected))+'</span>');
        localStorage.today_rejected = today_rejected;
    }
    if (Number(localStorage.today_pending) !== today_pending){
        $("td.metrics-table-first-value:contains(Today)").next().next().next().next().append('<span style="float:left;">+'+(today_pending-Number(localStorage.today_pending))+'</span>');
        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 = $('<tr class="odd"><td class="metrics-table-first-value">2016</td><td id="yearly_earnings_amount"><span class="reward">$'+earnings2016+'</span></td></tr>');
    $("#table_yearly_earnings").find("tr.metrics-table-header-row").after($thisyear);
}

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址