AMT Searchbar

A Simple Mturk/Greasyfork/MTG search bar

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         AMT Searchbar
// @namespace    http://i.imgur.com/UNrCfvr.gif
// @version      1.01
// @description  A Simple Mturk/Greasyfork/MTG search bar
// @author       Ethraiel
// @contributor  R.Daneel
// @include      *.mturkgrind.*
// @include      *.reddit.*
// @include      *.mturk.*
// @require      https://code.jquery.com/jquery-3.0.0-alpha1.min.js
// ==/UserScript==
//press backtick [`] to toggle the searchbar
var theme_no = "0";//***0******1*******2******3*******4************5*******the names of the themes are below their respective numbers because im lazy :P
var theme_name = ["Custom","Dark","Frost","Mint","Ole'Greg","Dark_plain","",""];//set the theme_no to set the theme...
var search = "";//This is a default value for the searchbar, i.e. "survey" will make "survey" appear when you bring up the searchbar.
var minpay = ("0.00");//Same as above, but for the minimum pay field.
var qual = "false";//Set to "true" to automatically check the box "Qualled For" everytime you bring up the searchbar. *note any string other than "true" will return false.
var master = "false";//Same as above but for "Masters Only"

if ( localStorage.getItem("AMTSBtheme") ) {
    theme_no = localStorage.getItem("AMTSBtheme");
}

if (theme_no == "0"){
var panel_bg = "white";//CUSTOM********[theme_no = 0]*************CUSTOM
var text_color = "black";//sets the text color*note the above var sets the panel background color
var border_color = "grey";//the color of all the borders
var text_bg = "white";//sets the textfield background color
var button_bg = "white";//sets the button background color
var button_hover ="white";//sets the color of the button when hovered over
var button_hover_text = "blue";//sets the color of the text when the button is hovered over
var greyed_out_payfield_bg = "grey";//sets the color of the minpay field when disabled
}

