[Script] PI Search Script FIX

Discussion in 'mTurk Scripts & Resources' started by ceedj, Jan 19, 2017.

  1. ceedj

    ceedj Survey Slinger

    Messages:
    2,767
    Gender:
    Male
    Ratings:
    +6,020
    I did not create this script, nor the fix (that was done by @Melting Glacier ), I am just posting it here so people have it.

    The fix: add this to your include entries near the top of the script:

    Code:
    // @include      https://www.mturkcontent.com/*
    Full script (will remove if asked:

    Code:
    // ==UserScript==
    // @name         PI Search Helper Script
    // @namespace    https://greasyfork.org/en/users/10782
    // @version      0.4111
    // @description  Keyword highlighting, keyboard shortcuts and autoselect options. Helper script for PI search in mturk. Disable script when not in use.
    // @author       tismyname
    // @require      https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js  
    // @include      https://s3.amazonaws.com/*
    // @include      https://www.mturkcontent.com/*
    // ==/UserScript==
    
    // Makes Instructions Hidable
    $(".panel-heading").before('<label id="toggle-label" style="color:#0000EE; "><input type="checkbox" id="toggler"><span>-Show Instructions-<span></input><br></label>')
    $(".panel-heading").hide();
    $(".panel-body").hide();
    var text = $('#toggle-label').text();
    
    // Button to show or hide instructions
    $('#toggler').click(function() {
        $(".panel-heading").toggle();
        $(".panel-body").toggle();
        $('#toggle-label').text() == '-Show Instructions-' ? str = '-Hide Instructions-' : str = '-Show Instructions-';
        $('#toggle-label span').html(str);
    });    
    
    var ITEMS = 6;
    var currentQ = 1;
    
    
    // Auto Select First Option
    for(var i = 1; i <= ITEMS; i++) {
         $('#Q'+i+'_5').click();
         // Quick Fix for the Pi Search with Two Choices
         $('#Q'+currentQ+'_Y').click();
    }
    
    // Auto focuses on first radio button
     $('#Q'+currentQ+'_5').focus();
    
    // Sets current clicked element to match keyboard shortcuts
    $("input[type=radio]").click(function(){
        currentQ = this.id.charAt(1);
    });
    
    
    // Checks for keypresses
     $(document).keyup(function (event) {
               var key = toCharacter(event.keyCode);
                               
               if (key=='1') {
                   $('#Q'+currentQ+'_5').prop("checked", true);
                   // Quick Fix for the Pi Search with Two Choices
                    $('#Q'+currentQ+'_Y').prop("checked", true);
                    currentQ++;
               }
               
               if (key=='2') {
                    $('#Q'+currentQ+'_4').prop("checked", true);
                    // Quick Fix for the Pi Search with Two Choices
                    $('#Q'+currentQ+'_Y').prop("checked", true);
                    currentQ++;
               }
               
               if (key=='3') {
                  $('#Q'+currentQ+'_3').prop("checked", true);
                    currentQ++;
               }
               
                if (key=='4') {
                  $('#Q'+currentQ+'_2').prop("checked", true);
                    currentQ++;
               }
         
                if (key=='5') {
                  $('#Q'+currentQ+'_1').prop("checked", true);
                   currentQ++;
               } 
         
                if(key=='N' || key=='W') {
                    currentQ++;
                }
         
                if(key=='B' || key=='Q') {
                    currentQ--;          
                }  
         
                if(currentQ > ITEMS)
                {
                    currentQ = 6;
                   
                }
                if(currentQ < 1)
                {
                    currentQ = 1;
                   
                }
                if(key != 'ARROWKEY')
                {
                    $('#Q'+currentQ+'_5').focus();
                    $('#Q'+currentQ+'_Y').focus();
                }
               
    });
    
    // keyboard logic from https://greasyfork.org/en/scripts/5978-mturk-dave-cobb-hit-helper
    function toCharacter(keyCode) {
        // delta to convert num-pad key codes to QWERTY codes.
        var numPadToKeyPadDelta = 48;
    
        // if a numeric key on the num pad was pressed.
        if (keyCode >= 96 && keyCode <= 105) {
            keyCode = keyCode - numPadToKeyPadDelta;
           return String.fromCharCode(keyCode);
        }
       
        if(keyCode >= 37 && keyCode <= 40)
            return "ARROWKEY";
       
        if (keyCode == 13)
            return "ENTER"; // not sure if I need to add code to hit the submit button
       
        return String.fromCharCode(keyCode);
    }
    
    
    /*
    SUPER AWESOME NOT MINE PLUGIN CODE STARTS HERE ====================================================
    
    highlight v5
    
    Highlights arbitrary terms.
    
    <http://johannburkard.de/blog/programming/javascript/highlight-javascript-text-higlighting-jquery-plugin.html>
    
    MIT license.
    
    Johann Burkard
    <http://johannburkard.de>
    <mailto:jb@eaio.com>
    
    */
    jQuery.fn.highlight = function(pat) {
     function innerHighlight(node, pat) {
      var skip = 0;
      if (node.nodeType == 3) {
       var pos = node.data.toUpperCase().indexOf(pat);
       pos -= (node.data.substr(0, pos).toUpperCase().length - node.data.substr(0, pos).length);
       if (pos >= 0) {
        var spannode = document.createElement('span');
        spannode.className = 'highlight';
        var middlebit = node.splitText(pos);
        var endbit = middlebit.splitText(pat.length);
        var middleclone = middlebit.cloneNode(true);
        spannode.appendChild(middleclone);
        middlebit.parentNode.replaceChild(spannode, middlebit);
        skip = 1;
       }
      }
      else if (node.nodeType == 1 && node.childNodes && !/(script|style)/i.test(node.tagName)) {
       for (var i = 0; i < node.childNodes.length; ++i) {
        i += innerHighlight(node.childNodes[i], pat);
       }
      }
      return skip;
     }
     return this.length && pat && pat.length ? this.each(function() {
      innerHighlight(this, pat.toUpperCase());
     }) : this;
    };
    
    jQuery.fn.removeHighlight = function() {
     return this.find("span.highlight").each(function() {
      this.parentNode.firstChild.nodeName;
      with (this.parentNode) {
       replaceChild(this.firstChild, this);
       normalize();
      }
     }).end();
    };
    // PLUGIN CODE ENDS  ===================================================
    
    // Adds Styling Class for Highlighting Text
    var sheet = document.createElement('style')
    sheet.innerHTML = ".highlight { font-weight: bold; background-color: yellow; font-size: 110%;}";
    document.body.appendChild(sheet);
    
    // Regex to find keywords to highlight
    var match =  $('tbody').text().match(/searched for[: ](.*)/g);
    
    // Loops through matched terms, cleans regex junk and then highlights them
    for(var i = 0; i < match.length; i++)
    {
        // Remove the noise in front used to find the area
        var cleanedString = match[i].toString().substring(13);
        // Replace any searches with '+' with spaces
        cleanedString = cleanedString.replace(/[+]/g, " ");        
        var words = cleanedString.split(" ");
       
        for(var j = 0; j < words.length; j++)
        {
            var word = words[j];
    
            // Highlights only first row of each table
            $('tr:eq('+i*2+')').highlight(word);
           
            // If word ends in s, highlight the case without it
            var patt = new RegExp("[s]$");
            if( patt.test(word) ) {
                $('tr:eq('+i*2+')').highlight(word.substring(0, word.length - 1));
            }
    
            // Cases where word ends in 'es'
            patt = new RegExp("es$");
            if( patt.test(word) ) {
                $('tr:eq('+i*2+')').highlight(word.substring(0, word.length - 2));
            }
        }
    }
     
    • Today I Learned Today I Learned x 2
    • Like Like x 1
    • Love Love x 1
  2. HubHelper

    HubHelper Hiii TurkerView Masters

    Messages:
    212
    Ratings:
    +843
  3. lefty

    lefty Survey Slinger

    Messages:
    18,930
    Gender:
    Female
    Ratings:
    +49,005
    How do I get added to the th-sergey group? I got the qual yesterday


    Edit thought I was on the daily thread lol
     
  4. slothbear

    slothbear Survey Slinger

    Messages:
    10,821
    Gender:
    Male
    Ratings:
    +22,069
    You made me think 3.14s came back by posting in here. :biblethump: