Diferencia entre revisiones de «Módulo:Listas»

Contenido eliminado Contenido añadido
Función adicional para obtener el primer elemento de la lista ordenada
Arreglo para que en caso de que la última parte comience por «i» o «y», la conjunción final se modifique automáticamente por «e» en lugar de «y» [ejemplo: «Alemania e Italia»]
Línea 5:
-- Solo se obtienen los elementos informados.
function listas.ObtenerElementosLista(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']
conjuncion=frame.args['conjunción'] or Argumentos['conjunción']
local ElementosLista = {}
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
 
if not Argumentos[1] then
-- Añadir el enlace si no incluye ya uno
Argumentos = parent.args;
local enlazar = frame.args.enlazar or parent.args.enlazar
end
 
local categoria = if mw.ustring.find(Argumentos[i], '%[%[categoría')] then enlazar =or 'no' end
local ordenar = Argumentos['ordenar'] or ''
 
if enlazar == 'sí' then
separador = frame.args['separador'] or Argumentos['separador']
-- Desambiguar eliminando el texto ente paréntesis del argumento i-ésimo si es de la forma
conjuncion = frame.args['conjunción'] or Argumentos['conjunción']
-- "Texto (lo que sea)".
 
-- Esto solo se hará si después de los paréntesis no hay nada. Ejemplos:
local ElementosLista = {}
-- Alfonso Albacete (director) --> Alfonso Albacete
 
-- [[Carlos Vera (árbitro de fútbol)|Carlos Vera]] --> [[Carlos Vera (árbitro de fútbol)|Carlos Vera]]
local i = 1;
local j = 0;
TextoAMostrar=Argumentos[i]:match('^(.*)%s%(.*%)$') or Argumentos[i]
while Argumentos[i] do
local TextoAMostrar
--Obtener el espacio de nombres de los argumentos
if Argumentos[i] and not Argumentos[i]:match('^%s*$') then
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
j = j + 1
 
if espacio_nombres == '' then
-- Añadir el enlace si no incluye ya uno
--Se accede a la función con el argumento espacio_nombres pero está sin informar
local enlazar = frame.args.enlazar or parent.args.enlazar
if Argumentos[i] == TextoAMostrar then
 
ElementosLista[j] = mw.ustring.format('[[%s]]',TextoAMostrar)
if mw.ustring.find(Argumentos[i], '%[%[') then
else
enlazar = 'no'
ElementosLista[j] = mw.ustring.format('[[%s|%s]]',Argumentos[i],TextoAMostrar)
end
 
else
if enlazar == 'sí' then
--Se accede sin el espacio de nombres (en cuyo caso se toma el espacio de nombres desde global) o informado.
-- Desambiguar eliminando el texto ente paréntesis del argumento i-ésimo si es de la forma
-- "Texto (lo que sea)".
--Obtener el nombre de la página (eliminando el espacio de nombres si lo tiene). Similar a {{PAGENAME:Argumentos[i]}}
-- Esto solo se hará si después de los paréntesis no hay nada. Ejemplos:
--Por ejemplo, si argumentos[i] vale "Plantilla:A" se informa nombrepagina con "A".
-- Alfonso Albacete (director) --> Alfonso Albacete
local nombrepagina
-- [[Carlos Vera (árbitro de fútbol)|Carlos Vera]] --> [[Carlos Vera (árbitro de fútbol)|Carlos Vera]]
 
local noError, pageObject = pcall(mw.title.new, Argumentos[i])
TextoAMostrar=Argumentos[i]:match('^(.*)%s%(.*%)$') or Argumentos[i]
 
if noError then
--Obtener el espacio de nombres de los argumentos
nombrepagina = pageObject.text
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
else
 
nombrepagina = Argumentos[i]
if espacio_nombres == '' then
end
--Se accede a la función con el argumento espacio_nombres pero está sin informar
if Argumentos[i] == TextoAMostrar then
-- Enlazar tomando como espacio de nombres el recibido en el argumento o el global.
ElementosLista[j] = mw.ustring.format( '[[:%s:%s|%s]]',espacio_nombres,nombrepagina, TextoAMostrar)
else
end
ElementosLista[j] = mw.ustring.format('[[%s|%s]]', Argumentos[i], TextoAMostrar)
else
end
TextoAMostrar = Argumentos[i]
else
ElementosLista[j] = TextoAMostrar
--Se accede sin el espacio de nombres (en cuyo caso se toma el espacio de nombres desde global) o informado.
end
 