else if (theme_no == 1){//Dark**********[ theme_no = 1 ]****************Dark
var panel_bg = "-webkit-linear-gradient(top,rgb(67, 66, 66) 0,rgb(32, 32, 32) 100%) repeat-y; background: -moz-linear-gradient(top,rgb(67, 66, 66) 0,rgb(32, 32, 32) 100%) repeat-y";
var text_bg = "-webkit-linear-gradient(top,rgb(56, 56, 56) 0,rgb(25, 25, 25) 100%) repeat-x; background: -moz-linear-gradient(top,rgb(56, 56, 56) 0,rgb(25, 25, 25) 100%) repeat-x";
var button_bg = "-webkit-linear-gradient(top,rgb(84, 83, 83) 0,rgb(48, 48, 48) 100%) repeat-x; background: -moz-linear-gradient(top,rgb(84, 83, 83) 0,rgb(48, 48, 48) 100%) repeat-x";
var border_color = "rgb(15, 15, 22)";
var text_color = "rgb(12, 144, 195)";
var button_hover ="-webkit-linear-gradient(top,rgb(85, 91, 101) 0,rgb(48, 48, 48) 100%) repeat-x; background: -moz-linear-gradient(top,rgb(85, 91, 101) 0,rgb(48, 48, 48) 100%) repeat-x";
var button_hover_text = "rgb(30, 165, 220)";
var greyed_out_payfield_bg = "rgb(60, 45, 45)";
}
else if (theme_no == 2){//Frost**********[ theme_no = 2 ]****************Frost
var panel_bg = "-webkit-linear-gradient(top,rgb(225, 244, 251) 0,rgb(121, 190, 255) 100%) repeat-x; background: -moz-linear-gradient(top,rgb(225, 244, 251) 0,rgb(121, 190, 255) 100%) repeat-x";
var text_bg = "-webkit-linear-gradient(top,rgb(241, 241, 241) 0,rgb(198, 216, 232) 100%) repeat-x !important; background: -moz-linear-gradient(top,rgb(241, 241, 241) 0,rgb(198, 216, 232) 100%) repeat-x !important";
var button_bg = "-webkit-linear-gradient(top,rgba(151, 182, 250, 0.97) 0,rgb(51, 95, 162) 100%) repeat-x; background: -moz-linear-gradient(top,rgba(151, 182, 250, 0.97) 0,rgb(51, 95, 162) 100%) repeat-x";
var border_color = "rgb(70, 110, 180)";
var text_color = "rgb(0, 57, 79)";
var button_hover ="-webkit-linear-gradient(top,rgba(175, 195, 255, 0.97) 0,rgb(70, 110, 180) 100%) repeat-x; background: -moz-linear-gradient(top,rgba(175, 195, 255, 0.97) 0,rgb(70, 110, 180) 100%) repeat-x";
var button_hover_text = "rgb(1, 69, 85)";
var greyed_out_payfield_bg = "rgb(210, 145, 145)";
}
else if (theme_no == 3){//Mint**********[ theme_no = 3 ]****************Mint
var panel_bg = "-webkit-linear-gradient(top,rgb(176, 251, 170) 0,rgb(142, 255, 151) 100%) repeat-x; background: -moz-linear-gradient(top,rgb(176, 251, 170) 0,rgb(142, 255, 151) 100%) repeat-x";
var text_bg = "-webkit-linear-gradient(top,rgba(233, 249, 235, 0.97) 0,rgb(245, 179, 234) 100%) repeat-x; background: -moz-linear-gradient(top,rgba(233, 249, 235, 0.97) 0,rgb(245, 179, 234) 100%) repeat-x";
var button_bg = "-webkit-linear-gradient(top,rgba(255, 200, 236, 0.97) 0,rgb(255, 108, 231) 100%) repeat-x; background: -moz-linear-gradient(top,rgba(255, 200, 236, 0.97) 0,rgb(255, 108, 231) 100%) repeat-x";
var border_color = "rgb(6, 170, 53)";
var text_color = "rgb(116, 27, 81)";
var button_hover ="-webkit-linear-gradient(top,rgba(255, 200, 236, 0.97) 0,rgb(255, 125, 255) 100%) repeat-x; background: -moz-linear-gradient(top,rgba(255, 200, 236, 0.97) 0,rgb(255, 125, 255) 100%) repeat-x";
var button_hover_text = "rgb(196, 47, 138)";
var greyed_out_payfield_bg = "rgb(150, 190, 75)";
}
else if (theme_no == 4){//Ole'Gregg**********[ theme_no = 4 ]****************Ole'Gregg
var panel_bg = "-webkit-linear-gradient(top,rgb(236, 69, 236) 0,rgb(159, 37, 119) 100%) repeat-x; background: -moz-linear-gradient(top,rgb(236, 69, 236) 0,rgb(159, 37, 119) 100%) repeat-x";
var text_bg = "-webkit-linear-gradient(top,rgba(158, 230, 79, 0.97) 0,rgb(143, 194, 141) 100%); background: -moz-linear-gradient(top,rgba(158, 230, 79, 0.97) 0,rgb(143, 194, 141) 100%)";
var button_bg = "-webkit-linear-gradient(top,rgba(130, 191, 64, 0.97) 0,rgb(10, 148, 4) 100%) repeat-x; background: -moz-linear-gradient(top,rgba(130, 191, 64, 0.97) 0,rgb(10, 148, 4) 100%) repeat-x";
var border_color = "rgb(48, 94, 48)";
var text_color = "rgb(75, 25, 75)";
var button_hover ="-webkit-linear-gradient(top,rgba(145, 210, 79, 0.97) 0,rgb(27, 159, 10) 100%) repeat-x; background: -moz-linear-gradient(top,rgba(145, 210, 79, 0.97) 0,rgb(27, 159, 10) 100%) repeat-x";
var button_hover_text = "rgb(55, 99, 55)";
var greyed_out_payfield_bg = "rgb(100, 55, 100)";
}
else if (theme_no == 5){//Dark_plain**********[ theme_no = 5 ]****************Dark_plain
var panel_bg = "rgb(45, 45, 45)";
var text_bg = "rgb(30, 30, 30)";
var button_bg = "rgb(40, 40, 40)";
var border_color = "rgb(15, 15, 22)";
var text_color = "rgb(12, 144, 195)";
var button_hover ="rgb(45, 45, 55)";
var button_hover_text = "rgb(30, 165, 220)";
var greyed_out_payfield_bg = "rgb(60, 45, 45)";
}
//note you can also add new custom themes here... simply add another "else if (theme_no == [your theme number]){" then copy and paste your custom theme under it and dont forget to add the closing "}"

