Jump to content
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.
Version datée du 9 octobre 2025 à 07:21 par Hiob (discussion | contributions) (Avec ou sans tableau)

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 unifiée
function p.cell(frame)
    local args = frame:getParent().args
    local colorName = mw.text.trim(args[1] or ""):lower()
    local content = args[2]
    local mode = mw.text.trim(args.mode or args[3] or "auto"):lower()
    
    -- 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 du style
    local styleAttr = string.format(
        'background-color:%s; color:%s; padding:8px 12px;',
        color.bg,
        color.fg
    )
    
    -- Détection automatique du contexte
    if mode == "auto" then
        -- Si pas de contenu, c'est probablement pour un tableau
        if not content or mw.text.trim(content) == "" then
            mode = "table"
        else
            mode = "span"
        end
    end
    
    -- Mode tableau (pour les cellules)
    if mode == "table" or mode == "cellule" then
        if not content or mw.text.trim(content) == "" then
            return 'style="' .. styleAttr .. '" | '
        end
        return 'style="' .. styleAttr .. '" | ' .. content
    end
    
    -- Mode span (pour le texte normal)
    if not content or mw.text.trim(content) == "" then
        return ''
    end
    
    return string.format(
        '<span style="%s">%s</span>',
        styleAttr,
        content
    )
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|Exemple}}</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
Les témoins (''cookies'') nous aident à fournir nos services. En utilisant nos services, vous acceptez notre utilisation de témoins.