您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
A script add on for Panda Crazy sending commands to main script.
当前为
// ==UserScript== // @name JR Panda Crazy Helper // @version 0.2.0 // @namespace https://greasyfork.org/users/6406 // @description A script add on for Panda Crazy sending commands to main script. // @include http*://*mturk.com/mturk/myhits* // @include http*://*mturk.com/mturk/findhits* // @include http*://*mturk.com/mturk/sorthits* // @include http*://*mturk.com/mturk/viewhits* // @include http*://*mturk.com/mturk/searchbar* // @include http*://*mturk.com/mturk/previewandaccept?* // @include http*://*mturk.com/mturk/preview?* // @include http*://*mturk.com/mturk/return* // @include http*://*mturk.com/mturk/submit* // @include http*://*mturkcrowd.com/threads/* // @exclude http*://*mturk.com/mturk/findhits?*hit_scraper* // @require http://code.jquery.com/jquery-2.1.4.min.js // @grant GM_getValue // @grant GM_setValue // ==/UserScript== var gScriptVersion = "0.2.0"; var gScriptName = "pandacrazy"; var gLocation = window.location.href; var jobDataDefault = {"requesterName":"","requesterId":"","groupId":"","pay":"","title":"","duration":"0","hitsAvailable":0,"searchLink":""}; function createMessageData(command,data) { return {"time":(new Date().getTime()),"command":command,"data":data}; } function sendCommandMessage(data) { localStorage.setItem("JR_message_" + gScriptName, JSON.stringify(data)); } function createQueueData(length) { return {"queueLength":length}; } function createJobData(jobData) { return {"groupId":jobData.groupId,"title":jobData.title,"requesterName":jobData.requesterName,"requesterId":jobData.requesterId, "pay":jobData.pay,"duration":jobData.duration,"hitsAvailable":jobData.hitsAvailable}; } function sendMessageData(command,theData) { var messageData = createMessageData(command,theData); sendCommandMessage(messageData); } function sendQueueData(queueLength) { sendMessageData("queueData",createQueueData(queueLength)); } function sendJobData(jobData) { sendMessageData("addJob",createJobData(jobData)); } function sendJobOnceData(jobData) { sendMessageData("addOnceJob",createJobData(jobData)); } function sendPingMessage() { localStorage.setItem("JR_message_ping_" + gScriptName, JSON.stringify({"command":"areYouThere","time":(new Date().getTime())})); } function appendPandaButtons(element,jobData) { $(element).append($("<span>").html("Add: ") .append($("<button>").html("Panda").css({"font-size":"10px","line-height":"10px","padding":"1px"}) .data("jobData",jobData) .click(function(e) { sendJobData($(e.target).data("jobData")); return false; })) .append($("<button>").html("Once").css({"font-size":"10px","line-height":"10px","padding":"1px"}) .data("jobData",jobData) .click(function(e) { sendJobOnceData($(e.target).data("jobData")); return false; })) ); } function doSortResultsTable() { var sortResultsTable = $("#sortresults_form").next("table"); $(sortResultsTable).find("> tbody > tr").each(function(i, row) { var jobData = jQuery.extend(true, {}, jobDataDefault); var titleElement = $("#capsule" + i + "-0"); jobData.groupId = $(titleElement).closest("tr").find(".capsulelink a").attr("href").split("groupId=")[1]; jobData.title = $(titleElement).text().trim(); var requesterElement = $(row).find(".requesterIdentity"); jobData.requesterName = $(requesterElement).text().trim(); jobData.requesterId = $(requesterElement).closest("a").attr("href").split("&requesterId=")[1]; jobData.duration = $("#duration_to_complete\\.tooltip--" + i).closest("tr").find(".capsule_field_text").text().trim(); jobData.hitsAvailable = $("#number_of_hits\\.tooltip--" + i).closest("tr").find(".capsule_field_text").text().trim(); var rewardTrTarget = $("#reward\\.tooltip--" + i).closest("tr"); jobData.pay = $(rewardTrTarget).find(".reward").text().replace("$","").trim(); $(rewardTrTarget).append($("<td rowspan='2' width='100%'>").append($("<div>") .attr({"class":"JR_PandaCrazy"}).css({"text-align":"center","width":"100%","display":"inline-block"}))); $(row).find(".JR_PandaCrazy").append($("<span>").html("[ PandaCrazy ]<br>")); appendPandaButtons($(row).find(".JR_PandaCrazy"),jobData); }); } function mainListener(e) { window.removeEventListener("storage", mainListener, false); console.log(JSON.parse(e.newValue).url); if ( e.key == 'JR_message_pong_' + gScriptName && gLocation == (JSON.parse(e.newValue).url)) { var noHitsError = ($("td.error_title:contains('There are currently no HITs assigned to you.')").length > 0); var noHitsAlert = ($("#alertboxHeader:contains('There are currently no HITs assigned to you.')").length > 0); var returnedAlert = ($("#alertboxHeader:contains('The HIT has been returned.')").length > 0); if (gLocation.indexOf("mturk.com/mturk/myhits") != -1 || returnedAlert) { // Get queue number and data then send to Panda Crazy var queueLength = 0, queueData = null; if (noHitsError) { sendQueueData(0); } else { var numberQueueText = $("td.title_orange_text").html(); if (numberQueueText) { var words = numberQueueText.trim().split(' '); if ($.isNumeric(words[words.length - 2])) queueLength = parseInt(words[words.length - 2]); sendQueueData(queueLength); } } } else if (gLocation.indexOf("mturk.com/mturk/findhits") != -1 || gLocation.indexOf("mturk.com/mturk/sorthits") != -1 || gLocation.indexOf("mturk.com/mturk/viewhits") != -1 || gLocation.indexOf("mturk.com/mturk/searchbar") != -1 || noHitsAlert) { // Add buttons to add pandas for Panda Crazy doSortResultsTable(); } else if (gLocation.indexOf("mturk.com/mturk/preview") != -1 || gLocation.indexOf("mturk.com/mturk/return") != -1 || gLocation.indexOf("mturk.com/mturk/submit") != -1) { var jobData = jQuery.extend(true, {}, jobDataDefault); if ($("#alertBox").text().indexOf("There are no HITs in this group available") != -1) { jobData.theGroupID = gLocation.split("groupId=")[1].split("&")[0]; $("#alertBox").append($("<div>").attr({"id":"JR_PandaCrazyTop"}).append($("<span>").html("[Panda Crazy] "))); appendPandaButtons($("#JR_PandaCrazyTop"),jobData); doSortResultsTable(); } else { var capsulelinkElement = $("form[name='hitForm'] .capsulelink_bold"); var tableInfo = $(capsulelinkElement).closest("table").closest("table"); jobData.groupId = (gLocation.indexOf("groupId=") != -1) ? gLocation.split("groupId=")[1].split("&")[0] : ""; jobData.title = $(capsulelinkElement).find("div").text().trim(); jobData.requesterId = ($("input[name='requesterId']:first").val()) ? $("input[name='requesterId']:first").attr("value") : ""; jobData.requesterName = $("#requester\\.tooltip").closest("td").next().text().trim(); jobData.duration = $("#time_left\\.tooltip").closest("td").next().text().trim(); jobData.hitsAvailable = $("#number_of_hits\\.tooltip").closest("td").next().text().trim(); jobData.pay = $("#reward\\.tooltip").closest("td").next().text().replace("$","").replace(" per HIT","").trim(); $("#qualifications\\.tooltip").closest("td").next().attr({"width":"100%"}); $("#qualifications\\.tooltip").closest("tr").append($("<td width=420 nowrap='' align=left>") .append($("<span>").attr({"class":"JR_PandaCrazy"}).html("[ PandaCrazy ] "))); appendPandaButtons($(".JR_PandaCrazy:first"),jobData); } } } } function startMessageListener() { window.addEventListener("storage", mainListener, false); setTimeout( function() { sendPingMessage(); }, 1000); } $(function() { startMessageListener(); });