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 18 octobre 2025 à 12:45 par Hiob (discussion | contributions) (catégorie construction)

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

local config = {
    titre = function(args) 
        return args.nom or '{{PAGENAME}}' 
    end,
    
    icone = {
        type = 'fas',
        nom = 'puzzle-piece'
    },
    
    image = function(args) 
        if args.image then
            return {
                nom = args.image,
                taille = args.tailleimage or "280x200px",
                legende = args.legende or args.nom or '{{PAGENAME}}'
            }
        end
        return nil
    end,

    sections = {
        {
            champs = {
                { 
                    cle = 'type', 
                    label = 'Type', 
                    process = function(value, args)
                        if not value or value == '' then
                            return nil
                        end
                        
                        -- Configuration locale des types
                        local typeValues = {
                            ['api'] = 'API',
                            ['économie'] = 'Économie',
                            ['pvp'] = 'PvP',
                            ['roleplay'] = 'Roleplay',
                            ['administration'] = 'Administration',
                            ['protection'] = 'Protection',
                            ['premium'] = 'Premium',
                            ['cosmétique'] = 'Cosmétique',
                            ['communication'] = 'Communication',
                            ['construction'] = 'Construction',
                            ['utilitaire'] = 'Utilitaire',
                            ['mini-jeu'] = 'Mini-jeu',
                            ['modération'] = 'Modération',
                            ['monde'] = 'Monde',
                            ['inventaire'] = 'Inventaire',
                            ['transport'] = 'Transport',
                            ['magie'] = 'Magie',
                            ['mob'] = 'Mob'
                        }
                        
                        -- Séparer par virgule et traiter chaque type
                        local types = mw.text.split(value, ',')
                        local displayTypes = {}
                        local hasError = false
                        local errorMsg = ''
                        
                        for _, typeItem in ipairs(types) do
                            local cleanValue = mw.text.trim(mw.ustring.lower(typeItem))
                            
                            if typeValues[cleanValue] then
                                table.insert(displayTypes, typeValues[cleanValue])
                            else
                                hasError = true
                                errorMsg = errorMsg .. '<span style="color: red; font-weight: bold;">Type invalide: "' .. typeItem .. '"</span> '
                            end
                        end
                        
                        if hasError then
                            return errorMsg .. '[[Catégorie:Pages avec erreurs]]'
                        end
                        
                        -- Joindre les types avec ", " pour l'affichage
                        return table.concat(displayTypes, ', ')
                    end
                },
                { cle = 'dev', label = 'Développeur' },
                { 
                    cle = 'status', 
                    label = 'Statut',
                    process = function(value, args)
                        if not value or value == '' then
                            return nil
                        end
                        
                        -- Configuration locale des statuts
                        local statusValues = {
                            ['installé'] = '[[:Catégorie:Plugin installé|Installé]]',
                            ['non-installé'] = '[[:Catégorie:Plugin non-installé|Non-installé]]'
                        }
                        
                        local cleanValue = mw.text.trim(mw.ustring.lower(value))
                        
                        if statusValues[cleanValue] then
                            return statusValues[cleanValue]
                        else
                            return '<span style="color: red; font-weight: bold;">Statut invalide: "' .. value .. '"</span>[[Catégorie:Pages avec erreurs]]'
                        end
                    end
                },
                { cle = 'grade', label = 'Grade requis' }
            }
        },
        {
            titre = 'Ressources',
            champs = {
                { cle = 'docs', label = 'Documentation',
                  process = function(value, args, frame)
                    if value and value ~= '' then
                        if value:match('^%[.+%]$') then
                            return frame:preprocess(value)
                        elseif value:match('^https?://') then
                            return frame:preprocess('[' .. value .. ' Documentation]')
                        else
                            return '[[' .. value .. ']]'
                        end
                    end
                    return nil
                  end
                },
                { cle = 'website', label = 'Site web',
                  process = function(value, args, frame)
                    if value and value ~= '' then
                        if value:match('^%[.+%]$') then
                            return frame:preprocess(value)
                        elseif value:match('^https?://') then
                            return frame:preprocess('[' .. value .. ' Site web]')
                        else
                            return '[[' .. value .. ']]'
                        end
                    end
                    return nil
                  end
                },
                { cle = 'bukkit', label = 'Bukkit',
                  process = function(value, args, frame) 
                    if value and value ~= '' then
                        return frame:preprocess('[https://dev.bukkit.org/projects/' .. value .. ' Bukkit]')
                    end
                    return nil 
                  end
                },
                { cle = 'hangar', label = 'Hangar',
                  process = function(value, args, frame) 
                    if value and value ~= '' then
                        return frame:preprocess('[https://hangar.papermc.io/' .. value .. ' Hangar]')
                    end
                    return nil 
                  end
                },
                { cle = 'modrinth', label = 'Modrinth',
                  process = function(value, args, frame) 
                    if value and value ~= '' then
                        return frame:preprocess('[https://modrinth.com/plugin/' .. value .. ' Modrinth]')
                    end
                    return nil 
                  end
                },
                { cle = 'builtbybit', label = 'BuiltByBit',
                  process = function(value, args, frame) 
                    if value and value ~= '' then
                        return frame:preprocess('[https://builtbybit.com/resources/' .. value .. ' BuiltByBit]')
                    end
                    return nil 
                  end
                },
                { cle = 'polymart', label = 'Polymart',
                  process = function(value, args, frame) 
                    if value and value ~= '' then
                        return frame:preprocess('[https://polymart.org/product/' .. value .. ' Polymart]')
                    end
                    return nil 
                  end
                },
                { cle = 'spigot', label = 'Spigot',
                  process = function(value, args, frame) 
                    if value and value ~= '' then
                        return frame:preprocess('[https://www.spigotmc.org/resources/' .. value .. ' Spigot]')
                    end
                    return nil 
                  end
                },
                { cle = 'sources', label = 'Code source',
                  process = function(value, args, frame)
                    if value and value ~= '' then
                        if value:match('^%[.+%]$') then
                            return frame:preprocess(value)
                        elseif value:match('^https?://') then
                            local domain = value:match('://([^/]+)')
                            local siteName = 'Source'
                            if domain:match('github%.com') then
                                siteName = 'GitHub'
                            elseif domain:match('gitlab%.com') then
                                siteName = 'GitLab'
                            elseif domain:match('bitbucket%.org') then
                                siteName = 'Bitbucket'
                            end
                            return frame:preprocess('[' .. value .. ' ' .. siteName .. ']')
                        else
                            return value
                        end
                    end
                    return nil
                  end
                }
            }
        },
        {
            titre = 'Compatibilité',
            champs = {
                { cle = 'dépendance', label = 'Dépendance(s)' },
                { cle = 'compatibilité', label = 'Compatible avec' }
            }
        }
    },

    categories = function(args, config, frame)
        local cats = {}
        
        -- Configuration des catégories par type
        local typeCategories = {
            ['api'] = 'Plugin d\'API',
            ['économie'] = 'Plugin d\'économie',
            ['pvp'] = 'Plugin de PvP',
            ['roleplay'] = 'Plugin de roleplay',
            ['administration'] = 'Plugin d\'administration',
            ['protection'] = 'Plugin de protection',
            ['cosmétique'] = 'Plugin cosmétique',
            ['communication'] = 'Plugin de communication',
            ['construction'] = 'Plugin de construction',
            ['utilitaire'] = 'Plugin utilitaire',
            ['mini-jeu'] = 'Plugin de mini-jeux',
            ['modération'] = 'Plugin de modération',
            ['premium'] = 'Plugin premium',
            ['monde'] = 'Plugin de monde',
            ['inventaire'] = 'Plugin d\'inventaire',
            ['transport'] = 'Plugin de transport',
            ['magie'] = 'Plugin de magie',
            ['mob'] = 'Plugin de mobs'
        }
        
        -- Configuration des catégories par statut
        local statusCategories = {
            ['installé'] = 'Plugin installé',
            ['non-installé'] = 'Plugin non-installé'
        }
        
        -- Catégories basées sur le(s) type(s)
        if args.type then
            -- Séparer par virgule et traiter chaque type
            local types = mw.text.split(args.type, ',')
            
            for _, typeItem in ipairs(types) do
                local cleanType = mw.text.trim(mw.ustring.lower(typeItem))
                if typeCategories[cleanType] then
                    table.insert(cats, typeCategories[cleanType])
                end
            end
        end
        
        -- Catégorie basée sur le statut
        if args.status then
            local cleanStatus = mw.text.trim(mw.ustring.lower(args.status))
            if statusCategories[cleanStatus] then
                table.insert(cats, statusCategories[cleanStatus])
            end
        end
        
        return cats
    end
}

return config