Advertisement
Guest User

Untitled

a guest
Jan 23rd, 2017
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.17 KB | None | 0 0
  1. // ==UserScript==
  2. // @name cf_clothing_answers
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.4.0
  5. // @match https://tasks.crowdflower.com/assignments/*
  6. // @require https://code.jquery.com/jquery-3.1.0.min.js
  7. // @require https://cdnjs.cloudflare.com/ajax/libs/async/2.0.1/async.min.js
  8. // @grant GM_notification
  9. // ==/UserScript==
  10.  
  11. var jQ = jQuery.noConflict();
  12.  
  13. (function () {
  14. const SERVERURL = 'https://35.162.216.24:1337/clothing';
  15. const COMPARABLE_ATTR = 'url';
  16.  
  17. var alertErrorShowed = false;
  18.  
  19. if (validTask()) {
  20. var jobsNodes = getJobsNodes();
  21. var questions = getQuestions();
  22. var nEvaluatedConfirmed = 0;
  23.  
  24. async.forEachOf(questions, function (question, index) {
  25. findSavedAnswer(question[COMPARABLE_ATTR], function (savedAnswer) {
  26. if (savedAnswer.evaluated) {
  27. nEvaluatedConfirmed++;
  28. }
  29.  
  30. displayAsnwer(index, savedAnswer);
  31. });
  32. });
  33.  
  34. if (nEvaluatedConfirmed === 0) {
  35. //createUI();
  36. }
  37. }
  38.  
  39. function validTask () {
  40. //EDIT
  41. var validTitle = 'Clothing Categorisation Task';
  42. var taskTitle = jQ('.job-title').text().trim();
  43.  
  44. return taskTitle.includes(validTitle);
  45. }
  46.  
  47. function getJobsNodes () {
  48. return jQ('div.cml.jsawesome');
  49. }
  50.  
  51. function getQuestions () {
  52. var questions = [];
  53.  
  54. for (var i = 0; i < jobsNodes.length; i++) {
  55. var jobNode = jobsNodes[i];
  56.  
  57. //EDIT
  58. var question = jQ(jobNode).find('a').attr('href');
  59.  
  60. questions.push({
  61. [COMPARABLE_ATTR]: question
  62. });
  63. }
  64.  
  65. return questions;
  66. }
  67.  
  68.  
  69. function getAnswers () {
  70. var answers = [];
  71.  
  72. //EDIT
  73. for (var i = 0; i < jobsNodes.length; i++) {
  74. var $jobNode = jQ(jobsNodes[i]).find('.span3.well');
  75. var answer = '';
  76. var gender, type, category, subcategory;
  77.  
  78. //Gender
  79. gender = $jobNode.children('.group').first().find('input:checked').val();
  80.  
  81. //Type
  82. type = $jobNode.children('.radios').first().find('input:checked').val();
  83.  
  84. //Category
  85. category = $jobNode.children('.group').eq(1).find('input:checked');
  86.  
  87. if (category) {
  88. category = category.val();
  89. } else {
  90. category = '';
  91. }
  92.  
  93. //Sucategory
  94. subcategory = $jobNode.children('.group').eq(1).find('input:checked:checkbox').first();
  95.  
  96. if (subcategory) {
  97. subcategory = subcategory.val();
  98. } else {
  99. subcategory = '';
  100. }
  101.  
  102.  
  103. answers.push({
  104. gender: gender,
  105. type: type,
  106. category: category,
  107. subcategory: subcategory
  108. });
  109. }
  110.  
  111. return answers;
  112. }
  113.  
  114. function sendNewAnswers (cb) {
  115. var answers = getAnswers();
  116.  
  117. async.forEachOf(questions, function (question, index, next) {
  118. var answer = answers[index];
  119.  
  120. //EDIT
  121. var newAsnwer = {
  122. url: question.url,
  123. gender: answer.gender,
  124. type: answer.type,
  125. category: answer.category,
  126. subcategory: answer.subcategory
  127. };
  128.  
  129. jQ.post({
  130. url: SERVERURL,
  131. data: newAsnwer,
  132. timeout: 5000
  133. })
  134. .always(function () {
  135. next(null);
  136. });
  137. }, cb);
  138. }
  139.  
  140. function findSavedAnswer (comparableAttr, done, fail) {
  141. jQ.post({
  142. url: SERVERURL + '/actions/find',
  143. dataType: 'JSON',
  144. data: {
  145. [COMPARABLE_ATTR]: comparableAttr
  146. }
  147. })
  148. .done(function (savedAnswers) {
  149. done(savedAnswers);
  150. })
  151. .fail(function (err) {
  152. if (err.statusText === "error"){
  153. showAlertError('No ha desbloqueado el pescadito ');
  154. }
  155. });
  156. }
  157.  
  158. function displayAsnwer (index, answer) {
  159. var jobsNodes = jQ('div.cml.jsawesome');
  160.  
  161. //EDIT
  162. var responseNode = '<div class="span6">' +
  163. '<table class="table table-bordered">' +
  164. '<tr><td><b>Gender:</b></td><td>' + answer.gender + '</td></tr>' +
  165. '<tr><td><b>Type:</b></td><td>' + answer.type + '</td></tr>' +
  166. '<tr><td><b>Category:</b></td><td>' + answer.category + '</td></tr>' +
  167. '<tr><td><b>Subcategory:</b></td><td>' + answer.subcategory + '</td></tr>' +
  168. '</table>' +
  169. '</div>';
  170.  
  171. jQ(jobsNodes[index]).prepend(responseNode);
  172. }
  173.  
  174. function createUI () {
  175. var $container = jQ('div.form-actions');
  176. var $originalSendButton = jQ('input:submit');
  177.  
  178. $container.append('<button id="sabtn" type="button" class="submit btn btn-cf-green" >Enviar Respuestas</button>');
  179.  
  180. jQ('#sabtn').on('click', function () {
  181. sendNewAnswers(function () {
  182. GM_notification({
  183. title: '',
  184. text: 'Respuestas Enviadas',
  185. timeout: 3000
  186. });
  187. });
  188. });
  189. }
  190.  
  191. function showAlertError(message) {
  192. if (!alertErrorShowed) {
  193. GM_notification({
  194. title: 'Error al cargar respuestas',
  195. text: message,
  196. image: 'http://www.descargaratube.com/wp-content/uploads/2015/07/error_icon.png',
  197. timeout: 10000
  198. });
  199. }
  200.  
  201. alertErrorShowed = true;
  202. }
  203.  
  204. function showErrorBackground () {
  205. jQ('#content').css({background: '#ff878f'});
  206. }
  207. })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement