Virtonomica:Labs Info

Дополнительная информация по лаборатории

当前为 2016-10-25 提交的版本,查看 最新版本

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name           Virtonomica:Labs Info
// @name:en        Virtonomica:Labs Info   
// @namespace      Virtonomica
// @version        1.51
// @description    Дополнительная информация по лаборатории
// @description:en Additional information about the lab 
// @include        https://*virtonomic*.*/*/main/unit/view/*/investigation
// ==/UserScript==
var run = function() {

	function TrimStr(s) {
		s = s.replace( /^\s+/g, '');
		return s.replace( /\s+$/g, '');
	}

    /**
    * Склоенение числа дней
    */
    function getDays( days ){
       	if (lang == "En") {
           if (days == 1) return "1 day";
           else return days + " days";
       	}

	// RU
       	d = days%10;
	switch( d ){
		case 1: return (days + " день"); 
		case 2: 
		case 3: 
		case 4: 
			return (days + " дня"); 
		default : return (days + " дней"); 
	}
    }

    // определяем интерфейс
    // autodefined language interface
    var lang = 'undef';
    var bt_logout = $("li[class='icon menulogout']");
    var logout_string = bt_logout.attr('title');
    if (logout_string == 'Выход') {
	   lang = 'Ru';
    } else if(logout_string == 'Logout') {
	   lang = 'En';
    } 
    if ( lang == 'undef') {
        alert('Unsupported language for userscript "LabsInfo"');
		return;
    }  

    // Строки зависимые от языка
    // language definitions
    var LangMsg = new Object();
    LangMsg['Ru'] = new Object();
    LangMsg['En'] = new Object();

    LangMsg['Ru']['Scientists'] = "Учёных на проекте";
    LangMsg['En']['Scientists'] = "Scientists in project";

    LangMsg['Ru']['required'] = "требуется учёных:";
    LangMsg['En']['required'] = "scientists required";

    LangMsg['Ru']['Current research stage'] = "Текущая стадия длится";
    LangMsg['En']['Current research stage'] = "Current research stage lasts for";

    LangMsg['Ru']['average up'] = "средний прирост";
    LangMsg['En']['average up'] = "average up";

    LangMsg['Ru']['prognosis'] = "прогнозируется заверешние работ через ";
    LangMsg['En']['prognosis'] = "Prognosis completion in ";

    LangMsg['Ru']['bonus'] = "Бонус";
    LangMsg['En']['bonus'] = "Bonus";

    function getLabsInfo() {
        info = $("<div id=labs_info></div>");
	$("table.infoblock").before( info );

	// Число ученых
	var works = $("td:contains('" + LangMsg[lang]['Scientists'] + "')").next().text().replace(" ","").replace(" ","");

	// Сколько ученых надо
	var el_req = $("td:contains('" + LangMsg[lang]['required'] + "')");
	var str = el_req.text();
	var pos = str.indexOf('(') + 1 + LangMsg[lang]['required'].length;
	var req = parseInt( str.substr(pos).replace(")","").replace(" ","").replace(" ","") );

	var power = works/req;

	el_req.append( " <font color=green>" + (Math.ceil(works/req*1000)/10) + "%</font>" );

	// Число недель для текущей стадии
	var weeks = $("td:contains('" + LangMsg[lang]['Current research stage'] + "')").next().text();
	if (weeks > 0) {
		// Элемент для вывода информации
		var el = $("td.progress_bar:eq(1)").next();
		// Текущий процент
		var procents = parseFloat( el.text() );

		var up = procents/weeks;
		var last = Math.ceil( (100 -  procents)/up);
		el.parent().parent()
		.append("<tr><td colspan=2>"+ LangMsg[lang]['average up'] + ": " + (Math.ceil( 1000*up )/1000) + "%")
		.append("<tr><td colspan=2>" + LangMsg[lang]['prognosis'] + "<font color=green>" + getDays(last) + "</font>");
	}

	// поиск гипотез
	form = $("form[action*='investigation']");
	
	tr = $("tr[onclick^='hypotesisSelect']", form.eq(0) );

        // Bonus
	kv = 1.0;
        // find all bonus
        var td_bonus = $("td:contains('" + LangMsg[lang]['bonus'] + "')").next();
        var div_bonus = $("div", td_bonus);
        for(var i=0; i<div_bonus.length; i++ ) {
             var str = div_bonus.eq(i).text();
             var pos1 = str.indexOf('+') + 2;
             var pos2 = str.indexOf('%') - 1;
             var bonus = parseFloat( str.substr(pos1, pos2-pos1) );

             kv *= (1 + bonus/100);
        }

	k = kv*1.4286*(1 - 0.3/power);

	for (i=0; i<tr.length; i++){
		td = $("td", tr.eq(i) );
		pr = parseFloat(td.eq(2).text().replace("%", "").replace(" ", "").replace(" ", "") );
		days = parseFloat(td.eq(3).text().replace(" ", "").replace(" ", "") );
		td.eq(3).append( " <span title='" + (Math.ceil(days/k*10)/10)+"'><font color=maroon>(" + (Math.ceil(days/k)/1) + ")</font></span>");
        }
    }

    getLabsInfo();
}

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