Module:Video game dab

From TWC Archive
Jump to navigation Jump to search

Documentation for this module may be created at Module:Video game dab/doc

local mArguments --initialize lazily
local mAbout = require('Module:About')
local mHatnote = require('Module:Hatnote')
local p = {}

local s = { --localizable strings
	aboutForm = 'the %s video game titled "%s"',
	missingYear = 'missing year parameter',
	missingTitle = 'missing title parameter',
	template = 'Template:Video game dab'
}

function err(message, args)
	--DRY error messaging
	return mHatnote.makeWikitextError(message, s.template, args.category)
end

function isEmpty(arg) return (not arg) or arg == '' end --DRY emptiness testing

function p.videoGameDab (frame)
	-- A passthrough that gets args from the frame and all
	mArguments = require('Module:Arguments')
	args = mArguments.getArgs(frame)
	return p._videoGameDab(args)
end

function p._videoGameDab (args)
	--Arguments-based version
	--Check for missing arguments
	if isEmpty(args.year) then return err(s.missingYear, args) end
	if isEmpty(args.title) then return err(s.missingTitle, args) end
	--Adjust arguments, starting by inserting constructed argument
	local adjustedArgs = {string.format(s.aboutForm, args.year, args.title)}
	local max = 1
	for k, v in ipairs(args) do
		max = k + 1
		table.insert(adjustedArgs, max, v)
	end
	for k, v in pairs(args) do
		if type(k) ~= 'number' then adjustedArgs[k] = v end
	end
	--Avoid printing broken stuff on uneven/nonsequential parameter lists
	if max % 2 == 0 then
		adjustedArgs[max + 1] = string.format('{{{%s}}}', max)
		max = max + 1
	end
	--add disambiguation message if target exists; otherwise it'll fall back to
	--the disambiguation form of {{PAGENAME}}
	local disambiguated = mHatnote.disambiguate(args.title)
	if mw.title.new(disambiguated).exists then
		adjustedArgs[max + 2] = disambiguated
	end
	return mAbout._about(adjustedArgs)
end

return p