For faster navigation, this Iframe is preloading the Wikiwand page for Module:Palette.


 Documentation[voir] [modifier] [historique] [purger]


Fonctions exportables :

Modules externes et autres éléments dont ce module a besoin pour fonctionner : aucun


Pour des exemples, voir la page de test permettant de tester diverses modifications apportées.

Voir les statistiques d'utilisation du module sur l'outil wstat.

local function trim( s )
	return s:match( '^()%s*$' ) and '' or s:match( '^%s*(.*%S)' )

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 = trim( v )
		parentArgs[ k ] = v

	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, ... )
		local sep = #wikiTable > 1 and '<hr>' or ''
		return sep .. '<p><strong class="error" style="padding-left:.5em;">' .. texte .. '</strong></p>\n'
	local function _pasDePalette()
		return _erreur( 'Erreur dans l’utilisation du [[Modèle:Palette]] : paramètre obligatoire absent.' )

	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 )

	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

	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
		return frame:expandTemplate{ title = 'Palette ' .. parentArgs[i], args = argsPalette }

	local function _tropDePalettes()
		categories.tropDePalette = categorieTropDePalette
		return _erreur( 'Erreur dans le [[Modèle:Palette]] : trop de palettes (maximum : %s)', maxPalette )

	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'
	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))
			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] )
				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 )
					wikiTable:insert( (codePalette:gsub( '^<div class="navbox%-container"', '<div' ) ) )
		i = i + 1

	if i == 1 then
		wikiTable:insert( _pasDePalette() )
	elseif i > maxPalette and parentArgs[i] and parentArgs[i] ~= '' then
		wikiTable:insert( _tropDePalettes() )
	if #wikiTable == 1 then
		wikiTable[1] = palettesVerticales
		if boite then
			wikiTable:insert( '</div>' )
		wikiTable:insert( '</div>' .. palettesVerticales )
	if mw.title.getCurrentTitle().namespace == 0 then
		for i, v in pairs( categories ) do
			wikiTable:insert( v )

	return wikiTable:concat()

return p
{{bottomLinkPreText}} {{bottomLinkText}}
Listen to this article

This browser is not supported by Wikiwand :(
Wikiwand requires a browser with modern capabilities in order to provide you with the best reading experience.
Please download and use one of the following browsers:

This article was just edited, click to reload
This article has been deleted on Wikipedia (Why?)

Back to homepage

Please click Add in the dialog above
Please click Allow in the top-left corner,
then click Install Now in the dialog
Please click Open in the download dialog,
then click Install
Please click the "Downloads" icon in the Safari toolbar, open the first download in the list,
then click Install

Install Wikiwand

Install on Chrome Install on Firefox
Don't forget to rate us

Tell your friends about Wikiwand!

Gmail Facebook Twitter Link

Enjoying Wikiwand?

Tell your friends and spread the love:
Share on Gmail Share on Facebook Share on Twitter Share on Buffer

Our magic isn't perfect

You can help our automatic cover photo selection by reporting an unsuitable photo.

This photo is visually disturbing This photo is not a good choice

Thank you for helping!

Your input will affect cover photo selection, along with input from other users.