wod item sorter

sort items in inventory

当前为 2015-03-08 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name          wod item sorter
// @namespace     org.holer.webgame.util.wod
// @version       0.1.22
// @description   sort items in inventory
// @include       http://*.world-of-dungeons.org/wod/spiel/hero/items.php*
// @require       http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js
// @grant         none
// @copyright  2012+, Russell
// ==/UserScript==


function main() {
    window.wisMsgg = {
        applySortRule: "apply sort rules",
        autoSort: "auto sort",
        append: "append",
        exception: "exception",
        deleteStr: "delete",
        generateRule: "generate rule",
        saveRule: "save rule",
        loadRule: "load rule",
        noLocalStorageSupport: "browser do not support localStorage, can't save settings"
    };

    window.wisMsg = {
        applySortRule: "整理",
        autoSort: "自动整理",
        append: "增加规则",
        exception: "增加子规则",
        deleteStr: "删除",
        generateRule: "生成规则",
        saveRule: "保存规则",
        loadRule: "加载已保存的规则",
        noLocalStorageSupport: "浏览器不支持localStorage,无法保存设置。"
    };


    window.statsHtml = '<div class=item_sort_stats></div>';
    window.taHtml = '<textarea id="wiscj" style="width:100%;height:5em;"></textarea>';
    window.uiHtml = '<hr><div id="wisc" class="gadget_body">'+taHtml+'</div>';
    window.btnsHtml = '<div><button id="wisawrb" onclick="applyWisRule()" class="button">'+wisMsg.applySortRule+'</button></div>';
    window.eolHtml = '<ol></ol>';



    window.counts = {
        go_lager : 0,
        go_group_2 : 0,
        go_group : 0,
        go_keller : 0,
        npc : 0
    };


    window.out_alias = {
        "仓库":"go_lager",
        "go_lager":"go_lager",
        "贮藏室":"go_keller",
        "go_keller":"go_keller",
        "团队仓库":"go_group_2",
        "go_group_2":"go_group_2",
        "宝库":"go_group",
        "go_group":"go_group",
        "npc":"npc",
    };


    window.ruleObj = null;

    window.strToRegexI = function () {
        ruleObj = jQuery.parseJSON(ruleObj);
        if (ruleObj.regex) return;
        strToRegex(ruleObj.rules);
        ruleObj.regex = true;
    };


    RegExp.escape = function(text) {
        return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
    };

    // add r:regular exp pair to the dictionary l
    window.strToRegex = function (l){
        for (var i =0; i<l.length;i++){
            //var c;
            //c = l[i];
            // 1 :
            // 2 : uses left
            // 3 : 
            l[i].r = new RegExp("^\n*?"+RegExp.escape(l[i].n) +"!?\n*? *?\n*? *?(\\(([\\d]+)\\/([\\d]+)\\))?\n*?$");
        }
    };

    // convert textarea (in JSON) into dictionary
    // and add regular expression obj
    window.wisLoadRule = function () {
        var rule = $("#wiscj").val();

        ruleObj = rule;
        strToRegexI();
    };

    window.getOperation = function (name, list){
        var c;
        for(var i=0;i<list.length;i++){
            c = list[i];
            var c_out = out_alias[c.o];
            //if (c.r.test(name)) {
                //return c.o;
            //}
            var result = c.r.exec(name);
            if (result !== null){
                if (c.geq && result[2] && Number(result[2])>=Number(c.geq)){
                    return c_out;
                } else if (c.leq && result[2] && Number(result[2])<=Number(c.leq)){
                    return c_out;
                } else if (!c.geq && !c.leq){
                    return c_out;
                };
            }
        }
    }

    window.applyWisRule = function () {
        
        wisLoadRule();
        resetCount();
        $("div.layout_clear > table.content_table > tbody > tr").each(function () {
            var t = $(this);
            // o = where the item should go if rule matches
            //console.log('wod sort item: '+t.children("td").eq(1).children("a").text());
            //var o = getOperation(t.children("td").eq(1).children("a").text(), ruleObj.rules);
            //console.log('465667 '+t.children("td").eq(1).text());
            var o = getOperation(t.children("td").eq(1).text(), ruleObj.rules);
            if (o) {
                applyOperation(t,o);
            }
        });
        $("div.item_sort_stats").focus().text(" 仓库" + counts.go_lager + " 贮藏室" +counts.go_keller+ " 宝库 "+counts.go_group+" 团队仓库"+counts.go_group_2+" NPC "+counts.npc);
    }

    window.resetCount = function () {
        counts.go_lager = 0;
        counts.go_group_2 = 0;
        counts.go_group = 0;
        counts.go_keller = 0;
        counts.npc = 0;
    };

    window.applyOperation = function(t,o){
        var s;
        if ("NUL" == o) {
            return;
        }
        var c;
        if ("npc"==o) {
            //s = t.children().eq(3).children("input:checkbox");
            s = t.children("td").has("img[title='金币']").eq(0).children("input:checkbox");
            s.attr('checked', true);
            c = "rgba(255,34,34,0.9)";
            s.parent().css("color",c);
            t.children().eq(1).children("a").css("background-color",c);
            counts.npc += 1;
        } else {
            s = t.children().eq(2).children("select");
            if ("-"+o != s.val()) {
                s.val(o);
                c = "rgba(127,127,127,0.5)";
                s.css("border-color",c);
                t.children().eq(1).children("a").css("background-color",c);
                counts[o] += 1;
            }
        }
    };


    window.injectUi = function (){
        $("div#main_content").after(uiHtml);
        $("div#main_content").after(btnsHtml);
        //$("#main_content form input[type='submit']:eq(0)").after(statsHtml);
        $("#wisawrb:eq(0)").after(statsHtml);
    };



    window.rowOnMouseColor  = function () {
        $("div.layout_clear table.content_table tbody tr").each(function () {
            $(this).addClass("tr_mouse");
        });
        $("div.gadget_body form table.content_table tbody tr").each(function () {
            $(this).addClass("tr_mouse");
        });
    };

    function addGlobalStyle(css) {
        var head, style;
        head = document.getElementsByTagName('head')[0];
        if (!head) { return; }
        style = document.createElement('style');
        style.type = 'text/css';
        style.innerHTML = css;
        head.appendChild(style);
    }

    function hoverToggleSelect () {
        $("table.content_table tbody tr td input[value=do]").mouseover(function () {
            $(this).prop("checked",!$(this).is(":checked"));
        });
    }

    addGlobalStyle('.tr_mouse:hover { background-color:rgba(248,248,23,0.5); }');

    window.addEventListener("load",injectUi,false);

    //window.addEventListener("load",autoSort,false);

    window.addEventListener("load", rowOnMouseColor,false);

    //window.addEventListener("load", hoverToggleSelect,false);
};


$(document).ready(main);