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