MediaWiki:Cycle11.js: Difference between revisions
Appearance
miraheze>CodeTriangle this is probably more extensible |
RandomNetCat (talk | contribs) m 10 revisions imported: Import Miraheze archive 2022-10-29 |
||
| (One intermediate revision by one other user not shown) | |||
| Line 1: | Line 1: | ||
// DOM objects | // DOM objects | ||
let st = document.querySelector("#sharetable tbody"); | let st = document.querySelector("#sharetable tbody"); | ||
var vt = document.querySelector("#valuetable tbody"); | |||
// Only do the rest if the sharetable exists | // Only do the rest if the sharetable exists | ||
| Line 65: | Line 66: | ||
// Append this row to the share table. | // Append this row to the share table. | ||
st.appendChild(newRow); | st.appendChild(newRow); | ||
} | |||
if (vt) { | |||
let restIdx = -1; | |||
let lastIdx = -1; | |||
let currentIdx = -1; | |||
let rollIdx = -1; | |||
for (let j = 1; j < vt.children.length; j++) { | |||
let text = vt.children[j].children[0].innerText; | |||
if (/rest/i.test(text)) { | |||
restIdx = j; | |||
} else if (/last/i.test(text)) { | |||
lastIdx = j; | |||
} else if (/current/i.test(text)) { | |||
currentIdx = j; | |||
} else if (/roll/i.test(text) || /dice/i.test(text)) { | |||
rollIdx = j; | |||
} | |||
} | |||
var nextValues = []; | |||
var nextShareValues = []; | |||
if (restIdx != -1 && | |||
lastIdx != -1 && | |||
currentIdx != -1 && | |||
rollIdx != -1) { | |||
for (let i = 1; i < vt.children[0].children.length; i++) { | |||
function getFromTable(j) { | |||
return parseInt(vt.children[j].children[i].innerText); | |||
} | |||
let rest = getFromTable(restIdx); | |||
let last = getFromTable(lastIdx); | |||
let current = getFromTable(currentIdx); | |||
let roll = getFromTable(rollIdx); | |||
let val = Math.floor( | |||
(roll-50) + current + (rest-current)/5 + (current-last)/4 | |||
); | |||
nextValues.push(val); | |||
nextShareValues.push(Math.floor(val / totals[i - 1])); | |||
} | |||
vt.children[currentIdx].children[0].innerText = vt.children[currentIdx].children[0].innerText.replaceAll(/current/ig, "Last"); | |||
vt.children[lastIdx].remove(); | |||
// Construct a new row to contain totals for each rule. | |||
let valuesRow = document.createElement("tr"); | |||
let shareValuesRow = document.createElement("tr"); | |||
let valuesLabel = document.createElement("th"); | |||
valuesLabel.innerText = "Current Rule Value"; | |||
valuesRow.appendChild(valuesLabel); | |||
let shareValuesLabel = document.createElement("th"); | |||
shareValuesLabel.innerText = "Current Share Value"; | |||
shareValuesRow.appendChild(shareValuesLabel); | |||
for (let value of nextValues) { | |||
let valuesCell = document.createElement("td"); | |||
valuesCell.innerText = value; | |||
valuesCell.style = "font-weight: bold;"; | |||
valuesRow.appendChild(valuesCell); | |||
} | |||
for (let value of nextShareValues) { | |||
let shareValuesCell = document.createElement("td"); | |||
shareValuesCell.innerText = value; | |||
shareValuesCell.style = "font-weight: bold;"; | |||
shareValuesRow.appendChild(shareValuesCell); | |||
} | |||
// Append this row to the share table. | |||
vt.appendChild(valuesRow); | |||
vt.appendChild(shareValuesRow); | |||
} | |||
} | } | ||
Latest revision as of 02:09, 25 November 2022
// DOM objects
let st = document.querySelector("#sharetable tbody");
var vt = document.querySelector("#valuetable tbody");
// Only do the rest if the sharetable exists
if (st) {
// This block gets the total amount of shares for each rule
var totals = [];
// Loop over the number of columns in the first row (should never be greater
// than number of rows in table)
for (let i = 1; i < st.children[0].children.length; i++) {
let total = 0;
for (let row of st.children) {
// Skip over anything that doesn't look like a number (i.e. headings)
if (!isNaN(row.children[i].innerText)) {
total += parseInt(row.children[i].innerText);
}
}
totals.push(total);
// Code to generate a hover-over indication of percentages.
for (let row of st.children) {
// The cell that contains the entity's name.
let ent = row.children[0];
let ch = row.children[i];
if (!isNaN(ch.innerText)) {
let percent = parseInt(ch.innerText) / total;
let majority = percent > 0.5;
let minority = majority ? false : percent >= 0.1;
// But the BoB cannot be a shareholder at all.
if (ent.innerText.match(/Bureau/)) {
majority = minority = false;
}
ch.setAttribute(
"title",
// hacky way to round to two decimal points
// because the right way is worse
((percent * 10000) | 0) / 100 + "%" + (majority ? " (majority)" : minority ? " (minority)" : "")
);
if (majority) {
ch.style.fontWeight = "bold";
ch.style.textDecoration = "underline";
}
if (minority) {
ch.style.fontWeight = "bold";
}
}
}
}
// Construct a new row to contain totals for each rule.
let newRow = document.createElement("tr");
let totalLabel = document.createElement("th");
totalLabel.innerText = "Total";
newRow.appendChild(totalLabel);
for (let total of totals) {
let newEle = document.createElement("th");
newEle.innerText = total;
newEle.style = "text-align: left;";
newRow.appendChild(newEle);
}
// Append this row to the share table.
st.appendChild(newRow);
}
if (vt) {
let restIdx = -1;
let lastIdx = -1;
let currentIdx = -1;
let rollIdx = -1;
for (let j = 1; j < vt.children.length; j++) {
let text = vt.children[j].children[0].innerText;
if (/rest/i.test(text)) {
restIdx = j;
} else if (/last/i.test(text)) {
lastIdx = j;
} else if (/current/i.test(text)) {
currentIdx = j;
} else if (/roll/i.test(text) || /dice/i.test(text)) {
rollIdx = j;
}
}
var nextValues = [];
var nextShareValues = [];
if (restIdx != -1 &&
lastIdx != -1 &&
currentIdx != -1 &&
rollIdx != -1) {
for (let i = 1; i < vt.children[0].children.length; i++) {
function getFromTable(j) {
return parseInt(vt.children[j].children[i].innerText);
}
let rest = getFromTable(restIdx);
let last = getFromTable(lastIdx);
let current = getFromTable(currentIdx);
let roll = getFromTable(rollIdx);
let val = Math.floor(
(roll-50) + current + (rest-current)/5 + (current-last)/4
);
nextValues.push(val);
nextShareValues.push(Math.floor(val / totals[i - 1]));
}
vt.children[currentIdx].children[0].innerText = vt.children[currentIdx].children[0].innerText.replaceAll(/current/ig, "Last");
vt.children[lastIdx].remove();
// Construct a new row to contain totals for each rule.
let valuesRow = document.createElement("tr");
let shareValuesRow = document.createElement("tr");
let valuesLabel = document.createElement("th");
valuesLabel.innerText = "Current Rule Value";
valuesRow.appendChild(valuesLabel);
let shareValuesLabel = document.createElement("th");
shareValuesLabel.innerText = "Current Share Value";
shareValuesRow.appendChild(shareValuesLabel);
for (let value of nextValues) {
let valuesCell = document.createElement("td");
valuesCell.innerText = value;
valuesCell.style = "font-weight: bold;";
valuesRow.appendChild(valuesCell);
}
for (let value of nextShareValues) {
let shareValuesCell = document.createElement("td");
shareValuesCell.innerText = value;
shareValuesCell.style = "font-weight: bold;";
shareValuesRow.appendChild(shareValuesCell);
}
// Append this row to the share table.
vt.appendChild(valuesRow);
vt.appendChild(shareValuesRow);
}
}