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 26 septembre 2025 à 14:41 par Hiob (discussion | contributions) (Preprocess)

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

local p = {}
local getArgs = require('Module:Arguments').getArgs

function p.build(args, config, frame)  -- Ajouter le paramètre frame
    if not args.nom or args.nom == '' then
        return '<div class="error">Nom requis pour l\'infobox</div>'
    end

    local root = mw.html.create('div')
        :addClass('infobox-table')
        :attr('role', 'table')

    -- En-tête avec nom
    local header = mw.html.create('div')
        :addClass('infobox-header')
    
    if args.image and args.image ~= '' then
        local imageDiv = mw.html.create('div')
            :addClass('infobox-image')
        
        local imageSize = args.tailleimage or '280px'
        local imageCode = string.format('[[Fichier:%s|%s|center', args.image, imageSize)
        if args.legende and args.legende ~= '' then
            imageCode = imageCode .. '|' .. args.legende
        end
        imageCode = imageCode .. ']]'
        
        imageDiv:wikitext(imageCode)
        header:node(imageDiv)
    end

    -- Titre sans icône (icône déplacée en bas à droite)
    local titleDiv = mw.html.create('div')
        :addClass('infobox-title')
        :wikitext(args.nom)  -- Juste le nom, sans icône
    
    header:node(titleDiv)

    if args.soustitre and args.soustitre ~= '' then
        local subtitleDiv = mw.html.create('div')
            :addClass('infobox-subtitle')
            :wikitext(args.soustitre)
        header:node(subtitleDiv)
    end

    root:node(header)

    -- Corps avec les champs
    local body = mw.html.create('div')
        :addClass('infobox-body')

    for _, section in ipairs(config.sections or {}) do
        if section.titre then
            local sectionDiv = mw.html.create('div')
                :addClass('infobox-section-title')
                :wikitext(section.titre)
            body:node(sectionDiv)
        end

        -- Vérifier si on doit afficher les coordonnées automatiquement
        local hasCoordinates = args.x and args.x ~= '' and args.y and args.y ~= '' and args.z and args.z ~= ''
        local coordinatesDisplayed = false

        for _, champ in ipairs(section.champs or {}) do
            -- Détection automatique des coordonnées
            if hasCoordinates and not coordinatesDisplayed and (champ.cle == 'x' or champ.cle == 'y' or champ.cle == 'z' or champ.cle == 'spawn' or champ.cle == 'coordonnees') then
                local rowDiv = mw.html.create('div')
                    :addClass('infobox-row')
                
                local labelDiv = mw.html.create('div')
                    :addClass('infobox-label')
                    :wikitext('Coordonnées')
                
                local valueDiv = mw.html.create('div')
                    :addClass('infobox-value')
                
                -- Construction du lien vers la carte si le paramètre monde existe
                if args.monde and args.monde ~= '' then
                    local mapUrl = string.format('[https://map.nefald.fr/?worldname=%s&mapname=surface&zoom=4&x=%s&y=%s&z=%s %s, %s, %s]',
                        args.monde, args.x, args.y, args.z, args.x, args.y, args.z)
                    valueDiv:wikitext("''" .. mapUrl .. "''")
                else
                    -- Affichage simple sans lien
                    valueDiv:wikitext(string.format('%s, %s, %s', args.x, args.y, args.z))
                end
                
                rowDiv:node(labelDiv):node(valueDiv)
                body:node(rowDiv)
                coordinatesDisplayed = true
                
            -- Traitement normal des autres champs (en excluant x, y, z individuels si coordonnées affichées)
            elseif not (hasCoordinates and (champ.cle == 'x' or champ.cle == 'y' or champ.cle == 'z')) and args[champ.cle] and args[champ.cle] ~= '' then
                local rowDiv = mw.html.create('div')
                    :addClass('infobox-row')

                local labelDiv = mw.html.create('div')
                    :addClass('infobox-label')
                    :wikitext(champ.label)
                
                local valueDiv = mw.html.create('div')
                    :addClass('infobox-value')
                    :wikitext(args[champ.cle])

                rowDiv:node(labelDiv):node(valueDiv)
                body:node(rowDiv)
            end
        end
    end

    root:node(body)
    
-- Ajouter l'icône en bas à droite
if config.icone then
    local iconeDiv = mw.html.create('div')
        :addClass('infobox-icon-bottom')
    
    local iconeType = config.icone.type or 'fas'
    local iconeNom = config.icone.nom
    
    -- Utiliser directement la classe CSS pour les icônes FontAwesome
    local iconeSpan = mw.html.create('span')
        :addClass(iconeType)
        :addClass('fa-' .. iconeNom)
        :attr('aria-hidden', 'true')
    
    iconeDiv:node(iconeSpan)
    root:node(iconeDiv)
end

    
    return tostring(root)
end

return p