Greypal Sort

Columns click-sort

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, Greasemonkey alebo Violentmonkey.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie, ako napríklad Tampermonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, % alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey alebo Userscripts.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie, ako napríklad Tampermonkey.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie správcu používateľských skriptov.

(Už mám správcu používateľských skriptov, nechajte ma ho nainštalovať!)

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

(Už mám správcu používateľských štýlov, nechajte ma ho nainštalovať!)

// ==UserScript==
// @name         Greypal Sort
// @namespace    Sketch2
// date          Dec 23, 2015
// @version      0.2
// @description  Columns click-sort
// @author       DoYouSketch2
//
// @match        http://greypal.el-fd.org/*
//
// @grant      GM_info
// @grant      GM_getValue
// @grant      GM_setValue
// @grant      GM_xmlhttpRequest
// @grant      GM_registerMenuCommand
//
// @require      http://code.jquery.com/jquery-2.1.4.min.js
//
// @copyright     (c) 2015 USA, DoYouSketch2
// Released under the GNU General Public License, version 3 (GPL-3.0)
// https://gnu.org/licenses/gpl-3.0.txt
//
// Edited basic sort code from  http://stackoverflow.com/questions/3160277/jquery-table-sort
//
// I saw "comma removal" tricks on both these pages, decided to use regex one that grabs 'em all.
//   http://stackoverflow.com/questions/11665884/javascript-parse-a-string-to-a-number
//   http://stackoverflow.com/questions/7802014/remove-commas-with-jquery
//
//   http://stackoverflow.com/questions/4886319/replace-text-in-html-page-with-jquery
//
// ascii-code.com
// ==/UserScript==



//  make it easier to see coin amounts
$("*:contains('gc')") .each(function() {
    var replaced = $(this).html() .replace(/.00gc/g, "Ἴ") .replace(/gc/g, "") .replace(/NPC-/g, '');
    $(this) .html(replaced);
});


//  Function to find exact text, disregarding case

$.expr[":"] .exactContain = $.expr .createPseudo(function(arg) {
    return function(elem) {
        if ($(elem) .text() .toLowerCase() .indexOf(arg) >= 0)
            if (String($(elem) .text() .length) == String(arg .length))
                return $(elem);
    };
});


//  Function to iterate through names in lists

function iterate(list, Hue){
    for	(i = 0; i < list.length; i++) {
        $('td:exactContain(' + list[i] + ')')
        .css('color', Hue) .siblings() .andSelf() .not(':lt(-2)') .css('color', Hue);
    };
};


//  Highlight Guild Bots

var GuildBots = ["biker_boy","jeff","morpheus","nathanstenzel"];

for	(i = 0; i < GuildBots.length; i++) {
    $('td:exactContain(' + GuildBots[i] + ')')
    .css('font-weight', 'bold') .css('color', '#191975');
};


//  Bots we also get discounts on
//  Burn owns IWannaRock?

var Discount = ["crannog","faxie","yulin_old","iwannarock"];

iterate(Discount, 'DarkBlue');


//  RedTag bots

var RedTag = ["goldberg","norad","susje"];

iterate(RedTag, 'Chocolate');


//  Sorting algorithm for tables

function getCellValue(row, index){ return $(row) .children('td') .eq(index) .text() }

function compare(index) {
    return function(a, b) {
        var valA = getCellValue(a, index), valB = getCellValue(b, index)
        //  bypass commas, so we can sort numbers 1,000 and up
        var fixA = valA.replace(/,/g, ''), fixB = valB.replace(/,/g, '')
        return $.isNumeric(fixA) && $.isNumeric(fixB) ? fixA - fixB : fixA.localeCompare(fixB)
    }
};


//  Make columns clickable

$('th') .click(function(){
    var table = $(this) .parent() .parent()
    var rows = table.find('tr:gt(0)') .toArray() .sort(compare($(this).index()))
    this.asc = !this.asc
    if (!this.asc){rows = rows.reverse()}
    for (var i = 0; i < rows.length; i++){table.append(rows[i])}
});


//  Shade background
$('html') .css('background', '#d0ccee');


//  Shrink "How to add bots" & "data collected"
$('html') .css('font-size', '11px');
$('span#second') .css('font-size', '20px');
$('form') .css('font-size', '18px');


//  Put a little space between input and table
$('table:first') .before('<br><br>');
$('table') .css('border-spacing','8px 0px');


//  Highlight hosts
$('td:contains("N/A")') .text('•') .attr('align','center');
$('td:contains("NPC")') .css('font-weight', 'bold') .attr('align','center') .last() .text('•');
$('td:contains("el-services")') .css('font-size', '16px') .css('color', '#443322');


//  Shade C2 items
$('td:contains("(C2)")') .css('color', 'DarkBlue');


//  If bot if buying, you get the green
$('td:contains("Buying")') .css('font-size', '15px') .css('color', 'DarkGreen');
$('th:contains("Buying")') .css('color', 'DarkGreen') .parent() .before('<br>');


//  If bot is selling, you'll burn gc's
$('td:contains("Selling")') .css('font-size', '15px') .css('color', 'DarkRed');
$('th:contains("Selling")') .css('color', 'DarkRed') .parent() .before('<br>');


// center Amount
$('table:first tr td:odd:even') .css('color', '#443322');


//  Highlight Avg prices
$('table:last tr td:odd') .css('color', '#443322');
$('table:last th:odd') .css('color', '#443322');


//  Totals are useless information, remove
$('td:contains("Total"):last') .parent() .after('<br><br>') .remove();
$('td:contains("Total"):first') .parent() .remove();