DTs Dashboard Charts

Adds charts to the mturk dashboard

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey, Greasemonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да инсталирате разширение, като например Tampermonkey .

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Userscripts.

За да инсталирате скрипта, трябва да инсталирате разширение като Tampermonkey.

За да инсталирате този скрипт, трябва да имате инсталиран скриптов мениджър.

(Вече имам скриптов мениджър, искам да го инсталирам!)

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

(Вече имам инсталиран мениджър на стиловете, искам да го инсталирам!)

// ==UserScript==
// @name         DTs Dashboard Charts
// @namespace    localhost
// @version      0.4b
// @description  Adds charts to the mturk dashboard
// @match        https://www.mturk.com/mturk/dashboard
// @require      http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.js
// @require		 http://cdnjs.cloudflare.com/ajax/libs/moment.js/2.7.0/moment.min.js
// @require		 http://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.2.0/moment-timezone.min.js
// @require      http://cdn.jsdelivr.net/jqplot/1.0.8/jquery.jqplot.js
// @require      http://cdn.jsdelivr.net/jqplot/1.0.8/plugins/jqplot.pieRenderer.js
// @require      http://cdn.jsdelivr.net/jqplot/1.0.8/plugins/jqplot.dateAxisRenderer.min.js
// @require      http://cdn.jsdelivr.net/jqplot/1.0.8/plugins/jqplot.canvasAxisTickRenderer.js
// @require      http://cdn.jsdelivr.net/jqplot/1.0.8/plugins/jqplot.canvasAxisLabelRenderer.js
// @require      http://cdn.jsdelivr.net/jqplot/1.0.8/plugins/jqplot.canvasTextRenderer.js
// @require      http://cdn.jsdelivr.net/jqplot/1.0.8/plugins/jqplot.categoryAxisRenderer.js
// @require      http://cdn.jsdelivr.net/jqplot/1.0.8/plugins/jqplot.barRenderer.js
// @require      http://cdn.jsdelivr.net/jqplot/1.0.8/plugins/jqplot.pointLabels.js
// @resource     jqplot http://cdn.jsdelivr.net/jqplot/1.0.8/jquery.jqplot.css
// @grant        GM_addStyle
// @grant		 GM_getResourceText
// @run-at       document-end
// @copyright    2014+, DeliriumTremens
// ==/UserScript==

var jqplotCSS = GM_getResourceText("jqplot");
GM_addStyle(jqplotCSS);


// Display dollar and hit count charts
moment.tz.add('America/Los_Angeles|PST PDT|80 70|0101|1Lzm0 1zb0 Op0'); // Add Amazon timezone to moment.js

var dates = [];
$('a[href*="statusdetail"]').each( function () {
    dates.push($(this).attr('href'));
});
 
var HITStorage = {};
HITStorage.indexedDB = {};
HITStorage.indexedDB.db = null;
 
var curr = new Date();
var firstday = new Date(curr.setDate(curr.getDate() - curr.getDay()));
var secondday = new Date(curr.setDate(curr.getDate() - curr.getDay()));
var thirdday = new Date(curr.setDate(curr.getDate() - curr.getDay()));
var fourthday = new Date(curr.setDate(curr.getDate() - curr.getDay()));
var fifthday = new Date(curr.setDate(curr.getDate() - curr.getDay()));
var sixthday = new Date(curr.setDate(curr.getDate() - curr.getDay()));
var seventhday = new Date(curr.setDate(curr.getDate() - curr.getDay()));

/*console.log(firstday.toLocaleDateString({timeZone: 'America/Los_Angeles'}).replace(/\//g, '-')); // Convert date to usable string */

secondday.setDate(secondday.getDate() + 1);
thirdday.setDate(thirdday.getDate() + 2);
fourthday.setDate(fourthday.getDate() + 3);
fifthday.setDate(fifthday.getDate() + 4);
sixthday.setDate(sixthday.getDate() + 5);
seventhday.setDate(seventhday.getDate() + 6);