var textfield_focus =  "";//".eJtextfields:focus {box-shadow: 0px 0px 7px 1.5px rgba(15, 15, 20, 0.75);}";(this is a style that i'd like to have on some themes and not on others... just replace "" with what comes after //)

//you can play with some of the finer details below, note that any changes you make will apply to all themes
var theme =`<style id= "Theme_No.`+theme_no+`" name="`+theme_name[theme_no]+`">
.eJmain {
    position: relative;
    color: `+text_color+`;
    box-sizing: initial;
    border-radius: 2em;
    font: bold 15px Arial;
    margin: 0;
    outline: none !important;
    padding: 2px !important;
    min-height: 0px;
    text-align: left;

}

.eJpanel {
    height: 85px;
    width: 440px;
    background: `+panel_bg+`;
    border: 2.5px solid `+border_color+`;
    box-shadow: 5px 7px 5px 3px rgba(15, 15, 20, 0.72);
    transition-property: height;
    transition-duration: 0.65s;
}

.eJtop_row {
    width: 500px;
    position: relative;
    top: 20px;
    left: 7.5px;
}

.eJtextfields {
    height: 18px;
    background: `+text_bg+` !important;
    border: .5px solid `+border_color+`;
    box-shadow: inset 0px 4px 6px -2px rgba(15, 15, 20, 0.8);
    font-stretch: normal;
    transition-property: border, background, box-shadow;
    transition-duration: 1s;
}
`+textfield_focus+`
.eJalign_right {
    text-align: right;
}

.eJbutton {
    height: 18px;
    width: 75px;
    background: `+button_bg+`;
    border: 0px solid `+border_color+`;
    box-shadow: 1.5px 1.5px 2px 1px rgba(15, 15, 20, 0.75);
    text-align: center;
}

.eJbutton:hover {
    box-shadow: 1.5px 2px 2px 1px rgba(15, 15, 20, 0.55);
    background: `+button_hover+`;
    color: `+button_hover_text+`;
    cursor:pointer;
}

.eJbutton:active {
    box-shadow: 1px 1px 0px 0px rgba(15, 15, 20, 0.55);
}

.eJtoggle_button {
    height: 15px;
    width: 15px;
}

.eJsecond_row {
    position: relative;
    top: 15px;
    left: 215px;
}

.eJanimate {
    height: 165px;
}

.eJsmallfont {
    font: bold 12px Arial;
    position: relative;
    top: 25px;
    left: 20px;
    opacity: 1;
    transition-property: opacity;
    transition-duration: 1s;
}

.eJcheckbox {
    height: 14px;
    width: 14px;
    margin-left 15px;
    vertical-align: middle;
}

.eJdrop_menu {
    height: 18px;
    width: 100px;
    position: relative;
    top: 12.5px;
    left: 235px;
    opacity: 1;
    transition-property: opacity, display;
    transition-duration: 1s;
}
.eJdisable {
    background: `+greyed_out_payfield_bg+` !important;
    box-shadow: 0px 0px 0px 0px rgba(1, 1, 1, 0.0);
    border: none;
}

.eJhidden_menu {
    opacity: 0;
}

</style>`;


