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.

« Module:Infobox/Configs/Plugin » : différence entre les versions

De Nefald
Hiob (discussion | contributions)
m Section: Ressources
Hiob (discussion | contributions)
m masquer section Compatibilité si aucun champ renseigné
Balise : Révoqué
Ligne 1 : Ligne 1 :
local config = {
local p = {}
    titre = function(args)  
 
        return args.nom or '{{PAGENAME}}'
function p.main(frame)
    end,
    local args = frame:getParent().args
      
      
     icone = {
     local config = {
        type = 'fas',
        titre = function(args)
        nom = 'puzzle-piece'
            return args.nom or '{{PAGENAME}}'
    },
        end,
   
       
    image = function(args)  
        icone = {
        if args.image then
            type = 'fas',
            return {
            nom = 'puzzle-piece'
                nom = args.image,
        },
                taille = args.tailleimage or "280x200px",
       
                legende = args.legende or args.nom or '{{PAGENAME}}'
        image = function(args)  
            }
            if args.image then
        end
                return {
        return nil
                    nom = args.image,
    end,
                    taille = args.tailleimage or "280x200px",
                    legende = args.legende or args.nom or '{{PAGENAME}}'
                }
            end
            return nil
        end,


    sections = {
        sections = {
        {
            {
            champs = {
                champs = {
                {  
                    {  
                    cle = 'type',  
                        cle = 'type',  
                    label = 'Type',  
                        label = 'Type',  
                    process = function(value, args)
                        process = function(value, args)
                        if not value or value == '' then
                            if not value or value == '' then
                             return nil
                                return nil
                            end
                           
                            -- Configuration locale des types
                            local typeValues = {
                                ['économie'] = 'Plugin d\'économie',
                                ['pvp'] = 'Plugin de PvP',
                                ['roleplay'] = 'Plugin de roleplay',
                                ['administration'] = 'Plugin d\'administration',
                                ['protection'] = 'Plugin de protection',
                                ['cosmétique'] = 'Plugin cosmétiques',
                                ['communication'] = 'Plugin de communication',
                                ['utilitaire'] = 'Plugin utilitaires',
                                ['mini-jeu'] = 'Plugin de mini-jeux',
                                ['monde'] = 'Plugin de monde',
                                ['inventaire'] = 'Plugin d\'inventaire',
                                ['transport'] = 'Plugin de transport',
                                ['magie'] = 'Plugin de magie',
                                ['mob'] = 'Plugin de mobs'
                            }
                           
                            -- Nettoyer la valeur d'entrée
                            local cleanValue = mw.text.trim(mw.ustring.lower(value))
                           
                            -- Retourner la valeur formatée ou la valeur originale
                             return typeValues[cleanValue] or value
                         end
                         end
                       
                     },
                        -- Configuration locale des types
                    {
                        local typeValues = {
                        cle = 'status',
                            ['économie'] = 'Économie',
                        label = 'Statut',
                            ['pvp'] = 'PvP',
                        process = function(value, args)
                            ['roleplay'] = 'Roleplay',
                            if not value or value == '' then
                            ['administration'] = 'Administration',
                                return nil
                            ['protection'] = 'Protection',
                            end
                            ['cosmétique'] = 'Cosmétique',
                           
                            ['communication'] = 'Communication',
                            -- Configuration locale des statuts
                            ['utilitaire'] = 'Utilitaire',
                            local statusValues = {
                            ['mini-jeu'] = 'Mini-jeu',
                                ['installé'] = { text = 'Installé', color = 'green' },
                            ['monde'] = 'Monde',
                                ['installe'] = { text = 'Installé', color = 'green' },
                            ['inventaire'] = 'Inventaire',
                                ['non-installé'] = { text = 'Non installé', color = 'red' },
                            ['transport'] = 'Transport',
                                ['non-installe'] = { text = 'Non installé', color = 'red' },
                            ['magie'] = 'Magie',
                                ['non installé'] = { text = 'Non installé', color = 'red' },
                            ['mob'] = 'Mob'
                                ['non installe'] = { text = 'Non installé', color = 'red' },
                        }
                                ['désinstallé'] = { text = 'Désinstallé', color = 'red' },
                       
                                ['desinstalle'] = { text = 'Désinstallé', color = 'red' }
                        local cleanValue = mw.text.trim(mw.ustring.lower(value))
                            }
                       
                           
                        if typeValues[cleanValue] then
                            -- Nettoyer la valeur d'entrée
                            return typeValues[cleanValue]
                            local cleanValue = mw.text.trim(mw.ustring.lower(value))
                        else
                           
                            return '<span style="color: red; font-weight: bold;">Type invalide: "' .. value .. '"</span>[[Catégorie:Pages avec erreurs]]'
                            if statusValues[cleanValue] then
                        end
                                local status = statusValues[cleanValue]
                     end
                                return '<span style="color: ' .. status.color .. '; font-weight: bold;">' .. status.text .. '</span>'
                },
                { 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
                        -- Si c'est déjà un lien formaté MediaWiki, le garder tel quel
                        if value:match('^%[.+%]$') then
                            return frame:preprocess(value)
                        -- Si c'est une URL, créer un lien automatique
                        elseif value:match('^https?://') then
                            return frame:preprocess('[' .. value .. ' Documentation]')
                        else
                            -- Si c'est du texte simple, le traiter comme un nom de page
                            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 = '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
                             end
                             return frame:preprocess('[' .. value .. ' ' .. siteName .. ']')
                              
                        else
                             return value
                             return value
                         end
                         end
                     end
                     },
                     return nil
                    { cle = 'version', label = 'Version' },
                  end
                    { cle = 'author', label = 'Auteur', aliases = {'auteur'} },
                    { cle = 'source', label = 'Source' },
                    { cle = 'langue', label = 'Langue' }
                }
            },
            {
                titre = 'Compatibilite',
                visible = function(args)
                    -- La section est visible seulement si au moins un de ces champs est rempli
                     return (args.dependance and args.dependance ~= '') or
                          (args.compatibilite and args.compatibilite ~= '')
                end,
                champs = {
                    { cle = 'dependance', label = 'Dépendance(s)' },
                    { cle = 'compatibilite', label = 'Compatible avec' }
                }
            },
            {
                titre = 'Description',
                champs = {
                    { cle = 'description', label = 'Description', multiligne = true }
                 }
                 }
             }
             }
         },
         },
         {
 
             titre = 'Compatibilité',
         categories = function(args, frame)
            champs = {
            local cats = {}
                 { cle = 'dépendance', label = 'Dépendance(s)' },
           
                 { cle = 'compatibilité', label = 'Compatible avec' }
             -- Configuration des catégories par type
            local typeCategories = {
                ['économie'] = 'Plugin d\'économie',
                ['pvp'] = 'Plugin de PvP',
                ['roleplay'] = 'Plugin de roleplay',
                ['administration'] = 'Plugin d\'administration',
                ['protection'] = 'Plugin de protection',
                ['cosmétique'] = 'Plugin cosmétiques',
                ['communication'] = 'Plugin de communication',
                ['utilitaire'] = 'Plugin utilitaires',
                ['mini-jeu'] = 'Plugin de mini-jeux',
                ['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 = {
    categories = function(args, config, frame)
                ['installé'] = 'Plugin installé',
        local cats = {}
                ['non-installé'] = 'Plugin non-installé'
       
            }
        -- Configuration des catégories par type
           
        local typeCategories = {
            -- Catégorie basée sur le type
            ['économie'] = 'Plugin d\'économie',
            if args.type then
            ['pvp'] = 'Plugin de PvP',
                local cleanType = mw.text.trim(mw.ustring.lower(args.type))
            ['roleplay'] = 'Plugin de roleplay',
                if typeCategories[cleanType] then
            ['administration'] = 'Plugin d\'administration',
                    table.insert(cats, typeCategories[cleanType])
             ['protection'] = 'Plugin de protection',
                end
            ['cosmétique'] = 'Plugin cosmétiques',
             ['communication'] = 'Plugin de communication',
            ['utilitaire'] = 'Plugin utilitaires',
            ['mini-jeu'] = 'Plugin de mini-jeux',
            ['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égorie basée sur le type
        if args.type then
            local cleanType = mw.text.trim(mw.ustring.lower(args.type))
            if typeCategories[cleanType] then
                table.insert(cats, typeCategories[cleanType])
             end
             end
        end
           
       
            -- Catégorie basée sur le statut
        -- Catégorie basée sur le statut
            if args.status then
        if args.status then
                local cleanStatus = mw.text.trim(mw.ustring.lower(args.status))
            local cleanStatus = mw.text.trim(mw.ustring.lower(args.status))
                if statusCategories[cleanStatus] then
            if statusCategories[cleanStatus] then
                    table.insert(cats, statusCategories[cleanStatus])
                table.insert(cats, statusCategories[cleanStatus])
                end
             end
             end
           
            return cats
         end
         end
       
    }
        return cats
   
    end
    return require('Module:Infobox').build(args, config, frame)
}
end


return config
return p

Version du 3 octobre 2025 à 14:54

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

local p = {}

function p.main(frame)
    local args = frame:getParent().args
    
    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 = {
                                ['économie'] = 'Plugin d\'économie',
                                ['pvp'] = 'Plugin de PvP',
                                ['roleplay'] = 'Plugin de roleplay',
                                ['administration'] = 'Plugin d\'administration',
                                ['protection'] = 'Plugin de protection',
                                ['cosmétique'] = 'Plugin cosmétiques',
                                ['communication'] = 'Plugin de communication',
                                ['utilitaire'] = 'Plugin utilitaires',
                                ['mini-jeu'] = 'Plugin de mini-jeux',
                                ['monde'] = 'Plugin de monde',
                                ['inventaire'] = 'Plugin d\'inventaire',
                                ['transport'] = 'Plugin de transport',
                                ['magie'] = 'Plugin de magie',
                                ['mob'] = 'Plugin de mobs'
                            }
                            
                            -- Nettoyer la valeur d'entrée
                            local cleanValue = mw.text.trim(mw.ustring.lower(value))
                            
                            -- Retourner la valeur formatée ou la valeur originale
                            return typeValues[cleanValue] or value
                        end
                    },
                    {
                        cle = 'status',
                        label = 'Statut',
                        process = function(value, args)
                            if not value or value == '' then
                                return nil
                            end
                            
                            -- Configuration locale des statuts
                            local statusValues = {
                                ['installé'] = { text = 'Installé', color = 'green' },
                                ['installe'] = { text = 'Installé', color = 'green' },
                                ['non-installé'] = { text = 'Non installé', color = 'red' },
                                ['non-installe'] = { text = 'Non installé', color = 'red' },
                                ['non installé'] = { text = 'Non installé', color = 'red' },
                                ['non installe'] = { text = 'Non installé', color = 'red' },
                                ['désinstallé'] = { text = 'Désinstallé', color = 'red' },
                                ['desinstalle'] = { text = 'Désinstallé', color = 'red' }
                            }
                            
                            -- Nettoyer la valeur d'entrée
                            local cleanValue = mw.text.trim(mw.ustring.lower(value))
                            
                            if statusValues[cleanValue] then
                                local status = statusValues[cleanValue]
                                return '<span style="color: ' .. status.color .. '; font-weight: bold;">' .. status.text .. '</span>'
                            end
                            
                            return value
                        end
                    },
                    { cle = 'version', label = 'Version' },
                    { cle = 'author', label = 'Auteur', aliases = {'auteur'} },
                    { cle = 'source', label = 'Source' },
                    { cle = 'langue', label = 'Langue' }
                }
            },
            {
                titre = 'Compatibilite',
                visible = function(args)
                    -- La section est visible seulement si au moins un de ces champs est rempli
                    return (args.dependance and args.dependance ~= '') or 
                           (args.compatibilite and args.compatibilite ~= '')
                end,
                champs = {
                    { cle = 'dependance', label = 'Dépendance(s)' },
                    { cle = 'compatibilite', label = 'Compatible avec' }
                }
            },
            {
                titre = 'Description',
                champs = {
                    { cle = 'description', label = 'Description', multiligne = true }
                }
            }
        },

        categories = function(args, frame)
            local cats = {}
            
            -- Configuration des catégories par type
            local typeCategories = {
                ['économie'] = 'Plugin d\'économie',
                ['pvp'] = 'Plugin de PvP',
                ['roleplay'] = 'Plugin de roleplay',
                ['administration'] = 'Plugin d\'administration',
                ['protection'] = 'Plugin de protection',
                ['cosmétique'] = 'Plugin cosmétiques',
                ['communication'] = 'Plugin de communication',
                ['utilitaire'] = 'Plugin utilitaires',
                ['mini-jeu'] = 'Plugin de mini-jeux',
                ['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égorie basée sur le type
            if args.type then
                local cleanType = mw.text.trim(mw.ustring.lower(args.type))
                if typeCategories[cleanType] then
                    table.insert(cats, typeCategories[cleanType])
                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 require('Module:Infobox').build(args, config, frame)
end

return p