MediaWiki:Gadget-gadvia-score-calculator.js: Difference between revisions
Jump to navigation
Jump to search
Created page with "→Finds elements by a selector and executes a function for each element: function findAndExecute(selector, callback) { const elements = document.querySelectorAll(selector); elements.forEach((element) => { try { callback(element); } catch (e) { console.error(`Error while initializing "${selector}"`, e); } }); } →Gadvia Score Calculator: findAndExecute(".rgwiki-gadvia-score-calculator", (root) => { ro..." |
No edit summary |
||
Line 18: | Line 18: | ||
function createFormField(root, labelText) { | function createFormField(root, labelText) { | ||
const fieldContainer = document.createElement("div"); | const fieldContainer = document.createElement("div"); | ||
fieldContainer. | fieldContainer.classList.add("rgwiki-gadvia-score-calculator-field-container"); | ||
const label = document.createElement("label"); | const label = document.createElement("label"); | ||
Line 35: | Line 34: | ||
const fields = document.createElement("div"); | const fields = document.createElement("div"); | ||
fields. | fields.classList.add("rgwiki-gadvia-score-calculator-fields"); | ||
const inputGoldPerfect = createFormField(fields, "Gold Perfect"); | const inputGoldPerfect = createFormField(fields, "Gold Perfect"); |
Latest revision as of 19:02, 9 January 2025
/* Finds elements by a selector and executes a function for each element */ function findAndExecute(selector, callback) { const elements = document.querySelectorAll(selector); elements.forEach((element) => { try { callback(element); } catch (e) { console.error(`Error while initializing "${selector}"`, e); } }); } /* Gadvia Score Calculator */ findAndExecute(".rgwiki-gadvia-score-calculator", (root) => { root.textContent = ""; function createFormField(root, labelText) { const fieldContainer = document.createElement("div"); fieldContainer.classList.add("rgwiki-gadvia-score-calculator-field-container"); const label = document.createElement("label"); label.textContent = labelText; fieldContainer.appendChild(label); const inputElement = document.createElement("input"); inputElement.type = "number"; inputElement.size = 8; fieldContainer.appendChild(inputElement); root.appendChild(fieldContainer); return inputElement; } const fields = document.createElement("div"); fields.classList.add("rgwiki-gadvia-score-calculator-fields"); const inputGoldPerfect = createFormField(fields, "Gold Perfect"); const inputAnyPerfect = createFormField(fields, "Any Perfect"); const inputGreat = createFormField(fields, "Great"); const inputGood = createFormField(fields, "Good"); const inputMiss = createFormField(fields, "Miss"); const calculateBtn = document.createElement("button"); calculateBtn.textContent = "Calculate"; fields.appendChild(calculateBtn); root.appendChild(fields); const output = document.createElement("p"); root.appendChild(output); calculateBtn.addEventListener("click", () => { const goldPerfect = Number(inputGoldPerfect.value); const anyPerfect = Number(inputAnyPerfect.value); const great = Number(inputGreat.value); const good = Number(inputGood.value); const miss = Number(inputMiss.value); const hitNotes = anyPerfect + great + good; const totalNotes = anyPerfect + great + good + miss; const nonGoldPerfect = anyPerfect - goldPerfect; const score = Math.floor((anyPerfect + (great * 0.8) + (good * 0.5)) / totalNotes * 1000000) + (goldPerfect * 0.0001); output.innerHTML = `<b>Score:</b> ${score}<br><b>Hit notes:</b> ${hitNotes}/${totalNotes}<br><b>Non-gold perfects:</b> ${nonGoldPerfect}`; }); });