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 : 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.