« Module:Palette » : différence entre les versions
Contenu supprimé Contenu ajouté
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 |
renommage de la variable, pour mieux montrer qu'il s'agit de mw.text.trim(), notamment pour empêcher tout risque de confusion avec Outils.trim() |
||
(14 versions intermédiaires par 2 utilisateurs non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
local |
local mwTrim = mw.text.trim |
||
local p = {} |
|||
function p.listePalette( frame ) |
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 args = frame.args |
||
local parentArgs = {} |
local parentArgs = {} |
||
for k, v in pairs( frame:getParent().args ) do |
for k, v in pairs( frame:getParent().args ) do |
||
-- effectue un trim sur les paramètres non nommés |
-- effectue un trim sur les paramètres non nommés |
||
⚫ | |||
-- et exclut les paramètres dont la valeur est vide |
|||
v = mwTrim( v ) |
|||
v = trim( v ) |
|||
end |
|||
⚫ | |||
⚫ | |||
end |
end |
||
⚫ | |||
end |
end |
||
Ligne 31 : | Ligne 24 : | ||
local categoriePaletteEnDouble = '[[Catégorie:Modèle Palette - Palette affichée en double]]' |
local categoriePaletteEnDouble = '[[Catégorie:Modèle Palette - Palette affichée en double]]' |
||
local categories = { |
local categories = {} |
||
local function _erreur( texte, param, ... ) |
local function _erreur( texte, param, ... ) |
||
Ligne 55 : | Ligne 48 : | ||
local function _paletteAvecParametres( i ) |
local function _paletteAvecParametres( i ) |
||
local argsPalette = { |
local argsPalette = {} |
||
for n, v in pairs( parentArgs ) do |
for n, v in pairs( parentArgs ) do |
||
if not tonumber(n) then |
if not tonumber(n) then |
||
Ligne 96 : | Ligne 89 : | ||
end |
end |
||
table.insert( palettesValides, i ) |
table.insert( palettesValides, i ) |
||
if parentArgs[i]:match( '^< |
if parentArgs[i]:match( '^<' ) then |
||
wikiTable:insert( parentArgs[i] ) |
|||
elseif parentArgs[i]:match( '^{|' ) then |
|||
wikiTable:insert( '\n' ) |
|||
wikiTable:insert( parentArgs[i] ) |
wikiTable:insert( parentArgs[i] ) |
||
else |
else |
||
local codePalette = args[i] |
local codePalette = args[i] |
||
⚫ | |||
local testCodePalette = codePalette:lower() |
|||
⚫ | |||
wikiTable:insert( _paletteInconnue( i ) ) |
wikiTable:insert( _paletteInconnue( i ) ) |
||
table.remove( palettesValides ) |
table.remove( palettesValides ) |
||
elseif |
elseif codePalette:match( '^palette avec paramètres' ) then -- C'est une palette nécessitant des paramètres nommés |
||
wikiTable:insert( _paletteAvecParametres( i ) ) |
wikiTable:insert( _paletteAvecParametres( i ) ) |
||
elseif |
elseif codePalette:match( '^palette verticale avec paramètres' ) then -- C'est une palette verticale nécessitant des paramètres nommés |
||
palettesVerticales = palettesVerticales .. ( _paletteAvecParametres( i ) ) |
palettesVerticales = palettesVerticales .. ( _paletteAvecParametres( i ) ) |
||
elseif |
elseif codePalette:match( '^palette verticale' ) then -- C'est une palette verticale |
||
palettesVerticales = palettesVerticales .. codePalette:sub( 18 ) |
palettesVerticales = palettesVerticales .. codePalette:sub( 18 ) |
||
else |
else |
Dernière version du 7 novembre 2023 à 07:52
[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 mwTrim = mw.text.trim
local p = {}
function p.listePalette( frame )
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
if type( k ) == 'number' then
v = mwTrim( v )
end
parentArgs[ k ] = v
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( '^<' ) then
wikiTable:insert( parentArgs[i] )
elseif parentArgs[i]:match( '^{|' ) then
wikiTable:insert( '\n' )
wikiTable:insert( parentArgs[i] )
else
local codePalette = args[i]
if codePalette:match( '^%[%[:Modèle:' ) then -- La palette n'existe pas
wikiTable:insert( _paletteInconnue( i ) )
table.remove( palettesValides )
elseif codePalette:match( '^palette avec paramètres' ) then -- C'est une palette nécessitant des paramètres nommés
wikiTable:insert( _paletteAvecParametres( i ) )
elseif codePalette:match( '^palette verticale avec paramètres' ) then -- C'est une palette verticale nécessitant des paramètres nommés
palettesVerticales = palettesVerticales .. ( _paletteAvecParametres( i ) )
elseif codePalette: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