Warning: fopen(/www/sites/update.greasyfork.icu/index/store/temp/84f8c1e41b80f63577a5b4cce0aae88b.js): failed to open stream: No space left on device in /www/sites/update.greasyfork.icu/index/scriptControl.php on line 65
// ==UserScript== // @name CH Requester Results Refinements // @author clickhappier // @namespace clickhappier // @description Use the MTurk 'All HITs' search filter options on individual requester results pages too. Displays which filter settings you used, and adds contact and TO links, even on 'no results' requester pages. // @version 1.0.1c // @match https://www.mturk.com/mturk/searchbar?* // @match https://www.mturk.com/mturk/viewsearchbar?* // @require http://code.jquery.com/jquery-latest.min.js // @grant GM_log // @downloadURL https://update.greasyfork.icu/scripts/8617/CH%20Requester%20Results%20Refinements.user.js // @updateURL https://update.greasyfork.icu/scripts/8617/CH%20Requester%20Results%20Refinements.meta.js // ==/UserScript== // get URL variable - from http://css-tricks.com/snippets/javascript/get-url-variables/ function getQueryVariable(variable) { var query = window.location.search.substring(1); var vars = query.split("&"); for ( var i=0; i -1) ) // requester results page { isReqPage = "yes-results"; requesterIdQueryVar = getQueryVariable('requesterId'); } else if ( (getQueryVariable('requesterId')) && ($('td.error_title').text().trim().indexOf('Your search did not match any HITs.') > -1) ) // no search results page { isReqPage = "yes-noresults"; requesterIdQueryVar = getQueryVariable('requesterId'); } // retrieve info for display if ( (isReqPage == "yes-results") || (isReqPage == "yes-noresults") ) { if ( getQueryVariable('prevRequester') ) { requesterNameQueryVar = decodeURIComponent(getQueryVariable('prevRequester')).replace(/\+/g," "); } if ( getQueryVariable('searchWords') ) { keywordQueryVar = decodeURIComponent(getQueryVariable('searchWords')).replace(/\+/g," "); } if ( getQueryVariable('minReward') ) { minpayQueryVar = getQueryVariable('minReward'); } if ( getQueryVariable('qualifiedFor') ) { qualifiedQueryVar = getQueryVariable('qualifiedFor'); } if ( getQueryVariable('requiresMasterQual') ) { mastersQueryVar = getQueryVariable('requiresMasterQual'); } if ( getQueryVariable('sortType') ) { sorttypeQueryVar = decodeURIComponent(getQueryVariable('sortType')); } if ( isReqPage == "yes-results" ) { requesterNameFromPage = $('td.title_orange_text_bold').text().trim().replace("HITs Created by '","").replace("'",""); } // build output string displayFilterString = "HITs by "; if ( requesterNameFromPage != "" ) { displayFilterString += requesterNameFromPage + " (" + requesterIdQueryVar + ")"; } else if ( requesterNameQueryVar != "" ) { displayFilterString += requesterNameQueryVar + " (" + requesterIdQueryVar + ")"; } else { displayFilterString += "requester ID " + requesterIdQueryVar; } if ( keywordQueryVar != "" ) { displayFilterString += ", containing '" + keywordQueryVar + "'"; } if ( (minpayQueryVar != "") && (minpayQueryVar != "0.00") ) { displayFilterString += ", that pay at least $" + minpayQueryVar; } if ( (qualifiedQueryVar != "") && (qualifiedQueryVar != "off") ) { displayFilterString += ", for which you are qualified"; } if ( (mastersQueryVar != "") && (mastersQueryVar != "off") ) { displayFilterString += ", which require Masters"; } if ( (sorttypeQueryVar != "") ) { displayFilterString += ", sorted by "; switch(sorttypeQueryVar) { case "LastUpdatedTime:0": displayFilterString += "HIT Creation Date (oldest first)"; break; case "LastUpdatedTime:1": displayFilterString += "HIT Creation Date (newest first)"; break; case "NumHITs:0": displayFilterString += "HITs Available (fewest first)"; break; case "NumHITs:1": displayFilterString += "HITs Available (most first)"; break; case "Reward:0": displayFilterString += "Reward Amount (least first)"; break; case "Reward:1": displayFilterString += "Reward Amount (most first)"; break; case "LatestExpiration:0": displayFilterString += "Expiration Date (soonest first)"; break; case "LatestExpiration:1": displayFilterString += "Expiration Date (latest first)"; break; case "Title:0": displayFilterString += "Title (A-Z)"; break; case "Title:1": displayFilterString += "Title (Z-A)"; break; case "AssignmentDurationInSeconds:0": displayFilterString += "Time Allotted (least first)"; break; case "AssignmentDurationInSeconds:1": displayFilterString += "Time Allotted (most first)"; break; default: displayFilterString += "unknown value " +sorttypeQueryVar; break; } } } // build contact and TO links if ( requesterIdQueryVar != "" ) { if ( requesterNameQueryVar != "" ) { requesterLinks = ' - Contact' + ' - TO Reviews'; } else if ( requesterNameFromPage != "" ) { requesterLinks = ' - Contact' + ' - TO Reviews'; } else { requesterLinks = ' - Contact' + ' - TO Reviews'; } } // add current filter info and links to page if (isReqPage == "yes-results") { $('td.title_orange_text').first().parent().after('

' + displayFilterString + requesterLinks + '

'); } else if (isReqPage == "yes-noresults") { $('td.blue_text_14').prepend('

' + displayFilterString + requesterLinks + '


'); } // build filter interface if ( (isReqPage == "yes-results") || (isReqPage == "yes-noresults") ) { // begin div/paragraph reqFilterInterface = '

'; // build prevRequester-applier textbox reqFilterInterface += 'Apply Filters To Requester '; // build re-sort checkbox reqFilterInterface += ''; reqFilterInterface += ''; // build replacement sort selector for no-results pages if ( isReqPage == "yes-noresults" ) { reqFilterInterface += '

' + '

'; } // close div/paragraph reqFilterInterface += '

'; // add interface to page $('div#searchbar').after(reqFilterInterface); // change sort selector based on existing query string if ( sorttypeQueryVar != "" ) { $('select[name=sortType]').val(sorttypeQueryVar); } else // normal default of 'HIT Creation Date (newest first)' { $('select[name=sortType]').val('LastUpdatedTime:1'); } } // add filter action if ( $('#requesterFilterInterface').length > 0 ) { $('button#reqFilterButton').click(function() { // get form inputs for filter settings requesterNameFormInput = $('input#reqName').val(); keywordFormInput = $('input#searchbox').val(); minpayFormInput = $('input[name=minReward]').val(); qualifiedFormInput = $('input#qualified_for').is(':checked'); mastersFormInput = $('input#master_qual').is(':checked'); sorttypeFormInput = $('select[name=sortType]').val(); reqsortFormInput = $('input#reqSort').is(':checked'); // build filtered URL filteredReqUrl = "https://www.mturk.com/mturk/searchbar?selectedSearchType=hitgroups"; filteredReqUrl += "&requesterId=" + requesterIdQueryVar; if ( requesterNameFormInput != "" ) { filteredReqUrl += "&prevRequester=" + encodeURIComponent(requesterNameFormInput).replace(/%20/g,"+"); } if ( keywordFormInput != "" ) { filteredReqUrl += "&searchWords=" + encodeURIComponent(keywordFormInput).replace(/%20/g,"+"); } if ( (minpayFormInput != "") && (minpayFormInput != "0.00") ) { filteredReqUrl += "&minReward=" + minpayFormInput; } if ( qualifiedFormInput != "" ) { filteredReqUrl += "&qualifiedFor=on"; } if ( mastersFormInput != "" ) { filteredReqUrl += "&requiresMasterQual=on"; } if ( reqsortFormInput != "" ) { filteredReqUrl += "&sortType=" + sorttypeFormInput; } // redirect to filtered URL window.location.href = filteredReqUrl; }); } // override sort button action to not unnecessarily go to icky searchSpec URL format that this script can't work on, // but only if you're not on a page of results beyond the first (using viewsearchbar? instead of searchbar?), // at which point you must use the icky format or it won't have any effect if ( ($('form#sortresults_form').length > 0) && (window.location.href.indexOf('viewsearchbar') < 0) ) { $('form#sortresults_form').on('submit', function(e){ // override existing form action e.preventDefault(); e.returnValue = false; // get sortType selection sorttypeFormInput = $('select[name=sortType]').val(); var nonHashUrl = (window.location.href).split('#'); // redirect to sorted or re-sorted URL if ( getQueryVariable('sortType') ) { window.location.href = setQueryVariable(window.location.href, 'sortType', sorttypeFormInput); } else { window.location.href = nonHashUrl[0] + '&sortType=' + sorttypeFormInput; } }); } // append the otherwise-useless searchbar?-style variables with usable data to the page-number-navigation links // on results pages, so they will be retained for display purposes on pages beyond the first if ( isReqPage == "yes-results" ) { $('a[href^="/mturk/viewsearchbar"]').each(function() { var oldLinkUrl = $(this).attr('href'); var newLinkUrl = ""; // build supplemented nav links newLinkUrl = setQueryVariable(oldLinkUrl, 'requesterId', requesterIdQueryVar); if ( requesterNameQueryVar != "" ) { newLinkUrl = setQueryVariable(newLinkUrl, 'prevRequester', encodeURIComponent(requesterNameQueryVar).replace(/%20/g,"+") ); } if ( keywordQueryVar != "" ) { newLinkUrl = setQueryVariable(newLinkUrl, 'searchWords', encodeURIComponent(keywordQueryVar).replace(/%20/g,"+") ); } if ( (minpayQueryVar != "") && (minpayFormInput != "0.00") ) { newLinkUrl = setQueryVariable(newLinkUrl, 'minReward', minpayQueryVar); } if ( qualifiedQueryVar == "on" ) { newLinkUrl = setQueryVariable(newLinkUrl, 'qualifiedFor', "on"); } if ( mastersQueryVar == "on" ) { newLinkUrl = setQueryVariable(newLinkUrl, 'requiresMasterQual', "on"); } if ( sorttypeQueryVar != "" ) { newLinkUrl = setQueryVariable(newLinkUrl, 'sortType', sorttypeQueryVar); } // apply completed url $(this).attr('href', newLinkUrl); }); }