Advertisement
pwtenny

Untitled

Jul 11th, 2016
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ==UserScript==
  2. // @name        CastingWords
  3. // @namespace   pwtenny
  4. // @description Refactor
  5. // @include     http://turkers.castingwords.com/hit/list*
  6. // @grant       GM_addStyle
  7. // @version     1.0
  8. // ==/UserScript==
  9.  
  10. var speed = 4.3;
  11. var SORT_PAY = 1;
  12. var SORT_HRLY = 2;
  13. var SORT_PPM = 3;
  14. var VER2 = true;
  15.  
  16. var sortBy = SORT_PPM;
  17. var searchFor = "";
  18. var minPPM = "0.05";
  19.  
  20. // ---------------------
  21.  
  22. GM_addStyle(
  23.     "tr.r1:hover { background-color: #ccc; }" +
  24.     "tr.r1       { background-color: #f1f4f7; font-size: 13px; }" +
  25.     "tr.r2:hover { background-color: #ccc; }" +
  26.     "tr.r2       { background-color: #fafafa; font-size: 13px; }"+
  27.    
  28.     "a:visited { color: #900; }"
  29. );
  30.  
  31. // f5f5f5, e5e5e5
  32.  
  33. var totalpay = 0.00;
  34. var atl = document.createElement("div");
  35. var audio_trans = ulToArray("Audio Transcription_list", "atl");
  36. var audio_trans_expr = ulToArray("Express Transcription_list", "etl");
  37. var audio_trans_diff = ulToArray("Difficult Audio_list", "dal");
  38. var audio_trans_diff_expr = ulToArray("Diff Audio Expr Trans_list", "detl");
  39. var audio_trans_bulk_expr = ulToArray("Bulk Express Transcription_list", "atbe");
  40. var audio_verbatim = ulToArray("Verbatim Audio Transcription_list", "vat");
  41. var audio_verbatim_expr = ulToArray("Verbatim Express Transcription_list", "vetl");
  42.  
  43. atl.style.marginTop = "15px";
  44.  
  45. atl.innerHTML = ''+
  46.     '<table style="margin: 0 auto; width: 90%;">'+
  47.         '<tr>'+
  48.             '<td colspan="2" style="text-align: center;" id="totalpay">f</td>'+
  49.         '</tr>'+
  50.         '<tr>'+
  51.             '<td style="text-align: center;">'+
  52.                 '<div style="width: 600px; font-size: 18px;">'+
  53.                     'Jump: <a href="#atl">Regular</a> ('+count("Audio Transcription_list")+'), '+
  54.                     '<a href="#dal">Difficult</a> ('+count("Difficult Audio_list")+'), '+
  55.                     '<a href="#detl">Difficult Express</a> ('+count("Diff Audio Expr Trans_list")+'), '+
  56.                     '<a href="#vat">Verbatim</a> ('+count("Verbatim Audio Transcription_list")+')'+
  57.                 '</div>'+
  58.                 '<br>'+audio_trans+'<br>'+
  59.                 '<br>'+audio_trans_diff+"<br>"+
  60.                 '<br>'+audio_trans_diff_expr+"<br>"+
  61.                 '<br>'+audio_verbatim+
  62.             '</td>'+
  63.             '<td style="text-align: center;">'+
  64.                 '<div style="width: 600px; font-size: 18px;">Jump: <a href="#etl">Express</a> ('+count("Express Transcription_list")+'), '+
  65.                 '<a href="#atbe">Bulk Express</a> ('+count("Bulk Express Transcription_list")+'), '+
  66.                 '<a href="#vetl">Verbatim Express</a> ('+count("Verbatim Express Transcription_list")+')</div>'+
  67.                 '<br>'+audio_trans_expr+'<br>'+
  68.                 '<br>'+audio_trans_bulk_expr+'<br>'+
  69.                 '<br>'+audio_verbatim_expr+'<br>'+
  70.             '</td>'+
  71.         '</tr>'+
  72.     '</table>';
  73.  
  74. blank_it();
  75. document.getElementById("totalpay").innerHTML = 'Total available pay: $<b style="color: green;">'+totalpay.toFixed(2)+'</b> (Grade 9: $<b style="color: green;">'+eval(totalpay*3).toFixed(2)+'</b>)';
  76.  
  77. function blank_it()
  78. {
  79.     document.body.parentNode.insertBefore(atl, document.body);
  80.     document.body.innerHTML = "";
  81.     document.body.style.background = "white";
  82. }
  83.  
  84.  
  85. function ulToArray(id, name)
  86. {
  87.     var list = document.getElementById(id);
  88.     var jobArray = new Array();
  89.     var ttlpay = 0;
  90.     var jobNum = 0;
  91.  
  92.     if(!list)
  93.     {
  94.         return '<div name="'+id+'" id="'+id+'" style="width:600px; font-size: 24px;">'+id+' <span style="font-size: 16px;">(no jobs)</span></div>';
  95.     }
  96.  
  97.     for(li = list.getElementsByTagName("li"), n = 0; n < li.length; n++)
  98.     {
  99.         var jobid, jobdata, joburl, jobname, joblen, jobpay, jobg8, jobg9, jobsec, jobhrly;
  100.        
  101.         jobdata = li[n].innerHTML;
  102.    
  103.         joburl = jobdata.split(/"/)[1]; // "
  104.         joburl = joburl.split(/hittypeid=/)[1].split(/&/)[0];
  105.         joburl = "https://www.mturk.com/mturk/preview?groupId=" + joburl;
  106.  
  107.         jobname = jobdata.split(/">/)[1].split(/ \(/)[0]; // "
  108.         jobname = jobname.replace("::", ":");
  109.         jobname = jobname.replace(" : ", ": ");
  110.         jobname = jobname.replace("Difficult Audio: ", "");
  111.         jobname = jobname.trim();
  112.        
  113.         // If searchFor is non-empty, skip this HIT if it doesn't match.
  114.         // Skip the search term: > -1
  115.         // Skip everything else: == -1
  116.  
  117.         if(searchFor.length > 1)
  118.         {
  119.             if(name == "etl")
  120.             {
  121.                 if(jobname.toLowerCase().indexOf(searchFor.toLowerCase()) == -1)
  122.                 {
  123.                     continue;
  124.                 }              
  125.             }
  126.         }
  127.  
  128.         if(jobname.indexOf(": ") > -1)
  129.         {
  130.             jobid = jobname.split(/: /)[1].trim();
  131.             jobname = jobname.split(/: /)[0];
  132.         }
  133.         else if(jobname.indexOf(" #") > -1)
  134.         {
  135.             jobid = jobname.split(/ #/)[1].trim();
  136.             jobname = jobname.split(/ #/)[0];
  137.         }
  138.  
  139.         joblen = jobdata.substring(jobdata.indexOf("[") + 1, jobdata.indexOf("]") - 5); // 05:38
  140.         jobpay = jobdata.substring(jobdata.lastIndexOf("$") + 1, jobdata.lastIndexOf("</span>")); // 0.77
  141.         jobg7 = jobpay * 2; jobg7 = jobg7.toFixed(2); // Only used for testing with the pay-per-minute calculation.
  142.         jobg8 = jobpay * 3; jobg8 = jobg8.toFixed(2);
  143.         jobg9 = jobpay * 3; jobg9 = jobg9.toFixed(2);
  144.  
  145.         jobsec = eval(joblen.split(/:/)[1]); // seconds only
  146.  
  147.         if(joblen.split(/:/)[0] > 0) // has minutes, so adjust
  148.             jobsec += joblen.split(/:/)[0] * 60;
  149.  
  150.         jobhrly = jobg8 / (jobsec * speed / 3600);
  151.         jobhrly = jobhrly.toFixed(2);
  152.  
  153.         job = new Object();
  154.         job.name = jobname;
  155.         job.id = jobid;
  156.         job.len = joblen;
  157.         job.sec = jobsec;
  158.         job.pay = jobpay;
  159.         job.g8 = jobg8;
  160.         job.g9 = jobg9;
  161.         job.hrly = jobhrly;
  162.         job.url = joburl;
  163.  
  164.         job.pps = job.g8 / (job.sec / 60)
  165.  
  166.         if(job.pps < minPPM && name == "etl")
  167.         {
  168.             continue;
  169.         }
  170.  
  171.         jobArray[jobNum] = job;
  172.         jobNum++;
  173.        
  174.         ttlpay += eval(job.pay);
  175.         totalpay += eval(job.pay);
  176.     }
  177.    
  178.     if(sortBy == SORT_HRLY)
  179.         jobArray.sort(function(a, b) { return b.hrly - a.hrly; } );
  180.    
  181.     if(sortBy == SORT_PAY)
  182.         jobArray.sort(function(a, b) { return b.pay - a.pay; } );
  183.  
  184.     if(sortBy == SORT_PPM)
  185.         jobArray.sort(function(a, b) { return b.pps - a.pps; } );
  186.  
  187.     var tableData = '';
  188.     var oddeven = 0;
  189.     var thecolor = "r1";
  190.  
  191.     for(n = 0; n < jobArray.length; n++)
  192.     {
  193.         if(!jobArray[n])
  194.             break;
  195.    
  196.         if(oddeven == 0)
  197.         {
  198.             oddeven = 1;
  199.             thecolor = "r1";
  200.         }
  201.         else
  202.         {
  203.             oddeven = 0;
  204.             thecolor = "r2";
  205.         }
  206.  
  207.         var padding = "4px;";
  208.  
  209. /*
  210.         // If "searchFor" isn't empty, only display hits with that search time in Express.
  211.         var hits = 0;
  212.         if(searchFor.length > 1)
  213.         {
  214.             if(name == "etl")
  215.             {
  216.                 if(jobArray[n].name.indexOf(searchFor) == -1)
  217.                 {
  218.                     continue;
  219.                 }              
  220.                 hits++;
  221.             }
  222.         }
  223. */
  224.  
  225.         tableData += '<tr class="'+thecolor+'">'+
  226.         '<td style="border-top: 1px solid #fefefe; border-bottom: 1px solid #ececec; padding: '+padding+'"><a href="' + jobArray[n].url + '" style="color: blue;">' + jobArray[n].name + '</a> (<a href="https://www.mturk.com/mturk/searchbar?selectedSearchType=hitgroups&minReward=0.00&x=0&y=0&searchWords=%23' + jobArray[n].id + '">'+ jobArray[n].id +'</a>)</td>'+
  227.         '<td style="border-top: 1px solid #fefefe; border-bottom: 1px solid #ececec; padding: '+padding+' text-align: right; color: #666">'+jobArray[n].len+'</td>'+
  228.         '<td style="border-top: 1px solid #fefefe; border-bottom: 1px solid #ececec; padding: '+padding+' text-align: right; color: #666;">$'+jobArray[n].pay+'</td>'+
  229.         '<td style="border-top: 1px solid #fefefe; border-bottom: 1px solid #ececec; padding: '+padding+' text-align: right;">$'+jobArray[n].g8+'</td>'+
  230.         //'<td style="border-top: 1px solid #fefefe; border-bottom: 1px solid #ececec; padding: '+padding+' text-align: right; color: #666">$'+jobArray[n].g9+'</td>'+
  231.         '<td style="border-top: 1px solid #fefefe; border-bottom: 1px solid #ececec; padding: '+padding+' text-align: right;">$'+jobArray[n].hrly+'</td>'+
  232.         '<td style="border-top: 1px solid #fefefe; border-bottom: 1px solid #ececec; padding: '+padding+' text-align: right;">$'+jobArray[n].pps.toFixed(2)+'</td>'+
  233.         "</tr>";
  234.  
  235.     }
  236.    
  237.  // Replaced 2012-02-22
  238. /*
  239.     var COMBO = '<div style="width:600px; font-size: 24px;">'+id+' <span style="font-size: 16px;">($<b style="color: green;">'+ttlpay.toFixed(2)+'</b> / $<b style="color: green;">'+eval(ttlpay*3).toFixed(2)+'</b>)</span></div>'+
  240.     '<table style="width: 600px;" id="'+name+'" name="'+name+'" cellspacing="0"><tr class="r">'+
  241.     '<td style="font-weight:bold;width:350px;border-bottom:1px solid #aaa;">Name</td>'+
  242.     '<td style="font-weight:bold;width:60px;border-bottom:1px solid #aaa; padding: 2px; text-align: right;">Pay</td>'+
  243.     '<td style="font-weight:bold;width:60px;border-bottom:1px solid #aaa; padding: 2px; text-align: right;">G8</td>'+
  244.     '<td style="font-weight:bold;width:60px;border-bottom:1px solid #aaa; padding: 2px; text-align: right;">G9</td>'+
  245.     '<td style="font-weight:bold;width:60px;border-bottom:1px solid #aaa; padding: 2px; text-align: right;">Len</td>'+
  246.     '<td style="font-weight:bold;width:60px;border-bottom:1px solid #aaa; padding: 2px; text-align: right;">Hrly</td>'+
  247.     '</tr>'+
  248.     tableData+
  249.     '<tr><td colspan="6" style="text-align: center; padding-top: 7px;"><b>Total pay</b>: $'+ttlpay.toFixed(2)+', <b>W/G8</b>: $'+eval(ttlpay*3).toFixed(2)+'</td></tr>'+
  250.     '</table>';
  251. */
  252.  
  253.     var COMBO = '<div style="width:600px; font-size: 24px;">'+id+' <span style="font-size: 16px;">($<b style="color: green;">'+ttlpay.toFixed(2)+'</b> / $<b style="color: green;">'+eval(ttlpay*3).toFixed(2)+'</b>)</span></div>'+
  254.     '<table style="width: 600px;" id="'+name+'" name="'+name+'" cellspacing="0"><tr class="r">'+
  255.     '<td style="font-weight:bold;width:350px;border-bottom:1px solid #aaa;">Name</td>'+
  256.     '<td style="font-weight:bold;width:60px;border-bottom:1px solid #aaa; padding: 2px; text-align: right;">Len</td>'+
  257.     '<td style="font-weight:bold;width:60px;border-bottom:1px solid #aaa; padding: 2px; text-align: right;">Pay</td>'+
  258.     '<td style="font-weight:bold;width:60px;border-bottom:1px solid #aaa; padding: 2px; text-align: right;">G9</td>'+
  259.     //'<td style="font-weight:bold;width:60px;border-bottom:1px solid #aaa; padding: 2px; text-align: right;">G9</td>'+
  260.     '<td style="font-weight:bold;width:60px;border-bottom:1px solid #aaa; padding: 2px; text-align: right;">Hrly</td>'+
  261.     '<td style="font-weight:bold;width:60px;border-bottom:1px solid #aaa; padding: 2px; text-align: right;">PPM</td>'+
  262.     '</tr>'+
  263.     tableData+
  264.     '<tr><td colspan="6" style="text-align: center; padding-top: 7px;"><b>Total pay</b>: $'+ttlpay.toFixed(2)+', <b>W/G8</b>: $'+eval(ttlpay*3).toFixed(2)+'</td></tr>'+
  265.     '</table>';
  266.  
  267.     return COMBO;
  268. }
  269.  
  270. function formatCurrency(amount)
  271. {
  272.     var i = parseFloat(amount);
  273.     if(isNaN(i)) { i = 0.00; }
  274.     var minus = '';
  275.     if(i < 0) { minus = '-'; }
  276.     i = Math.abs(i);
  277.     i = parseInt((i + .005) * 100);
  278.     i = i / 100;
  279.     s = new String(i);
  280.     if(s.indexOf('.') < 0) { s += '.00'; }
  281.     if(s.indexOf('.') == (s.length - 2)) { s += '0'; }
  282.     s = minus + s;
  283.     return s;
  284. }
  285.  
  286. function count(id)
  287. {
  288.     if(!document.getElementById(id))
  289.         return 0;
  290.  
  291.     return document.getElementById(id).getElementsByTagName("li").length;
  292. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement