MTurk Requester Bookmarks

Add quick links for your favourite requesters to MTurk dashboard

  1. // ==UserScript==
  2. // @name MTurk Requester Bookmarks
  3. // @namespace localhost
  4. // @author ThirdClassInternationalMasterTurker
  5. // @description Add quick links for your favourite requesters to MTurk dashboard
  6. // @include https://www.mturk.com/mturk/dashboard
  7. // @include https://www.mturk.com/mturk/searchbar*
  8. // @include https://www.mturk.com/mturk/findhits*
  9. // @include https://www.mturk.com/mturk/viewhits*
  10. // @include https://www.mturk.com/mturk/viewsearchbar*
  11. // @include https://www.mturk.com/mturk/sortsearchbar*
  12. // @include https://www.mturk.com/mturk/sorthits*
  13. // @grant GM_getValue
  14. // @grant GM_setValue
  15. // @grant GM_deleteValue
  16. // @version 0.2
  17. // ==/UserScript==
  18.  
  19. //
  20. // 2012-12-03 0.1: First public version
  21. //
  22. // 2012-12-05 0.2: You can now add any links as bookmark (Copy paste some
  23. // custom search from browsers address bar for example)
  24. //
  25.  
  26. (function ()
  27. {
  28. //GM_deleteValue('REQUESTER BOOKMARKS');
  29.  
  30. var add_div = null;
  31. var input1;
  32. var input2;
  33.  
  34. function remove_bookmark(requester, requesterId)
  35. {
  36. var t = GM_getValue('REQUESTER BOOKMARKS');
  37. if (t == null || t == '')
  38. return;
  39. else
  40. t = t.split(';');
  41.  
  42. var bookmarks = '';
  43. for (var i=0; i<t.length; i++)
  44. {
  45. var bm = t[i].split(',');
  46. if (bm[1] == requesterId)
  47. {
  48. t.splice(i,1);
  49. break;
  50. }
  51. }
  52. bookmarks = t.join(';');
  53. GM_setValue('REQUESTER BOOKMARKS', bookmarks);
  54. }
  55.  
  56. function add_bookmark(requester, requesterId)
  57. {
  58. var t = GM_getValue('REQUESTER BOOKMARKS');
  59. if (t == null || t == '')
  60. t = '';
  61. else
  62. t += ';';
  63.  
  64. if (t.match(requesterId))
  65. return;
  66.  
  67. t += requester + ',' + requesterId;
  68.  
  69. GM_setValue('REQUESTER BOOKMARKS', t);
  70. }
  71. function get_bookmarks()
  72. {
  73. var bookmarks = [];
  74. var t = GM_getValue('REQUESTER BOOKMARKS');
  75. if (t == null || t == '')
  76. return bookmarks;
  77. t = t.split(/,|;/);
  78. for (var i=0; i<t.length; i+=2)
  79. {
  80. var bm = document.createElement('div');
  81. var link = document.createElement('a');
  82. link.textContent = t[i];
  83. if (t[i+1].match(/^https:|^http:/) != null)
  84. link.href = t[i+1];
  85. else
  86. link.href = 'https://www.mturk.com/mturk/searchbar?selectedSearchType=hitgroups&requesterId=' + t[i+1];
  87.  
  88. remove_button = document.createElement('button');
  89. remove_button.textContent = 'x';
  90. remove_button.title = 'Remove this link';
  91.  
  92. remove_button.style.height = '14px';
  93. remove_button.style.width = '14px';
  94. remove_button.style.fontSize = '9px';
  95. remove_button.style.border = '1px solid';
  96. remove_button.style.padding = '0px';
  97. remove_button.style.backgroundColor = 'transparent';
  98. remove_button.style.marginRight = '5px';
  99. bm.style.width = '100%';
  100. bm.style.padding = '2px';
  101. bm.appendChild(remove_button);
  102. bm.appendChild(link);
  103. remove_button.addEventListener("click", remove_bookmark_func(t[i], t[i+1], bm), false);
  104.  
  105. bookmarks.push(bm);
  106. }
  107. return bookmarks;
  108. }
  109.  
  110. function add_bookmark_dialog()
  111. {
  112. if (add_div == null)
  113. {
  114. add_div = document.createElement('div');
  115. add_div.style.display = 'block';
  116.  
  117. add_div.style.position = 'fixed';
  118. add_div.style.width = '500px';
  119. //add_div.style.height = '150px';
  120. add_div.style.left = '50%';
  121. add_div.style.right = '50%';
  122. add_div.style.margin = '-250px 0px 0px -250px';
  123. //add_div.style.top = '400px';
  124. add_div.style.bottom = '300px';
  125. add_div.style.padding = '10px';
  126. add_div.style.border = '2px';
  127. add_div.style.textAlign = 'center';
  128. add_div.style.verticalAlign = 'middle';
  129. add_div.style.borderStyle = 'solid';
  130. add_div.style.borderColor = 'black';
  131. add_div.style.backgroundColor = 'white';
  132. add_div.style.color = 'black';
  133. add_div.style.zIndex = '100';
  134.  
  135. input1 = document.createElement('input');
  136. input2 = document.createElement('input');
  137. var label1 = document.createElement('label');
  138. var label2 = document.createElement('label');
  139. var label3 = document.createElement('label');
  140.  
  141. label1.textContent = 'Requester Name: ';
  142. label2.textContent = 'Requester Id/URL:';
  143. label3.textContent = 'Bookmark list will be updated when you reload dashboard page. ' +
  144. 'On second input field you can put requesterId or any full URL. ' +
  145. '(for example: https://www.mturk.com)';
  146.  
  147. var add_button = document.createElement('button');
  148. add_button.textContent = 'Add bookmark';
  149. add_button.addEventListener("click", dialog_close_func(true), false);
  150. add_button.style.margin = '5px';
  151. var cancel_button = document.createElement('button');
  152. cancel_button.textContent = 'Cancel';
  153. cancel_button.addEventListener("click", dialog_close_func(false), false);
  154. cancel_button.style.margin = '5px';
  155.  
  156. add_div.appendChild(label3);
  157. add_div.appendChild(document.createElement('br'));
  158. add_div.appendChild(label1);
  159. add_div.appendChild(input1);
  160. add_div.appendChild(document.createElement('br'));
  161. add_div.appendChild(label2);
  162. add_div.appendChild(input2);
  163. add_div.appendChild(document.createElement('br'));
  164. add_div.appendChild(cancel_button);
  165. add_div.appendChild(add_button);
  166. document.body.appendChild(add_div);
  167. }
  168. else
  169. {
  170. add_div.style.display = 'block';
  171. }
  172. }
  173.  
  174. function get_requester_id(s) {
  175. var idx = 12 + s.search('requesterId=');
  176. return s.substr(idx);
  177. }
  178. function dialog_close_func(save)
  179. {
  180. return function()
  181. {
  182. if (save && input1.value.length > 0 && input2.value.length > 0)
  183. add_bookmark(input1.value, input2.value);
  184. input1.value = '';
  185. input2.value = '';
  186. add_div.style.display = 'none';
  187. };
  188. }
  189. function add_bookmark_func(requester, requesterId)
  190. {
  191. return function()
  192. {
  193. if (confirm('Add requester "' + requester + '" to your dashboard?') == true)
  194. add_bookmark(requester, requesterId);
  195. };
  196. }
  197.  
  198. function remove_bookmark_func(requester, requesterId, bm_div)
  199. {
  200. return function()
  201. {
  202. if (confirm('Remove requester "' + requester + '" from your dashboard?') == true)
  203. {
  204. remove_bookmark(requester, requesterId);
  205. bm_div.textContent = 'REMOVED';
  206. }
  207. };
  208. }
  209.  
  210. if (window.location.href == 'https://www.mturk.com/mturk/dashboard')
  211. {
  212. var footer = document.getElementsByClassName('footer_separator')[0];
  213. if (footer == null)
  214. return;
  215. var extra_table = document.createElement('table');
  216. extra_table.width = '700';
  217. extra_table.style.boder = '1px solid black';
  218. extra_table.align = 'center';
  219. extra_table.cellSpacing = '0px';
  220. extra_table.cellPadding = '0px';
  221. var row1 = document.createElement('tr');
  222. var row2 = document.createElement('tr');
  223. var td1 = document.createElement('td');
  224. var td2 = document.createElement('td');
  225. var whatsthis = document.createElement('a');
  226. var add_button = document.createElement('button');
  227. var content_td = [];
  228. content_td[0] = document.createElement('td');
  229. content_td[1] = document.createElement('td');
  230. content_td[2] = document.createElement('td');
  231. row1.style.height = '25px';
  232. td1.setAttribute('class', 'white_text_14_bold');
  233. td1.style.backgroundColor = '#7fb448';//'#7fb4cf';
  234. td1.style.paddingLeft = '10px';
  235. td1.colSpan = '2';
  236. td1.innerHTML = 'Bookmarks ';
  237. td2.setAttribute('class', 'white_text_14_bold');
  238. td2.style.backgroundColor = '#7fb448';//'#7fb4cf';
  239. td2.style.paddingRight = '10px';
  240. td2.style.textAlign = 'right';
  241. //td2.style.widht = '200px';
  242. content_td[0].setAttribute('class', 'container-content');
  243. content_td[1].setAttribute('class', 'container-content');
  244. content_td[2].setAttribute('class', 'container-content');
  245. content_td[0].style.width = '33%';
  246. content_td[1].style.width = '34%';
  247. content_td[2].style.width = '33%';
  248. content_td[0].style.verticalAlign = 'top';
  249. content_td[1].style.verticalAlign = 'top';
  250. content_td[2].style.verticalAlign = 'top';
  251. whatsthis.href = 'http://userscripts.org/scripts/show/153363';
  252. whatsthis.setAttribute('class', 'whatis');
  253. whatsthis.textContent = '(What\'s this?)';
  254. add_button.textContent = 'add new bookmark';
  255. add_button.title = 'Add new bookmark';
  256. add_button.style.fontSize = '9px';
  257. add_button.style.border = '1px solid';
  258. add_button.style.padding = '0px';
  259. add_button.style.color = 'white';
  260. add_button.style.textAlign = 'right';
  261. add_button.style.backgroundColor = 'transparent';
  262. add_button.addEventListener("click", function() { add_bookmark_dialog(); }, false);
  263.  
  264. extra_table.appendChild(row1);
  265. row1.appendChild(td1);
  266. row1.appendChild(td2);
  267. td1.appendChild(whatsthis);
  268. td2.appendChild(add_button);
  269. extra_table.appendChild(row2);
  270. row2.appendChild(content_td[0]);
  271. row2.appendChild(content_td[1]);
  272. row2.appendChild(content_td[2]);
  273.  
  274. var l=0;
  275. var bookmarks = get_bookmarks();
  276. while (l<bookmarks.length)
  277. {
  278. content_td[(l+3)%3].appendChild(bookmarks[l]);
  279. l += 1;
  280. }
  281. if (bookmarks.length == 0)
  282. {
  283. content_td[0].style.width = '20%';
  284. content_td[1].style.width = '60%';
  285. content_td[2].style.width = '20%';
  286. content_td[1].textContent = 'Use \'+\'-buttons on HITs page to add new bookmarks';
  287. content_td[1].style.textAlign = 'center';
  288. }
  289.  
  290. footer.parentNode.insertBefore(extra_table, footer);
  291. }
  292. else
  293. {
  294. for (var item=0; item<10; item++) {
  295. var tooltip = document.getElementById('requester.tooltip--' + item);
  296. if (tooltip == null)
  297. break; // no need to continue
  298. var titleElement = document.getElementById('capsule' + item + '-0');
  299. var elements = tooltip.parentNode.parentNode.getElementsByTagName('a');
  300. var requester;
  301. var requesterId;
  302.  
  303. for (var i=0; i<elements.length; i++)
  304. {
  305. if (elements[i].href.match(/requesterId=/))
  306. {
  307. requesterId = get_requester_id(elements[i].href);
  308. requester = elements[i].textContent.trim();
  309. break;
  310. }
  311. }
  312.  
  313. button = document.createElement('button');
  314. button.textContent = '+';
  315. button.title = 'Add link to your dashboard';
  316. button.style.height = '14px';
  317. button.style.width = '14px';
  318. button.style.fontSize = '8px';
  319. button.style.border = '1px solid';
  320. button.style.padding = '0px';
  321. button.style.backgroundColor = 'transparent';
  322.  
  323. button.addEventListener("click", add_bookmark_func(requester, requesterId), false);
  324. titleElement.parentNode.appendChild(button);
  325. }
  326. }
  327. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址