« Module:Palette » : différence entre les versions
Contenu supprimé Contenu ajouté
trim() optimisé, trim du paramètre avant insertion dans le résultat lorsqu'il s'agit d'une palette complète passée en paramètre (refs 186827197 par exemple) |
quitte à devoir trimmer ces paramètres parents un peu partout, mieux vaut le faire une bonne fois en amont (si c'est seulement un nom de palette le trim n'est pas coûteux, et si c'est une palette complète de toute façon il faut le faire) ; ça évite tout un tas de soucis avec les valeurs entourées d'espaces, ainsi que les valeurs constituées seulement d'espaces |
||
Ligne 9 : | Ligne 9 : | ||
local args = frame.args |
local args = frame.args |
||
local parentArgs = |
local parentArgs = {} |
||
for k, v in pairs( frame:getParent().args ) do |
|||
-- effectue un trim sur les paramètres non nommés, |
|||
-- et exclut les paramètres dont la valeur est vide |
|||
if type( k ) == number then |
|||
v = trim( v ) |
|||
end |
|||
if v ~= '' then |
|||
parentArgs[ k ] = v |
|||
end |
|||
end |
|||
local wikiTable = { '<div class="navbox-container" style="clear:both;">\n' } |
local wikiTable = { '<div class="navbox-container" style="clear:both;">\n' } |
||
Ligne 34 : | Ligne 45 : | ||
local function _paletteInconnue( i ) |
local function _paletteInconnue( i ) |
||
categories.paletteInconnue = categoriePaletteInconnue |
categories.paletteInconnue = categoriePaletteInconnue |
||
local nomPalette = |
local nomPalette = parentArgs[i] |
||
return _erreur( 'Erreur : il n’existe pas de modèle {{[[Modèle:Palette %s|Palette %s]]}} [[Aide:Palette de navigation|(aide)]]', nomPalette, nomPalette ) |
return _erreur( 'Erreur : il n’existe pas de modèle {{[[Modèle:Palette %s|Palette %s]]}} [[Aide:Palette de navigation|(aide)]]', nomPalette, nomPalette ) |
||
end |
end |
||
Ligne 56 : | Ligne 67 : | ||
end |
end |
||
end |
end |
||
return frame:expandTemplate{ title = 'Palette ' .. |
return frame:expandTemplate{ title = 'Palette ' .. parentArgs[i], args = argsPalette } |
||
end |
end |
||
Ligne 78 : | Ligne 89 : | ||
while parentArgs[i] and i <= maxPalette do |
while parentArgs[i] and i <= maxPalette do |
||
if parentArgs[i] |
if parentArgs[i] ~= '' then |
||
for _, j in ipairs( palettesValides ) do |
for _, j in ipairs( palettesValides ) do |
||
if args[i] == args[j] and not args[i]:match('^palette ') then |
if args[i] == args[j] and not args[i]:match('^palette ') then |
||
Ligne 85 : | Ligne 96 : | ||
end |
end |
||
table.insert( palettesValides, i ) |
table.insert( palettesValides, i ) |
||
if parentArgs[i]:match( '^ |
if parentArgs[i]:match( '^<table class="navbox' ) or parentArgs[i]:match( '^{| ?class="navbox' ) then |
||
wikiTable:insert |
wikiTable:insert( parentArgs[i] ) |
||
else |
else |
||
local codePalette = args[i] |
local codePalette = args[i] |
Version du 5 octobre 2021 à 13:25
[voir] [modifier] [historique] [purger]
Utilisation
Fonctions exportables :
listePalette(frame)
– implémente {{Palette}}.
Modules externes et autres éléments dont ce module a besoin pour fonctionner : aucun
Exemples
Pour des exemples, voir la page de test permettant de tester diverses modifications apportées.
La documentation de ce module est générée par le modèle {{Documentation module}}.
Elle est incluse depuis sa sous-page de documentation. Veuillez placer les catégories sur cette page-là.
Les éditeurs peuvent travailler dans le bac à sable (modifier).
Voir les statistiques d'appel depuis le wikicode sur l'outil wstat et les appels depuis d'autres modules.
local p = { }
function p.listePalette( frame )
-- http://lua-users.org/wiki/StringTrim
local function trim( s )
return s:match( '^()%s*$' ) and '' or s:match( '^%s*(.*%S)' )
end
local args = frame.args
local parentArgs = {}
for k, v in pairs( frame:getParent().args ) do
-- effectue un trim sur les paramètres non nommés,
-- et exclut les paramètres dont la valeur est vide
if type( k ) == number then
v = trim( v )
end
if v ~= '' then
parentArgs[ k ] = v
end
end
local wikiTable = { '<div class="navbox-container" style="clear:both;">\n' }
setmetatable( wikiTable, { __index = table } ) -- permet d'utiliser les fonctions de table comme des méthodes
local palettesVerticales = ''
local maxPalette = tonumber( args.maxPalette ) or 4
local categoriePaletteInconnue = '[[Catégorie:Modèle Palette - Palette inconnue]]'
local categorieTropDePalette = '[[Catégorie:Modèle Palette - Page contenant trop de palettes]]'
local categoriePaletteEnDouble = '[[Catégorie:Modèle Palette - Palette affichée en double]]'
local categories = { }
local function _erreur( texte, param, ... )
if param then texte = texte:format( param, ... )
end
local sep = #wikiTable > 1 and '<hr>' or ''
return sep .. '<p><strong class="error" style="padding-left:.5em;">' .. texte .. '</strong></p>\n'
end
local function _pasDePalette()
return _erreur( 'Erreur dans l’utilisation du [[Modèle:Palette]] : paramètre obligatoire absent.' )
end
local function _paletteInconnue( i )
categories.paletteInconnue = categoriePaletteInconnue
local nomPalette = parentArgs[i]
return _erreur( 'Erreur : il n’existe pas de modèle {{[[Modèle:Palette %s|Palette %s]]}} [[Aide:Palette de navigation|(aide)]]', nomPalette, nomPalette )
end
local function _paletteEnDouble ( i )
categories.paletteEnDouble = categoriePaletteEnDouble
return "" -- inutile d'afficher une erreur visible pour ce cas puisque la mise en page n'est pas cassée
end
local function _paletteAvecParametres( i )
local argsPalette = { }
for n, v in pairs( parentArgs ) do
if not tonumber(n) then
if n:match( ' ' .. i .. '$' ) then
argsPalette[ n:sub(1, n:len() - 1 - tostring(i):len() ) ] = v
elseif n == 'nocat' .. i then
argsPalette.nocat = v
elseif not argsPalette[n] and n ~= 'stylecorps' then
argsPalette[n] = v
end
end
end
return frame:expandTemplate{ title = 'Palette ' .. parentArgs[i], args = argsPalette }
end
local function _tropDePalettes()
categories.tropDePalette = categorieTropDePalette
return _erreur( 'Erreur dans le [[Modèle:Palette]] : trop de palettes (maximum : %s)', maxPalette )
end
local boite = parentArgs['titre boîte déroulante'] or parentArgs['titre boite déroulante']
if boite then
wikiTable[1] = '<div class="NavFrame navbox-container" style="clear:both;" >\n'
.. '<div class="NavHead" style="text-align:center; height:1.6em; background-color:'
.. ( parentArgs.couleurFondT or '#CCF' )
.. '; color:' .. ( parentArgs.couleurTexteT or 'black' ) .. ';">'
.. boite
.. '</div>\n<div class="NavContent" style="margin-top:2px;">\n'
end
local i = 1
local palettesValides = {}
while parentArgs[i] and i <= maxPalette do
if parentArgs[i] ~= '' then
for _, j in ipairs( palettesValides ) do
if args[i] == args[j] and not args[i]:match('^palette ') then
wikiTable:insert ( _paletteEnDouble(i))
end
end
table.insert( palettesValides, i )
if parentArgs[i]:match( '^<table class="navbox' ) or parentArgs[i]:match( '^{| ?class="navbox' ) then
wikiTable:insert( parentArgs[i] )
else
local codePalette = args[i]
local testCodePalette = codePalette:lower()
if testCodePalette:match( '^%[%[:modèle:' ) then -- La palette n'existe pas
wikiTable:insert( _paletteInconnue( i ) )
table.remove( palettesValides )
elseif testCodePalette:match( '^palette avec paramètres' ) then -- C'est une palette nécessitant des paramètres nommés
wikiTable:insert( _paletteAvecParametres( i ) )
elseif testCodePalette:match( '^palette verticale avec paramètres' ) then -- C'est une palette verticale nécessitant des paramètres nommés
palettesVerticales = palettesVerticales .. ( _paletteAvecParametres( i ) )
elseif testCodePalette:match( '^palette verticale' ) then -- C'est une palette verticale
palettesVerticales = palettesVerticales .. codePalette:sub( 18 )
else
wikiTable:insert( (codePalette:gsub( '^<div class="navbox%-container"', '<div' ) ) )
end
end
end
i = i + 1
end
if i == 1 then
wikiTable:insert( _pasDePalette() )
elseif i > maxPalette and parentArgs[i] and parentArgs[i] ~= '' then
wikiTable:insert( _tropDePalettes() )
end
if #wikiTable == 1 then
wikiTable[1] = palettesVerticales
else
if boite then
wikiTable:insert( '</div>' )
end
wikiTable:insert( '</div>' .. palettesVerticales )
end
if mw.title.getCurrentTitle().namespace == 0 then
for i, v in pairs( categories ) do
wikiTable:insert( v )
end
end
return wikiTable:concat()
end
return p