--Obtener el nombre de la página (eliminando el espacio de nombres si lo tiene). Similar a {{PAGENAME:Argumentos[i]}}
-- Añadir el delimitador
--Por ejemplo, si argumentos[i] vale "Plantilla:A" se informa nombrepagina con "A".
local delimitador = frame.args.delimitador or parent.args.delimitador or frame.args.delim or parent.args.delim
local nombrepagina
 
if delimitador then ElementosLista[j] = delimitador .. ElementosLista[j] .. delimitador end
local noError, pageObject = pcall(mw.title.new, Argumentos[i])
 
--Añadir la categoría
if categoria ~= ''noError then
nombrepagina = pageObject.text
-- Utilizar argumentos[i] si existe la correspondiente categoría
else
local CategoriaElemento = existeCategoria(categoria:gsub('$1',Argumentos[i]))
nombrepagina = Argumentos[i]
end
-- Si no existe ver si existe la categoría eliminando el texto entre paréntesis
 
if not CategoriaElemento and TextoAMostrar ~= Argumentos[i] then
-- Enlazar tomando como espacio de nombres el recibido en el argumento o el global.
CategoriaElemento = existeCategoria(categoria:gsub('$1',TextoAMostrar))
ElementosLista[j] = mw.ustring.format('[[:%s:%s|%s]]', espacio_nombres, nombrepagina, TextoAMostrar)
end
end
if CategoriaElemento then
else
if ordenar == '' then
TextoAMostrar = Argumentos[i]
ElementosLista[j] = ElementosLista[j] .. '[[' .. CategoriaElemento .. ']]'
ElementosLista[j] = TextoAMostrar
else
end
ElementosLista[j] = ElementosLista[j] .. '[[' .. CategoriaElemento .. '|' .. ordenar .. ']]'
 
end
-- Añadir el delimitador
end
local delimitador = frame.args.delimitador or parent.args.delimitador or frame.args.delim or parent.args.delim
end
 
end
if delimitador then
ElementosLista[j] = delimitador .. ElementosLista[j] .. delimitador
i = i + 1;
end
 
--Añadir la categoría
return ElementosLista
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
ElementosLista[j] = ElementosLista[j] .. '[[' .. CategoriaElemento .. ']]'
else
ElementosLista[j] = ElementosLista[j] .. '[[' .. CategoriaElemento .. '|' .. ordenar .. ']]'
end
end
end
end
 
i = i + 1;
end
 
return ElementosLista
end
 
-- lista con los elementos separados por comas
function listas.lista(frame)
-- Obtener los elementos de la lista informados.
local ElementosLista= listas.ObtenerElementosLista(frame)
 
if not ElementosLista[1] then
return
end
 
if not separador and not conjuncion then
separador = ','
return mw.text.listToText(ElementosLista,', ',' y ')
conjuncion = 'y'
elseif separador and not conjuncion then
conjuncion = separador
return mw.text.listToText(ElementosLista, separador, separador)
end
else
-- Corregir el separador
if separador == ',' then
separador= ', '
end
-- Corregir la conjunción
if conjuncion == 'o' then
conjuncion = ' o '
elseif conjuncion == 'y' then
conjuncion = frame:preprocess(' {{Y-e|{{Desvincular|' .. ElementosLista[#ElementosLista] .. '}}|sin texto}} ') -- ' y '
conjuncion = ' y '
end
return mw.text.listToText(ElementosLista, separador, conjuncion)
end
end
 
function listas.listahtml(frame)
local parent = frame:getParent();
 
-- Obtener los elementos de la lista informados delimitándolos con
local ElementosLista= listas.ObtenerElementosLista(frame)
if not ElementosLista[1] then
return
end
 
-- Añadir a los elementos de la lista <li> y </li>
local i = 1;
while ElementosLista[i] do
ElementosLista[i] = '<li>' .. ElementosLista[i] .. '</li>'
i = i + 1;
end
-- Añadir la clase en su caso
local clase = frame.args.clase or parent.args.clase
local final = '<ul>' .. table.concat( ElementosLista ) .. '</ul>'
if clase then
if clase then
return '<div' .. ' class="' .. clase ..'">' .. '<ul>' .. table.concat( ElementosLista ) .. '</ul></div>'
final = '<div class="' .. clase ..'">' .. final .. '</div>'
else
end
--Devolver la lista
return final
return '<ul>' .. table.concat( ElementosLista ) .. '</ul>'
end
end
 
function listas.primero(frame)
local ElementosLista= listas.ObtenerElementosLista(frame)
if not ElementosLista[1] then
return
end
table.sort( ElementosLista )
return ElementosLista[1]