Module:Benda

De Vouiquipèdia, l’enciclopèdia abada.
Sauter à la navigation Sauter à la recherche

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

--Cél modulo ègzécute los modèlos de benda.

--Estandardisacion de les bendes ([[Catègorie:Modèlo de benda]]).
--Fâre na fonccion èxportâbla por lo modèlo {{Benda}} (ns:all).
--Fâre na fonccion èxportâbla por les bendes d'articllo (ns:0).
--Fâre na fonccion èxportâbla por les bendes de sèccion (ns:0).
--Fâre na fonccion èxportâbla por les bendes de començon (ns:0).
--Fâre na fonccion èxportâbla por les bendes de discussion (ns:1).
--Fâre na fonccion èxportâbla por les bendes de sistèmo (ns:8).
--Fâre marchiér les émâges multiples.

local p = {}

local trim = require('Module:Outils').trim
local yesno = require('Module:yesno')
local class = mw.loadData('Module:Benda/Class')
-- local paramComencon = mw.loadData('Module:Benda/Comencon') -- serat chargiê ren que por na benda de començon.

local cfg = {
	forma = 'benda-simpla',
	nivel = 'benda-nivel-netro',
	formatLim = '[[Fichiér:%s|%spx|alt=%s]]',
	talyeIcona = '45x45',
	publico = 'domêno publico',
	fotaArgument = 'Paramètro <code>|%s=</code> entrovâblo',
	fotaComenconParam = 'lo tèmo « %s » du modèlo [[Modèlo:Començon|{{començon}}]] est pas [[Éde:Començon/Éde paramètros|dèfeni]].',
	fotaComenconTipo = 'lo tèmo « %s » dêt aparêtre en téta de lista du modèlo [[Modèlo:Començon|{{començon}}]].',
	comenconEmage = '<span style="white-space:nowrap;word-spacing:5px">%s</span>',
	comenconTitro = '%s est un [[Éde:Començon|començon]].',
	comenconTitroChousa = '%s est un [[Éde:Començon|començon]] que regârde %s.',
	comenconCateg = '[[Catègorie:Vouiquipèdia:començon %s]]',
}

local function fota(texto, formatstring, tag)
	local res = mw.html.create(tag or 'span')
	res	:addClass('fota')
		:wikitext('Fôta : ')

	if formatstring then
		res:wikitext(string.format(formatstring, texto))
	else
		res:wikitext(texto)
	end

	return tostring(res)
end

function p._benda(args)
	local res = mw.html.create('div')
	local cells = mw.html.create()
	local icona = trim(args.emage) or trim(args['icôna'])
	local backgroundIcona = class.icones[icona] or ''
	local texto = (trim(args.texto) or fota('texto', cfg.fotaArgument))

	res	:attr{ id = args.id }
		:addClass(class.formes[args.forma] or cfg.forma)
		:addClass(class.nivel[args.nivel] or cfg.nivel)
		:addClass('plainlinks')
		:addClass(args.class)
		:cssText(args.stilo)
	
	if yesno(args.centrar) then
		cells = mw.html.create('div')
			:addClass('benda-centrar')
	end
	if icona and backgroundIcona == '' then
		local iconaVouiqui = icona
		if not icona:match('%[') then
			local alt = args.alt or args['lègenda'] or ''
			if alt:lower() == cfg.public then
				alt = '|link='
			end
			local talye = args['talye icôna'] or cfg.talyeIcona
			iconaVouiqui = mw.ustring.format(cfg.formatLim, icona, talye, alt)
		end
		cells
			:tag('div')
				:addClass('benda-cell benda-icona')
				:cssText(args.styleImage) --En atendent
				:wikitext(iconaVouiqui)
			:done()
	elseif backgroundIcona ~= '' and args.forma == 'seccion' then
		texto = '&ensp;' .. texto
	end
	cells
		:tag('div')
			:addClass('benda-cell ' .. backgroundIcona)
			:cssText(args.stiloTexto) --En atendent
			:wikitext(texto)
			:newline()
		:done()
		
	res	:node(cells)
	
	if trim(args['quârque-ren de més']) then
		res	:tag('p')   
				:wikitext(args['quârque-ren de més'])
			:done()
	end
	
	return tostring(res)
end

function p._bendaSemonce(args)
	local htmlTexto = mw.html.create()

	htmlTexto
		:tag('strong')
			:addClass('benda-titro')
			:wikitext(trim(args.titro) or fota('titro', cfg.fotaArgument))
		:done()
		:wikitext(args.date)
		:newline():newline()
		:wikitext(args.texto)

	local parametros = {
		forma = 'articllo',
		nivel = args.nivel,
		id = args.id,
		class = args.class,
		['icôna'] = trim(args['icôna']) or trim(args['icôna-complicâye']) or args.nivel,
		alt = args.alt or args['lègenda'],
		texto = tostring(htmlTexto),
		['quârque-ren de més'] = args['quârque-ren de més']
	}

	return p._benda(parametros)
end

function p._bendaSeccion(args)
	local res = mw.html.create('div')
	local icona = trim(args.emage) or trim(args['icôna'])
	local backgroundIcona = class.icones[icona] or ''
	local texto = '&ensp;' .. (trim(args.texto) or fota('texto', cfg.fotaArgument))

	res	:addClass('benda-seccion')
		:addClass(class.nivel[args.nivel] or cfg.nivel)
	
	if icona and backgroundIcona == '' then
		local iconaVouiqui = icona
		if not icona:match('%[') then
			local alt = args.alt or args['lègenda'] or ''
			if alt:lower() == cfg.publico then
				alt = '|link='
			end
			iconaVouiqui = mw.ustring.format(cfg.formatLim, icona, 'text-top|20x17', alt)
		end
		res	:wikitext(iconaVouiqui)
			:done()
	end
	res	:addClass(backgroundIcona)
		:wikitext(texto)
		:done()

	return tostring(res)
