OkC Hidden Quickmatch Info

Show hidden info on Quickmatch page

目前为 2015-11-24 提交的版本。查看 最新版本

// ==UserScript==
// @name         OkC Hidden Quickmatch Info
// @namespace    http://thlayli.detrave.net
// @version      1.3
// @description  Show hidden info on Quickmatch page
// @author       Nathan Blume
// @match        http://www.okcupid.com/quickmatch*
// @grant        none
// ==/UserScript==

// show nonsensical attractiveness number
var showAttractiveness = false;

// automatically skip certain profiles - set to "true" to use autoSkip options below
var autoSkipEnabled = false;

// auto skip settings
var autoSkipMatch = 50; // skip if less than this match percentage
var autoSkipEnemy = 50; // skip if more than this enemy percentage

// autoSkipCases skips profiles based on [orientation-gender-status] (see info below)
var autoSkipCases = [];

// autoSkip instrctions: Enter sets of three numbers inside the brackets.
// Numbers should be separated by hyphens and surrounded by quotes.
// Multiple sets can be entered separated by commas.
//
// Number key:
//  orientation:  0 = ignore, 1 = straight, 2 = gay, 3 = bi
//  gender: 0 = ignore, 1 = male, 2 = female
//  status: 0 = ignore, 1 = single, 2 = seeing-someone, 3 = married, 4 = available, 5 = open-relationship, 8 = mostly-nonmonogamous
//
// e.g. ["1-3-0"] skips bi males
// e.g. ["1-2-0","1-2-3"] skips gay males and married straight females

var secret_orientation;
var secret_gender;
var secret_status;

function updateMoreInfo(){
    
            if(!$("enemy")){
                $("match").firstElementChild.innerHTML += '&nbsp;<span style="color: #949aa6; display: inline;" id="enemy"></span>';
            }
    
    		if(!$("more_info")){
				$("left").innerHTML =  "<div id=\"more_info\"></div>" + $("left").innerHTML;
			}
    
    		switch(Quickmatch.stack[0].orientation) {
                case 1:
                    secret_orientation = "Straight";
                    break;
                case 2:
                    secret_orientation = "Gay";
                    break;
                case 3:
                    secret_orientation = "Bisexual";
                    break;
                default:
                    secret_orientation = Quickmatch.stack[0].orientation;
    		}
    
    		switch(Quickmatch.stack[0].tracking_gender) {
                case 1:
                    secret_gender = "Male";
                    break;
                case 2:
                    secret_gender = "Female";
                    break;
                default:
                    secret_gender = Quickmatch.stack[0].tracking_gender;
    		}

			switch(Quickmatch.stack[0].status) {
                case 1:
                    secret_status = "Single";
                    break;
                case 2:
                    secret_status = "Seeing Someone";
                    break;
                case 3:
                    secret_status = "Married";
                    break;
                case 4:
                    secret_status = "Available";
                    break;
                case 5:
                    secret_status = "Open Relationship";
                    break;
                case 8:
                    secret_status = "Mostly Nonmonogamous";
                    break;
                default:
                    secret_status = Quickmatch.stack[0].status;
    		}

            $("enemy").innerHTML =  '| <strong class="percent">' + Quickmatch.stack[0].epercentage + '</strong>% Enemy';

    		$("more_info").innerHTML = "<h2>More Info</h2>" +
            "Screen Name: <a href=\"http://www.okcupid.com/profile/" + Quickmatch.stack[0].sn + "?cf=quickmatch\">" + Quickmatch.stack[0].sn +
            "</a><br />Gender: " + secret_gender +
            "<br />Orientation: " + secret_orientation +
            "<br />Status: " + secret_status;
            
    		if(Quickmatch.stack[0].attractiveness && showAttractiveness === true)
               $("more_info").innerHTML += "<br />Attractiveness: " + Quickmatch.stack[0].attractiveness;
    
    		$("more_info").innerHTML += "<br /><br />";
}

function autoSkip(){
    if(autoSkipEnabled == true){
     if(Quickmatch.stack[0].epercentage >= autoSkipEnemy){
         document.getElementById("quickmatch-dislike").click();
     }
     if(Quickmatch.stack[0].fpercentage < autoSkipMatch){
         document.getElementById("quickmatch-dislike").click();
     }
        if(autoSkipCases.length > 0){
            for(i=0;i<autoSkipCases.length;i++){
                
                skipCase = autoSkipCases[i].split("-");
                
                console.debug(skipCase);
                
                orientationSkip = skipCase[0];
                genderSkip = skipCase[1];
                statusSkip = skipCase[2];
                
                orientationSkipMatch = false;
                genderSkipMatch = false;
                statusSkipMatch = false;
                
                if(orientationSkip == 0 || Quickmatch.stack[0].orientation == orientationSkip)
                    orientationSkipMatch = true;
                
                if(genderSkip == 0 || Quickmatch.stack[0].tracking_gender == genderSkip)
                    genderSkipMatch = true;
                
                if(statusSkip == 0 || Quickmatch.stack[0].status == statusSkip)
                    statusSkipMatch = true;
                
                if(orientationSkipMatch == true && genderSkipMatch == true && statusSkipMatch == true){
                    console.debug('skipping ' + Quickmatch.stack[0].sn);
                    document.getElementById("quickmatch-dislike").click();
                    
                }
            }
        }
    }
}

var startTracing = function (onnew) {
    window.ajaxRequestComplete = 'no';//Make as a global javascript variable
    window.ajaxRequestStarted = 'no';

    XMLHttpRequest.prototype.uniqueID = function() {
        if (!this.uniqueIDMemo) {
            this.uniqueIDMemo = Math.floor(Math.random() * 1000);
        }
        return this.uniqueIDMemo;
    };

    XMLHttpRequest.prototype.oldOpen = XMLHttpRequest.prototype.open;

    var newOpen = function(method, url, async, user, password) {

        ajaxRequestStarted = 'open';
        /*alert(ajaxRequestStarted);*/
        this.oldOpen(method, url, async, user, password);
    };

    XMLHttpRequest.prototype.open = newOpen;

    XMLHttpRequest.prototype.oldSend = XMLHttpRequest.prototype.send;

    var newSend = function(a) {
        var xhr = this;

        var onload = function() {
            ajaxRequestComplete = 'loaded';
            //print info to page
            updateMoreInfo();
            autoSkip();
        };

        var onerror = function( ) {
            ajaxRequestComplete = 'Err';
            /*alert(ajaxRequestComplete);*/
        };

        xhr.addEventListener("load", onload, false);
        xhr.addEventListener("error", onerror, false);

        xhr.oldSend(a);
    };

    XMLHttpRequest.prototype.send = newSend;
};
startTracing();
updateMoreInfo();
autoSkip();