« Module:Référence » : différence entre les versions

De Les Archives de Vault-Tec
Kharmitch (discussion | contributions)
Aucun résumé des modifications
Kharmitch (discussion | contributions)
mAucun résumé des modifications
Ligne 110 : Ligne 110 :
sentences = '<ul class="reference-dial">' .. sentences .. "</ul>"
sentences = '<ul class="reference-dial">' .. sentences .. "</ul>"
local header = string.format(
local header = string.format(
"<p>Conversation extraite du fichier %s, ''[[%s]]''.</p>",
"Conversation extraite du fichier %s, ''[[%s]]''.",
source,
source,
game
game

Version du 5 février 2023 à 14:33

La documentation pour ce module peut être créée à Module:Référence/doc

local p = {}

-- Adapte le style de la citation en fonction de la langue
function sentence_lang(sentence, lang)
	if lang ~= "fr" then
		return string.format("''%s''", sentence)
	else
		return sentence
	end
end

-- Retourne les arguments entrés par l'utilisateur
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

-- Génère une référence mise en forme automatiquement en
-- fonction du type sélectionné par l'utilisateur.
function p.dialogue(frame)
	local args = get_args(frame)
	
	-- Paramètres d'identification et de regroupement
	-- de la référence
	local attributes = {
		name  = args["nom"],
		group = args["groupe"],
	}
	
	local lang = args["langue"] or "fr"

	local source = args["source"]
	if not source then
		error("Paramètre source absent")
	end
	
	local game = args["jeu"]
	if game then
		game = require("Module:Abréviation").name(game)
		if not game or game == "" then
			error("Valeur inconnue du paramètre jeu")
		end
	else
		error("Paramètre jeu absent")
	end
	
	local characters = {}
	local character
	for i = 1, 6 do
		character = args['personnage' .. i]
		if not character then
			break
		end
		table.insert(characters, character)
	end
	
	if #characters == 0 then
		error("Paramètre personnage absent")
	end
	
	local sentences = ""
	local sentence
	local character_index
	
	-- Maximum de 10 phrases possibles
	for i = 1, 10 do
		-- phrasei.p indique l'index du personnage
		-- phrasei.p indique le texte
		character_index = args[string.format("phrase%d.p", i)]
		sentence = args[string.format("phrase%d.t", i)]
		
		if not sentence or not character_index then
			break
		end
		character_index = tonumber(character_index)
		if not character_index then
			error(string.format("Paramètre phrase%d.p doit être un nombre", i))
		end
		character = characters[character_index]
		if not character then
			error("Personnage non reconnu")
		end
	
		sentences = sentences .. tostring(mw.html.create("li")
			:addClass("reference-dial-row")
			:tag("span")
				:addClass("reference-dial-character")
				:wikitext(character .. " —&nbsp;")
				:done()
			:tag("span")
				:addClass("reference-dial-text")
				:wikitext(sentence_lang(sentence, lang))
				:done()
			:allDone()
		)
	end
		
	if sentences == "" then
		error("Paramètre phrase absent")
	end
	
	sentences = '<ul class="reference-dial">' .. sentences .. "</ul>"
	local header = string.format(
		"Conversation extraite du fichier %s, ''[[%s]]''.",
		source,
		game
	)
	local content = header .. sentences
	
	return tostring(mw.getCurrentFrame():extensionTag( 'ref', content, attributes ))
end

return p