var AMT_Searchbar =/*div structure-you should only have to edit the theme dropdown menu if you want to add a theme to that menu*/`
<div id="eJAMTcapsule" class="cap" style="position: fixed; top: 24%; left: 31%; z-index: 3; display: none;">

     <div id="eJmain_panel" class="eJmain eJpanel">

        <div id="eJhomebar" class="eJtop_row">

            <input type="text" id="eJsearch_field" class="eJmain eJtextfields" size="30">
            <input type="text" id="eJpay_field" class="eJmain eJtextfields eJalign_right" size="3">
            <button type="button" id="eJsearch_button" class="eJmain eJbutton">Search</button>

                <div style="height: 1px;">
                    <select name="eJdropdown" id="eJgreasy_drop" class="eJmain eJtextfields eJdrop_menu eJhidden_menu">
                    <option value="">Relevance</option>
                    <option value="&sort=daily_installs">Daily Installs</option>
                    <option value="&sort=total_installs">Total Installs</option>
                    <option value="&sort=ratings">Ratings</option>
                    <option value="&sort=created">Created Date</option>
                    <option value="&sort=updated">Updated Date</option>
                    <option value="&sort=name">Name</option>
                    </select>
                </div>

        </div></br>

            <button type="button" id="eJanimate_button" class="eJmain eJbutton eJtoggle_button eJsecond_row">⇕</button>

        <div id="eJchecks" class="eJsmallfont eJhidden_menu">
            <input type="checkbox" id="eJqual_box" class="eJmain eJcheckbox" value="Qualed"> Qualified For
            <span style="display:inline-block; width: 180px;"></span>
            Search GreasyFork  <input type="checkbox" id="eJgreasy_box" class="eJmain eJcheckbox eJalign_right" value="urls"></br>
            <input type="checkbox" id="eJmaster_box" class="eJmain eJcheckbox" value="Masters"> Masters Only
            <span style="display:inline-block; width: 218px;"></span>
            Search MTG  <input type="checkbox" id="eJMTG_box" class="eJmain eJcheckbox eJalign_right" value="urls"></br></br>
            <button type="button" id="eJtheme_button" class="eJmain eJbutton eJtoggle_button"><img src="http://i.imgur.com/dvGS1s8.png"></button>
                    <select name="eJ1dropdown" id="eJtheme_drop" class="eJmain eJtextfields eJhidden_menu">
                    <option value="`+theme_no+`">`+theme_name[theme_no]+`</option>
                    <option value="0">`+theme_name[0]+`</option>
                    <option value="1">`+theme_name[1]+`</option>
                    <option value="2">`+theme_name[2]+`</option>
                    <option value="3">`+theme_name[3]+`</option>
                    <option value="4">`+theme_name[4]+`</option>
                    <option value="5">`+theme_name[5]+`</option>
                    </select>
        </div>

     </div>

</div>
;`;

$("head").append($(theme));
$("body").append($(AMT_Searchbar));
$("#eJgreasy_drop").prop("disabled", true);
$("#eJtheme_drop").prop("disabled", true);

var search1 = "";//Using the var "search" as a default would not work without this var. neither would using "" as a defualt clear the searchbar on toggle
var eJflag1 = -1;//flag used to control the dropdown of the hidden menu
var inject_search = "";//general var that will carry any of the URLs required for search

$.fn.extend({valid_num: function() {//to escape the minpay field of any invalid characters *Thanks R.Daneel*
    vn = this.val().replace(/[^\d\.]/g, '');
        return (vn.length > 0 && /\d/.test(vn)) ? vn : minpay;
}});

$.fn.extend({valid_srch: function() {//to make sure there are not just spaces typed into the searchbar (probably not needed, but i like it)
    vs = this.val();
        return (vs.trim().length > 0) ? vs : search;
}});

$.fn.extend({box_manager: function() {//this is important... it manages the url injection for "qualed" and "masters" as well as assigning the var "inject_search" with the proper URL later on
    cb = this.prop("checked");
    if ($(this).attr("id") === "eJqual_box"){
        return (cb === true) ? "qualifiedFor=on" : "";
    }
    else if ($(this).attr("id") === "eJmaster_box"){
        return (cb === true) ? "requiresMasterQual=on" : "";
    }
    else if ($(this).attr("id") === "eJgreasy_box"){
        return (cb === true) ? "https://greasyfork.org/en/scripts/search?q="+($("#eJsearch_field").valid_srch())+""+($("#eJgreasy_drop").val()) : "https://www.mturk.com/mturk/searchbar?selectedSearchType=hitgroups&searchWords="+$("#eJsearch_field").valid_srch()+"&minReward="+$("#eJpay_field").valid_num()+"&"+$("#eJqual_box").box_manager()+"&"+$("#eJmaster_box").box_manager();
    }
    else if ($(this).attr("id") === "eJMTG_box"){
        return (cb === true) ? "http://www.mturkgrind.com/search/7230196/?q="+($("#eJsearch_field").valid_srch())+"&o=date" : inject_search;
    }
}});

