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 2 mars 2026 à 14:41 par Hiob (discussion | contributions)
(diff) ← Version précédente | Version actuelle (diff) | Version suivante → (diff)

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

local p = {}

-- =============================================================================
-- Palette : uniquement les noms → classe CSS + variables --nefald-*
-- Pas de couleurs en dur : tout est géré par Citizen.css
-- =============================================================================

local colors = {
    success  = { class = "table-color-success",   label = "Succès",        var = "nefald-success"  },
    danger   = { class = "table-color-danger",    label = "Danger",        var = "nefald-danger"   },
    warning  = { class = "table-color-warning",   label = "Avertissement", var = "nefald-warning"  },
    info     = { class = "table-color-info",      label = "Info",          var = "nefald-info"     },
    secondary = { class = "table-color-secondary", label = "Neutre",       var = "nefald-neutral"  },
}

-- Aliases → entrée canonique
local aliases = {
    vert    = "success",
    rouge   = "danger",
    jaune   = "warning",
    bleu    = "info",
    gris    = "secondary",
    neutre  = "secondary",
    neutral = "secondary",
    primary = "info",
}

-- Ordre d'affichage stable
local order = { "success", "danger", "warning", "info", "secondary" }

-- =============================================================================
-- Résolution d'un nom (gère alias + trim + lowercase)
-- =============================================================================

local function resolve(name)
    name = mw.text.trim(name or ""):lower()
    name = aliases[name] or name
    return colors[name], name
end

-- =============================================================================
-- p.cell — génère une cellule de tableau OU un badge inline
--
-- Usage tableau  : {{Couleur|success|Texte}}  → style="..." | Texte
-- Usage texte    : {{Couleur|danger|Texte}}   → <span class="...">Texte</span>
-- =============================================================================

function p.cell(frame)
    local args = frame:getParent().args
    local colorName = mw.text.trim(args[1] or ""):lower()
    colorName = aliases[colorName] or colorName
    local content = args[2] or ""
    local trimmed = mw.text.trim(content)

    local color = colors[colorName]
    if not color then
        return content
    end

    -- Détection du contexte : tableau si le contenu est court et sans ponctuation lourde
    local isTableMode = frame:getParent():getTitle() == "" or
        (trimmed:len() < 60 and not trimmed:match("[%.%!%?]") and not trimmed:match("\n"))

    -- Forcer texte si le parent est un wikitable en cours de parsing
    -- On se fie au premier argument vide = cellule de tableau
    if trimmed == "" then
        return string.format('class="%s" | ', color.class)
    end

    -- Heuristique simple : contenu court sans ponctuation → mode tableau
    local hasLong      = trimmed:len() > 80
    local hasPunct     = trimmed:match("[%.!%?;]") ~= nil
    local hasNewline   = trimmed:match("\n") ~= nil

    if hasLong or hasPunct or hasNewline then
        -- Badge inline
        return string.format('<span class="%s" style="padding:4px 10px;border-radius:6px;display:inline-block;font-weight:500;border-left:none;border:1.5px solid var(--%s-border)">%s</span>',
            color.class, color.var, content)
    else
        -- Cellule wikitable
        return string.format('class="%s" | %s', color.class, content)
    end
end

-- =============================================================================
-- p.badge — badge inline explicite (pas d'ambiguïté)
-- Usage : {{#invoke:TableColors|badge|success|Texte}}
-- =============================================================================

function p.badge(frame)
    local args = frame.args
    local color, _ = resolve(args[1] or "")
    local content = args[2] or ""
    if not color then return content end

    return string.format(
        '<span class="%s" style="padding:4px 10px;border-radius:6px;display:inline-block;font-weight:500;border-left:none;border:1.5px solid var(--%s-border)">%s</span>',
        color.class, color.var, content
    )
end

-- =============================================================================
-- p.list — tableau de référence de toutes les couleurs
-- Usage : {{#invoke:TableColors|list}}
-- =============================================================================

function p.list(frame)
    local rows = {}

    for _, name in ipairs(order) do
        local color = colors[name]

        local badge = string.format(
            '<span class="%s" style="padding:4px 10px;border-radius:6px;display:inline-block;font-weight:500;border-left:none;border:1.5px solid var(--%s-border)">%s</span>',
            color.class, color.var, color.label
        )

        table.insert(rows, string.format(
            '|-\n| %s || %s || class="%s" | %s || <code>{{Couleur|%s|...}}</code>',
            color.label,
            badge,
            color.class,
            color.label,
            name
        ))
    end

    local wikitext = '{| class="wikitable"\n! Nom !! Badge !! Cellule !! Syntaxe\n'
        .. table.concat(rows, '\n')
        .. '\n|}'

    return frame:preprocess(wikitext)
end

-- =============================================================================
-- p.palette — grille de cards pour Aide:Charte graphique
-- Usage : {{#invoke:TableColors|palette}}
-- =============================================================================

function p.palette(frame)
    local cards = {}

    for _, name in ipairs(order) do
        local color = colors[name]
        local card = string.format(
            '{{Card|title=%s|subtitle=var(--%s-bg)|bgcolor=var(--%s-bg)|colorheight=80|text=<code>%s</code>}}',
            color.label,
            color.var,
            color.var,
            color.class
        )
        table.insert(cards, card)
    end

    local output = '<div class="ds-swatch-grid">\n'
        .. table.concat(cards, '\n')
        .. '\n</div>'

    return frame:preprocess(output)
end

return p
Les témoins (''cookies'') nous aident à fournir nos services. En utilisant nos services, vous acceptez notre utilisation de témoins.