Full Queue

Blank Name

当前为 2015-03-01 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Full Queue
  3. // @description Blank Name
  4. // @version 0.5
  5. // @include https://www.mturk.com/mturk/*
  6. // @grant GM_setValue
  7. // @grant GM_getValue
  8. // @grant GM_deleteValue
  9. // @grant GM_openInTab
  10. // @author Cristo
  11. // @copyright 2012+
  12. // @namespace https://greasyfork.org/users/1973
  13. // ==/UserScript==
  14.  
  15. //GM_deleteValue('QueueDelay');
  16. var que25 = 'https://www.mturk.com/mturk/sortmyhits?searchSpec=HITSearch%23T%231%2325%23-1%23T%23%21Status%210%21rO0ABXQACEFzc2lnbmVk%21%23%21Deadline%211%21%23%21';
  17. var trdLink = document.getElementById('subtabs').getElementsByTagName('a')[2];
  18. var capArr = [], time = 1000, working = false;
  19. if (trdLink.href === 'https://www.mturk.com/mturk/myhits'){
  20. trdLink.href = que25;
  21. }
  22.  
  23. if (window.location.href === que25 && document.getElementById('collapseall')){
  24. /////////////////////////////////////////////////////////Return all link
  25. var collapseall = document.getElementById('collapseall');
  26. var nonBr1 = document.createTextNode('\u00a0\u00a0');
  27. collapseall.parentNode.appendChild(nonBr1);
  28. var bar = document.createElement('font');
  29. bar.innerHTML = '|';
  30. bar.setAttribute('color', '#9ab8ef');
  31. collapseall.parentNode.appendChild(bar);
  32. var nonBr2 = document.createTextNode('\u00a0\u00a0');
  33. collapseall.parentNode.appendChild(nonBr2);
  34. var retunLink = document.createElement('a');
  35. retunLink.addEventListener('click', returnAll, false);
  36. retunLink.innerHTML='Return all hits';
  37. retunLink.setAttribute('id', 'retunall');
  38. retunLink.setAttribute('class', 'footer_links');
  39. retunLink.setAttribute('href', '#');
  40. bar.parentNode.appendChild(retunLink);
  41. /////////////////////////////////////////////////////////Delay settings
  42. var timeTd = document.getElementsByTagName('table')[5].getElementsByTagName('td')[2];
  43. var delayTextN = document.createElement('span');
  44. delayTextN.setAttribute('class', 'capsule_black_text');
  45. delayTextN.innerHTML='Time delay:';
  46. var nonBr3 = document.createTextNode('\u00a0');
  47. var delayTextI = document.createElement('input');
  48. delayTextI.addEventListener('keyup', saveTime, false);
  49. delayTextN.setAttribute('input', 'delaytextn');
  50. delayTextI.type = 'text';
  51. delayTextI.title = 'Delay between page requests in seconds';
  52. delayTextI.style.width ='25px';
  53. if(GM_getValue('QueueDelay') === undefined){
  54. GM_setValue('QueueDelay','0.5');
  55. }
  56. delayTextI.value = GM_getValue('QueueDelay');
  57. time *= delayTextI.value
  58. timeTd.appendChild(delayTextN);
  59. timeTd.appendChild(nonBr3);
  60. timeTd.appendChild(delayTextI);
  61. /////////////////////////////////////////////////////////Open/Return Sets
  62. var queTable = document.getElementsByTagName('table')[6];
  63. var container = queTable.firstElementChild;
  64. var singleContainer = container.children;
  65. /////////////////////////////////////////////////////////Add open/return
  66. for (var f = 0; f < singleContainer.length; f++){
  67. var newD = document.createElement('td');
  68. newD.style.paddingRight = "80px";
  69. var handle = singleContainer[f].getElementsByClassName('requesterIdentity')[0];
  70. handle.parentNode.parentNode.insertBefore(newD, handle.parentNode.nextSibling);
  71. var butO = document.createElement("span");
  72. butO.addEventListener('click', openSome, false);
  73. butO.title = 'Open all ' + handle.innerHTML + ' hits';
  74. butO.style.color = "#1170A0";
  75. butO.style.cursor = "pointer";
  76. butO.style.paddingRight = "50%";
  77. butO.innerHTML = "Open";
  78. newD.appendChild(butO);
  79. var butR = document.createElement("span");
  80. butR.addEventListener('click', returnSome, false);
  81. butR.title = 'Return all ' + handle.innerHTML + ' hits';
  82. butR.style.color = "#1170A0";
  83. butR.style.cursor = "pointer";
  84. butR.innerHTML = "Return";
  85. newD.appendChild(butR);
  86. /////////////////////////////////////////////////////////Current Links
  87. var requesterName = singleContainer[f].getElementsByClassName('requesterIdentity')[0].innerHTML;
  88. var returnCap = singleContainer[f].getElementsByClassName('capsulelink')[1];
  89. returnCap.addEventListener('click', returnOne, false);
  90. var continueCaps = singleContainer[f].getElementsByClassName('capsulelink')[2];
  91. var singleBits = new Object();
  92. singleBits.Name = requesterName;
  93. singleBits.Id = returnCap.getElementsByTagName('a')[0].href.split('hitId=')[1];
  94. singleBits.Place = f;
  95. capArr.push(singleBits);
  96. }
  97. }
  98.  
  99. /////////////////////////////////////////////////////////UI Functions
  100. function returnAll(rA){
  101. if(working === false){
  102. working = true;
  103. masterLoop(0,capArr);
  104. }
  105. }
  106. function returnSome(rS){
  107. if(working === false){
  108. working = true;
  109. var returns = [];
  110. var clickedName = rS.target.parentNode.parentNode.getElementsByClassName('requesterIdentity')[0].innerHTML;
  111. for (var f = 0; f < capArr.length; f++){
  112. if (capArr[f].Name === clickedName){
  113. var someBundle = new Object();
  114. someBundle.Id = capArr[f].Id;
  115. someBundle.Place = capArr[f].Place;
  116. returns.push(someBundle)
  117. }
  118. }
  119. masterLoop(0,returns);
  120. }
  121. }
  122. function returnOne(rO){
  123. rO.preventDefault();
  124. if(working === false){
  125. working = true;
  126. var hitId = rO.target.href.split('hitId=')[1];
  127. for (var f = 0; f < capArr.length; f++){
  128. if(capArr[f].Id === hitId){
  129. break;
  130. }
  131. }
  132. var oneBundle = new Object();
  133. oneBundle.Id = capArr[f].Id;
  134. oneBundle.Place = capArr[f].Place;
  135. masterLoop(0,[oneBundle])
  136. }
  137. }
  138. function openSome(oS){
  139. if(working === false){
  140. working = true;
  141. var openings = [];
  142. var clickedName = oS.target.parentNode.parentNode.getElementsByClassName('requesterIdentity')[0].innerHTML;
  143. for (var f = 0; f < capArr.length; f++){
  144. if (capArr[f].Name === clickedName){
  145. openings.push(capArr[f].Id);
  146. }
  147. }
  148. masterLoop(1,openings);
  149. }
  150. }
  151. function saveTime(){
  152. time = 1000;
  153. GM_setValue('QueueDelay',delayTextI.value);
  154. time *= GM_getValue('QueueDelay');
  155. }
  156. /////////////////////////////////////////////////////////Time Loop
  157. function masterLoop(ty,mL){
  158. setTimeout(function () {
  159. if(ty === 1){
  160. openTab(mL[0]);
  161. } else if(ty === 0){
  162. fadeHit(mL[0].Place);
  163. returnHit(mL[0].Id);
  164. } else{
  165. console.log('tY NF');
  166. }
  167. if(mL.length > 1) {
  168. mL.shift();
  169. masterLoop(ty,mL);
  170. } else {
  171. working = false;
  172. }
  173. }, time);
  174. }
  175. /////////////////////////////////////////////////////////Page events
  176. function returnHit(rH){
  177. var returnUrl = 'https://www.mturk.com/mturk/return?inPipeline=false&hitId='+ rH;
  178. getHttp = new XMLHttpRequest();
  179. getHttp.open( 'GET', returnUrl, true );
  180. getHttp.send(null);
  181. }
  182. function fadeHit(fH){
  183. var orangeT = document.getElementsByClassName('title_orange_text')[0];
  184. var oragneAmount = orangeT.innerHTML.split('1-')[1].split(' of')[0];
  185. if(oragneAmount > 1){
  186. orangeT.innerHTML = '1-'+(oragneAmount-1)+' of '+(oragneAmount-1)+' Results';
  187. } else {
  188. document.getElementsByTagName('table')[5].style.display = 'none';
  189. orangeT.innerHTML = '0-'+(oragneAmount-1)+' of '+(oragneAmount-1)+' Results';
  190. }
  191. var op = 1;
  192. var timer = setInterval(function () {
  193. if (op <= 0.1){
  194. clearInterval(timer);
  195. singleContainer[fH].style.display = 'none';
  196. }
  197. singleContainer[fH].style.opacity = op;
  198. op -= op * 0.1;
  199. }, 20);
  200. }
  201. function openTab(oT){
  202. GM_openInTab('https://www.mturk.com/mturk/continue?hitId='+ oT,{active: false, insert: true});
  203. }