Module:Bandeau

De Starfield Wiki
Documentation[voir] [modifier] [purger]

Ce module implémente les modèles de bandeau.

Utilisation[modifier le wikicode]

Fonctions exportables :

  • banner(frame) – voir la documentation du modèle {{Bandeau}} ;
  • stub(frame) – voir la documentation du modèle {{ébauche}}.

Autres fonctions :

  • les fonctions ci-dessus avec un « _ » avant le nom peuvent être appelées directement depuis lua, avec les paramètres dans une table.

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


local p = {}

-- Types de bandeau autorisés
local shapes = {
	article = "banner-article",
	note = "banner-note",
	section = "banner-section",
	simple = "banner-simple",
}

-- Niveaux d'information autorisés
local levels = {
	ebauche = "banner-stub",
	grave = "banner-serious",
	information = "banner-info",
	modere = "banner-moderate",
	neutre = "banner-neutral",
}
levels["modéré"] = levels.modere
levels["ébauche"] = levels.ebauche

-- Paramétrage par défaut
local default = {
	shape = "simple",
	level = "information",
	image_format = "[[Fichier:%s|%spx|alt=%s|link=|class=noviewer]]",
	image_size = "x50",
	stub_title = "Cet article est une [[Aide:Ébauche|ébauche]].",
	stub_title_subject = "Cet article est une [[Aide:Ébauche|ébauche]] concernant %s.",
	stub_category = "[[Catégorie:Ébauche]]",
	stub_category_subject = "[[Catégorie:Ébauche (%s)]]",
	stub_text = "Vous pouvez partager vos connaissances en l'améliorant ('''[[Aide:Modifier une page|comment ?]]''') selon nos [[Aide:Accueil#Politique de Starfield Wiki|conventions]].",
}

-- Fonction retournant un bandeau au format souhaité
function p._banner(args)
	local text = args.texte
	local title = args.titre
	if not text and not title then
		error("Paramètres texte ou titre absents.")
	end
	
	local shape = args.forme or default.shape
	local shape_class = shapes[shape]
	if shape_class == nil then
		error("Valeur inconnue pour le paramètre forme.")
	end
	
	local level = args.niveau or default.level
	local level_class = levels[level]
	if level_class == nil then
		error("Valeur inconnue pour le paramètre niveau.")
	end

	local res = mw.html.create("div")
	local cells = mw.html.create()

	res	:addClass("banner")
		:addClass(shape_class)
		:addClass(level_class)
		:addClass("noexcerpt")

	local image = args.image
	if image then
		local alt = args["image légende"] or ""
		local size = args["image taille"] or default.image_size
		image = cells
			:tag("div")
			:addClass("banner-cell banner-image")
			:wikitext(default.image_format:format(image, size, alt))
	end

	local html_text = mw.html.create()

	if title then
		html_text = html_text
			:tag("strong")
				:addClass("banner-title")
				:wikitext(title)
			:done()
		if text then
			html_text
				:newline()
				:newline()
				:wikitext(text)
		end
	elseif text then
		html_text
			:newline()
			:wikitext(text)
	end

	cells
		:tag("div")
			:addClass("banner-cell")
			:newline()
			:wikitext(tostring(html_text))
			:newline()

	res	:node(cells)
	return tostring(res)
end

-- Fonction spécifique au bandeau de type ébauche
function p._stub(args)
	local subjects = mw.loadData("Module:Bandeau/Ébauche")
	local subject = args[1]
	
	if subject ~= nil then
		subject = subjects[subject:lower()]
	end
	
	local title
	local category
	
	if subject ~= nil then
		title = string.format(
			default.stub_title_subject,
			subject.subject
		)
		category = string.format(
			default.stub_category_subject,
			args[1]:lower()
		)
	else
		title = default.stub_title
		category = default.stub_category
	end
	
	return p._banner({
		forme = "article",
		niveau = "ébauche",
		titre = title,
		texte = default.stub_text,
		image = subject.image,
		["image taille"] = subject.size,
	}) .. category
end

function get_args(frame)
	local args = {}
	local argsParent = frame:getParent().args
	for cle, val in pairs(argsParent) do
		if val then
			args[cle] = mw.text.trim(val)
		end
	end
	return args
end

-- Fonctions destinées à être appelées dans les modèles

function p.banner(frame)
	return p._banner(get_args(frame))
end

function p.stub(frame)
	return p._stub(get_args(frame))
end

return p