Выделение тех лаборатоий, в которых надо нажать кнопки, что бы продолжить исследования
// ==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> </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> </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);
}