Module:Ability/new/2

From Inkipedia, the Splatoon wiki
< Module:Ability
Revision as of 13:04, 15 March 2024 by Exaskliri (talk | contribs) (moved default size (24) to frame objects (requireFromModule and invokeFromTemplate) and removed full name check (must be passed as abbreviation))
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Documentation for this module may be created at Module:Ability/new/2/doc

local p = {}
local gameShortened	=	require("Module:GameShortened")

local disambigName	=	{
	["Recon"]	=	true,
}

function p.requireFromModule(frame)
	return p.getAbilityIcon(
		string.upper(frame.game),
		frame.name,
		frame.size or 24,
		frame.icononly
	)
end

function p.invokeFromTemplate(frame)
	return p.getAbilityIcon(
		string.upper(frame:getParent().args.game),
		frame:getParent().args.name,
		frame:getParent().args.size or 24,
		frame:getParent().args.icononly
	)
end

function p.getAbilityIcon(game, name, size, icononly)
	local result
	local abilityIcon
	local linkText			= name
	local displayText		= name
	local abilityFileName 	= name

	if name == "?" then
		linkText		= "Gear ability"
		displayText		= "None"	--Exaskliri wants to display link text by default, even for "?"
		abilityFileName	= "Locked"
	end
	if disambigName[name] then
		linkText = linkText .. " (ability)"
	end
	abilityIcon = string.format("[[File:%s_Ability_%s.png|%dpx|link=%s]]", game, abilityFileName, size, linkText)
	
	local iconSpan = mw.html.create("span")
	local padSize = size * 0.05
	iconSpan
		:css("display", "inline-block")
		:css("vertical-align", "middle")
		:css("width", size.."px")
		:css("height", size.."px")
		:css("background", "black")
		:css("border-radius", "50%")
		:css("padding", padSize.."px")
		:wikitext(abilityIcon)
	abilityIcon = tostring(iconSpan)
	
	result = abilityIcon
	if not icononly then
		result = abilityIcon .. " [[" ..linkText.. "|" ..displayText.. "]]"
	end

	return result
end

return p