Module:BilanMédailles
[voir] [modifier] [historique] [purger]
Utilisation
modifierFonctions exportables :
bilan(frame)
– Génère un tableau de médailles avec les options de classement, de total, et un titre personnalisé. Cette fonction prend en paramètre le frame pour recevoir les arguments du modèle et retourne un tableau HTML.
Paramètres
modifierLes paramètres suivants peuvent être passés au modèle via le `frame` :
titre
– Titre du tableau, suivi automatiquement de la date de dernière mise à jour. Si ce paramètre est omis, aucun titre ne sera affiché.ranking
– Détermine si la colonne de classement doit être affichée. Les valeurs acceptées sontoui
(par défaut) ounon
.total
– Détermine si la ligne de total doit être affichée à la fin du tableau. Les valeurs acceptées sontoui
(par défaut) ounon
.participant
– Intitulé de la colonne représentant les participants. Par défaut, cette colonne est intitulée "Participant".
Autres fonctions :
calculerTotal(gold, silver, bronze)
– Calcule le total des médailles. Cette fonction prend trois arguments (le nombre de médailles d'or, d'argent, et de bronze) et retourne leur somme.
Modules externes et autres éléments dont ce module a besoin pour fonctionner :
mw.title
– Ce module n'a pas de dépendances externes spécifiques au moment de l'écriture.
Exemples
modifierPour des exemples, voir la page de test permettant de tester diverses modifications apportées.
La documentation de ce module est générée par le modèle {{Documentation module}}.
Elle est incluse depuis sa sous-page de documentation. Veuillez placer les catégories sur cette page-là.
Les éditeurs peuvent travailler dans le bac à sable (créer).
Voir les statistiques d'appel depuis le wikicode sur l'outil wstat et les appels depuis d'autres modules.
local p = {}
-- Fonction pour calculer le total des médailles
function p.calculerTotal(gold, silver, bronze)
return gold + silver + bronze
end
-- Fonction principale pour générer le tableau des médailles
function p.bilan(frame)
local participants = {}
local totalGold = 0
local totalSilver = 0
local totalBronze = 0
local totalOverall = 0
-- Récupérer les paramètres du tableau
local titre = frame.args["titre"] or ""
local showRanking = frame.args["ranking"] or "oui"
local showTotal = frame.args["total"] or "oui"
local colonneParticipant = frame.args["participant"] or "Participant"
-- Récupérer la date actuelle en français
local dateMiseAJour = mw.language.getContentLanguage():formatDate('j F Y')
-- Boucler sur tous les paramètres transmis pour construire la liste des participants
local i = 1
while frame.args[i] do
local name = frame.args[i]:match("^%s*(.-)%s*$") -- suppression des espaces superflus
local gold = tonumber(frame.args[i + 1]) or 0
local silver = tonumber(frame.args[i + 2]) or 0
local bronze = tonumber(frame.args[i + 3]) or 0
-- Arrêter la boucle si le nom est vide (ce qui signifie que nous avons atteint la fin des données valides)
if name == "" then
break
end
local total = p.calculerTotal(gold, silver, bronze)
-- Ajouter les médailles aux totaux
totalGold = totalGold + gold
totalSilver = totalSilver + silver
totalBronze = totalBronze + bronze
totalOverall = totalOverall + total
-- Ajouter le participant à la liste
table.insert(participants, {
name = name,
gold = gold,
silver = silver,
bronze = bronze,
total = total
})
i = i + 4 -- passer au groupe de 4 suivant
end
-- Construire le tableau avec le titre inclus en italique
local result = '{| class="wikitable sortable" style="text-align:center; font-size:95%;"\n'
if titre ~= "" then
result = result .. '|+ <i>' .. titre .. ' (Dernière mise à jour : ' .. dateMiseAJour .. ')</i>\n'
end
-- Construire la ligne d'entête
result = result .. '|-\n'
if showRanking == "oui" then
result = result .. '!|Rang !! style="text-align:left;"|' .. colonneParticipant
else
result = result .. '! style="text-align:left;"|' .. colonneParticipant
end
result = result .. ' !! style="width:4.5em; background:gold;"|Or'
result = result .. ' !! style="width:4.5em; background:silver;"|Argent'
result = result .. ' !! style="width:4.5em; background:#cc9966;"|Bronze'
result = result .. ' !! style="width:4.5em;"|Total\n'
-- Construire les lignes du tableau
for i, participant in ipairs(participants) do
result = result .. "|-\n"
if showRanking == "oui" then
result = result .. "!|" .. i .. "\n"
end
result = result .. "| style=\"text-align:left;\"|" .. participant.name .. "\n"
result = result .. "| style=\"width:4.5em; background:#F7F6A8;\"|" .. participant.gold .. "\n"
result = result .. "| style=\"width:4.5em; background:#DCE5E5;\"|" .. participant.silver .. "\n"
result = result .. "| style=\"width:4.5em; background:#FFDAB9;\"|" .. participant.bronze .. "\n"
result = result .. "| style=\"width:4.5em;\"|" .. participant.total .. "\n"
end
-- Ajouter la ligne de total si nécessaire
if showTotal == "oui" then
result = result .. "|-\n"
if showRanking == "oui" then
result = result .. '! colspan="2" style="font-weight:bold;"|Total'
result = result .. ' !! style="width:4.5em; font-weight:bold;"|' .. totalGold
result = result .. ' !! style="width:4.5em; font-weight:bold;"|' .. totalSilver
result = result .. ' !! style="width:4.5em; font-weight:bold;"|' .. totalBronze
result = result .. ' !! style="width:4.5em; font-weight:bold;"|' .. totalOverall .. "\n"
else
result = result .. '! colspan="1" style="font-weight:bold;"|Total'
result = result .. ' !! style="width:4.5em; font-weight:bold;"|' .. totalGold
result = result .. ' !! style="width:4.5em; font-weight:bold;"|' .. totalSilver
result = result .. ' !! style="width:4.5em; font-weight:bold;"|' .. totalBronze
result = result .. ' !! style="width:4.5em; font-weight:bold;"|' .. totalOverall .. "\n"
end
end
result = result .. "|}"
return result
end
return p