MediaWiki:Common.js

From Dead Ahead Wiki
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];
	}
});