Module:Benda
Apparence
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 = ' ' .. 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 = ' ' .. (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