Module:Navseasoncats/navyear

local p = {}

local grey = "#888"

-- Make a piped link to a category, if it exists
-- If it doesn't exist, just display the greyed unlinked title
function makeCatLink(catname, disp)
	local displaytext = catname
	if disp and disp ~= '' then
		-- use 'disp' parameter, but strip any trailing disambiguator
		displaytext = mw.ustring.gsub(disp, '%s+%(.+$', '');
	end
	local catPage = mw.title.new( catname, 'Category' )
	if (catPage.exists) then
		return '[[:Category:'..catname..'|'..displaytext..']]'
	else
		return '<span style="color:'..grey..'">'..displaytext.."</span>"
	end
end

function p.navyear(frame)
	--Expects a PAGENAME of the form "Some sequential 1760 example cat", where 
	--	{{{1}}}=Some sequential
	--	{{{2}}}=1760
	--	{{{3}}}=example cat
	--	{{{4}}}=1758 ('min' year parameter; optional)
	--	{{{5}}}=1800 ('max' year parameter; optional)
	local firsthalf = frame.args[1]
	local year      = tonumber(frame.args[2])
	local lasthalf  = frame.args[3]
	local minyear   = tonumber(frame.args[4]) or -9999
	local maxyear   = tonumber(frame.args[5]) or 9999
	
	local navyear = '{| class="toccolours hlist" style="text-align: center; margin: auto;"\n'..'|\n'
	
	local i = -5
	while i <= 5 do
		local y = year + i
		if i ~= 0 then
			if (y >= minyear) and (y <= maxyear) then -- ex: 1758, 1759, 1761, 1762, 1763, 1764, 1765
				navyear = navyear..'*'..makeCatLink( firsthalf..' '..y..' '..lasthalf, y )..'\n'
			else -- ex: 1755, 1756, 1757
				navyear = navyear..'*<span style="visibility:hidden">'..y..'</span>\n'
			end
		else -- ex: 1760
			navyear = navyear..'*<b>'..year..'</b>\n'
		end
		i = i + 1
	end
	return navyear..'|}'
end

return p