MediaWiki:Cycle11.js: Difference between revisions
miraheze>CodeTriangle m Protected "MediaWiki:Cycle11.js": don't want any trolls ([Edit=Allow only administrators] (indefinite) [Move=Allow only administrators] (indefinite) [Delete=Allow only administrators] (indefinite)) |
RandomNetCat (talk | contribs) m 10 revisions imported: Import Miraheze archive 2022-10-29 |
||
(7 intermediate revisions 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"); | |||
// This block gets the total amount of shares for each rule | // Only do the rest if the sharetable exists | ||
if (st) { | |||
// Loop over the number of columns in the first row (should never be greater | // This block gets the total amount of shares for each rule | ||
// than number of rows in table) | var totals = []; | ||
for (let i = 1; i < st.children[0].children.length; i++) { | // 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); | |||
} | } | ||
// Construct a new row to contain totals for each rule. | if (vt) { | ||
let | let restIdx = -1; | ||
let | let lastIdx = -1; | ||
let currentIdx = -1; | |||
let rollIdx = -1; | |||
for (let | |||
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); } }