Aller au contenu

Module:Palette

Cette page fait l’objet d’une mesure de semi-protection étendue.
Une page de Wikipédia, l'encyclopédie libre.
Ceci est une version archivée de cette page, en date du 13 mai 2015 à 15:26 et modifiée en dernier par Al1 (discuter | contributions) (pas de recherche de doublons de palette parmi les palettes paramétriques ou verticales). Elle peut contenir des erreurs, des inexactitudes ou des contenus vandalisés non présents dans la version actuelle.

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

Utilisation

Ce module permet l'implémentation de l'ensemble des palettes de navigation sur Wikipédia français. Il est l'équivalent du module nommé Navbox en anglais.

Ce module ne suffit pas à implémenter les palettes. La fonction Afficher / Masquer est permise par un code JavaScript présent dans MediaWiki:Common.js#L-233. La mise en forme css est gérée par MediaWiki:Common.css#L-1061, ainsi que par MediaWiki:Vector-2022.css#L-237 pour le mode sombre.

Fonctions exportables

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

  • mw.text.trim – Enlève les espaces au début et à la fin d'une chaine de caractères ;
  • mw.title.getCurrentTitle – Retourne l'objet title associé à la page courante. Un objet title contient les différentes informations sur une page comme son titre, son espace de noms, son contenu, etc.

Exemples

Dans Modèle:Palette, ce module est appelé de la façon suivante :

{{#invoke:Palette | listePalette | maxPalette = 20
|{{Palette {{{1}}} |{{{parametre palette1|}}}| nocat={{{nocat1|{{{nocat|}}}}}} | parent=bandeau}}
|{{Palette {{{2}}} |{{{parametre palette2|}}}| nocat={{{nocat2|{{{nocat|}}}}}} | parent=bandeau}}
|{{Palette {{{3}}} |{{{parametre palette3|}}}| nocat={{{nocat3|{{{nocat|}}}}}} | parent=bandeau}}
|{{Palette {{{4}}} |{{{parametre palette4|}}}| nocat={{{nocat4|{{{nocat|}}}}}} | parent=bandeau}}
|{{Palette {{{5}}} |{{{parametre palette5|}}}| nocat={{{nocat5|{{{nocat|}}}}}} | parent=bandeau}}
|{{Palette {{{6}}} |{{{parametre palette6|}}}| nocat={{{nocat6|{{{nocat|}}}}}} | parent=bandeau}}
|{{Palette {{{7}}} |{{{parametre palette7|}}}| nocat={{{nocat7|{{{nocat|}}}}}} | parent=bandeau}}
|{{Palette {{{8}}} |{{{parametre palette8|}}}| nocat={{{nocat8|{{{nocat|}}}}}} | parent=bandeau}}
|{{Palette {{{9}}} |{{{parametre palette9|}}}| nocat={{{nocat9|{{{nocat|}}}}}} | parent=bandeau}}
|{{Palette {{{10}}} |{{{parametre palette10|}}}| nocat={{{nocat10|{{{nocat|}}}}}} | parent=bandeau}}
|{{Palette {{{11}}} |{{{parametre palette11|}}}| nocat={{{nocat11|{{{nocat|}}}}}} | parent=bandeau}}
|{{Palette {{{12}}} |{{{parametre palette12|}}}| nocat={{{nocat12|{{{nocat|}}}}}} | parent=bandeau}}
|{{Palette {{{13}}} |{{{parametre palette13|}}}| nocat={{{nocat13|{{{nocat|}}}}}} | parent=bandeau}}
|{{Palette {{{14}}} |{{{parametre palette14|}}}| nocat={{{nocat14|{{{nocat|}}}}}} | parent=bandeau}}
|{{Palette {{{15}}} |{{{parametre palette15|}}}| nocat={{{nocat15|{{{nocat|}}}}}} | parent=bandeau}}
|{{Palette {{{16}}} |{{{parametre palette16|}}}| nocat={{{nocat16|{{{nocat|}}}}}} | parent=bandeau}}
|{{Palette {{{17}}} |{{{parametre palette17|}}}| nocat={{{nocat17|{{{nocat|}}}}}} | parent=bandeau}}
|{{Palette {{{18}}} |{{{parametre palette18|}}}| nocat={{{nocat18|{{{nocat|}}}}}} | parent=bandeau}}
|{{Palette {{{19}}} |{{{parametre palette19|}}}| nocat={{{nocat19|{{{nocat|}}}}}} | parent=bandeau}}
|{{Palette {{{20}}} |{{{parametre palette20|}}}| nocat={{{nocat20|{{{nocat|}}}}}} | parent=bandeau}}
}}

Voir aussi

local Palette = { }

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 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 = mw.text.trim( 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 ' .. mw.text.trim(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_group" 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
	
	while parentArgs[i] and i <= maxPalette  do
		if parentArgs[i]:match( '%S' ) then
			local j 
			for j = 1, i - 1 do
			    if args[i] == args[j] and not args[i]:match('^palette ') then
					wikiTable:insert ( _paletteEnDouble(i))
				end
			end
			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 ) )
				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_group"', '<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 Palette