$(document).keydown(function(e){//toggle function--- press[`] (backtick) to toggle the searchbar *note this is also responsible for applying most of the default values
     if (e.which == 192) {
         search1 = search;
       if (qual == "true"){
           $("#eJqual_box").prop("checked", true);
       }
       if (master == "true"){
           $("#eJmaster_box").prop("checked", true);
       }
       if (window.getSelection().toString() !== ""){//this will paste whatever you have selected on the page into the searchbar when you press the toggle button (select a requester name in the forum, then toggle the searchbar and the name will already be in the searchbar)
           search1 = window.getSelection().toString();
       }
         $("#eJsearch_field").val(search1);
         $("#eJpay_field").prop("readonly") === true ? $("#eJpay_field").val("") : $("#eJpay_field").val(minpay);
         $("#eJAMTcapsule").toggle();
         (e.preventDefault());
         $("#eJsearch_field").focus();//this can be changed to ".select();" to select all the text in the searchfield as you toggle the searchbar
     }
});

$(".eJcheckbox").click(function(e){//this messy logic makes sure that, when you change which site you want to search, the proper things happen...i.e. disabling the minpay field, toggling the hidden dropmenu... 
    if ($(this).attr("id") === "eJgreasy_box") {//this manages the greasyfork checkbox and everything that happens when you click it
        if (eJflag1 == 1) {
            $(this).prop("checked") === true ? ($("#eJpay_field").addClass("eJdisable").val("").prop("readonly", true)) : ($("#eJpay_field").removeClass("eJdisable").val(minpay).prop("readonly", false));
            $("#eJgreasy_drop").prop("disabled") === true ? ($("#eJgreasy_drop").prop("disabled", false).toggleClass("eJhidden_menu")) : ($("#eJgreasy_drop").prop("disabled", true).toggleClass("eJhidden_menu"));
            $("#eJMTG_box").prop("checked", false);
        }
        else (e.preventDefault());
    }
    if ($(this).attr("id") === "eJMTG_box") {//this manages the MTG checkbox and everything that happens when you click it
        if (eJflag1 == 1) {
            $(this).prop("checked") === true ? ($("#eJpay_field").addClass("eJdisable").val("").prop("readonly", true)) : ($("#eJpay_field").removeClass("eJdisable").val(minpay).prop("readonly", false));
            $("#eJgreasy_drop").prop("disabled") === true ?  $("#eJgreasy_drop").prop("disabled", true) : ($("#eJgreasy_drop").prop("disabled", true).toggleClass("eJhidden_menu"));
            $("#eJgreasy_box").prop("checked", false);
        }
        else (e.preventDefault());
    }
});


$(".eJbutton").click(function(e){//this makes things happen when you click any button
    if ($(this).attr("id") === "eJsearch_button") {//this is the search button
        inject_search = $("#eJgreasy_box").box_manager();
        inject_search = $("#eJMTG_box").box_manager();
        $("#eJAMTcapsule").toggle();
        window.open(inject_search);
    }
    if ($(this).attr("id") === "eJtheme_button") {//this is the theme changing button, click once to bring up the drop menu and select your theme, click again to save your theme...*note the line directly beneath this one places the text in the search bar when you click the theme button, you can change this text to whatever you like.
        $("#eJtheme_drop").prop("disabled") === true ? $("#eJsearch_field").val("Press again to save your theme...") : $("#eJsearch_field").val("Please refresh the page");
        $("#eJtheme_drop").prop("disabled") === true ? $("#eJtheme_drop").toggleClass("eJhidden_menu").prop("disabled", false) : $("#eJtheme_drop").toggleClass("eJhidden_menu").prop("disabled", true);
        localStorage.AMTSBtheme = $("#eJtheme_drop").val();
    }
    if ($(this).attr("id") === "eJanimate_button") {//this is the hidden menu toggle button
        if (eJflag1 == -1) {
            $("#eJmain_panel").toggleClass("eJanimate");
            setTimeout(function(){$(".eJsmallfont").toggleClass("eJhidden_menu");}, 500);
            eJflag1 = (eJflag1)*-1;
        }
            else {
                $(".eJsmallfont").toggleClass("eJhidden_menu");
                setTimeout(function(){$("#eJmain_panel").toggleClass("eJanimate");}, 650);
                eJflag1 = (eJflag1)*-1;
        }
    }
});

$(".eJtextfields").keyup(function(e){//this makes things happen when you press enter in a searchfield
    if (e.which == 13) {
      inject_search = $("#eJgreasy_box").box_manager();
      inject_search = $("#eJMTG_box").box_manager();
      $("#eJAMTcapsule").toggle();
      window.open(inject_search);
    }
});