Module:Palette : Différence entre versions
(retouche de la modification précédente) |
(simplification : on s’arrête à la première palette vide, mef) |
||
Ligne 8 : | Ligne 8 : | ||
local args = frame.args | local args = frame.args | ||
local parentArgs = frame:getParent().args | local parentArgs = frame:getParent().args | ||
+ | |||
local wikiTable = { '<div class="navbox_group" style="clear:both;">\n' } | local wikiTable = { '<div class="navbox_group" style="clear:both;">\n' } | ||
− | setmetatable( wikiTable, { __index = table } ) | + | setmetatable( wikiTable, { __index = table } ) -- permet d'utiliser les fonctions de table comme des méthodes |
local maxPalette = tonumber( args.maxPalette ) or 4 | local maxPalette = tonumber( args.maxPalette ) or 4 | ||
Ligne 17 : | Ligne 18 : | ||
local categories = { } | local categories = { } | ||
− | local function | + | local function _erreur( texte, param, ... ) |
if param then texte = texte:format( param, ... ) | if param then texte = texte:format( param, ... ) | ||
end | end | ||
Ligne 23 : | Ligne 24 : | ||
end | end | ||
local function _pasDePalette() | local function _pasDePalette() | ||
− | return | + | return _erreur( 'Erreur dans l’utilisation du [[Modèle:Palette]] : paramètre obligatoire absent.' ) |
end | end | ||
local function _paletteInconnue( i ) | local function _paletteInconnue( i ) | ||
categories.paletteInconnue = categoriePaletteInconnue | categories.paletteInconnue = categoriePaletteInconnue | ||
− | return | + | return _erreur( 'Erreur : il n’existe pas de modèle « Palette %s »', parentArgs[i] ) |
end | end | ||
Ligne 48 : | Ligne 49 : | ||
local function _tropDePalettes() | local function _tropDePalettes() | ||
categories.tropDePalette = categorieTropDePalette | categories.tropDePalette = categorieTropDePalette | ||
− | return | + | return _erreur( 'Erreur dans le [[Modèle:Palette]] : trop de palettes (maximum : %s)', maxPalette ) |
end | end | ||
local i = 1 | local i = 1 | ||
− | while parentArgs[i] and | + | while parentArgs[i] and parentArgs[i] ~= '' and i <= maxPalette do |
− | + | local codePalette = args[i]:gsub( '<div class="navbox_group"', '<div' ) | |
− | + | -- une ancre ^ pourra être ajoutée pour gagner en performance lorsque le modèle palette ne commencera plus par {{clr}} | |
− | + | ||
− | + | if codePalette:match( '^%[%[:Modèle:' ) then -- La palette n'existe pas | |
− | if codePalette:match( '^%[%[:Modèle:' ) then | + | wikiTable:insert( _paletteInconnue( i ) ) |
− | + | elseif codePalette:match( '^palette verticale' ) then -- C'est une palette verticale | |
− | + | wikiTable:insert( 1, codePalette:sub( 18 ) ) | |
− | + | elseif codePalette:match( '^palette avec paramètres' ) then -- C'est une palette nécessitant des paramètres nommés | |
− | + | wikiTable:insert( _paletteAvecParametres( i ) ) | |
− | + | else | |
− | + | wikiTable:insert( codePalette ) | |
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
Ligne 75 : | Ligne 71 : | ||
end | end | ||
− | if i | + | if i == 1 then |
wikiTable:insert( _pasDePalette() ) | wikiTable:insert( _pasDePalette() ) | ||
− | elseif i > maxPalette and parentArgs[i] and | + | elseif i > maxPalette and parentArgs[i] and parentArgs[i] ~= '' then |
wikiTable:insert( _tropDePalettes() ) | wikiTable:insert( _tropDePalettes() ) | ||
end | end |
Version du 29 août 2014 à 15:35
La documentation pour ce module peut être créée à Module:Palette/doc
local Palette = { } local function paletteAvecParametre( i, args ) end function Palette.listePalette( frame ) local args = frame.args local parentArgs = frame:getParent().args local wikiTable = { '<div class="navbox_group" style="clear:both;">\n' } setmetatable( wikiTable, { __index = table } ) -- permet d'utiliser les fonctions de table comme des méthodes 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 categories = { } local function _erreur( texte, param, ... ) if param then texte = texte:format( param, ... ) end return '<p><strong class="error">' .. 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 return _erreur( 'Erreur : il n’existe pas de modèle « Palette %s »', parentArgs[i] ) end local function _paletteAvecParametres( i ) local argsPalette = { } for n, v in pairs( parentArgs ) do if not tonumber(n) then argsPalette[n] = v if n:match( i .. '$' ) then argsPalette[ n:sub(0 - #tostring(i) ) ] = v elseif not argsPalette[n] 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 i = 1 while parentArgs[i] and parentArgs[i] ~= '' and i <= maxPalette do local codePalette = args[i]:gsub( '<div class="navbox_group"', '<div' ) -- une ancre ^ pourra être ajoutée pour gagner en performance lorsque le modèle palette ne commencera plus par {{clr}} if codePalette:match( '^%[%[:Modèle:' ) then -- La palette n'existe pas wikiTable:insert( _paletteInconnue( i ) ) elseif codePalette:match( '^palette verticale' ) then -- C'est une palette verticale wikiTable:insert( 1, codePalette:sub( 18 ) ) elseif codePalette:match( '^palette avec paramètres' ) then -- C'est une palette nécessitant des paramètres nommés wikiTable:insert( _paletteAvecParametres( i ) ) else wikiTable:insert( codePalette ) 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 wikiTable:insert( '</div>' ) for i, v in pairs( categories ) do wikiTable:insert( v ) end return wikiTable:concat() end return Palette