Aller au contenu

Module:BilanMédailles

Une page de Wikipédia, l'encyclopédie libre.
Ceci est une version archivée de cette page, en date du 11 août 2024 à 16:57 et modifiée en dernier par Aferkiiw (discuter | contributions) (Debug). Elle peut contenir des erreurs, des inexactitudes ou des contenus vandalisés non présents dans la version actuelle.

 Documentation[voir] [modifier] [historique] [purger]

Utilisation

Fonctions 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

Les 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 sont oui (par défaut) ou non.
  • total – Détermine si la ligne de total doit être affichée à la fin du tableau. Les valeurs acceptées sont oui (par défaut) ou non.
  • 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

Pour des exemples, voir la page de test permettant de tester diverses modifications apportées.


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 avec un titre, options de ranking et total
function p.bilan(frame)
    local participants = {}
    local totalGold = 0
    local totalSilver = 0
    local totalBronze = 0
    local totalOverall = 0
    
    -- Récupérer les paramètres 'titre', 'ranking' et 'total' (appliquer 'oui' par défaut)
    local titre = frame.args["titre"] or ""
    local showRanking = frame.args["ranking"] or "oui"
    local showTotal = frame.args["total"] or "oui"
    
    -- Récupérer la date actuelle pour la mise à jour
    local dateMiseAJour = os.date("%d %B %Y")
    
    -- Récupérer les participants et leurs médailles
    for i = 1, math.huge, 4 do
        local name = frame.args[i]
        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

        if not 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
        
        table.insert(participants, {
            name = name,
            gold = gold,
            silver = silver,
            bronze = bronze,
            total = total
        })
    end
    
    -- Construire le tableau avec le titre inclus
    local result = '{| class="wikitable sortable" style="text-align:center; vertical-align:middle; font-size:95%;"\n'
    
    -- Ajouter le titre si fourni
    if titre ~= "" then
        result = result .. '|-\n'
        local colspanValue = showRanking == "oui" and 6 or 5
        result = result .. '! colspan="' .. colspanValue .. '" style="font-weight:bold; text-align:center;"| ' .. titre .. ' (Dernière mise à jour : ' .. dateMiseAJour .. ')\n'
    end
    
    -- Construire la ligne d'entête avec les styles et les couleurs spécifiques
    result = result .. '|-\n'
    if showRanking == "oui" then
        result = result .. '! style="width:4.5em;"|Rang !! style="text-align:left; vertical-align:middle;"|Participant'
    else
        result = result .. '! style="text-align:left; vertical-align:middle;"|Participant'
    end
    
    -- Ajouter les entêtes de colonne avec les couleurs de fond spécifiques
    result = result .. ' !! style="width:4.5em; background:gold; vertical-align:middle;"|Or'
    result = result .. ' !! style="width:4.5em; background:silver; vertical-align:middle;"|Argent'
    result = result .. ' !! style="width:4.5em; background:#cc9966; vertical-align:middle;"|Bronze'
    result = result .. ' !! style="width:4.5em; vertical-align:middle;"|Total\n'
    
    -- Construire les lignes du tableau
    for i, participant in ipairs(participants) do
        result = result .. "|-\n"
        if showRanking == "oui" then
            result = result .. "! style=\"width:4.5em; vertical-align:middle;\"|" .. i .. "\n"
        end
        result = result .. "| style=\"text-align:left; vertical-align:middle;\"|" .. participant.name .. "\n"
        result = result .. "| style=\"width:4.5em; vertical-align:middle; background:#F7F6A8;\"|" .. participant.gold .. "\n"
        result = result .. "| style=\"width:4.5em; vertical-align:middle; background:#DCE5E5;\"|" .. participant.silver .. "\n"
        result = result .. "| style=\"width:4.5em; vertical-align:middle; background:#FFDAB9;\"|" .. participant.bronze .. "\n"
        result = result .. "| style=\"width:4.5em; vertical-align:middle;\"|" .. participant.total .. "\n"
    end
    
    -- Ajouter la ligne de total à la fin du tableau si l'option total est activée
    if showTotal == "oui" then
        result = result .. "|-\n"
        if showRanking == "oui" then
            result = result .. '! colspan="2" style="text-align:left; vertical-align:middle; font-weight:bold;"|Total'
            result = result .. ' !! style="width:4.5em; vertical-align:middle; font-weight:bold;"|' .. totalGold 
            result = result .. ' !! style="width:4.5em; vertical-align:middle; font-weight:bold;"|' .. totalSilver 
            result = result .. ' !! style="width:4.5em; vertical-align:middle; font-weight:bold;"|' .. totalBronze 
            result = result .. ' !! style="width:4.5em; vertical-align:middle; font-weight:bold;"|' .. totalOverall .. "\n"
        else
            result = result .. '! colspan="1" style="text-align:left; vertical-align:middle; font-weight:bold;"|Total'
            result = result .. ' !! style="width:4.5em; vertical-align:middle; font-weight:bold;"|' .. totalGold 
            result = result .. ' !! style="width:4.5em; vertical-align:middle; font-weight:bold;"|' .. totalSilver 
            result = result .. ' !! style="width:4.5em; vertical-align:middle; font-weight:bold;"|' .. totalBronze 
            result = result .. ' !! style="width:4.5em; vertical-align:middle; font-weight:bold;"|' .. totalOverall .. "\n"
        end
    end
    
    result = result .. "|}"

    return result
end

return p