Virtonomica: автосортировка подразделений по колонке "специализация"

автосортировка подразделений по колонке "специализация"

当前为 2015-04-02 提交的版本,查看 最新版本

// ==UserScript==
// @name           Virtonomica: автосортировка  подразделений по колонке "специализация"
// @namespace      virtonomica
// @version 	   1.2
// @description    автосортировка  подразделений по колонке "специализация"
// @include        http://*virtonomic*.*/*/main/company/view/*/unit_list
// @include        http://*virtonomic*.*/*/main/company/view/*
// ==/UserScript==

var run = function() {

    var win = (typeof(unsafeWindow) != 'undefined' ? unsafeWindow : top.window);
    $ = win.$;

    function trim(str) {
        return str.replace(/^\s+|\s+$/g,"");
    }
    function getLvl(str) {
        var first = str.indexOf('</') + 4;
        var perc = trim(str.substr(0, first));

        var second = str.substr(first+1).indexOf('</') + 4;
        var lvl = parseInt(trim(str.substr(first+1, second)).replace("<b>","").replace("</b>","").replace(".",""),10);
        // console.log("'"+ lvl+"'" );
        return lvl;
    }
    function getName(str) {
        var first = str.indexOf('</') + 4;
        var perc = trim(str.substr(0, first));

        var second = str.substr(first+1).indexOf('</') + 4;
        var lvl = trim(str.substr(first+1, second));

        var name = trim(str.substr(first+1 +second + 1).replace("</div>",""));
        // console.log( "'"+name +"'");
        return name;
    }
    function getPerc(str) {
        var first = str.indexOf('</') + 4;
        var perc = parseInt(trim(str.substr(0, first)).replace("<div class=\"lab\"><b style=\"color:red\">","").replace("<div class=\"lab\"><b style=\"color:brown\">","").replace("<div class=\"lab\"><b style=\"color:green\">","").replace("%</b>","").replace(".",""),10);
        // console.log( "'"+ perc +"'");

        return perc;
    }

    function compareEq(left, right){
        //console.log("'"+ getName(left)+"' localeCompare '" + getName(right)+"'" + (getName(left).localeCompare(getName(right)) == 0));
        //console.log("'"+ getLvl(left)+"' == '" + getLvl(right)+"'" + (getLvl(left) == getLvl(right)));
        if(getName(left).localeCompare(getName(right)) == 0 && getLvl(left) == getLvl(right) && getPerc(left) == getPerc(right)) return true;
        else return false;
    }
    function compareGreater(left, right){
       // console.log("'"+ getLvl(left)+"' > '" + getLvl(right)+"'" + (getLvl(left) > getLvl(right)));
        var nameCmp = getName(left).localeCompare(getName(right));
        if(nameCmp == 1) return true;
        else if(nameCmp == -1) return false;
        
        var lvlCmp = getLvl(left) - getLvl(right);
        if(lvlCmp > 0) return true;
        else if(lvlCmp < 0) return false;
        
        var percCmp = getPerc(left) - getPerc(right);
        if(percCmp > 0) return true;
        else if(percCmp < 0) return false;
        
        return false;
    }
    function sort_table(tbody, col, asc){
        var rows = tbody.rows;
        var rlen = rows.length;
        var arr = [];
        var i, j, cells;
        // fill the array with values from the table
        for(i = 0; i < rlen; i++){
            cells = rows[i].cells;
            arr.push([rows[i], cells[col].innerHTML]);
        }
        // sort the array by the specified column number (col) and order (asc)
        arr.sort(function(a, b){
            return (compareEq(a[1], b[1])) ? 0 : ((compareGreater(a[1], b[1])) ? asc : -1*asc);
        });
        for(i = 0; i < rlen; i++){
            tbody.appendChild(arr[i][0]);
        }
    }
    // Список с ячейками, содержащими названия подразделений
    var td_specs = $('td.spec');
    //alert(td_specs[0].innerHTML);
    // alert(td_spec.parentNode.parentNode.innerHTML);
    sort_table(td_specs[0].parentNode.parentNode, 5, 1);
}

if(window.top == window) {
    var script = document.createElement("script");
    script.textContent = '(' + run.toString() + ')();';
    document.documentElement.appendChild(script);
}

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址