Greasy Fork

MTurk Wage Reporter

Tracks a best-estimate hourly wage on active HITs being worked.

当前为 2014-07-11 提交的版本,查看 最新版本

// ==UserScript==
// @name                                MTurk Wage Reporter
// @namespace                           localhost
// @description                         Tracks a best-estimate hourly wage on active HITs being worked.
// @include                             https://www.mturk.com/mturk/accept?*
// @include                             https://www.mturk.com/mturk/previewandaccept?*
// @include                             https://www.mturk.com/mturk/dashboard*
// @version                             0.1b
// @grant                               GM_setValue
// @grant                               GM_getValue
// @require                             http://code.jquery.com/jquery-2.1.1.js
// @downloadURL
// @author                              DeliriumTremens 2014
// ==/UserScript==
 
//
// 2014-07-10   0.1b    Beginning development.  Creating timer and tab tracker, as well as initial IndexedDB for storage of data.
//
 
// ------------------------------------------------------------------------------------------------------------------------------------------------
 
// First, create indexedDB variables.
// Parts borrowed from HITdb
var indexedDB = window.indexedDB || window.webkidIndexedDB || window.mozIndexedDB;
 
var WageStorage = {};
 
window.IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction || window.mozIDBTransaction;
window.IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange || window.mozIDBKeyRange;
 
WageStorage.IDBTransactionModes = { "READ_ONLY": "readonly", "READ_WRITE": "readwrite", "VERSION_CHANGE": "versionchange" };
 
var idbKeyRange = window.IDBKeyRange;
 
WageStorage.indexedDB = {};
WageStorage.indexedDB.db = null;
 
// Global catch for indexedDB errors
WageStorage.indexedDB.onerror = function(e) {
        console.log(e);
}
 
// Check if database exists.  If no database, create one.  
// Parts borrowed from HITdb.
var dbExists = true;
var version = 5;
 
WageStorage.indexedDB.create = function () {
        var request = indexedDB.open("WageDB", v);
       
        request.onupgradeneeded = function (e) {
                WageStorage.indexedDB.db = e.target.result;
               
                var db = WageStorage.indexedDB.db;
                var newDB = false;
               
                if(!db.objectStoreNames.contains("Wage")) {
                        var store = db.createObjectStore("Wage", { keyPath: "hitId" });
                       
                        store.createIndex("date", "date", {unique: false});
                        store.createIndex("reqName", "reqName", {unique: false});
                        store.createIndex("reqId", "reqId", {unique: false});
                        store.createIndex("reward", "reward", {unique: false});
                        store.createIndex("start", "start", {unique: false});
            store.createIndex("stop", "stop", {unique: false});
                       
                        newDB = true;  
                }      
        db.close();
        }
        request.onsuccess = function(e) {
                WageStorage.indexedDB.db = e.target.result;
                var db = WageStorage.indexedDB.db;
                db.close();
                console.log("Database Created...");
        }
        request.onerror = WageStorage.indexedDB.onerror;
}
 
// Script Variables
var wageLost = false;
var wageNix = false;
var wageStart = null;
var wageEnd = null;
var reqId = document.URL.match(/requesterId=(.*?)&/i);
 
if (reqId) {
        GM_setValue("reqId", reqId[1]);
        }
else {
        reqId = GM_getValue("reqId");
        }
 
// HIT Data
var reward =  $('span[class="reward"]:eq(1)').text();
var reqName = $('input[name="prevRequester"]').val();
var date = new Date();
date = date.toLocaleDateString().replace(/\//g,'-');
 
// Timestamp when the HIT is accepted
$(window).ready( function() {
        wageStart = new Date().getTime();
        console.log(reqId);
        console.log(reward);
        console.log(reqName);
        console.log(date);
});
 
// Detect if 'Return HIT' button has been clicked to record timer as zero-earnings.
// Timestamp when button was clicked to end time spent.
$('a[href*="/mturk/return?"]').on('click', function() {
        wageLost = true;
        wageEnd = new Date().getTime();
    console.log(wageLost);
});
 
// Detect the page unloading and react accordingly.  
// If return button was clicked, record zero wage earnings, otherwise record earnings.
// Timestamp if submitted to end time spent.
$(window).on('beforeunload', function() {
        if (wageLost) {
                // ***** DO STUFF WHEN RETURN CLICKED *****
                console.log(((wageEnd - wageStart) / 1000));
        }
        else {
                // ***** DO STUFF WHEN SUBMITTED *****
                wageEnd = new date().getTime();
                console.log(((wageEnd - wageStart) / 1000));
        }
});