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:Infobox/Configs/Localite/doc

local config = {
    titre = function(args)
        return args.nom or '{{PAGENAME}}'
    end,

    -- Icône avec type et nom
    icone = {
        type = 'fas',
        nom = 'map-location-dot'
    },

    image = function(args)
        if args.image then
            return {
                nom = args.image,
                taille = args.tailleimage or "250px",
                legende = args.legende
            }
        end
        return nil
    end,

    -- Configuration du champ "type" avec validation et catégorisation
    typeField = {
        required = false,
        allowedValues = {
            ['ville'] = {
                display = 'Ville',
                category = 'Villes'
            },
            ['village'] = {
                display = 'Village',
                category = 'Villages'
            },
            ['cité'] = {
                display = 'Cité',
                category = 'Cités'
            },
            ['capitale'] = {
                display = 'Capitale',
                category = 'Capitales'
            },
            ['port'] = {
                display = 'Port',
                category = 'Ports'
            },
            ['forteresse'] = {
                display = 'Forteresse',
                category = 'Forteresses'
            },
            ['château'] = {
                display = 'Château',
                category = 'Châteaux'
            },
            ['ruine'] = {
                display = 'Ruine',
                category = 'Ruines'
            },
            ['avant-poste'] = {
                display = 'Avant-poste',
                category = 'Avant-postes'
            },
            ['campement'] = {
                display = 'Campement',
                category = 'Campements'
            },
            ['métropole'] = {
                display = 'Métropole',
                category = 'Métropoles'
            },
            ['sanctuaire'] = {
                display = 'Sanctuaire',
                category = 'Sanctuaires'
            },
            ['cité-état'] = {
                display = 'Cité-État',
                category = 'Cité-État'
            }
        },
        errorMessage = 'Type de localité non reconnu. Types autorisés : ville, village, cité, capitale, port, forteresse, château, ruine, avant-poste, campement, métropole, sanctuaire, cité-état'
    },

    sections = {
        {
            titre = 'Informations Générales',
            champs = {
                {
                    cle = 'type',
                    label = 'Type',
                    process = function(value, args)
                        if not value or value == '' then
                            return nil
                        end

                        -- Validation du type
                        local cleanValue = mw.text.trim(mw.ustring.lower(value))
                        if config.typeField.allowedValues[cleanValue] then
                            return config.typeField.allowedValues[cleanValue].display
                        else
                            return '<span style="color: red; font-weight: bold;">' ..
                                   config.typeField.errorMessage ..
                                   '</span>[[Catégorie:Pages avec erreurs]]'
                        end
                    end
                },
                { cle = 'fondation', label = 'Fondation' },
                { cle = 'destruction', label = 'Destruction' },
                { cle = 'fondateur', label = 'Fondateur(s)' },
                { cle = 'symbole', label = 'Symbole' },
                { cle = 'statut', label = 'Statut' },
                { cle = 'x', label = 'Coordonnée X' },
                { cle = 'y', label = 'Coordonnée Y' },
                { cle = 'z', label = 'Coordonnée Z' }
            }
        },
        {
            titre = 'Organisation Interne',
            champs = {
                { cle = 'dirigeant', label = 'Dirigeant' },
                { cle = 'population', label = 'Population' },
                { cle = 'culte', label = 'Culte' },
                { cle = 'organisation_rattachee', label = 'Organisation rattachée' },
                { cle = 'gouvernement', label = 'Type de gouvernement' },
                { cle = 'quartiers', label = 'Quartiers' }
            }
        },
        {
            titre = 'Économie et Société',
            champs = {
                { cle = 'activite', label = 'Activité' },
                { cle = 'ressources', label = 'Ressources' },
                { cle = 'monnaie', label = 'Monnaie' },
                { cle = 'commerce', label = 'Commerce' },
                { cle = 'culture', label = 'Culture' },
                { cle = 'langues', label = 'Langues' }
            }
        },
        {
            titre = 'Géographie',
            champs = {
                { cle = 'monde', label = 'Monde' },
                { cle = 'climat', label = 'Climat' },
                { cle = 'biome', label = 'Biome' },
                { cle = 'relief', label = 'Relief' },
                { cle = 'superficie', label = 'Superficie' },
                { cle = 'cours_eau', label = 'Cours d\'eau' },
                { cle = 'batiments', label = 'Bâtiments notables' }
            }
        }
    },

    categories = function(args, config, frame)
        local cats = {}

        -- Vérifier que la page est dans le namespace 0 (espace principal)
        if mw.title.getCurrentTitle().namespace == 0 then
            -- Ajouter la catégorie selon le type
            if args.type then
                local cleanType = mw.text.trim(mw.ustring.lower(args.type))
                if config.typeField.allowedValues[cleanType] then
                    table.insert(cats, config.typeField.allowedValues[cleanType].category)
                end
            end
        end

        return cats
    end
}

return config