Módulu:Llistes
La documentación pa esti módulu pue crease en Módulu:Llistes/usu
local llistes = {}
local existeCategoria = require('Módulu:Páxines').existeCategoria
-- Función que devuelve los elementos de la llista.
-- Solo s'obtienen los elementos informaos.
function llistes.ObtenerElementosLlista(frame)
local Argumentos = frame.args;
local parent = frame:getParent();
if not Argumentos[1] then
Argumentos = parent.args;
end
local categoria=Argumentos['categoría'] or ''
local ordenar =Argumentos['ordenar'] or ''
separador =frame.args['separador'] or Argumentos['separador']
conxuncion=frame.args['conxunción'] or Argumentos['conxunción']
local ElementosLlista = {}
local i = 1;
local j=0;
while Argumentos[i] do
local TextoAMostrar
if Argumentos[i] and not Argumentos[i]:match('^%s*$') then
j=j+1
-- Añadir l'enllaz si nun incluye ya unu
local enllazar = frame.args.enllazar or parent.args.enllazar
if mw.ustring.find(Argumentos[i], '%[%[') then enllazar = 'no' end
if enllazar == 'sí' then
-- Dixebrar desaniciando'l testu ente paréntesis del argumentu i-ésimu si ye de la forma
-- "Testu (lo que seya)".
-- Esto solo va facese si después de los paréntesis nun hai nada. Exemplos:
-- Alfonso Albacete (director) --> Alfonso Albacete
-- [[Carlos Vera (árbitru de fútbol)|Carlos Vera]] --> [[Carlos Vera (árbitro de fútbol)|Carlos Vera]]
TextoAMostrar=Argumentos[i]:match('^(.*)%s%(.*%)$') or Argumentos[i]
--Obtener l'espaciu de nomes de los argumentos
local espacio_nombres=frame.args.nspace or parent.args.nspace or frame.args['espacio de nombres'] or parent.args['espacio de nombres'] or mw.title.getCurrentTitle().nsText
if espacio_nombres == '' then
--Se accede a la función col argumentu espacio_nombres pero ta ensin informar
if Argumentos[i] == TextoAMostrar then
ElementosLlista[j] = mw.ustring.format('[[%s]]',TextoAMostrar)
else
ElementosLlista[j] = mw.ustring.format('[[%s|%s]]',Argumentos[i],TextoAMostrar)
end
else
--Se accede sin el espacio de nombres (en cuyo caso se toma el espacio de nombres desde global) o informado.
--Obtener el nombre de la página (eliminando el espacio de nombres si lo tiene). Similar a {{PAGENAME:Argumentos[i]}}
--Por ejemplo, si argumentos[i] vale "Plantilla:A" se informa nombrepagina con "A".
local nombrepagina
local noError, pageObject = pcall(mw.title.new, Argumentos[i])
if noError then
nombrepagina = pageObject.text
else
nombrepagina = Argumentos[i]
end
-- Enlazar tomando como espacio de nombres el recibido en el argumento o el global.
ElementosLlista[j] = mw.ustring.format( '[[:%s:%s|%s]]',espacio_nombres,nombrepagina,TextoAMostrar)
end
else
TextoAMostrar = Argumentos[i]
ElementosLlista[j] = TextoAMostrar
end
-- Añadir el delimitador
local delimitador = frame.args.delimitador or parent.args.delimitador or frame.args.delim or parent.args.delim
if delimitador then ElementosLlista[j] = delimitador .. ElementosLlista[j] .. delimitador end
--Añadir la categoría
if categoria ~= '' then
-- Utilizar argumentos[i] si existe la correspondiente categoría
local CategoriaElemento = existeCategoria(categoria:gsub('$1',Argumentos[i]))
-- Si no existe ver si existe la categoría eliminando el texto entre paréntesis
if not CategoriaElemento and TextoAMostrar ~= Argumentos[i] then
CategoriaElemento = existeCategoria(categoria:gsub('$1',TextoAMostrar))
end
if CategoriaElemento then
if ordenar == '' then
ElementosLlista[j] = ElementosLlista[j] .. '[[' .. CategoriaElemento .. ']]'
else
ElementosLlista[j] = ElementosLlista[j] .. '[[' .. CategoriaElemento .. '|' .. ordenar .. ']]'
end
end
end
end
i = i + 1;
end
return ElementosLlista
end
-- llista con los elementos separados por comas
function llistes.llista(frame)
-- Obtener los elementos de la llista informados.
local ElementosLlista= llistes.ObtenerElementosLlista(frame)
if not ElementosLlista[1] then return end
if not separador and not conxuncion then
return mw.text.listToText(ElementosLlista,', ',' y ')
elseif separador and not conxuncion then
return mw.text.listToText(ElementosLlista, separador, separador)
else
-- Correxir el separador
if separador == ',' then
separador= ', '
end
-- Correxir la conxunción
if conxuncion == 'o' then
conxuncion = ' o '
elseif conxuncion == 'y' then
conxuncion = ' y '
end
return mw.text.listToText(ElementosLlista, separador, conxuncion)
end
end
function llistes.llistahtml(frame)
local parent = frame:getParent();
-- Obtener los elementos de la llista informados delimitándolos con
local ElementosLlista= llistes.ObtenerElementosLlista(frame)
if not ElementosLlista[1] then return end
-- Añadir a los elementos de la llista <li> y </li>
local i = 1;
while ElementosLlista[i] do
ElementosLlista[i] = '<li>' .. ElementosLlista[i] .. '</li>'
i = i + 1;
end
-- Añadir la clase en su caso
local clase = frame.args.clase or parent.args.clase
if clase then
return '<div' .. ' class="' .. clase ..'">' .. '<ul>' .. table.concat( ElementosLlista ) .. '</ul></div>'
else
--Devolver la llista
return '<ul>' .. table.concat( ElementosLlista ) .. '</ul>'
end
end
return llistes