Módulo:Listas
Ir a la navegación
Ir a la búsqueda
Este módulo devuelve varias clases de listas.
Uso
{{#invoke:listas|función|primer elemento|segundo elemento|...|último elemento|parámetros opcionales}}
Funciones
Las funciones son:
lista
Devuelve una lista de elementos separados por comas. Por ejemplo:
{{#Invoke:listas|lista|elemento1|elemento2|elemento3}}
produce:
- elemento1, elemento2 Esta plantilla no acepta corchetes de enlace en el primer parámetro. Para enlazar el resultado agrega la palabra «enlazar» como segundo parámetro. elemento3
listahtml
Devuelve una lista html. En el ejemplo anterior, cambiando la función:
{{#Invoke:listas|listahtml|elemento1|elemento2|elemento3}}
produce:
- elemento1
- elemento2
- elemento3
primero
Devuelve el primer elemento de la lista ordenada alfabéticamente. Por ejemplo:
{{#Invoke:listas|primero|gato|perro|conejo}}
produce:
- conejo
Parámetros opcionales
- enlazar: Si se informa con "sí" se genera un enlace a cada elemento de la lista.
- La plantilla automáticamente añade a cada elemento el espacio de nombres donde se utiliza la plantilla. Por ejemplo,
{{#Invoke:listas|lista|enlazar=sí|listas|math}}
añade el espacio de nombre "Módulo" por haberse utilizado en Módulo:Listas/doc:
- Para evitarlo puede utilizarse el parámetro espacio de nombres sin informar. Por ejemplo,
{{#Invoke:listas|lista|enlazar=sí|espacio de nombres=|listas|math}}
produce:
- La plantilla automáticamente desambigua. Así si un elemento incluye texto entre paréntesis no lo muestra aunque en caso de enlazar se enlaza al nombre completo del elemento. Por ejemplo,
{{#Invoke:listas|lista|enlazar=sí|espacio de nombres=|Bill Morrison (director)|elemento2|elemento3}}
muestra "Bill Morrison" pero enlaza a Bill Morrison (director):- Bill Morrison, elemento2 Esta plantilla no acepta corchetes de enlace en el primer parámetro. Para enlazar el resultado agrega la palabra «enlazar» como segundo parámetro. elemento3
- Si uno de los elementos ya está enlazado se muestra correctamente. Por ejemplo
{{#Invoke:listas|lista|enlazar=sí|espacio de nombres=|[[Bill Morrison]]|elemento2|elemento3}}
muestra Bill Morrison en vez de [[Bill Morrison]]:- Bill Morrison, elemento2 Esta plantilla no acepta corchetes de enlace en el primer parámetro. Para enlazar el resultado agrega la palabra «enlazar» como segundo parámetro. elemento3
- La plantilla automáticamente añade a cada elemento el espacio de nombres donde se utiliza la plantilla. Por ejemplo,
- separador: Cadena que separa los elementos de la lista. Si no se utiliza se toma por defecto como separador ", ". Por ejemplo
{{#Invoke:listas|lista|separador=<br/>|elemento1|elemento2|elemento3}}
muestra:- elemento1
elemento2
elemento3
- elemento1
- conjunción: Cadena que separa el último elemento de la lista. Si no se utiliza se toma por defecto el separador. Por ejemplo
{{#Invoke:listas|lista|conjunción=o|elemento1|elemento2|elemento3}}
muestra:- elemento1, elemento2 o elemento3
- delimitador: Se utiliza para mostrar los elementos entre delimitadores. Por ejemplo para mostrar los elementos entre cursivas se puede hacer:
{{#Invoke:listas|lista|enlazar=no|delimitador=''|El gran robo del tren (novela)|Caída libre (novela)||Jumper (novela)|}}
- El gran robo del tren (novela), Caída libre (novela) Esta plantilla no acepta corchetes de enlace en el primer parámetro. Para enlazar el resultado agrega la palabra «enlazar» como segundo parámetro. Jumper (novela)
- clase: Si se utiliza la función
listahtml
, clase CSS de la lista. Los valores normales son "plainlist" para listas sin viñetas y "hlist" para listas horizontales. Por ejemplo,{{#Invoke:listas|listahtml|enlazar=sí|clase=hlist|elemento1|elemento2}}
produce:
- categoría:. Incluye la página donde se invoca al módulo en la categoría correspondiente si existe. Por ejemplo
{{#Invoke:listas|lista|enlazar=sí|espacio de nombres=|categoría=Películas dirigidas por $1|Aleksandar Petrović (director de cine)}}
incluirá la página en la categoría Categoría:Películas dirigidas por Aleksandar Petrović (director de cine) si existe. Si no es así la incluirá en la categoría Categoría:Películas dirigidas por Aleksandar Petrović si existe. Si no existe no se incluirá en ninguna de las categorías.- Puede usarse opcionalmente un parámetro llamado ordenar.
Plantillas que usan el módulo
- Plantilla:Ejemplo plantilla
- Plantilla:Ejemplo plantilla
- Plantilla:Ejemplo plantilla
- Plantilla:Ejemplo plantilla
local listas = {}
local existeCategoria = require('Módulo:Páginas').existeCategoria
-- Función que devuelve los elementos de la lista.
-- 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
-- Añadir el enlace si no incluye ya uno
local enlazar = frame.args.enlazar or parent.args.enlazar
if mw.ustring.find(Argumentos[i], '%[%[') then
enlazar = 'no'
end
if enlazar == 'sí' then
-- Desambiguar eliminando el texto ente paréntesis del argumento i-ésimo si es de la forma
-- "Texto (lo que sea)".
-- Esto solo se hará si después de los paréntesis no hay nada. Ejemplos:
-- Alfonso Albacete (director) --> Alfonso Albacete
-- [[Carlos Vera (árbitro de fútbol)|Carlos Vera]] --> [[Carlos Vera (árbitro de fútbol)|Carlos Vera]]
TextoAMostrar = Argumentos[i]:match('^(.*)%s%(.*%)$') or Argumentos[i]
--Obtener el espacio de nombres 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 con el argumento espacio_nombres pero está sin informar
if Argumentos[i] == TextoAMostrar then
ElementosLista[j] = mw.ustring.format('[[%s]]', TextoAMostrar)
else
ElementosLista[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.
ElementosLista[j] = mw.ustring.format('[[:%s:%s|%s]]', espacio_nombres, nombrepagina, TextoAMostrar)
end
else
TextoAMostrar = Argumentos[i]
ElementosLista[j] = mw.text.trim( 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
ElementosLista[j] = delimitador .. ElementosLista[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
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 = ','
conjuncion = 'y'
elseif separador and not conjuncion then
conjuncion = separador
end
-- 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 = ' ' .. conjuncion .. ' '
end
return mw.text.listToText(ElementosLista, separador, conjuncion)
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
final = '<div class="' .. clase ..'">' .. final .. '</div>'
end
return final
end
function listas.primero(frame)
local ElementosLista= listas.ObtenerElementosLista(frame)
if not ElementosLista[1] then
return
end
table.sort( ElementosLista )
return ElementosLista[1]
end
return listas