OkC Hidden Quickmatch Info

Show hidden info on Quickmatch page and autoskip matches

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

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

// show friends (indicates how similar your answers are)
var showFriends = true;

// show nonsensical attractiveness number
var showAttractiveness = false;

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

// 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 instructions: 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;
var skipChecked;

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;
    
    if(Quickmatch.stack[0].fpercentage && showFriends === true)
        $("more_info").innerHTML += "<br />Friends: " + Quickmatch.stack[0].fpercentage + "%";

    $("more_info").innerHTML += "<br /><br />";
}

function autoSkip(){
    if(autoSkipEnabled == true){
        if(skipChecked != Quickmatch.stack[0].sn){
            skipChecked = Quickmatch.stack[0].sn;
            if(Quickmatch.stack[0].epercentage > autoSkipEnemy){
                console.debug('skipped ' + Quickmatch.stack[0].sn + ' because of enemy % - ' + Quickmatch.stack[0].epercentage + ' > ' + autoSkipEnemy);
                document.getElementById("quickmatch-dislike").click();
                return true;
            }
            if(Quickmatch.stack[0].percentage < autoSkipMatch){
                console.debug('skipped ' + Quickmatch.stack[0].sn + ' because of match % - ' + Quickmatch.stack[0].percentage + ' < ' + autoSkipMatch);
                document.getElementById("quickmatch-dislike").click();
                return true;
            }
            if(autoSkipCases.length > 0){
                for(i=0;i<autoSkipCases.length;i++){

                    skipCase = autoSkipCases[i].split("-");

                    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('skipped ' + Quickmatch.stack[0].sn + ' because of rule match - ' + autoSkipCases[i]);
                        document.getElementById("quickmatch-dislike").click();
                        return true;
                    }
                }
            }
        }
    }
}

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();