- // ==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();