end

p['_començon'] = function (args)
	local paramComencon = mw.loadData('Module:Benda/Començon')
	local comencons, maneyanceFota = {}, {}
	local frame = mw.getCurrentFrame()
	local parametros = {
		icona = 'icôna',
		chousa = 'chousa',
		dapres = 'd’aprés',
		categ = 'catègoria',
		tipo  = 'tipo',
		message = 'mèssâjo'
	}
	local getComenconTable = function( theme )
		-- rècupère los paramètros liyês u tèmo, dês lo module:Benda/Començon ou ben lo modèlo:Començon/paramètros theme
		local modelo = 'Modèlo:Començon/paramètros ' .. theme
		local params
		if paramComencon[theme] then
			params = { nom = theme }
			for n, v in pairs(paramComencon[theme]) do
				params[n] = v
			end
		elseif mw.title.new( modelo ).exists then
			params = { nom = theme }
			for n, v in pairs(parametros)  do
				local param = frame:expandTemplate{title = modelo, args = {v}}
				params[n] = trim(param)
			end
		end
		return params
	end
	local comenconParam = function( i, param )
		-- fonccion que retôrne la valor de param por lo començon i, ou ben na valor per dèfôt.
		return comencons[i] and comencons[i][param] or paramComencon[''][param]
	end
	
	for i, theme in ipairs(args) do
		-- rècupèracion des paramètros de tôs los tèmos
		theme = trim(theme)
		if theme then
			local t = getComenconTable(theme)
			if t then
				table.insert(comencons, t)
			else
				table.insert(
					maneyanceFota, 
					fota(theme, cfg.fotaComenconParam, 'div')
				)
			end
		end
	end
	
	local emages, titros, categs = {}, {}, {}
	local talyeIcona = cfg.talyeIcona
	if #comencons > 3 then
		talyeIcona = '35x25'
	end
	for i, comencon in ipairs(comencons) do
		-- mês'en fôrma de les émâges
		if comencon.icona then
			table.insert(
				emages, 
				cfg.formatLim:format(
					comencon.icona, 
					talyeIcona, 
					comencon.altIcona or ''
				)
			)
		end
		if math.fmod(#comencons, 3) == 1 and (#comencons - i) == 2	
			or math.fmod(i, 3) == 0 and (#comencons - i) > 1
		then
			-- sur un mouél de legnes s'y at més de 3 émâges, avouéc por lo muens doves émâges sur la dèrriére legne.
			table.insert(emages,'<br>')
		end
		
		if i > 1 and comencon.tipo and comencon.tipo ~= paramComencon[''].tipo then
			-- remplace "Cél articllo per "Cél portâl" ou ben ôtro en fonccion du premiér tèmo.
			table.insert(
				maneyanceFota, 
				fota(comencon.nom, cfg.fotaComenconTipo, 'div')
			)
		end
		
		-- rècupère los difèrents noms de tèmo
		table.insert(titros, comencon.chousa)
		
		-- mês'en fôrma de les catègories
		if comencon.categ then 
			table.insert( categs, cfg.comenconCateg:format( comencon.categ ) )
		end
	end
	
	local emage 
	if trim(args['icôna']) then
		local theme = getComenconTable(args['icôna'])
		if theme and theme.icona then
			emage = cfg.formatLim:format(theme.icona, talyeIcona, theme.altIcona or '')
		end
	elseif #emages == 1 then
		emage = emages[1]
	elseif #emages > 1 then
		emage = cfg.comenconEmage:format(table.concat(emages, ' '))
	end
	
	local titro
	if #titros > 0 then
		titro = cfg.comenconTitroChousa:format( 
			comenconParam(1, 'tipo'), 
			mw.text.listToText(titros)
		)
	else
		titro = cfg.comenconTitro:format(comenconParam(1, 'tipo'))
	end
	local texto
	if #comencons == 0 then
		texto = (comenconParam(1, 'mèssâjo')) .. '.'
	else
		texto = (comenconParam(1, 'mèssâjo')) .. ' ' .. (comenconParam(1, 'd’aprés')) .. '.'
	end
	
	local parametros = {
		nivel = 'començon',
		['icôna'] = emage,
		titro = titro,
		texto = texto,
		id = args.id
	}
	
	local categ = ''
	if not yesno(args.nocat) then
		categ = table.concat(categs)
		if categ == '' then
			categ = cfg.comenconCateg:format('')
		end
	end
	
	local messajoFota = table.concat(maneyanceFota)
	if messajoFota:len() > 0 and not yesno(args.nocat) then
		messajoFota = messajoFota .. '[[Catègorie:Pâge qu’emplèye un modèlo avouéc na sintaxa fôssa|Començon]]'
	end

	return p._bendaSemonce(parametros) .. messajoFota .. categ
end

-- Raponsa dedens la trâbla p de les fonccions apelâyes per los
-- modèlos avouéc un adaptator de fonccion.
local function adaptator(nomFonccion)
	return function (frame)
		local args
		if frame.args.texto or frame.args.titro then
			args = frame.args
		else
			args = frame:getParent().args
		end
		return p[nomFonccion](args)
	end
end
 
local nomsFonccion = {'benda', 'bendaSemonce', 'bendaSeccion', 'començon' } 
for _, nomFonccion in ipairs(nomsFonccion) do
	p[nomFonccion] = adaptator('_' .. nomFonccion)
end

return p