Module:Image
De Nations.fr
Révision datée du 27 juin 2019 à 00:20 par Administrateur (discussion | contributions) (1 révision importée)
La documentation pour ce module peut être créée à Module:Image/doc
Erreur de script : Erreur Lua : erreur interne : l’interpréteur s’est arrêté avec le signal « -129 ».
-- Ce module permet de générer une image, en nettoyant les paramètres pour éviter d'avoir des erreurs de Lint : [[Special:LintErrors/bogus-image-options]]. local p = {} local function trim( texte ) if type( texte ) == 'string' then texte = texte:gsub( '^%s*(%S?.-)%s*$', '%1' ) if texte ~= '' then return texte end end return nil end -- Retire toutes catégories, liens internes, externes et balises html pour ne garder que le texte brut. local function nettoyageAlt( texte ) if type( texte ) == 'string' and texte:match( '[%[<\n]' ) then local function texteDuLien( l, t ) return ( t ~= '' and t ) or l end texte = texte -- nettoyage des catégories :gsub( '%[%[[%s_]*[Cc]atégorie[%s_]*:.-%]%]', '' ) :gsub( '%[%[[%s_]*[Cc]ategory[%s_]*:.-%]%]', '' ) -- nettoyage des fichiers :gsub( '%[%[[Ff]ichier:[^%[%]]+%]%]', '' ) :gsub( '%[%[[Ff]ile:[^%[%]]+%]%]', '' ) :gsub( '%[%[[Ii]mage:[^%[%]]+%]%]', '' ) -- nettoyage des liens internes :gsub( '%[%[([^%[%]|]*)|?([^%[%]]*)%]%]', texteDuLien ) -- nettoyage des liens externes :gsub( '%[https?://[^%[%] ]* *([^%]]+)%]', '%1' ) :gsub( '%[//[^%[%] ]* *([^%]]+)%]', '%1' ) -- nettoyage des listes :gsub( '\n[*#][^\n]+', '') :gsub( '<li.-</li>', '' ) -- nettoyage des balises html :gsub( '%b<>', '' ) -- nettoyage des retour ligne :gsub( '\n', ' ' ) end return trim( texte ) end local function valide( valeur, liste ) for i, v in ipairs( liste ) do if valeur == v then return valeur end end return nil end -- Génère l'appel au ficher image. -- Si le paramètre image (nom du fichier) est vide, la fonction ne retourne rien function p.image( rawArgs ) local argsList = { 'image', 'format', 'upright', 'taille', 'border', 'légende', 'alt', 'link', 'page', 'class', 'lang', 'align', 'valign' } local args = {} for _, v in ipairs( argsList ) do args[ v ] = trim( rawArgs[ v ] ) end if not args.image then return end -- analyse du nom de fichier local image = args.image :gsub( '%[%[[%s_]*[Cc]atégorie[%s_]*:.-%]%]', '' ) :gsub( '%[%[[%s_]*[Cc]ategory[%s_]*:.-%]%]', '' ) :gsub( '%[%[[Ff]ichier:([^|%[%]]+).+', '%1' ) :gsub( '%[%[[Ii]mage:([^|%[%]]+).+', '%1' ) :gsub( '%[%[[Ff]ile:([^|%[%]]+).+', '%1' ) -- analyse de la légende local legende = args[ 'légende' ] and args[ 'légende' ] :gsub( '%[%[[%s_]*[Cc]at[ée]gor[yi]e?[%s_]*:.-%]%])', '' ) -- analyse de la taille local taille = args.taille and args.taille:gsub( '%s', '' ):gsub( '(%d)$', '%1px' ) if taille and not ( taille:match '%d+x?%d*px' or taille:match 'x%d+px' ) then taille = nil end -- analyse de l'alternative local alt = nettoyageAlt( args.alt ) -- génération du lien local wiki = { image } table.insert( wiki, valide( args.format, { 'thumb', 'frameless', 'frame', 'vignette', 'sanscadre', 'cadre', 'thumbnail', } ) ) table.insert( wiki, args.border and 'border' ) table.insert( wiki, taille ) if tonumber( args.upright ) and not taille and valide(args.format, { 'thumb', 'vignette', 'thumbnail', 'frameless', 'sanscadre', } ) then table.insert( wiki, 'upright=' .. args.upright ) end table.insert( wiki, valide( args.align, { 'left', 'right', 'center', 'none', 'gauche', 'droite', 'centre', 'centré' } ) ) table.insert( wiki, valide( args.valign, { 'top', 'text-top', 'super', 'baseline', 'sub', 'middle', 'text-bottom', 'bottom', 'haut', 'haut-texte', 'sup', 'base', 'milieu', 'bas-texte', 'bas', } ) ) table.insert( wiki, alt and 'alt=' .. alt ) table.insert( wiki, args.link and 'link=' .. args.link ) table.insert( wiki, args.page and 'page=' .. args.page ) table.insert( wiki, args.class and 'class=' .. args.class ) if args.lang and image:match( '.svg' ) then table.insert( wiki, 'lang=' .. args.lang ) end table.insert( wiki, legende ) return '[[Fichier:' .. table.concat( wiki, '|' ) .. ']]' end function p.infoboxV2( frame ) local args = frame.args if args.alt == '' then args.alt = 'Image illustrative de l’article ' .. mw.title.getCurrentTitle().text end local taille = args.taille:gsub( '%D', '' ) taille = tonumber( taille ) or 280 if taille > 280 then taille = 280 end args.taille = taille .. 'px' return p.image( args ) end return p