MediaWiki:Script/Skills.js

Note : après avoir enregistré vos modifications, il se peut que vous deviez forcer le rechargement complet du cache de votre navigateur pour voir les changements.

  • Firefox / Safari : maintenez la touche Maj (Shift) en cliquant sur le bouton Actualiser ou pressez Ctrl-F5 ou Ctrl-R (⌘-R sur un Mac)
  • Google Chrome : appuyez sur Ctrl-Maj-R (⌘-Shift-R sur un Mac)
  • Internet Explorer : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5
  • Opera : allez dans Menu → Settings (Opera → Préférences sur un Mac) et ensuite à Confidentialité & sécurité → Effacer les données d’exploration → Images et fichiers en cache.
/* Ce script sera chargé uniquement sur les pages en ayant besoin (les pages de compétences) */

function createInput() {
  
  var allElementToCreate = this.querySelectorAll("[data-create]");
  allElementToCreate.forEach(function(element){
    if (element.dataset.create==="select"){
      var select = document.createElement("select");
      select.id="skill-select";
      for(var i = 40; i >= 1; i--) {
        var option = document.createElement("option");
        if (i==40) {
          option.textContent="P";
        } else if (i >= 30) {
          option.textContent="G"+(i-29).toString();
        } else if (i >= 20) {
          option.textContent="M"+(i-19).toString();
        } else {
          option.textContent=i;
        }
        select.appendChild(option);
      }
      element.appendChild(select);
    } else if (element.dataset.create==="input") {
      var input = document.createElement("input");
      input.type = "number";
      input.min = "1";
      input.max = element.dataset.max;
      input.value = "90";
      element.appendChild(input);
    }
  });
}

function updateSkill() {
  
  var selectLevel = this.querySelector("#skill-select");
  var names = this.querySelector("div#skill-name").dataset
  var skillName = this.querySelector("#skill-name");
  var skillLevel = this.querySelector("#skill-level");
  var skillUp = this.querySelector("#skill-up");
  var formules = this.querySelectorAll("[data-formule]");
  var inputs = this.querySelectorAll("input");
  var coeffSkill = [0.05,0.06,0.08,0.10,0.12,0.14,0.16,0.18,0.20,0.22,0.24,0.26,0.28,0.30,0.32,0.34,0.36,0.38,0.40,0.50,0.52,0.54,0.56,0.58,0.60,0.63,0.66,0.69,0.72,0.82,0.85,0.88,0.91,0.94,0.98,1.02,1.06,1.10,1.15,1.25];
  
  updateSkillWindow.call(selectLevel)
  selectLevel.addEventListener("change", updateSkillWindow);
  inputs.forEach(function(input){
    input.addEventListener("change", updateSkillWindow);
  });

  function convertSkillLevel(level) {
    if (level == "P") {
      return [40, names["nameP"], "Maître parfait", ""]
    } else if (level[0] == "G") {
      return [29+parseInt(level.slice(1)), names["nameG"], "Grand Maître", parseInt(level.slice(1))]
    } else if (level[0] == "M") {
      return [19+parseInt(level.slice(1)), names["nameM"], "Maître", parseInt(level.slice(1))]
    }
    return [parseInt(level), names["nameP"], "", parseInt(level)]
  }
  
  function calculator(formule, tabValue, param) {
    
    var tabCoeff = formule.dataset.formule.split(",");
    var value = 0;
    var tabValueToUse = [];
    
    for (var i = 0; i <= param.length; i++) {
      if (param[i]==="1"){
        tabValueToUse.push(tabValue[i]);
      }
    }
    
    var n = tabValueToUse.length;

    if (n*(n+1)/2 != tabCoeff.length){
      return "error";
    } else {
      var c = 0;
      for(var i=0; i < n; i++){
        for(var j=0; j < n-i; j++){
          value += parseFloat(tabCoeff[c])*tabValueToUse[i]*tabValueToUse[i+j];
          c += 1;
        }
      }
      return Math.floor(value);
    }
  }

  function updateSkillWindow() {
    
    var [skillValue, name, level, skillValue2] = convertSkillLevel(selectLevel.value);
    var tabValue = [1,coeffSkill[skillValue-1]];
    inputs.forEach(function(input){
      if (input.value < parseFloat(input.min)){
        input.value = input.min
      } else if (input.value > parseFloat(input.max)) {
        console.log("oui")
        input.value = input.max
      }
      tabValue.push(input.value);
    });

    skillName.textContent = name;
    
    if (level === "") {
      skillLevel.parentElement.classList.add("tabber-noactive");
    } else {
      skillLevel.parentElement.classList.remove("tabber-noactive");
      skillLevel.textContent = level;
    }
    
    if (skillValue2 === "") {
      skillUp.parentElement.classList.add("tabber-noactive");
    } else {
      skillUp.parentElement.classList.remove("tabber-noactive");
      if (skillValue !== 10 && skillValue2 == 10) {
        skillUp.textContent = skillValue2+" (Master)";
      } else {
        skillUp.textContent = skillValue2;
      }
    }
    
    formules.forEach(function(formule){
      var param = formule.dataset.param.split(",");
      var res = calculator(formule, tabValue, param);
      formule.textContent = res;
    });
  }
}

(function(){
  
  var skillContainer = document.querySelectorAll("div#mw-content-text div.skill-container");
  
  skillContainer.forEach(function(e){
    createInput.call(e);
    updateSkill.call(e);
  });

})();