MediaWiki:Common.js
Jump to navigation
Jump to search
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
- Opera: Press Ctrl-F5.
/* Any JavaScript here will be loaded for all users on every page load. */
// ------------------------- DRUID functionality -------------------------
// https://support.wiki.gg/wiki/MediaWiki:Gadget-druidInfoboxes.js
$(function () {
$(".druid-main-images-label").off("click");
$(".druid-main-images-label").click(function () {
var $parent = $(this).closest(".druid-container");
$parent.find(".druid-toggleable").removeClass("focused");
var i = $(this).attr("data-druid");
$parent.find(".druid-toggleable[data-druid=" + i + "]").addClass("focused");
});
$(".druid-collapsible").off("click");
$(".druid-collapsible").click(function () {
var kind = $(this).attr("data-druid-section");
$(this).toggleClass("druid-collapsible-collapsed");
$(this)
.closest(".druid-container")
.find("[data-druid-section-row=" + kind + "]")
.toggleClass("druid-collapsed");
});
});
// ------------------------- Infobox calculator functions -------------------------
$(function(){
var checkIfCalculatorPresent = document.getElementById("calc-table-area");
if (checkIfCalculatorPresent == null) return;
var btnInc = document.createElement('button');
btnInc.innerHTML = '+';
btnInc.id = "incButton";
btnInc.className = "inc-button";
btnInc.onclick = function (e) {
e.preventDefault;
calcInc();
};
var btnDec = document.createElement('button');
btnDec.innerHTML = '-';
btnDec.id = "decButton";
btnDec.className = "dec-button";
btnDec.onclick = function (e) {
e.preventDefault;
calcDec();
};
var inputFieldLevel = document.createElement('input');
inputFieldLevel.id = "levelInput";
inputFieldLevel.className = "level-input";
inputFieldLevel.type = "number";
inputFieldLevel.value = "0";
inputFieldLevel.onchange = function (e) {
e.preventDefault;
onChangeCalcCall();
};
document.getElementById('calcBtnPlus').appendChild(btnInc);
document.getElementById('calcBtnMinus').appendChild(btnDec);
document.getElementById('calcInputArea').appendChild(inputFieldLevel);
if (document.getElementById("extraDamageCol") != null &&
String(document.getElementById("calc-table-area").getAttribute("data-unit-or-enemy")).toLowerCase() == "yes") { // Is a unit with an additional scalable attack?
document.getElementById("extra-crit-row").style.display="none"; // Scalable extra attacks of units don't use a crit field
calcStats();
} else { calcStats(); }
function calcInc() {
document.getElementById("levelInput").value = Math.floor(Number(document.getElementById("levelInput").value)) + 1;
calcStats();
}
function calcDec() {
if (document.getElementById("levelInput").value == 0) return;
document.getElementById("levelInput").value = Math.floor(document.getElementById("levelInput").value) - 1;
calcStats();
}
function onChangeCalcCall() {
document.getElementById("levelInput").value = document.getElementById("levelInput").value.replace(/\D/g,'');
calcStats();
}
function calcStats() {
var health = 0; var healthReference = document.getElementById("healthCol");
var rangedDamage = 0; var rangedDamageReference = document.getElementById("rangedDamageCol");
var meleeDamage = 0; var meleeDamageReference = document.getElementById("meleeDamageCol");
var meleeCritDamage = 0; var meleeCritDamageReference = document.getElementById("meleeCritCol");
var extraDamageMultiplier = 1; var extraDamageMultiplierReference = document.getElementById("extraDamageCol");
var extraDamageCritReference = document.getElementById("extraCritCol");
var poisonDamage = 0; var poisonDamageReference = document.getElementById("poisonDamageCol");
var trueDamage = 0; var trueDamageReference = document.getElementById("trueDamageCol");
if (healthReference != null) health = Number(healthReference.getAttribute("data-base-health"));
if (document.getElementById("rangedDamageCol") != null) rangedDamage = Number(document.getElementById("rangedDamageCol").getAttribute("data-ranged-damage"));
if (document.getElementById("meleeDamageCol") != null) meleeDamage = Number(document.getElementById("meleeDamageCol").getAttribute("data-melee-damage"));
if (document.getElementById("meleeCritCol") != null) meleeCritDamage = Number(document.getElementById("meleeCritCol").getAttribute("data-melee-crit-damage"));
if (extraDamageMultiplierReference != null) extraDamageMultiplier = Number(extraDamageMultiplierReference.getAttribute("data-extra-damage-multiplier"));
if (document.getElementById("poisonDamageCol") != null) poisonDamage = Number(document.getElementById("poisonDamageCol").getAttribute("data-poison-damage"));
if (document.getElementById("trueDamageCol") != null) trueDamage = Number(document.getElementById("trueDamageCol").getAttribute("data-true-damage"));
var check = String(document.getElementById("calc-table-area").getAttribute("data-unit-or-enemy")).toLowerCase();
var level = document.getElementById("levelInput").value;
var resHealth = 0;
var resRangedDamage = 0;
var resMeleeDamage = 0;
var resMeleeCritDamage = 0;
var resExtraDamage = 0;
var resExtraCritDamage = 0;
var resPoisonDamage = 0;
var resTrueDamage = 0;
if (check == "no") {
resHealth = Math.ceil(health * (1 + 0.2 * level));
resRangedDamage = Math.ceil(rangedDamage * (1 + 0.2 * level));
resMeleeDamage = Math.ceil(meleeDamage * (1 + 0.2 * level));
resMeleeCritDamage = Math.ceil(meleeCritDamage * (1 + 0.2 * level));
resExtraDamage = Math.floor(meleeDamage * (1 + 0.2 * level)) * extraDamageMultiplier;
resExtraCritDamage = Math.ceil(resExtraDamage * 1.1);
resPoisonDamage = Math.ceil(poisonDamage * (1 + 0.2 * level));
resTrueDamage = Math.ceil(trueDamage * (1 + 0.2 * level));
} else if (check == "yes") {
resHealth = Math.round(health * Math.pow(1.1, level));
resRangedDamage = Math.round(rangedDamage * Math.pow(1.1, level));
resMeleeDamage = Math.round(meleeDamage * Math.pow(1.1, level));
resMeleeCritDamage = Math.floor(meleeCritDamage * Math.pow(1.1, level));
resExtraDamage = resMeleeDamage * extraDamageMultiplier;
resTrueDamage = Math.round(trueDamage * Math.pow(1.1, level));
}
if (healthReference != null) healthReference.innerHTML = resHealth;
if (rangedDamageReference != null) rangedDamageReference.innerHTML = resRangedDamage;
if (meleeDamageReference != null) meleeDamageReference.innerHTML = resMeleeDamage;
if (meleeCritDamageReference != null) meleeCritDamageReference.innerHTML = resMeleeCritDamage;
if (extraDamageMultiplierReference != null) extraDamageMultiplierReference.innerHTML = resExtraDamage;
if (extraDamageCritReference != null) extraDamageCritReference.innerHTML = resExtraCritDamage;
if (poisonDamageReference != null) poisonDamageReference.innerHTML = resPoisonDamage;
if (trueDamageReference != null) trueDamageReference.innerHTML = resTrueDamage;
}
});
// ------------------------- Static level data display functions -------------------------
$(function(){
var checkIfStaticDataPresent = document.getElementById("static-table-area");
if (checkIfStaticDataPresent == null) return;
var btnIncStatic = document.createElement('button');
btnIncStatic.innerHTML = '+';
btnIncStatic.id = "incButtonStatic";
btnIncStatic.className = "inc-button";
btnIncStatic.onclick = function (e) {
e.preventDefault;
showNextLevel();
};
var btnDecStatic = document.createElement('button');
btnDecStatic.innerHTML = '-';
btnDecStatic.id = "decButtonStatic";
btnDecStatic.className = "dec-button";
btnDecStatic.onclick = function (e) {
e.preventDefault;
showPrevLevel();
};
var inputFieldLevelStatic = document.createElement('input');
inputFieldLevelStatic.id = "levelInputStatic";
inputFieldLevelStatic.className = "level-input"
inputFieldLevelStatic.type = "number";
inputFieldLevelStatic.value = "0";
inputFieldLevelStatic.onchange = function (e) {
e.preventDefault;
onChangeStaticCall();
};
document.getElementById('staticBtnPlus').appendChild(btnIncStatic);
document.getElementById('staticBtnMinus').appendChild(btnDecStatic);
document.getElementById('staticInputArea').appendChild(inputFieldLevelStatic);
// Parse and save stats passed to the template
function statParser(stats) {
var result = new Array();
result = stats.split(",");
// If a single value has been submitted, just copy it for all other levels
if (result.length == 1) {
for (var i = 0; i < 13; i++) result.push(result[0]);
}
return result;
}
var healthStatic = new Array(); var healthReferenceStatic = document.getElementById("healthStaticCol");
var healingStatic = new Array(); var healingReferenceStatic = document.getElementById("healingStaticCol");
var meleeStatic = new Array(); var meleeReferenceStatic = document.getElementById("meleeStaticCol");
var rangedStatic = new Array(); var rangedReferenceStatic = document.getElementById("rangedStaticCol");
var fireStatic = new Array(); var fireReferenceStatic = document.getElementById("fireStaticCol");
var explosiveStatic = new Array(); var explosiveReferenceStatic = document.getElementById("explosiveStaticCol");
var firingperiodStatic = new Array(); var firingperiodReferenceStatic = document.getElementById("firingperiodStaticCol");
var clipsizeStatic = new Array(); var clipsizeReferenceStatic = document.getElementById("clipsizeStaticCol");
var durationStatic = new Array(); var durationReferenceStatic = document.getElementById("durationStaticCol");
var lifetimeStatic = new Array(); var lifetimeReferenceStatic = document.getElementById("lifetimeStaticCol");
if (healthReferenceStatic != null) healthStatic = statParser(healthReferenceStatic.getAttribute("data-health-static"));
if (healingReferenceStatic != null) healingStatic = statParser(healingReferenceStatic.getAttribute("data-healing-static"));
if (meleeReferenceStatic != null) meleeStatic = statParser(meleeReferenceStatic.getAttribute("data-melee-static"));
if (rangedReferenceStatic != null) rangedStatic = statParser(rangedReferenceStatic.getAttribute("data-ranged-static"));
if (fireReferenceStatic != null) fireStatic = statParser(fireReferenceStatic.getAttribute("data-fire-static"));
if (explosiveReferenceStatic != null) explosiveStatic = statParser(explosiveReferenceStatic.getAttribute("data-explosive-static"));
if (firingperiodReferenceStatic != null) firingperiodStatic = statParser(firingperiodReferenceStatic.getAttribute("data-firingperiod-static"));
if (clipsizeReferenceStatic != null) clipsizeStatic = statParser(clipsizeReferenceStatic.getAttribute("data-clipsize-static"));
if (durationReferenceStatic != null) durationStatic = statParser(durationReferenceStatic.getAttribute("data-duration-static"));
if (lifetimeReferenceStatic != null) lifetimeStatic = statParser(lifetimeReferenceStatic.getAttribute("data-lifetime-static"));
function showNextLevel() {
if (document.getElementById("levelInputStatic").value == 13) return;
document.getElementById("levelInputStatic").value = Math.floor(Number(document.getElementById("levelInputStatic").value)) + 1;
displayCurrentStats();
}
function showPrevLevel() {
if (document.getElementById("levelInputStatic").value == 0) return;
document.getElementById("levelInputStatic").value = Math.floor(Number(document.getElementById("levelInputStatic").value)) - 1;
displayCurrentStats();
}
function onChangeStaticCall() {
document.getElementById("levelInputStatic").value = document.getElementById("levelInputStatic").value.replace(/\D/g,'');
if (document.getElementById("levelInputStatic").value < 0) document.getElementById("levelInputStatic").value = 0; // ideally shouldn't trigger, but who knows
if (document.getElementById("levelInputStatic").value > 13) document.getElementById("levelInputStatic").value = 13;
displayCurrentStats();
}
displayCurrentStats(); // Show level 0 values on start
function displayCurrentStats() {
var level = document.getElementById("levelInputStatic").value;
if (healthReferenceStatic != null) healthReferenceStatic.innerHTML = healthStatic[level];
if (healingReferenceStatic != null) healingReferenceStatic.innerHTML = healingStatic[level];
if (meleeReferenceStatic != null) meleeReferenceStatic.innerHTML = meleeStatic[level];
if (rangedReferenceStatic != null) rangedReferenceStatic.innerHTML = rangedStatic[level];
if (fireReferenceStatic != null) fireReferenceStatic.innerHTML = fireStatic[level];
if (explosiveReferenceStatic != null) explosiveReferenceStatic.innerHTML = explosiveStatic[level];
if (firingperiodReferenceStatic != null) firingperiodReferenceStatic.innerHTML = firingperiodStatic[level];
if (clipsizeReferenceStatic != null) clipsizeReferenceStatic.innerHTML = clipsizeStatic[level];
if (durationReferenceStatic != null) durationReferenceStatic.innerHTML = durationStatic[level];
if (lifetimeReferenceStatic != null) lifetimeReferenceStatic.innerHTML = lifetimeStatic[level];
}
});