Module:Bandeau navigation évaluation

 Documentation[créer] [purger]
local p = {}

-- Les paramètres d'un projet sous stockés dans une sous-page Projet:.../Évaluation/Paramètres.
-- Voir [[Projet:Évaluation/Bot#Paramétrage]] pour le format.
local function lireParametres(sousPageEvaluation)
	local params = {}
	local page = mw.title.new(sousPageEvaluation .. '/Paramètres')
	if page.exists then
		for ligne in mw.text.gsplit(page:getContent(), '\n', true) do
			param, valeur = string.match(ligne, "^%s*([%a%d]+)%s*=(.+)")
			if param and valeur then
				params[param] = mw.text.trim(valeur)
			end
		end
	end
	return params
end

-- Renvoie le nom du projet et l'emplacement de la sous-page évaluation à partir des arguments.
-- Le cas standard est celui où seul projet est spécifié. La sous-page d'évaluation est alors Projet:<projet>/Évaluation.
-- Certains projets sont en sous-page d'un autre projet et ont besoin de fournir une autre valeur pour sous-page évaluation.
-- Enfin, dans les anciennes versions des pages, le bandeau n'avait qu'un paramètre donnant directement un lien
-- [[sous-page|nom du projet]]. Pour permettre l'affichage de ces anciennes versions, la fonction peut extraire les
-- deux paramètres d'un tel lien.
local function extraireProjetEtSousPageEval(args)
	local projet = args['projet'] or ''
	local sousPageEvaluation = args['sous-page évaluation'] or ''
	local lienProjet = args['lien projet'] or ''
	if projet == '' then
		projet = string.match(lienProjet, '|([^%]]+)') or ''
	end
	if sousPageEvaluation == '' then
		if lienProjet ~= '' then
			sousPageEvaluation = string.match(lienProjet, '%[%[([^|%]]+)')
		else
			sousPageEvaluation = 'Projet:' .. projet .. '/Évaluation'
		end
	end
	return projet, sousPageEvaluation
end

-- Construit un lien vers cible. Une cible commençant par '/' est considérée comme étant relative à sousPageEvaluation.
local function construireLienNavigation(sousPageEvaluation, cible, texte)
	if cible:sub(1, 1) == '/' then
		cible = sousPageEvaluation .. cible
	end
	return '[[' .. cible .. '|' .. texte .. ']]'
end

-- Lit un unique paramètre de la sous-page /Évaluation/Paramètres d'un projet (utile pour les tests).
function p.lireParametre(frame)
	local _, sousPageEvaluation = extraireProjetEtSousPageEval(frame.args)
	return lireParametres(sousPageEvaluation)[frame.args['paramètre']] or ''
end

-- Construit le bandeau de navigation pour les sous-pages /Évaluation/Historique, /Évaluation/Index, etc.
function p.bandeauNavigationEvaluation(frame)
	local projet, sousPageEvaluation = extraireProjetEtSousPageEval(frame.args)
	local lienPrecedent = ''
	if (frame.args['lien précédent'] or '') ~= '' then
		lienPrecedent = '← ' .. construireLienNavigation(sousPageEvaluation, frame.args['lien précédent'],
			frame.args['nom précédent'] or 'précédent')
	end
	local lienSuivant = ''
	if (frame.args['lien suivant'] or '') ~= '' then
		lienSuivant = construireLienNavigation(sousPageEvaluation, frame.args['lien suivant'],
			frame.args['nom suivant'] or 'suivant') .. ' →'
	end

	local params = lireParametres(sousPageEvaluation)
	local couleurFond = params['wp10FondCadre'] or '#DDFFDD'
	local logo = ''
	if (params['wp10Logo'] or '') ~= '' then
		logo = '[[Image:' .. params['wp10Logo'] .. '|25px]]&nbsp;'
	end

	local bandeau = mw.html.create('table')
		:addClass('messagebox')
		:css('padding', '4px'):css('width', '100%'):css('margin-bottom', '5px'):css('text-align', 'center')
		:css('background', couleurFond)
		:tag('tr')
			:tag('td')
				:css('width', '20%'):css('text-align', 'left')
				:wikitext(logo .. '[[' .. sousPageEvaluation .. '|' .. projet .. ']]')
				:done()
			:tag('td')
				:css('width', '60%')
				:done()
			:tag('td')
				:css('width', '20%'):css('text-align', 'right')
				:wikitext('[[Projet:Évaluation|Évaluation]] [[Fichier:Rio de Janeiro 2016 Summer Olympics bid icon (blue) 70.svg|25px]]')
				:done()
			:done()
		:tag('tr')
			:tag('td')
				:css('text-align', 'left'):css('border-top', '1px solid #aaaaaa')
				:wikitext(lienPrecedent)
				:done()
			:tag('td')
				:wikitext('↑[[' .. mw.title.getCurrentTitle().basePageTitle.prefixedText .. '|(haut)]]')
				:done()
			:tag('td')
				:css('text-align', 'right'):css('border-top', '1px solid #aaaaaa')
				:wikitext(lienSuivant)
				:done()
			:done()
	return tostring(bandeau)
end

return p