Virtonomica:Lab Filter

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

当前为 2014-06-23 提交的版本,查看 最新版本

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name           Virtonomica:Lab Filter
// @namespace      virtonomica
// @version        0.6
// @description    Выделение тех лаборатоий, в которых надо нажать кнопки, что бы продолжить исследования
// @description	   v0.6 - правки под новый дизайн списка юнитов
// @include        http://*virtonomic*.ru/*/main/company/view/*/unit_list
// @include        http://igra.aup.ru/*/main/company/view/*/unit_list
// @include        http://virtonomic*.*/*/main/company/view/*
// ==/UserScript==
var run = function() {

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

function find_lab( mode ) {

	n = 0;
	find = input.val();
	$('td.spec').each(function() {
		var show = 0;
		str = $(this).text();
		if ( str.length > 0) {
			pos_begin = str.indexOf('%');
			if ( pos_begin != -1){
				str1 = str.substr(0, pos_begin);
				pr = parseFloat(str1);
				str2 = str.substr(pos_begin+1);
				pos2 = str2.indexOf('.');
				st = parseInt( str2.substr(pos2+1) );
				lev = parseInt( str2.substr(0,pos2) );
			}
		}
		if (find == "4" ) $("div.st").show();
		else $("div.st").hide();
	
		switch( find ) {
			case "0": {
				$(this.parentNode).show();
				$("div.st").show();
				show = 1;
				$("div.st").show();
			break;}
		
			case "1": 
			case "4":{
				// начальная стадия исследований
				if ( ( pr == 0)  && ( pos2 == -1) ){ 
					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;}
		}
		if ( show == 0){
			$(this.parentNode).hide();
		} else {
			$(this.parentNode).show();
			$("div.st").show();
		}

  	});
}
	//var container = $('#mainContent tr:first > td:first');
	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 input = $('<select>').append('<option value=0>&nbsp;</option>').append('<option value=5>техны ниже 9</option>').append('<option value=17>техны выше  16</option>').append('<option value=3>больше 80%</option>').append('<option value=2>больше 90%</option>').append('<option value=10>меньше 20%</option>').append('<option value=1>найти</option>').change( function() { find_lab(); }).append('<option value=4>найти (+заметки)</option>').change( function() { find_lab('' ); });

// Изучаемые технологии
labs = $("td.spec");
var list = new Object();
var tag = 1;
for (i=0; i<labs.length; i++){
     str = labs.eq(i).html();
	//console.log(str);
     n = str.lastIndexOf("</b>");
     if (n == -1) continue;
     name = str.substr(n+4, str.length);
	//console.log(name);
     name.replace("\n", "").replace("\r", "");
 
     if ( list[name] != null) {
	list[name]++;
	continue;
     }
     list[name] = 1;
     //tag++;
}

// сортировка объекта как строки
function sortObj(arr){
    // Setup Arrays
    var sortedKeys = new Array();
    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 i in sortedKeys){
       sortedObj[sortedKeys[i]] = arr[sortedKeys[i]];
    }
    return sortedObj;
}
list = sortObj(list);

var Filter = $(" <select>").append('<option value=0>&nbsp;</option>').change( function(){
    search = $(this).val();

    $('td.spec').each(function() {
	var show = 0;

     str = $(this).html();
     n = str.lastIndexOf("</b>");
     if (n == -1) return;
     name = str.substr(n+4, str.length);
     name.replace("\n", "").replace("\r", "");

     if (name == search ) show =1;

	if ( show == 0){
		$(this.parentNode).hide();
                // спрятать заметки
                $("div.st").hide();
	} else {
		$(this.parentNode).show();
		$("div.st").show();
	}
    });
});

for(name in list){
    str = '<option value="'+ name +'">'+ name;
    if ( list[name] > 1) str+= ' (' + list[name] + ')';
    str+= '</option>';
    Filter.append(str);
}

// Число подразделений на странице
var units = $("td.info");
//console.log("units="+units.length);

// число лаборатоий на странице
var labs = $("td.i-lab");
//console.log("labs="+labs.length);

// если на странице только лаборатории
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);
}