Turkdigo Pace Calculator

Calculate the pace at which you need to complete HITs to earn a target minimum wage.

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Turkdigo Pace Calculator
// @author       Turkdigo + clickhappier
// @namespace    Turkdigo
// @description  Calculate the pace at which you need to complete HITs to earn a target minimum wage.
// @match        https://www.mturk.com/mturk*
// @exclude      https://www.mturk.com/mturk/dashboard*
// @exclude      https://www.mturk.com/*hit_scraper
// @require      http://code.jquery.com/jquery-latest.min.js
// @version      2.1c
// @grant        GM_log
// ==/UserScript==


if ( $("[id*='reward.tooltip']").length ) {  // on a page with at least one HIT's info

    // get user values
    if ( !localStorage.getItem('targetWage') )
        var targetWage = 7.25;
    else
        var targetWage = Number(localStorage.getItem('targetWage'));
    if ( !localStorage.getItem('reloadDelay') )
        var reloadDelay = 2;
    else
        var reloadDelay = Number(localStorage.getItem('reloadDelay'));
        
    // Check to see if we're on a HIT page or on a search results page
    if ( $("span[class='looksLikeText'] input[value*='violates']").length || $("span#theTime").length ){  // on a HIT page
        var rewardItem = "span[class='reward']:gt(0)";  // skip the 'Total Earned' display
        var parentPlacement = "hitPage";
    } 
    else {  // on a search results page
        var rewardItem = "span[class='reward']";
        var parentPlacement = "searchPage";
    }
    
    $(rewardItem).each( function(){
        var reward = $(this).html().replace("$","");
        var calc = ( ( (3600*Number(reward))/targetWage ) - reloadDelay );
        var perMin = ( (Math.round((60/(calc+reloadDelay))*100))/100 );
        perMin = (Math.round(perMin*10) / 10);  // round to nearest tenth
        if (perMin==0) { perMin = '--'; }
        var perHr = ( (Math.round((3600/(calc+reloadDelay))*100))/100 );
        perHr = (Math.round(perHr*10) / 10);  // round to nearest tenth
    
        var time = parseInt(calc,10);
        time = time < 0 ? 0 : time;
        var minutes = Math.floor(time/60);
        var seconds = time % 60;
        minutes = minutes <= 9 ? "0"+minutes : minutes;
        seconds = seconds <= 9 ? "0"+seconds : seconds;
        
        var labelCell = '<a id="pace.tooltip" title="Click $/hr to change target wage.\nClick #sec wait to change expected reload delay.">'
                        + 'Pace to earn&nbsp;<br><span class="paceWage">$' + targetWage.toFixed(2) + '/hr</span> at&nbsp;<br>'
                        + '<span class="paceWait">'+ reloadDelay.toFixed(1) +'sec wait</span>:&nbsp;</a>';
        var calcCell = minutes+':'+seconds + ' per HIT <br>(' + perMin + ' HITs/min,<br>' + perHr + ' HITs/hr)';
        
        if ( parentPlacement == "hitPage" ) {
            var builtHtml = '<td><img width="25" border="0" height="1" alt="" src="/media/spacer.gif"></img></td>'
                            + '<td align="left" valign="top" nowrap class="capsule_field_title">' + labelCell + '</td>'
                            + '<td align="left" valign="top" nowrap>' + calcCell + '</td>';
            $(this).closest('tr').append(builtHtml);  // insert pace columns
        }
        else if ( parentPlacement == "searchPage" ) {
            var builtHtml = '<td width="18%" align="right"><table><tr>'
                            + '<td rowspan="2" align="left" valign="top" nowrap class="capsule_field_title">' + labelCell + '</td>'
                            + '<td align="left" valign="top" nowrap>' + calcCell + '</td>'
                            + '</tr></table></td>';
            $(this).closest('table').closest('td').prop('width', '15%');  // resize reward+HITsAvail column to make room for pace column
            $(this).closest('table').closest('td').after(builtHtml);  // insert pace columns
        }
    } );

    $('.paceWage').click( function(){
        var promptWage = Number( window.prompt('Enter your target dollars per hour rate.\nRefresh the page to see the new number\'s effects.').replace(' ','').replace('$','').replace('/hr','').replace('/hour','') ).toFixed(2);
        if ( promptWage=='' || isNaN(promptWage) ) { promptWage = 7.25; }  // revert to defaults if no valid input received
        localStorage.setItem('targetWage', promptWage);
    } );

    $('.paceWait').click( function(){
        var promptWait = Number( window.prompt('Enter your estimated number of seconds\ndelay between HITs for the next one to load.\nRefresh the page to see the new number\'s effects.').replace(' ','').replace('sec','').replace('s','') ).toFixed(1);
        if ( promptWait=='' || isNaN(promptWait) ) { promptWait = 2; }  // revert to defaults if no valid input received
        localStorage.setItem('reloadDelay', promptWait);
    } );
}