יחידה:רשימה

מתוך ויקיפדיה, האנציקלופדיה החופשית

ניתן ליצור תיעוד על היחידה הזאת בדף יחידה:רשימה/תיעוד

local list = {}
-- Función que devuelve los elementos de la lista.
-- Solo se obtienen los elementos informados.
function list.GetListElements(frame)
	local Arguments = frame.args;
	local parent     = frame:getParent();
	if not Arguments[1] then
		Arguments = parent.args;
	end

	local order   = Arguments['מיון']   or ''

	separator  = frame.args['separator'] or Arguments['הפרדה']
	separatorSpace  = frame.args['separatorSpace'] or Arguments['ריווח']
	
	local ListElements = {}

	local i = 1;
	local j = 0;
	while Arguments[i] do
		local TextToShow
		if Arguments[i] and not Arguments[i]:match('^%s*$') then
			j = j + 1

			-- Añadir el enlace si no incluye ya uno
			local link = frame.args.link or Arguments['קישור']

			if mw.ustring.find(Arguments[i], '%[%[') then
				link = 'לא'
			end

			if link == 'כן' 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]]

				TextToShow = Arguments[i]:match('^(.*)%s%(.*%)$') or Arguments[i]

				--Obtener el espacio de nombres de los Arguments
				local namespace = 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 namespace == '' then
					--Se accede a la función con el argumento namespace pero está sin informar
					if Arguments[i] == TextToShow then
						ListElements[j] = mw.ustring.format('[[%s]]', TextToShow)
					else
						ListElements[j] = mw.ustring.format('[[%s|%s]]', Arguments[i], TextToShow)
					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:Arguments[i]}}
					--Por ejemplo, si Arguments[i] vale "Plantilla:A" se informa pagename con "A".
					local pagename

					local noError, pageObject = pcall(mw.title.new, Arguments[i])

					if noError then
						pagename = pageObject.text
					else
						pagename = Arguments[i]
					end

					-- link tomando como espacio de nombres el recibido en el argumento o el global.
					ListElements[j] = mw.ustring.format('[[:%s:%s|%s]]', namespace, pagename, TextToShow)
				end
			else
				TextToShow     = Arguments[i]
				ListElements[j] = mw.text.trim( TextToShow )
			end
		end

		i = i + 1;
	end

	return ListElements
end

-- lista con los elementos separados por comas
function list.list(frame)
	-- Obtener los elementos de la lista informados.
	local ListElements= list.GetListElements(frame)

	if not ListElements[1] then
		return
	end

	if not separator then
		separator  = ','
	end

	if separatorSpace then
		separator = ' ' .. separator .. ' '
	end
	if separator == ',' then
		separator= ', '
	end
	
	return mw.text.listToText(ListElements, separator,separator)
end

function list.htmllist(frame)
	local parent = frame:getParent();

	-- Obtener los elementos de la lista informados delimitándolos con 
	local ListElements= list.GetListElements(frame)
	if not ListElements[1] then
		return
	end

	-- Añadir a los elementos de la lista <li> y </li>
	local i = 1;
	while ListElements[i] do
		ListElements[i] = '<li>' .. ListElements[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( ListElements ) .. '</ul>'
	if clase then
		final = '<div class="' .. clase ..'">' .. final .. '</div>'
	end
	return final
end

return list