firstdy = (firstday.getFullYear()+ '-' + ('0' + (firstday.getMonth()+1)).slice(-2) + '-' + ('0' + (firstday.getDate())).slice(-2));
seconddy = (secondday.getFullYear()+ '-' + ('0' + (secondday.getMonth()+1)).slice(-2) + '-' + ('0' + (secondday.getDate())).slice(-2));
thirddy = (thirdday.getFullYear()+ '-' + ('0' + (thirdday.getMonth()+1)).slice(-2) + '-' + ('0' + (thirdday.getDate())).slice(-2));
fourthdy = (fourthday.getFullYear()+ '-' + ('0' + (fourthday.getMonth()+1)).slice(-2) + '-' + ('0' + (fourthday.getDate())).slice(-2));
fifthdy = (fifthday.getFullYear()+ '-' + ('0' + (fifthday.getMonth()+1)).slice(-2) + '-' + ('0' + (fifthday.getDate())).slice(-2));
sixthdy = (sixthday.getFullYear()+ '-' + ('0' + (sixthday.getMonth()+1)).slice(-2) + '-' + ('0' + (sixthday.getDate())).slice(-2));
seventhdy = (seventhday.getFullYear()+ '-' + ('0' + (seventhday.getMonth()+1)).slice(-2) + '-' + ('0' + (seventhday.getDate())).slice(-2));
 
var hitMeter = {};
hitMeter[firstdy.toString()] = 0;
hitMeter[seconddy.toString()] = 0;
hitMeter[thirddy.toString()] = 0;
hitMeter[fourthdy.toString()] = 0;
hitMeter[fifthdy.toString()] = 0;
hitMeter[sixthdy.toString()] = 0;
hitMeter[seventhdy.toString()] = 0;
 
var hitCounter = {};
hitCounter[firstdy.toString()] = 0;
hitCounter[seconddy.toString()] = 0;
hitCounter[thirddy.toString()] = 0;
hitCounter[fourthdy.toString()] = 0;
hitCounter[fifthdy.toString()] = 0;
hitCounter[sixthdy.toString()] = 0;
hitCounter[seventhdy.toString()] = 0;
 
function HITpull() {
        var request = indexedDB.open("HITDB", 4);
        request.onsuccess = function(e) {
                HITStorage.indexedDB.db = e.target.result;
                var db = HITStorage.indexedDB.db;
        var results = [];
        var tmp_results = {};
                var transaction = db.transaction('HIT','readonly');
                var store = transaction.objectStore('HIT');
                var index = store.index('date');
                var range = IDBKeyRange.bound(firstdy, seventhdy, false, false);
                index.openCursor(range).onsuccess = function(event) {
                        var cursor = event.target.result;
                        if (cursor) {
                                var hit = cursor.value;
                                if (tmp_results[hit.date] === undefined) {
                                        tmp_results[hit.date] = [];
                                        tmp_results[hit.date][0] = hit.reward;
                                        tmp_results[hit.date][1] = 1;
                    tmp_results[hit.date][2] = hit.date;
                                        }
                                else if (hit.status === 'Rejected'){}
                                else {
                                        tmp_results[hit.date][0] += hit.reward;
                                        tmp_results[hit.date][1] += 1;
                    tmp_results[hit.date][2] = hit.date;
                                        }
                                cursor.continue();
                        }
                        else {
                                for (var key in tmp_results) {
                                results.push(tmp_results[key]);
                                }
                printHitCount(results);
                                printDollarCount(results);
                        }
                db.close();
                };
                request.onerror = HITStorage.indexedDB.onerror;
        };
}
 
