Basculer le menu
Changer de menu des préférences
Basculer le menu personnel
Non connecté(e)
Votre adresse IP sera visible au public si vous faites des modifications.

La documentation pour ce module peut être créée à Module:TableColors/doc

local p = {}

-- Palette inspirée de Bootstrap 5 + Citizen
local colors = {
    -- Variantes de succès (vert)
    success = { bg = "#d1e7dd", fg = "#0f5132", label = "Succès" },
    ["success-light"] = { bg = "#e8f5e9", fg = "#1b5e20", label = "Succès clair" },
    
    -- Variantes de danger (rouge)
    danger = { bg = "#f8d7da", fg = "#842029", label = "Danger" },
    ["danger-light"] = { bg = "#ffebee", fg = "#c62828", label = "Danger clair" },
    
    -- Variantes d'avertissement (jaune/orange)
    warning = { bg = "#fff3cd", fg = "#664d03", label = "Avertissement" },
    ["warning-light"] = { bg = "#fffde7", fg = "#f57f17", label = "Avertissement clair" },
    
    -- Variantes d'information (bleu)
    info = { bg = "#cfe2ff", fg = "#084298", label = "Info" },
    ["info-light"] = { bg = "#e3f2fd", fg = "#01579b", label = "Info clair" },
    
    -- Variantes neutres
    primary = { bg = "#cfe2ff", fg = "#052c65", label = "Primaire" },
    secondary = { bg = "#e2e3e5", fg = "#41464b", label = "Secondaire" },
    light = { bg = "#f8f9fa", fg = "#495057", label = "Clair" },
    dark = { bg = "#ced4da", fg = "#212529", label = "Foncé" },
    
    -- Compatibilité anciens noms
    vert = { bg = "#d1e7dd", fg = "#0f5132", label = "Vert" },
    rouge = { bg = "#f8d7da", fg = "#842029", label = "Rouge" },
    jaune = { bg = "#fff3cd", fg = "#664d03", label = "Jaune" },
    rose = { bg = "#f8d7da", fg = "#842029", label = "Rose" },
    gris = { bg = "#e2e3e5", fg = "#41464b", label = "Gris" },
    bleu = { bg = "#cfe2ff", fg = "#084298", label = "Bleu" },
}

-- Fonction principale pour styliser une cellule
function p.cell(frame)
    local args = frame:getParent().args
    local colorName = mw.text.trim(args[1] or ""):lower()
    local content = args[2] or ""
    
    -- Gestion des alias
    local aliases = {
        ["gris-"] = "info-light",
        ["gris+"] = "secondary",
        ["vert-clair"] = "success-light",
        ["rouge-clair"] = "danger-light",
    }
    
    colorName = aliases[colorName] or colorName
    
    -- Récupération de la couleur
    local color = colors[colorName] or colors.light
    
    -- Construction de la balise span colorée
    return frame:preprocess(string.format(
        '<span style="background-color: %s; color: %s; padding: 2px 8px; border-radius: 3px; display: inline-block;">%s</span>',
        color.bg,
        color.fg,
        content ~= "" and content or "&nbsp;"
    ))
end

-- Fonction pour lister les couleurs disponibles
function p.list(frame)
    local rows = {}
    
    -- Trier les noms de couleurs
    local sorted = {}
    for name, _ in pairs(colors) do
        table.insert(sorted, name)
    end
    table.sort(sorted)
    
    -- Construire les lignes du tableau
    for _, name in ipairs(sorted) do
        local color = colors[name]
        table.insert(rows, string.format(
            '|-\n| %s || style="background-color:%s; color:%s; padding:8px 15px; font-weight:500;" | %s || <code>{{Couleur|%s}}</code>',
            color.label,
            color.bg,
            color.fg,
            color.label,
            name
        ))
    end
    
    -- Assembler le tableau complet
    local wikitext = '{| class="wikitable sortable"\n! Nom !! Aperçu !! Code\n' 
        .. table.concat(rows, '\n') 
        .. '\n|}'
    
    return frame:preprocess(wikitext)
end

return p