« Module:Image » : différence entre les versions
Aller à la navigation
Aller à la recherche
m (1 version importée) |
m (1 version importée) |
||
(Une version intermédiaire par un autre utilisateur non affichée) | |||
Ligne 2 : | Ligne 2 : | ||
local p = {} | local p = {} | ||
local mwTrim = mw.text.trim | |||
local function trim( texte ) | local function trim( texte ) | ||
if type( texte ) == 'string' then | if type( texte ) == 'string' and texte ~= '' then | ||
texte = texte | texte = mwTrim( texte ) | ||
if texte ~= '' then | if texte ~= '' then | ||
return texte | return texte | ||
Ligne 44 : | Ligne 46 : | ||
local function valide( valeur, liste ) | local function valide( valeur, liste ) | ||
for i, | for i = 1, #liste do | ||
if valeur == | if valeur == liste[ i ] then | ||
return valeur | return valeur | ||
end | end | ||
Ligne 57 : | Ligne 59 : | ||
local argsList = { 'image', 'format', 'upright', 'taille', 'border', 'légende', 'alt', 'link', 'page', 'class', 'lang', 'align', 'valign' } | local argsList = { 'image', 'format', 'upright', 'taille', 'border', 'légende', 'alt', 'link', 'page', 'class', 'lang', 'align', 'valign' } | ||
local args = {} | local args = {} | ||
for | for i = 1, #argsList do | ||
args[ | local argName = argsList[ i ] | ||
args[ argName ] = trim( rawArgs[ argName ] ) | |||
end | end | ||
if not args.image then | if not args.image then | ||
Ligne 74 : | Ligne 77 : | ||
-- analyse de la légende | -- analyse de la légende | ||
local legende = args[ 'légende' ] and args[ 'légende' ] | local legende = args[ 'légende' ] and args[ 'légende' ] | ||
:gsub( '%[%[[%s_]*[Cc] | :gsub( '%[%[[%s_]*[Cc]atégorie[%s_]*:.-%]%]', '' ) | ||
:gsub( '%[%[[%s_]*[Cc]ategory[%s_]*:.-%]%]', '' ) | |||
-- analyse de la taille | -- analyse de la taille | ||
Ligne 124 : | Ligne 128 : | ||
end | end | ||
args.taille = taille .. 'px' | args.taille = taille .. 'px' | ||
-- pareil que le format par défaut, parce qu'une taille en px est spécifiée, | |||
-- mais n'agrandit pas l'image si elle est plus petite que cette taille | |||
args.format = 'frameless' | |||
return p.image( args ) | return p.image( args ) |
Dernière version du 2 novembre 2024 à 13:29
La documentation pour ce module peut être créée à Module:Image/doc
-- 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 mwTrim = mw.text.trim local function trim( texte ) if type( texte ) == 'string' and texte ~= '' then texte = mwTrim( texte ) 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 = 1, #liste do if valeur == liste[ i ] 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 i = 1, #argsList do local argName = argsList[ i ] args[ argName ] = trim( rawArgs[ argName ] ) 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égorie[%s_]*:.-%]%]', '' ) :gsub( '%[%[[%s_]*[Cc]ategory[%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:sub( -4 ):lower() == '.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' -- pareil que le format par défaut, parce qu'une taille en px est spécifiée, -- mais n'agrandit pas l'image si elle est plus petite que cette taille args.format = 'frameless' return p.image( args ) end return p