Jump to content
Menú alternativo
Alternar el menú de preferencias
Menú alternativo personal
No has accedido
Tu dirección IP será visible si haces alguna edición

La documentación para este módulo puede ser creada en Módulo:Navegación/doc

-- Módulo:Navegación — cajas de navegación plegables al pie de los artículos.
-- Uso: {{Navegación|título=...|color=negro|grupo1=...|lista1=...|grupo2=...}} (grupos sin límite)
local p = {}

local COLORES = {
	azul = true, rojo = true, negro = true, dorado = true, verde = true, morado = true, gris = true,
}

local function limpio(v)
	v = v and mw.text.trim(v)
	return (v ~= '' and v) or nil
end

function p.caja(frame)
	local args = frame:getParent().args
	local titulo = limpio(args['título']) or limpio(args.titulo) or 'Navegación'
	local color = limpio(args.color)
	color = color and COLORES[mw.ustring.lower(color)] and mw.ustring.lower(color) or 'azul'

	-- Números de grupo presentes, en orden
	local numeros = {}
	for k, _ in pairs(args) do
		local n = type(k) == 'string' and (k:match('^grupo(%d+)$') or k:match('^lista(%d+)$'))
		if n then
			numeros[tonumber(n)] = true
		end
	end
	local orden = {}
	for n, _ in pairs(numeros) do
		table.insert(orden, n)
	end
	table.sort(orden)

	local caja = mw.html.create('div')
		:addClass('mc-nav mc-nav--' .. color .. ' mw-collapsible')
		:attr('role', 'navigation')
		:attr('aria-label', mw.text.killMarkers(titulo))
		:attr('data-expandtext', 'mostrar')
		:attr('data-collapsetext', 'ocultar')
	local plegada = limpio(args.plegada)
	if plegada == 'sí' or plegada == 'si' or plegada == 'yes' then
		caja:addClass('mw-collapsed')
	end

	local cab = caja:tag('div'):addClass('mc-nav__titulo')
	if limpio(args.enlace) then
		cab:wikitext('[[' .. limpio(args.enlace) .. '|' .. titulo .. ']]')
	else
		cab:wikitext(titulo)
	end

	local cuerpo = caja:tag('div'):addClass('mw-collapsible-content')
	if limpio(args.arriba) then
		cuerpo:tag('div'):addClass('mc-nav__arriba'):newline():wikitext(limpio(args.arriba)):newline()
	end
	for _, n in ipairs(orden) do
		local grupo = limpio(args['grupo' .. n])
		local lista = limpio(args['lista' .. n])
		if lista then
			local fila = cuerpo:tag('div'):addClass('mc-nav__fila')
			if grupo then
				fila:tag('div'):addClass('mc-nav__grupo'):wikitext(grupo)
			else
				fila:addClass('mc-nav__fila--sin-grupo')
			end
			fila:tag('div'):addClass('mc-nav__lista'):newline():wikitext(lista):newline()
		end
	end
	if limpio(args.abajo) then
		cuerpo:tag('div'):addClass('mc-nav__abajo'):newline():wikitext(limpio(args.abajo)):newline()
	end

	return frame:extensionTag('templatestyles', '', { src = 'Plantilla:Navegación/styles.css' }) .. tostring(caja)
end

return p