function printHitCount (results) {
        $(".container-content:eq(1)").append('<div id="hitCount" style="height:200px;width:350px;float:left;"></div>');
        for (var key in results) {
                hitMeter[results[key][2]] += results[key][1];
        };
        var ticks = ['Sun','Mon','Tue','Wed','Thur','Fri','Sat'];
        var plot2 = $.jqplot('hitCount', [[hitMeter[firstdy.toString()],hitMeter[seconddy.toString()],hitMeter[thirddy.toString()],hitMeter[fourthdy.toString()],hitMeter[fifthdy.toString()],
                                      hitMeter[sixthdy.toString()],hitMeter[seventhdy.toString()]]], {
        animate: !$.jqplot.use_excanvas,
                seriesDefaults:{
                        renderer:$.jqplot.BarRenderer,
                        rendererOptions: {fillToZero: true},
            pointLabels: {
                show: true,
                hideZeros: true,
                location: 'n',
                ypadding: 1
            }
                },
                series:[
                        {label:firstdy.toString()},
                        {label:seconddy.toString()},
                        {label:thirddy.toString()},
                        {label:fourthdy.toString()},
                        {label:fifthdy.toString()},
            {label:sixthdy.toString()},
            {label:seventhdy.toString()}
                ],
                title: {
                        text: 'Daily Count (Current Week)',
                        fontFamily: '"Trebuchet MS", Arial, Helvetica, sans-serif',
                        fontSize: '10pt',
                        textColor: '#666666'
                },
                axes: {
                        xaxis: {
                                tickRenderer: $.jqplot.CanvasAxisTickRenderer ,
                                tickOptions: {
                                        //angle: -15,
                                        fontSize: '8pt',
                    showGridline: false,
                    formatString: '%a'
                                },
                                renderer: $.jqplot.CategoryAxisRenderer,
                                ticks: ticks
                        },
                        yaxis: {
                                tickRenderer: $.jqplot.CanvasAxisTickRenderer ,
                                tickOptions: {
                                        fontSize: '8pt',
                                        markSize: '0'
                                },
                                pad: 1.2,
                                min: 0
                        }
                }
        });
    var imgData = $('#hitCount').jqplotToImageStr({});
    $('#hitCount').on('click',function () {
             $.ajax({
                        url: 'https://api.imgur.com/3/image',
                        headers: {
                                'Authorization': 'Client-ID 6ebabcf714f0bb3'
                        },
                        type: 'POST',
                        data: {
                                'image': imgData.substr(22)
                        },
                        success: function(response) { prompt("Copy to clipboard: Ctrl+C, Enter", response.data.link); }
             });  
        });
};
 
function printDollarCount (results) {
        $(".container-content:eq(1)").append('<div id="dollarCount" style="height:200px;width:350px;float:right;"></div>');
        for (var key in results) {
                hitCounter[results[key][2]] += results[key][0];;
        };
        var ticks = ['Sun','Mon','Tue','Wed','Thur','Fri','Sat'];
        var plot2 = $.jqplot('dollarCount', [[hitCounter[firstdy.toString()],hitCounter[seconddy.toString()],hitCounter[thirddy.toString()],hitCounter[fourthdy.toString()],
                                          hitCounter[fifthdy.toString()],hitCounter[sixthdy.toString()],hitCounter[seventhdy.toString()]]], {
        animate: !$.jqplot.use_excanvas,
                seriesDefaults:{
                        renderer:$.jqplot.BarRenderer,
                        rendererOptions: {fillToZero: true},
            pointLabels: {
                show: true,
                hideZeros: true,
                location: 'n',
                formatString: '$%#.2f',
                ypadding: 1
            }
                },
                series:[
                        {label:firstdy.toString()},
                        {label:seconddy.toString()},
                        {label:thirddy.toString()},
                        {label:fourthdy.toString()},
                        {label:fifthdy.toString()},
            {label:sixthdy.toString()},
            {label:seventhdy.toString()}
                ],
                title: {
                        text: 'Daily Earnings (Current Week)',
                        fontFamily: '"Trebuchet MS", Arial, Helvetica, sans-serif',
                        fontSize: '10pt',
                        textColor: '#666666'
                },
                axes: {
                        xaxis: {
                                tickRenderer: $.jqplot.CanvasAxisTickRenderer ,
                                tickOptions: {
                                        //angle: -15,
                                        fontSize: '8pt',
                    showGridline: false
                                },
                                renderer: $.jqplot.CategoryAxisRenderer,
                                ticks: ticks
                        },
                        yaxis: {
                                tickRenderer: $.jqplot.CanvasAxisTickRenderer ,
                                tickOptions: {
                                        fontSize: '8pt',
                                        prefix: '$',
                                        markSize: '0'
                                },
                                pad: 1.2,
                                min: 0
                        }
                }
        });
    var imgData = $('#dollarCount').jqplotToImageStr({});
    $('#dollarCount').on('click',function () {
             $.ajax({
                        url: 'https://api.imgur.com/3/image',
                        headers: {
                                'Authorization': 'Client-ID 6ebabcf714f0bb3'
                        },
                        type: 'POST',
                        data: {
                                'image': imgData.substr(22)
                        },
                        success: function(response) { prompt("Copy to clipboard: Ctrl+C, Enter", response.data.link); }
             });  
        });
}
 
HITpull();