Virtonomica:Lab Filter

Выделение тех лаборатоий, в которых надо нажать кнопки, что бы продолжить исследования

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name           Virtonomica:Lab Filter
// @namespace      virtonomica
// @version        0.64
// @description    Выделение тех лаборатоий, в которых надо нажать кнопки, что бы продолжить исследования
// @description	   v0.6 - правки под новый дизайн списка юнитов
// @include        *virtonomic*.*/*/main/company/view/*/unit_list
// @include        *virtonomic*.*/*/main/company/view/*
// @exclude        *virtonomic*.*/*/main/company/view/*/unit_list/equipment
// ==/UserScript==

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

    // сортировка объекта как строки
    function sortObj(arr){
        // Setup Arrays
        var sortedKeys = [];
        var sortedObj = {};

        // Separate keys and sort them
        for (var i in arr){sortedKeys.push(i);}
        sortedKeys.sort();

        // Reconstruct sorted obj based on keys
        for (var j in sortedKeys){sortedObj[sortedKeys[j]] = arr[sortedKeys[j]];}
        return sortedObj;
    }

    function find_lab( mode ) {
        var n = 0;
        var find = input.val();
        $('td.spec').each(function() {
            var show = 0;
            var name = /(\d+\.*\d*)%\s?(\d+)?\.?(\d+)?\s?(.+)?/.exec($(this).text().trim().replace('"','').replace('"',''));
            var pr = name[1];
            var st = name[3];
            var lev = name[2];
            if (find == "4" ) $("div.st").show();
            else $("div.st").hide();

            $(this).removeClass("lab_round_1");
            switch( find ) {
                case "0": {
                    $(this.parentNode).show();
                    $("div.st").show();
                    show = 1;
                    $("div.st").show();
                    break;}

                case "1":
                case "4":{
                    // начальная стадия исследований
                    if ( ( pr == 0) && ( typeof st == 'undefined') ){
                        show = 1;
                        break;
                    }
                    // заверешена 1 стадия
                    if ( (st == 1) && (pr == 100) ){
                        show = 1;
                        //$(this.parentNode).show();
                        break;
                    }
                    // завершена 2 стадия
                    if ( (st == 3) && (pr == 0) ){
                        show = 1;
                        break;
                    }
                    break;}

                case "2": {
                    if ( ( pr > 90) && ( pr < 100) ) {
                        show = 1;
                    }
                    break;}

                case "3": {
                    if ( ( pr > 80) && ( pr < 90) ) {
                        show = 1;
                    }
                    break;}
                case "10": {
                    if ( ( pr > 0) && ( pr < 20) ) {
                        show = 1;
                    }
                    break;}

                case "5": {
                    if ( lev< 9) {
                        show = 1;
                    }
                    break;}
                case "17": {
                    if ( lev > 16) {
                        show = 1;
                    }
                    break;}
                case "38": {
                    if ( lev > 37) {
                        show = 1;
                    }
                    break;}
                case "6": {
                    if ( st == 1) {
                      show = 1;
                      if ( pr > 89 ) {
                      	$(this).addClass("lab_round_1");
                      }
                    }
                    break;}
                case "7": {
                    if ( st == 2) {
                        show = 1;
                    }
                    break;}
                case "8": {
                    if ( st == 3) {
                        show = 1;
                    }
                    break;}
            }
            var n = $(this.parentNode).next();
            if ( show == 0){
                $(this.parentNode).hide();
                if(/unit_comment/.test(n.attr('class'))) n.hide();
            } else {
                $(this.parentNode).show();
                if(/unit_comment/.test(n.attr('class'))) n.show();
                $("div.st").show();
            }

        });
    }
    var container = $("td.u-l").parent().parent();

    var panel = $("#extension_panel");
    if ( panel.length == 0 ) {
        // добавить панель, если её еще нет
        var ext_panel = "<div style='padding: 2px; border: 1px solid #0184D0; border-radius: 4px 4px 4px 4px; float:left; white-space:nowrap; color:#0184D0; display:none;'  id=extension_panel></div>";
        container.append( "<tr><td>" +ext_panel );
    }
  
  	// Стили  
    var st = $("style");
	  if ( $(".lab_round_1", st).length == 0 ) {
		  st.append(".lab_round_1{background-color: moccasin;padding: 4px;border-radius: 8px;}");
		  //st.append(".lab_round_1:hover{opacity:1.0}");
	  }


    var input = $('<select>')
    .append('<option value=0>&nbsp;</option>')
    .append('<option value=5>техны ниже 9</option>')
    .append('<option value=17>техны выше  16</option>')
    .append('<option value=38>техны от 38</option>')
    .append('<option value=3>больше 80%</option>')
    .append('<option value=2>больше 90%</option>')
    .append('<option value=10>меньше 20%</option>')
    .append('<option value=6>стадия 1</option>')
    .append('<option value=7>стадия 2</option>')
    .append('<option value=8>стадия 3</option>')
    .append('<option value=1>найти</option>').change( function() {find_lab();})
    .append('<option value=4>найти (+заметки)</option>').change( function() {find_lab('' );});

    // Изучаемые технологии
    var list = {};
    $('td.spec').each(function() {
        var name = /(\d+\.*\d*)%\s?(\d+)?\.?(\d+)?\s?(.+)?/.exec($(this).text().trim().replace('"','').replace('"','') );
        if (list[name[4]] != null) {list[name[4]]++;}
        else if (typeof name[4] != 'undefined') {list[name[4]] = 1;}
    });

    list = sortObj(list);
    var filter = $(" <select>").append('<option value=0>&nbsp;</option>').change( function(){
        var search = $(this).val();
        $('td.spec').each(function() {
            var name = /(\d+\.*\d*)%\s?(\d+)?\.?(\d+)?\s?(.+)?/.exec($(this).text().trim().replace('"','').replace('"','') );
            if (name[4] == search ){
                $(this.parentNode).show();
                $("div.st").show();
            } else {
                $(this.parentNode).hide();
                // спрятать заметки
                $("div.st").hide();
            }
        });
    });

    $.each(list,function(o,i) {
        var str = '<option value="'+ o +'">'+ o;
        str+= (i > 1)?' (' + i + ')':'';
        str+= '</option>';
        filter.append(str);
    });

    // Число подразделений на странице
    var units = $("td.info");
    // число лаборатоий на странице
    var labs = $("td.i-lab");

    // если на странице только лаборатории
    if ( labs.length == units.length) {
        $("#extension_panel").append('<div id=science>Исследования: ');
        $("#science").append(input).append(filter);
        $("#extension_panel").show();
    }

};

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