Adds calculator to factory supply page
// ==UserScript==
// @name Virtonomics: Product Quality Calculator
// @namespace virtonomics
// @include *virtonomic*.*/*/main/unit/view/*/supply
// @version 1.1
// @grant none
// @description Adds calculator to factory supply page
// ==/UserScript==
// Written to work in all realms and languages
var run = function() {
if (window.top != window.self) { //-- Don't run on frames or iframes
return;
}
var win = (typeof(unsafeWindow) != 'undefined' ? unsafeWindow : top.window);
$ = win.$;
// calculate weighted average quality of inputs
function CalcProdQlty() {
var total = 0;
var pcs = 0;
var qlty = document.getElementsByName("qlty");
var numProducts = qlty.length;
var tech = parseFloat(document.getElementById("techLvl").value);
var qMod = parseFloat(document.getElementById("qltyMod").value);
for (var i=0;i<numProducts;i++) {
var nRow = productRow.eq(i);
var nTbl = $("tbody", nRow).eq(1);
var cRow = $("tr", nTbl).eq(0);
var amtReq = parseFloat($("td", cRow).eq(1).html().replace(/ /g,''));
var q = parseFloat(qlty[i].value);
pcs += amtReq;
total += amtReq * q;
}
var avgQlty = total / pcs;
// calculate product quality
var t = Math.pow(tech, 0.65);
var m = 1 + (qMod / 100);
var i = Math.sqrt(avgQlty);
var productQuality = t * m * i;
console.log (productQuality);
document.getElementById("prodQlty").value = productQuality.toFixed(2);
}
// check for factory subdivision
if (/workshop/i.test (document.body.innerHTML) ) {
console.log("factory subdivision found");
var tbl = $("table.infoblock")[0];
h1 = $("th", tbl).eq(0);
h2 = $("th", tbl).eq(1);
var ph1 = h1.parent()[0];
var cell = document.createElement("th");
var cellText = document.createTextNode('Technology: ');
cell.appendChild(cellText);
ph1.insertBefore(cell,ph1.childNodes[0]);
var cell = document.createElement("td");
var input = document.createElement('input');
input.setAttribute("type", "text");
input.setAttribute("id", "techLvl");
input.setAttribute("name", "tech");
input.setAttribute("style", "width:50px");
cell.appendChild(input);
ph1.insertBefore(cell,ph1.childNodes[1]);
var ph2 = h2.parent()[0];
var tblBody = h2.parent().parent()[0];
var cell = document.createElement("th");
var cellText = document.createTextNode('Quality Modifier: ');
cell.appendChild(cellText);
ph2.insertBefore(cell,ph2.childNodes[0]);
var cell = document.createElement("td");
var input = document.createElement('input');
input.setAttribute("type", "text");
input.setAttribute("value", "0");
input.setAttribute("id", "qltyMod");
input.setAttribute("name", "modifier");
input.setAttribute("style", "width:50px");
cell.appendChild(input);
ph2.insertBefore(cell,ph2.childNodes[1]);
var row = document.createElement("tr");
var cell = document.createElement("th");
var cellText = document.createTextNode('Product Quality: ');
cell.appendChild(cellText);
row.appendChild(cell);
var cell = document.createElement("td");
var input = document.createElement('input');
input.setAttribute("type", "text");
input.setAttribute("id", "prodQlty");
input.setAttribute("name", "outputQlty");
input.setAttribute("style", "width:50px");
cell.appendChild(input);
row.appendChild(cell);
var cell = document.createElement("td");
var input=document.createElement("input");
input.type="button";
input.value="Calc";
input.onclick = CalcProdQlty;
cell.appendChild(input);
row.appendChild(cell);
tblBody.appendChild(row);
var tbl2 = $("table.list")[0];
tb = $("tbody", tbl2).eq(1);
tr = $("tr", tbl2);
var productRow = $('tr[id^="product_row_"]');
var product = $("img[src^='/img/products']");
var numInputs = product.length;
for (var i=0;i<numInputs;i++) {
var pProduct = product.parent().parent().parent().parent()[i];
var cell = document.createElement("td");
var input = document.createElement('input');
input.setAttribute("type", "text");
var newRow = productRow.eq(i);
var newTbl = $("tbody", newRow).eq(2);
var curRow = $("tr", newTbl).eq(1);
$(curRow).css("background-color","orange");
$( "td", curRow ).eq( 1 ).css( "background-color", "yellow" );
stockQlty = $( "td", curRow ).eq( 1 ).html();
input.setAttribute("value", stockQlty);
input.setAttribute("name", "qlty");
input.setAttribute("style", "width:50px");
cell.appendChild(input);
pProduct.insertBefore(cell,pProduct.childNodes[0]);
}
}
}
var script = document.createElement("script");
script.textContent = '(' + run.toString() + ')();';
document.documentElement.appendChild(script);