Module:Méta palette

Aller à la navigation Aller à la recherche

La documentation pour ce module peut être créée à Module:Méta palette/doc

--[[
	Fonctions utiles pour les méta-palettes de navigation.
	]]
local p = {}

--[[
	Nettoyage d'une chaîne.
	Argument:	lien reçu du #invoke
	Résultat:	l'argument, avec les diverses espaces HTML remplacés par des
				espaces normales
	
	Ce code est utile, par exemple avec lien = "Culture_en Égypte". Si on
	ne le fait pas, les résultats ne seront pas les résultats attendus.
	]]
local function nettoyage(chaine)	
	if type(chaine) ~= "string" then return chaine end
	return chaine
			-- nbsp
			:gsub( '\194\160',		' ' )
			:gsub( ' ',		' ' )
			:gsub( ' ',		' ' )
			-- narrow nbsp
			:gsub( '\226\128\175',	' ' )
			:gsub( ' ',		' ' )
			-- thin space
			:gsub( '\226\128\137',	' ' )
			:gsub( ' ',		' ' )
			:gsub( ' ',		' ' )
			-- simple space
			:gsub( ' ',			' ' )
			-- underscore
			:gsub( '_',				' ' )
end

--[[
	Formate un lien interne.
	Paramètres:	lien:  lien de l'article désiré
				texte: texte à afficher
				
	Cette fonction formate un lien interne, en utilisant comme cible du lien
	la valeur du premier paramètre et comme texte affiché la valeur du second
	paramètre. Si le modèle contenant le #invoke avait été appelé avec un
	paramètre portant le même nom que la valeur du premier paramètre passé au
	module, alors le module utilisera la valeur du paramètre du modèle comme
	cible du lien, ce qui permet de détourner le lien.

	Par exemple, si le modèle contient
		{{#invoke:Méta palette|lien|cible-1|texte-1}}
	et que le modèle est appelé avec
		{{Modèle}}
	alors le lien généré sera
		cible-1|texte-1	(entre crochets)
		
	Mais si le même modèle est appelé avec
		{{Modèle|cible-1=toto}}
	alors le lien généré sera
		toto|texte-1		(entre crochets)
	]]
function p.lien(frame)
	local args0 = frame.args                    -- arguments du #invoke
	local args1 = frame:getParent().args        -- arguments du modèle appelant
	-- Le modèle appelant (la méta palette) génère automatiquement la cible du lien
	-- en assemblant divers éléments.
	local lienMeta = mw.text.trim(args0[1])     -- cible générée par la meta palette
	-- Si la palette appelant la méta palette lui passe un argument dont le nom est
	-- identique à celui du lien généré par la méta palette, utiliser la valeur de
	-- cet argument comme cible du lien.
	local lien1 = args1[lienMeta]               -- cible détournée par la palette
	if lien1 then return "[[" .. lien1 .. "|" .. args0[2] .. "]]" end
	-- Le lien généré par la méta palette peut contenir des blancs soulignés,
	-- ou des espaces insécables, il faut donc nettoyer le lien généré avant
	-- de voir si la palette n'a pas utilisé un nom de paramètre nettoyé.
	local lien2 = args1[nettoyage(lienMeta)]    -- cible détournée par la palette
	if lien2 then return "[[" .. lien2 .. "|" .. args0[2] .. "]]" end
	return "[[" .. lienMeta .. "|" .. args0[2] .. "]]"
end

return p