MediaWiki:Script/Skills.js : Différence entre versions

(Page créée avec « Ce script sera chargé uniquement sur les pages en ayant besoin (les pages de compétences) : function createInput() { var allElementToCreate = this.querySelecto... »)
 
Ligne 122 : Ligne 122 :
 
       }
 
       }
 
     }
 
     }
    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);
 
  });
 
 
})();
 
 
     formules.forEach(function(formule){
 
     formules.forEach(function(formule){
 
       var param = formule.dataset.param.split(",");
 
       var param = formule.dataset.param.split(",");

Version du 5 mai 2022 à 10:44

/* 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);
  });

})();