For faster navigation, this Iframe is preloading the Wikiwand page for Módulo:Listas.

Módulo:Listas

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 y 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:
    listas y math
    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:
    listas y math
    • 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 y 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 y elemento3
  • 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
  • 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) y 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:
    • elemento1
    • elemento2
  • 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

  • ((en varias líneas|entrada1|entrada2|entrada3)) → entrada1
    entrada2
    entrada3
  • ((lista|entrada1|entrada2|entrada3)) → entrada1, entrada2 y entrada3
  • ((lista de enlaces|entrada1|entrada2|entrada3)) → entrada1, entrada2 y entrada3
  • ((lista sin viñetas|entrada1|entrada2|entrada3))
    • entrada1
    • entrada2
    • entrada3

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
{{bottomLinkPreText}} {{bottomLinkText}}
Módulo:Listas
Listen to this article

This browser is not supported by Wikiwand :(
Wikiwand requires a browser with modern capabilities in order to provide you with the best reading experience.
Please download and use one of the following browsers:

This article was just edited, click to reload
This article has been deleted on Wikipedia (Why?)

Back to homepage

Please click Add in the dialog above
Please click Allow in the top-left corner,
then click Install Now in the dialog
Please click Open in the download dialog,
then click Install
Please click the "Downloads" icon in the Safari toolbar, open the first download in the list,
then click Install
{{::$root.activation.text}}

Install Wikiwand

Install on Chrome Install on Firefox
Don't forget to rate us

Tell your friends about Wikiwand!

Gmail Facebook Twitter Link

Enjoying Wikiwand?

Tell your friends and spread the love:
Share on Gmail Share on Facebook Share on Twitter Share on Buffer

Our magic isn't perfect

You can help our automatic cover photo selection by reporting an unsuitable photo.

This photo is visually disturbing This photo is not a good choice

Thank you for helping!


Your input will affect cover photo selection, along with input from other users.

X

Get ready for Wikiwand 2.0 🎉! the new version arrives on September 1st! Don't want to wait?