mmmturkeybacon Save Automatic Approval Time

Saves automatic approval time and shows the time

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name        mmmturkeybacon Save Automatic Approval Time
// @author      mmmturkeybacon
// @description Saves automatic approval time and shows the time
//              remaining until approval in the status field of 
//              completed HITs that are still pending approval.
//              Displays the total automatic approval time when
//              the mouse pointer hovers over the status field.
// @namespace   http://userscripts.org/users/523367
// @match       https://www.mturk.com/mturk/accept*
// @match       https://www.mturk.com/mturk/preview*
// @match       https://www.mturk.com/mturk/continue*
// @match       https://www.mturk.com/mturk/submit
// @match       https://www.mturk.com/mturk/return*
// @match       https://www.mturk.com/mturk/statusdetail*
// @require     http://code.jquery.com/jquery-latest.min.js
// @version     1.54
// @grant       none
// ==/UserScript==

/*
 * Automatic approval data is saved whenever a HIT page is unloaded. Usually when a 
 * HIT page is unloaded it means the HIT was submitted, but this isn't necessarily
 * so. It could also be that the user accepted the HIT, then closed the tab to
 * work on the HIT from his queue later. If this is the case, once the user eventually
 * submits the HIT the automatic approval data will be updated when the page unloads.
 * However, if the user returns the HIT then automatic approval data will have been
 * saved in local storage that isn't associated with any completed HITs. There's really
 * no good way to prevent this from happening or to remove the data.
 */ 

var hit_returned = false;

function create_title_str(hitId)
{
    var title_str = '';
    var autoapprove_data = localStorage.getItem('autoapprove_data.' + hitId);
    if (autoapprove_data == null)
    {
        return title_str;
    }
    var hitAutoAppDelayInSeconds = parseInt(autoapprove_data.split('?')[1]);

    if (hitAutoAppDelayInSeconds)
    {
        // time formatting code modified from http://userscripts.org/scripts/show/169154
        var days  = Math.floor((hitAutoAppDelayInSeconds/(60*60*24)));
        var hours = Math.floor((hitAutoAppDelayInSeconds/(60*60)) % 24);
        var mins  = Math.floor((hitAutoAppDelayInSeconds/60) % 60);
        var secs  = hitAutoAppDelayInSeconds % 60;
        
        title_str = 'Automatically approved after ';
        title_str += (days  == 0 ? '' : days  + (days  > 1 ? ' days '    : ' day '))    +
                     (hours == 0 ? '' : hours + (hours > 1 ? ' hours '   : ' hour '))   + 
                     (mins  == 0 ? '' : mins  + (mins  > 1 ? ' minutes ' : ' minute ')) + 
                     (secs  == 0 ? '' : secs  + (secs  > 1 ? ' seconds'  : ' second'));
    }
    else if (hitAutoAppDelayInSeconds == 0)
    {
        title_str = "Automatically approved after 0 seconds";
    }
    return title_str;
}

function create_time_remaining_str(hitId)
{
    var time_str = '';
    var autoapprove_data = localStorage.getItem('autoapprove_data.' + hitId);
    if (autoapprove_data == null)
    {
        return time_str;
    }
    var submit_time_seconds = parseInt(autoapprove_data.split('?')[0]);
    var hitAutoAppDelayInSeconds = parseInt(autoapprove_data.split('?')[1]);
    var now_in_seconds = new Date().getTime()/1000;
    var seconds_remaining = Math.round(submit_time_seconds + hitAutoAppDelayInSeconds - now_in_seconds);

    if (seconds_remaining > 0)
    {
        // time formatting code modified from http://userscripts.org/scripts/show/169154
        var days  = Math.floor((seconds_remaining/(60*60*24)));
        var hours = Math.floor((seconds_remaining/(60*60)) % 24);
        var mins  = Math.floor((seconds_remaining/60) % 60);
        var secs  = seconds_remaining % 60;
        
        time_str = '\n(';
        time_str += (days  == 0 ? '' : days  + 'd') +
                    (hours == 0 ? '' : hours + 'h') + 
                    (mins  == 0 ? '' : mins  + 'm') + 
                    (secs  == 0 ? '' : secs  + 's');
        time_str += ')';
        
        if (seconds_remaining == 0)
        {
            time_str = "\n(0 seconds)";
        }
    }
    return time_str;
}

function store_autoapprove_data()
{
    var $isAccepted = $('input[type="hidden"][name="isAccepted"][value="true"]')
    if ($isAccepted.length > 0 && !hit_returned)
    {
        var hitReview_hitId = $('form[name="hitForm"][action="/mturk/hitReview"] input[name="hitId"]').val();
        var hitAutoAppDelayInSeconds = $('input[type="hidden"][name="hitAutoAppDelayInSeconds"]').val();
        var now_in_seconds = new Date().getTime()/1000;
        var autoapprove_data = now_in_seconds +'?'+ hitAutoAppDelayInSeconds;
        localStorage.setItem('autoapprove_data.' + hitReview_hitId, autoapprove_data);
    }
}

if(typeof(Storage)!=="undefined")
{
    // modified return click snippet from https://userscripts.org/scripts/review/175838
    $('img[src="/images/return_hit.gif"]').parent().click(function()
    {
        hit_returned = true;        
    });

    window.addEventListener('beforeunload', store_autoapprove_data);

    var $requesters = $('td[class="statusdetailRequesterColumnValue"]');
    if ($requesters.length > 0)
    {
        $requesters.each(function()
        {
           // trick to get hitId snippet from http://userscripts.org/scripts/show/170845
           var hitId = $(this).find('a[href^="/mturk/contact?"]').attr('href').match(/[A-Z0-9]{30}/); 
           var $status_value = $(this).parent().find('td[class="statusdetailStatusColumnValue"]');

           var title_str = create_title_str(hitId);
           $status_value.attr('title', title_str);

           if ($status_value.text() == 'Pending Approval')
           {
               var time_remaining_str = create_time_remaining_str(hitId);
               var status_value = $status_value.text() + time_remaining_str;
               $status_value.text(status_value);
           }
        });
    }
}