Jump to content

Module:Vgrtbl

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Jackmcbarn (talk | contribs) at 21:28, 21 March 2014 (do them all in the loop, and use tryDate). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

local p = {}

local lang = mw.language.getContentLanguage()

local function tryDate(str)
	local success, result = pcall(lang.formatDate, lang, 'c', str)
	if success then
		return result
	else
		return str
	end
end

function p.main(frame)
	local args = frame:getParent().args
	if not args[1] or mw.text.trim(args[1]) == '' then
		return ''
	end
	local v = args.v or 1
	if args.c == '0' then
		-- If collapse mode is off
		local retval = frame:expandTemplate{title = 'vgrtbl/text', args = { s = 1, v = v, args[2], args[1] }}
		local i = 3
		while args[i] and mw.text.trim(args[i]) ~= '' do
			retval = retval .. '<br />' .. frame:expandTemplate{title = 'vgrtbl/text', args = { v = v, args[i + 1], args[i] }}
			i = i + 2
		end
		return retval
	else
		-- If collapse mode is on
		local dates = {}
		local dateOrder = {}
		local i = 1
		local retval
		while args[i] and mw.text.trim(args[i]) ~= '' do
			local d = tryDate(args[i + 1])
			if dates[d] then
				table.insert(dates[d], args[i])
			else
				table.insert(dateOrder, d)
				dates[d] = { args[i] }
			end
			i = i + 2
		end
		for key, val in ipairs(dateOrder) do
			if key == 1 then
				retval = frame:expandTemplate{title = 'vgrtbl/text', args = { s = 1, v = v, val, table.concat(dates[val], '/') }}
			else
				retval = retval .. '<br />' .. frame:expandTemplate{title = 'vgrtbl/text', args = { v = v, val, table.concat(dates[val], '/') }}
			end
		end
		return retval
	end
end

return p