// ==UserScript==
// @name Block Individual Requests
// @author Turksquatch
// @version 0.0.5
// @namespace http://www.turksquatch.com/
// @homepage http://mturkforum.com/showthread.php?4441-New-Script-to-Block-Individual-Hits&p=56939
// @description Hide individual HITs you're not interested in.
// @include https://www.mturk.com/mturk/findhits*
// @include https://www.mturk.com/mturk/searchbar*
// @include https://www.mturk.com/mturk/viewsearchbar*
// @include https://www.mturk.com/mturk/sortsearchbar*
// @include https://www.mturk.com/mturk/sorthits*
// @include https://www.mturk.com/mturk/viewhits*
// ==/UserScript==
requestIndex = GM_getValue("requestIndex");
if(!requestIndex) {
//alert(requestIndex);
requestIndex="";
GM_setValue("requestIndex","");
}
function showUpdates() {
updated = GM_getValue('requestUpdated');
if (updated) {
tables = document.evaluate("//table",document,null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,null);
table = tables.snapshotItem(6);
action = updated.split(',');
rId = action[1].split('::')[0];
rName = action[1].split('::')[1];
div = document.createElement('div');
div.id = 'updated';
status = "<div class='message success'><h6><span id='alertboxHeader'>"+action[0]+" "+rName;
if (action[0]=='Blocked') {
status+=" <a style='font-size:80%;' href='javascript:unblockRequest(\""+rId+"\",\""+rName+"\");' title='Unblock this request'>undo</a>";
}
div.innerHTML = status + "</h6></span></div>";
table.parentNode.insertBefore(div, table);
GM_deleteValue('requestUpdated');
}
}
function hideHIT(element) {
pa=element, step=0;
while (step++ < 11) {
ch = pa;
pa = pa.parentNode;
}
pa.className = "rblocked";
}
function unhideHIT(element) {
pa=element, step=0;
while (step++ < 11) {
ch = pa;
pa = pa.parentNode;
}
pa.className = "";
}
function hideMatchingHITs() {
var numBlocked=0;
theseRequests = document.evaluate("//a[starts-with(@href,'/mturk/preview?groupId=')]",document,null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,null);
for (i=0; i<theseRequests.snapshotLength; i++) {
rLink = theseRequests.snapshotItem(i);
rLink.parentNode.nowrap = false;
rName = "x";
rId = rLink.href.toString().split('=')[1];
if (requestIndex.indexOf(rId) != -1 && location.href.indexOf(rId) == -1) {
newElement = document.createElement('a');
newElement.innerHTML = " <a style='font-size:80%;' href='javascript:unblockRequest(\""+rId+"\",\""+rName+"\");' title='Unblock this request'>unblock</a>";
rLink.parentNode.insertBefore(newElement, rLink.nextSibling);
hideHIT(rLink);
numBlocked+=1;
} else {
newElement = document.createElement('a');
newElement.innerHTML = " <a href='javascript:blockRequest(\""+rId+"\","+i+");' style='font-size:80%;' title='Block this request'>x</a>";
rLink.parentNode.insertBefore(newElement, rLink.nextSibling);
}
}
return numBlocked;
}
unsafeWindow.unhideAllHITs = function () {
theseRequests = document.evaluate("//a[starts-with(@href,'/mturk/preview?groupId=')]",document,null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,null);
for (i=0; i<theseRequests.snapshotLength; i++) {
unhideHIT(theseRequests.snapshotItem(i));
}
}
function showNumBlocked(numBlocked) {
collapseAll = document.getElementById('collapseall');
showAllBlocked = document.createElement("span");
showAllBlocked.innerHTML = ' <font color="#9ab8ef">|</font> <a href="javascript:unhideAllHITs();" class="footer_links" id="showrblocked">Show ' + numBlocked + ' rBlocked</a>';
collapseAll.parentNode.insertBefore(showAllBlocked, collapseAll.nextSibling);
}
unsafeWindow.blockRequest = function (rId,i) {
rName = "x";
rEntry = rId+"::"+rName;
requestIndex+= rEntry+"}{";
if (confirm("Hide this HIT?")) {
window.setTimeout(function() {
GM_setValue("requestIndex", requestIndex);
GM_setValue("requestUpdated", "Blocked,"+rEntry);
}, 0);
//window.setTimeout(GM_setValue, 0, "requestIndex", requestIndex);
//window.setTimeout(GM_setValue, 0, "requestUpdated", "Blocked,"+rEntry);
document.location.reload();
}
}
unsafeWindow.unblockRequest = function (rId,rName) {
theseRequests = document.evaluate("//a[starts-with(@href,'/mturk/preview?groupId=')]",document,null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,null);
rEntry = rId+"::"+rName;
half = requestIndex.split(rId+"::");
left = half[0];
temp = half[1].split('}{');
right = temp[1]+"}{";
if (temp.length>1) {
for (i=2;i<temp.length-1;i++) {
right+=temp[i]+"}{";
}
}
requestIndex = left + right;
window.setTimeout(function() {
GM_setValue("requestIndex", requestIndex);
GM_setValue("requestUpdated", "Unblocked,"+rEntry);
}, 0);
//window.setTimeout(GM_setValue, 0, "requestIndex", requestIndex);
//window.setTimeout(GM_setValue, 0, "requestUpdated", "Unblocked,"+rEntry);
document.location.reload();
}
function addGlobalStyle(css) {
head = document.getElementsByTagName('head')[0];
if (!head) { return; }
style = document.createElement('style');
style.type = 'text/css';
style.innerHTML = css;
head.appendChild(style);
}
addGlobalStyle('.rblocked { display: none; }');
showUpdates();
showNumBlocked(hideMatchingHITs());