MediaWiki:Script/Skills.js
Révision datée du 5 mai 2022 à 10:44 par Dexter (discussion | contributions)
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);
});
})();