Module:Navigation header

local p = {}

local standardIcons = require('Module:Standard icons')
local shortcut = require('Module:Shortcut')

local function getIcon(key)
	local iconTable = standardIcons.getIconTable()
	return iconTable[key] or key
end

function p._main(args)
	local icon = {}
	local label = {}
	local itemType = {}
	
	do
		local i = 1
		while args["icon" .. i] or args["type" .. i] or args["label" .. i] do
			icon[i] = args["icon" .. i] or getIcon(args["type" .. i])
			label[i] = args["label" .. i] or ""
			itemType[i] = args["type" .. i] or ""
			i = i + 1
		end
	end


	local theme = args["theme"] or "blue-theme"
	if theme ~= "gray-theme" and theme ~= "blue-theme" then
		theme = "blue-theme"
	end

	local output = {}
	output[#output + 1] = string.format('<div class="navigation-header %s"><div role="navigation" class="navigation-header-tabs">', theme)

	local shortcutParam = args["shortcut"]
	if shortcutParam then
		local shortcutBox = shortcut._main({shortcutParam})
		output[#output + 1] = string.format('<div class="navigation-header-shortcut">%s</div>', shortcutBox)
	end

	output[#output + 1] = '<ul>'

	-- Add leadtab if leadtab-label is defined
	local leadtabLabel = args["leadtab-label"]
	if leadtabLabel then
		local leadtabIcon = args["leadtab-icon"]
		if leadtabIcon then
			output[#output + 1] = string.format(
				'<li id="leadtab"><div class="navigation-header-icon">[[File:%s|x18px|link=]]</div>&nbsp;%s</li>',
				leadtabIcon,
				leadtabLabel
			)
		else
			output[#output + 1] = string.format(
				'<li id="leadtab">%s</li>',
				leadtabLabel
			)
		end
	end

	for j = 1, #icon do
		output[#output + 1] = string.format(
			'<li id="%s"><div class="navigation-header-icon">[[File:%s|x18px|link=]]</div>&nbsp;%s</li>',
			itemType[j],
			icon[j],
			label[j]
		)
	end

	output[#output + 1] = '</ul>'
	output[#output + 1] = '</div></div>'

	return mw.getCurrentFrame():extensionTag{
		name = 'templatestyles', args = { src = 'Module:Navigation header/styles.css' }
	} .. table.concat(output, '\n')
end

function p.main(frame)
	return p._main(frame:getParent().args)
end

return p