Mturk Dashboard

Modifies the MTurk dashboard.

目前为 2017-07-29 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Mturk Dashboard
  3. // @namespace http://kadauchi.com/
  4. // @version 1.7.4
  5. // @description Modifies the MTurk dashboard.
  6. // @author Kadauchi
  7. // @icon http://kadauchi.com/avatar1.jpg
  8. // @include https://www.mturk.com/mturk/dashboard*
  9. // @grant GM_log
  10. // @grant GM_setClipboard
  11. // @require https://code.jquery.com/jquery-3.0.0-beta1.min.js
  12. // ==/UserScript==
  13.  
  14. var LOADED = $("#total_earnings_amount").length;
  15. if (LOADED){
  16.  
  17. // Functions that can be commented out if you don't want it to run.
  18. Todays_Projected_Earnings();
  19. Todays_Bonuses();
  20. Best_Worst_Case();
  21. Real_Stats();
  22. Changes();
  23. Yearly();
  24. Goal();
  25.  
  26. }
  27.  
  28. // Don't touch anything below here.
  29. function Todays_Projected_Earnings(){
  30. var TPEhitLOG = {}; var TPEdetailsLOG = {}; var pe = 0;
  31.  
  32. var today = $("a[href^='/mturk/statusdetail?encodedDate']:contains(Today)").eq(0).prop("href");
  33.  
  34. var $peTR = $('<div id="TPE_div" class="even" style="display:table-row">');
  35. var $peTD1 = $('<td class="metrics-table-first-value">');
  36. var $peTD2 = $('<td>');
  37. var $peA = $('<a href="javascript:void(0)">Today\'s Projected Earnings</a>');
  38. var $TPE_details = $('<span style="color: blue; font-size: 10px; cursor: pointer; float: right;">Details<img style="margin-left: 5px;" src="/media/more.gif" border="0/"></span>');
  39. var $peSPAN = $('<span class="reward">$0.00</span>');
  40. $("td.metrics-table-first-value:contains(Total Earnings)").parent().after($peTR);
  41. $peTR.append($peTD1.append($peA,$TPE_details),$peTD2.append($peSPAN));
  42.  
  43. var $TPED_table = $('<table style="display: none;" width="760" align="center" cellspacing="0" cellpadding="0">');
  44. var $TPED_tboday = $('<tbody>');
  45. var $TPED_tr_1 = $('<tr id="TPE_tr" height="25px"><td width="10" bgcolor="#7fb4cf" style="padding-left: 10px;"></td><td width="100%" bgcolor="#7fb4cf" class="white_text_14_bold">Today\'s Projected Earnings Details&nbsp;&nbsp;<a id="fourmEXPORT" href="javascript:void(0)" class="whatis" >(Forum Export)</a></td><td width="10" align="right" bgcolor="#7fb4cf"></td></tr>');
  46. var $TPED_tr_2 = $('<tr><td class="container-content" colspan="3"><table class="metrics-table" width="100%"><tbody><tr><td width="100%"><table class="metrics-table" width="100%"><tbody id="tbody2"></tbody></table></td></tr></tbody></table></td></tr>');
  47. var $TPED_tr_h = $('<tr class="metrics-table-header-row"><th class="metrics-table-first-header">Requester</th><th>Submitted</th><th>Projected</th></tr>');
  48.  
  49. $("#subtabs_and_searchbar").next().next().after($TPED_table);
  50. $TPED_table.append($TPED_tboday);
  51. $TPED_tboday.append($TPED_tr_1,$TPED_tr_2);
  52. $("#tbody2").append($TPED_tr_h);
  53.  
  54. $("#fourmEXPORT").click(function(){
  55. var exportcode = "";
  56. var bonus = $("#bonus").text();
  57. if (bonus !== "$0.00"){
  58. var total = (Number(pe)+Number(bonus.replace(/[^0-9.]/g, ""))).toFixed(2);
  59. exportcode += "[b]Today's Projected Earnings: $"+Number(pe).toFixed(2)+" + Bonuses: "+bonus+" = $"+total+"[/b]\n";
  60.  
  61. }
  62. else {
  63. exportcode += "[b]Today's Projected Earnings: $"+Number(pe).toFixed(2)+"[/b]\n";
  64. }
  65.  
  66. var today_submitted = $("a[href^='/mturk/statusdetail?encodedDate']:contains(Today)").eq(0).parent().next().text();
  67. var today_approved = $("a[href^='/mturk/statusdetail?encodedDate']:contains(Today)").eq(0).parent().next().next().text();
  68. var today_rejected = $("a[href^='/mturk/statusdetail?encodedDate']:contains(Today)").eq(0).parent().next().next().next().text();
  69. var today_pending = $("a[href^='/mturk/statusdetail?encodedDate']:contains(Today)").eq(0).parent().next().next().next().next().text();
  70.  
  71.  
  72. exportcode +=
  73. '[spoiler=Today\'s Projected Earnings Overview][table]' +
  74. '[tr][td]Submitted[/td][td]' + today_submitted + '[/td][/tr]' +
  75. '[tr][td]Approved[/td][td]' + today_approved + '[/td][/tr]' +
  76. '[tr][td]Rejected[/td][td]' + today_rejected + '[/td][/tr]' +
  77. '[tr][td]Pending[/td][td]' + today_pending + '[/td][/tr]' +
  78. '[/table][/spoiler]';
  79.  
  80.  
  81. GM_setClipboard(exportcode);
  82. alert("Forum Export copied to your clipboard.");
  83. });
  84.  
  85. $peA.click(function(){
  86. if ($peA.text() === "Today's Projected Earnings"){
  87. var confirmation = confirm("Are you sure you want to recalculate Today's Projected Earnings?");
  88. if (confirmation === true){
  89. TPEhitLOG = {}; TPEdetailsLOG = {}; pe = 0;
  90. $("#tbody2").find("tr.odd, tr.even").remove();
  91. getDATA(today);
  92. $peSPAN.text("$0.00");
  93. }
  94. }
  95. });
  96.  
  97. $TPE_details.click(function(){
  98. $TPE_details.find("img").attr("src", ($TPE_details.find("img").attr("src") === "/media/more.gif") ? "/media/less.gif" : "/media/more.gif");
  99. $TPED_table.toggle();
  100. });
  101.  
  102. if (today){
  103. var date = today.split("encodedDate=")[1];
  104. if (date === localStorage.TPE_date){
  105. if (localStorage.TPEhitLOG){
  106. TPEhitLOG = JSON.parse(localStorage.TPEhitLOG);
  107. }
  108. pe = Number(localStorage.TPE_pe) || 0;
  109. $peSPAN.text("$"+Number(pe).toFixed(2));
  110. getDATA(localStorage.TPE_lastpage);
  111. }
  112. else {
  113. localStorage.TPE_date = date;
  114. localStorage.Goal_progress = 0;
  115. TPEhitLOG = {}; pe = 0;
  116. $peSPAN.text("$0.00");
  117. getDATA(today);
  118. }
  119. }
  120.  
  121. function getDATA(URL){
  122. var page = URL.match(/Number=([0-9]*)/g);
  123. if (page){
  124. $peA.text("Calculating Page "+page.toString().replace(/[^0-9.]/g, ""));
  125. }
  126. else {
  127. localStorage.removeItem("TPEhitLOG");
  128. localStorage.Goal_progress = 0;
  129. $peA.text("Calculating Page 1");
  130. }
  131.  
  132. $.get(URL, function(data){
  133. var $data = $(data);
  134. var $hits = $data.find("#dailyActivityTable").find("tr[valign='top']");
  135. var pagereqerr = $data.find("td.error_title:contains(You have exceeded the maximum allowed page request rate for this website.)").length;
  136. var noactivity = $data.find("#dailyActivityTable").find("td:contains(You have no HIT activity on this day matching the selected status.)").length;
  137. if ($hits.length){
  138. console.log("hit length");
  139. var url = $data.find("a:contains(Next)[href*=statusdetail]").eq(0).prop("href");
  140. for (var i = 0; i < $hits.length; i++){
  141. var req = $hits.eq(i).find("td.statusdetailRequesterColumnValue").text().trim();
  142. var title = $hits.eq(i).find("td.statusdetailTitleColumnValue").text().trim();
  143. var reward = $hits.eq(i).find("td.statusdetailAmountColumnValue").text().trim();
  144. var status = $hits.eq(i).find("td.statusdetailStatusColumnValue").text().trim();
  145. var reqid = $hits.eq(i).find("a").prop("href").split("requesterId=")[1].split("&")[0];
  146. var hitid = $hits.eq(i).find("a").prop("href").split("HIT+")[1];
  147.  
  148. if (!TPEhitLOG[hitid]){
  149. TPEhitLOG[hitid] = {
  150. req : req,
  151. title : title,
  152. reward : reward,
  153. status : status,
  154. reqid : reqid,
  155. hitid : hitid
  156. };
  157. }
  158. }
  159. if (url){
  160. getDATA(url);
  161. }
  162. else {
  163. pe = 0;
  164. for(var key in TPEhitLOG){
  165. if (TPEhitLOG[key].status !== "Rejected"){
  166. pe += parseFloat(TPEhitLOG[key].reward.replace(/[^0-9.]/g, ""));
  167. }
  168. if (!TPEdetailsLOG[TPEhitLOG[key].reqid]){
  169. TPEdetailsLOG[TPEhitLOG[key].reqid] = {
  170. req : TPEhitLOG[key].req,
  171. submit : 1,
  172. reward : parseFloat(TPEhitLOG[key].reward.replace(/[^0-9.]/g, "")),
  173. reqid : TPEhitLOG[key].reqid
  174. };
  175. }
  176. else {
  177. TPEdetailsLOG[TPEhitLOG[key].reqid].submit = TPEdetailsLOG[TPEhitLOG[key].reqid].submit + 1;
  178. TPEdetailsLOG[TPEhitLOG[key].reqid].reward = TPEdetailsLOG[TPEhitLOG[key].reqid].reward + parseFloat(TPEhitLOG[key].reward.replace(/[^0-9.]/g, ""));
  179. }
  180. }
  181.  
  182. if (!TPEdetailsLOG.bonuses && $("#bonus").length){
  183. TPEdetailsLOG.bonuses = {
  184. req : "Bonuses",
  185. submit : "N/A",
  186. reward : parseFloat($("#bonus").text().replace(/[^0-9.]/g, "")),
  187. reqid : "N/A"
  188. };
  189. }
  190. else if ($("#bonus").length){
  191. TPEdetailsLOG.bonuses.reward = parseFloat($("#bonus").text().replace(/[^0-9.]/g, ""));
  192. }
  193.  
  194. var d_sorted = Object.keys(TPEdetailsLOG).sort(function(a,b){return TPEdetailsLOG[a].reward - TPEdetailsLOG[b].reward;});
  195. var oddeven = true;
  196. for (var j = d_sorted.length-1; j > -1; j--){
  197. var dkey = d_sorted[j];
  198. var d_req = TPEdetailsLOG[dkey].req;
  199. var d_submitted = TPEdetailsLOG[dkey].submit;
  200. var d_reward = Number(TPEdetailsLOG[dkey].reward).toFixed(2);
  201. if (oddeven){
  202. oddeven = false;
  203. $("#tbody2").append('<tr class="odd"><td class="metrics-table-first-value">'+d_req+'</td><td>'+d_submitted+'</td><td><span class="reward">$'+d_reward+'</span></td></tr>');
  204. }
  205. else {
  206. oddeven = true;
  207. $("#tbody2").append('<tr class="even"><td class="metrics-table-first-value">'+d_req+'</td><td>'+d_submitted+'</td><td><span class="reward">$'+d_reward+'</span></td></tr>');
  208. }
  209. }
  210. localStorage.TPEhitLOG = JSON.stringify(TPEhitLOG);
  211. localStorage.TPE_lastpage = URL;
  212. localStorage.TPE_pe = pe;
  213. $peA.text("Today's Projected Earnings");
  214. $peSPAN.text("$"+Number(pe).toFixed(2));
  215. localStorage.Goal_percent = ((Number(localStorage.TPE_pe)/Number(localStorage.Goal_goal))*100);
  216. localStorage.Goal_progress = Number(pe)-Number(localStorage.Goal_goal);
  217. if ($("#goalDIV").length){
  218. $("#progress").width(Number(localStorage.Goal_percent)+"%");
  219. $("#progressper").text(Number(localStorage.Goal_progress).toFixed(2));
  220. }
  221. Unsynced();
  222. }
  223. }
  224. else if (noactivity){
  225. console.log("no activity");
  226. localStorage.TPE_lastpage = URL;
  227. localStorage.TPE_pe = 0;
  228. localStorage.Goal_progress = 0;
  229. $peA.text("Today's Projected Earnings");
  230. $peSPAN.text("$0.00");
  231. }
  232. else if (pagereqerr) {
  233. console.log("set timeout");
  234. setTimeout(function(){ getDATA(URL); }, 2000);
  235. }
  236. });
  237. }
  238.  
  239. function Unsynced(){
  240. var hitscalced = Object.keys(TPEhitLOG).length;
  241. var submitted = Number($("a[href^='/mturk/statusdetail?encodedDate']:contains(Today)").eq(0).parent().next().text());
  242.  
  243. if (hitscalced < submitted){
  244. $peSPAN.css({backgroundColor:"red"});
  245. }
  246. else {
  247. $peSPAN.css({backgroundColor:""});
  248. }
  249. }
  250. }
  251.  
  252. function Goal(){
  253. if (!localStorage.Goal_percent){
  254. localStorage.Goal_percent = 0;
  255. }
  256. if (!localStorage.Goal_progress){
  257. localStorage.Goal_progress = 0;
  258. }
  259. if (!localStorage.Goal_goal){
  260. localStorage.Goal_goal = 25.00;
  261. }
  262. if ($("#bonusDIV").length){
  263. var $goalDIV0 = $('<div id="goalDIV" class="even" style="display:table-row">');
  264. $($goalDIV0).append('<td class="metrics-table-first-value"><div id="progressbar" style="width: 100%; height: 7px; border: 1px solid #7fb4cf; border-radius: 3px; overflow: hidden; margin-top: 3px; text-align: center; -webkit-user-select: none; -moz-user-select: none;"><div id="progress" style="height: 100%; background-color: #7fb4cf; -webkit-user-select: none; -moz-user-select: none;"></div></div></td><td><span id="progressper" class="reward">0%</span></td>');
  265. $("#bonusDIV").after($goalDIV0);
  266. }
  267. else {
  268. var $goalDIV1 = $('<div id="goalDIV" class="odd" style="display:table-row">');
  269. $($goalDIV1).append('<td class="metrics-table-first-value"><div id="progressbar" style="width: 100%; height: 7px; border: 1px solid #7fb4cf; border-radius: 3px; overflow: hidden; margin-top: 3px; text-align: center; -webkit-user-select: none; -moz-user-select: none;"><div id="progress" style="height: 100%; background-color: #7fb4cf; -webkit-user-select: none; -moz-user-select: none;"></div></div></td><td><span id="progressper" class="reward">0%</span></td>');
  270. $("#TPE_div").after($goalDIV1);
  271. }
  272.  
  273. $("#progress").width(Number(localStorage.Goal_percent)+"%");
  274. $("#progressper").text(Number(localStorage.Goal_progress).toFixed(2));
  275.  
  276. $("#progressbar").dblclick(function(e){
  277. e.preventDefault();
  278. var goal = prompt("Please enter your goal", localStorage.Goal_goal);
  279. if (goal !== null) {
  280. localStorage.Goal_goal = goal.replace(/[^0-9.]/g, "");
  281. localStorage.Goal_percent = ((Number(localStorage.TPE_pe)/Number(localStorage.Goal_goal))*100);
  282. localStorage.Goal_progress = Number(localStorage.TPE_pe)-Number(localStorage.Goal_goal);
  283. $("#progress").width(Number(localStorage.Goal_progress)+"%");
  284. $("#progressper").text(Number(localStorage.Goal_progress).toFixed(2));
  285. }
  286. });
  287. }
  288.  
  289. function Todays_Bonuses(){
  290. var today = $("a[href^='/mturk/statusdetail?encodedDate']:contains(Today)").eq(0).prop("href");
  291.  
  292. var $bonusDIV = $('<div id="bonusDIV" class="odd" style="display:table-row">');
  293. $($bonusDIV).append('<td class="metrics-table-first-value"><a href="javascript:void(0)">Today\'s Bonuses</a></td><td><span id="bonus" class="reward">$0.00</span></td>');
  294. $("#TPE_div").after($bonusDIV);
  295.  
  296. if (today){
  297. var date = today.split("encodedDate=")[1];
  298. if (date === localStorage.TB_date){
  299. if (!localStorage.today_start_bonuses){
  300. localStorage.today_start_bonuses = Number($("#bonus_earnings_amount").text().replace(/[^0-9.]/g, ""));
  301. }
  302. Bonuses(localStorage.today_start_bonuses);
  303. }
  304. else {
  305. var today_approved = Number($("a[href^='/mturk/statusdetail?encodedDate']:contains(Today)").eq(0).parent().next().next().text());
  306. if (today_approved === 0){
  307. localStorage.today_start_bonuses = (Number($("#bonus_earnings_amount").text().replace(/[^0-9.]/g, ""))-Number($("a[href^='/mturk/statusdetail?encodedDate']:contains(Today)").eq(0).parent().next().next().next().next().next().text().replace(/[^0-9.]/g, "")));
  308. }
  309. else {
  310. localStorage.today_start_bonuses = Number($("#bonus_earnings_amount").text().replace(/[^0-9.]/g, ""));
  311. }
  312. localStorage.TB_date = date;
  313. Bonuses(localStorage.today_start_bonuses);
  314. }
  315. }
  316.  
  317. function Bonuses(starting_bonus){
  318. var total_bonuses = $("#bonus_earnings_amount").text().replace(/[^0-9.]/g, "");
  319. $("#bonus").text("$"+(Math.round((Number(total_bonuses)-Number(starting_bonus))*100)/100).toFixed(2));
  320. }
  321. }
  322.  
  323. function Real_Stats(){
  324. var approved = Number($("td.metrics-table-first-value:contains(... Approved)").next().text());
  325. var rejected = Number($("td.metrics-table-first-value:contains(... Rejected)").next().text());
  326.  
  327. $("td.metrics-table-first-value:contains(... Approved)").next().next().text(Math.round(((approved)/(approved+rejected))*1000000)/10000+"%");
  328. $("td.metrics-table-first-value:contains(... Rejected)").next().next().text(Math.round(((rejected)/(approved+rejected))*1000000)/10000+"%");
  329. }
  330.  
  331. function Best_Worst_Case(){
  332. var submitted = Number($("td.metrics-table-first-value:contains(HITs Submitted)").next().text());
  333. var rejected = Number($("td.metrics-table-first-value:contains(... Rejected)").next().text());
  334. var approved = Number($("td.metrics-table-first-value:contains(... Approved)").next().text());
  335. var pending = Number($("td.metrics-table-first-value:contains(... Pending)").next().text());
  336.  
  337. var $under99 = $('<span style="color: orange;"> ('+Math.round((rejected-((1.0 - 99/100)*submitted))/((1.0 - 99/100)-1))+' ≥ 99%)</span>');
  338. var $under95 = $('<span style="color: red;"> ('+Math.round((rejected-((1.0 - 95/100)*submitted))/((1.0 - 95/100)-1))+' ≥ 95%)</span>');
  339. var $worst = $('<span style="color: red;">\n'+Math.round(approved/(approved+rejected+pending) * 1000000)/10000+'%</span>');
  340.  
  341. $("td.metrics-table-first-value:contains(... Pending)").append($under99,$under95);
  342. $("td.metrics-table-first-value:contains(... Pending)").next().next().text(Math.round(((submitted-rejected)/submitted)*1000000)/10000+"%").css({"color": "green"}).append($worst);
  343. }
  344.  
  345. function Changes(){
  346. var today = $("a[href^='/mturk/statusdetail?encodedDate']:contains(Today)").eq(0).prop("href");
  347.  
  348. if (today){
  349. var date = today.split("encodedDate=")[1];
  350. if (date !== localStorage.Changes_date){
  351. localStorage.Changes_date = date;
  352. localStorage.today_submitted = 0;
  353. localStorage.today_approved = 0;
  354. localStorage.today_rejected = 0;
  355. localStorage.today_pending = 0;
  356. }
  357. }
  358.  
  359. var earnings_hits = Number($("#approved_hits_earnings_amount").text().replace(/[^0-9.]/g, ""));
  360. var earnings_bonuses = Number($("#bonus_earnings_amount").text().replace(/[^0-9.]/g, ""));
  361. var earnings_total = Number($("#total_earnings_amount").text().replace(/[^0-9.]/g, ""));
  362. var earnings_transfer = Number($("#transfer_earnings").text().replace(/[^0-9.]/g, ""));
  363. var hits_submitted = Number($("td.metrics-table-first-value:contains(HITs Submitted)").next().text());
  364. var hits_approved = Number($("td.metrics-table-first-value:contains(... Approved)").next().text());
  365. var hits_rejected = Number($("td.metrics-table-first-value:contains(... Rejected)").next().text());
  366. var hits_pending = Number($("td.metrics-table-first-value:contains(... Pending)").next().text());
  367. var today_submitted = Number($("a[href^='/mturk/statusdetail?encodedDate']:contains(Today)").eq(0).parent().next().text());
  368. var today_approved = Number($("a[href^='/mturk/statusdetail?encodedDate']:contains(Today)").eq(0).parent().next().next().text());
  369. var today_rejected = Number($("a[href^='/mturk/statusdetail?encodedDate']:contains(Today)").eq(0).parent().next().next().next().text());
  370. var today_pending = Number($("a[href^='/mturk/statusdetail?encodedDate']:contains(Today)").eq(0).parent().next().next().next().next().text());
  371.  
  372. if (Number(localStorage.earnings_hits) !== earnings_hits){
  373. $("#approved_hits_earnings_amount").prev().append('<span id="earnings_hits" style="float:right;">+$'+(Math.round((earnings_hits-Number(localStorage.earnings_hits))*100)/100).toFixed(2)+'</span>');
  374. localStorage.earnings_hits = earnings_hits;
  375. }
  376. if (Number(localStorage.earnings_bonuses) !== earnings_bonuses){
  377. $("#bonus_earnings_amount").prev().append('<span id="earnings_bonuses" style="float:right;">+$'+(Math.round((earnings_bonuses-Number(localStorage.earnings_bonuses))*100)/100).toFixed(2)+'</span>');
  378. localStorage.earnings_bonuses = earnings_bonuses;
  379. }
  380. if (Number(localStorage.earnings_total) !== earnings_total){
  381. $("#total_earnings_amount").prev().append('<span id="earnings_total" style="float:right;">+$'+(Math.round((earnings_total-Number(localStorage.earnings_total))*100)/100).toFixed(2)+'</span>');
  382. localStorage.earnings_total = earnings_total;
  383. }
  384. if (Number(localStorage.earnings_transfer) !== earnings_transfer){
  385. if (Number(localStorage.earnings_transfer) > earnings_transfer){
  386. $("#transfer_earnings").prev().append('<span id="earnings_transfer" style="float:right;">-$'+(Math.round((Number(localStorage.earnings_transfer)-earnings_transfer)*100)/100).toFixed(2)+'</span>');
  387. }
  388. else {
  389. $("#transfer_earnings").prev().append('<span id="earnings_transfer" style="float:right;">+$'+(Math.round((earnings_transfer-Number(localStorage.earnings_transfer))*100)/100).toFixed(2)+'</span>');
  390. }
  391. localStorage.earnings_transfer = earnings_transfer;
  392. }
  393. if (Number(localStorage.hits_submitted) !== hits_submitted){
  394. $("td.metrics-table-first-value:contains(HITs Submitted)").append('<span id="hits_submitted" style="float:right;">+'+(hits_submitted-Number(localStorage.hits_submitted))+'</span>');
  395. localStorage.hits_submitted = hits_submitted;
  396. }
  397. if (Number(localStorage.hits_approved) !== hits_approved){
  398. $("td.metrics-table-first-value:contains(... Approved)").append('<span id="hits_approved" style="float:right;">+'+(hits_approved-Number(localStorage.hits_approved))+'</span>');
  399. localStorage.hits_approved = hits_approved;
  400. }
  401. if (Number(localStorage.hits_rejected) !== hits_rejected){
  402. $("td.metrics-table-first-value:contains(... Rejected)").append('<span id="hits_rejected" style="float:right;">+'+(hits_rejected-Number(localStorage.hits_rejected))+'</span>');
  403. localStorage.hits_rejected = hits_rejected;
  404. }
  405. if (Number(localStorage.hits_pending) !== hits_pending){
  406. if (Number(localStorage.hits_pending) > hits_pending){
  407. $("td.metrics-table-first-value:contains(... Pending)").append('<span id="hits_pending" style="float:right;">-'+(Number(localStorage.hits_pending)-hits_pending)+'</span>');
  408. }
  409. else {
  410. $("td.metrics-table-first-value:contains(... Pending)").append('<span id="hits_pending" style="float:right;">+'+(hits_pending-Number(localStorage.hits_pending))+'</span>');
  411. }
  412. localStorage.hits_pending = hits_pending;
  413. }
  414. if (Number(localStorage.today_submitted) !== today_submitted){
  415. $("a[href^='/mturk/statusdetail?encodedDate']:contains(Today)").eq(0).parent().next().append('<span id="today_submitted" style="float:left;">+'+(today_submitted-Number(localStorage.today_submitted))+'</span>');
  416. localStorage.today_submitted = today_submitted;
  417. }
  418. if (Number(localStorage.today_approved) !== today_approved){
  419. $("a[href^='/mturk/statusdetail?encodedDate']:contains(Today)").eq(0).parent().next().next().append('<span id="today_approved" style="float:left;">+'+(today_approved-Number(localStorage.today_approved))+'</span>');
  420. localStorage.today_approved = today_approved;
  421. }
  422. if (Number(localStorage.today_rejected) !== today_rejected){
  423. $("a[href^='/mturk/statusdetail?encodedDate']:contains(Today)").eq(0).parent().next().next().next().append('<span id="today_rejected" style="float:left;">+'+(today_rejected-Number(localStorage.today_rejected))+'</span>');
  424. localStorage.today_rejected = today_rejected;
  425. }
  426. if (Number(localStorage.today_pending) !== today_pending){
  427. if (Number(localStorage.today_pending) > today_pending){
  428. $("a[href^='/mturk/statusdetail?encodedDate']:contains(Today)").eq(0).parent().next().next().next().next().append('<span id="today_pending" style="float:left;">-'+(Number(localStorage.today_pending)-today_pending)+'</span>');
  429. }
  430. else {
  431. $("a[href^='/mturk/statusdetail?encodedDate']:contains(Today)").eq(0).parent().next().next().next().next().append('<span id="today_pending" style="float:left;">+'+(today_pending-Number(localStorage.today_pending))+'</span>');
  432. }
  433. localStorage.today_pending = today_pending;
  434. }
  435. }
  436.  
  437. function Yearly(){
  438. var totalearnings = Number($("#total_earnings_amount").text().replace(/[^0-9.]/g, ""));
  439. var $reward = $("#table_yearly_earnings").find("span.reward");
  440.  
  441. for (var i = 0; i < $reward.length; i++){
  442. totalearnings -= Number($reward.eq(i).text().replace(/[^0-9.]/g, ""));
  443. }
  444.  
  445. var earnings2016 = Number((totalearnings).toFixed(2)).toLocaleString("en");
  446.  
  447. var $thisyear = $('<tr class="odd"><td class="metrics-table-first-value">2017</td><td id="yearly_earnings_amount"><span class="reward">$'+earnings2016+'</span></td></tr>');
  448. $("#table_yearly_earnings").find("tr.metrics-table-header-row").after($thisyear);
  449. }
  450.  
  451. function Hide_HIT_DB(pending, PEday, PEweek){
  452. var tbody = $("#approved_hits_earnings_amount").parent().parent().addClass("tbody");
  453. var $css = '<style type="text/css">\n';
  454. if (pending){
  455. $css += ".tbody > .odd:nth-child(8), .even:nth-child(8) {display: none;}\n";
  456. }
  457. if (PEday){
  458. $css += ".tbody > .odd:nth-child(9), .even:nth-child(9) {display: none;}\n";
  459. }
  460. if (PEweek){
  461. $css += ".tbody > .odd:nth-child(10), .even:nth-child(10) {display: none;}\n";
  462. }
  463. $("head").append($css);
  464. }