Module:Entry/metatable: Difference between revisions

From Rhythm Heaven Wiki
Jump to navigation Jump to search
(Default icon size for more DS stages)
(Change default icon size of GBA levels from 20px wide to 20px tall to maintain original Remix icon width)
Line 61: Line 61:
function entryMT.defaultIconSize(entry)
function entryMT.defaultIconSize(entry)
if entry.console == "GBA" or entry.console == "Arcade" then
if entry.console == "GBA" or entry.console == "Arcade" then
return (entry.stage == "E" or entry.stage == "T") and "40px" or "20px"
return (entry.stage == "E" or entry.stage == "T") and "40px" or "x20px"
elseif entry.console == "DS" then
elseif entry.console == "DS" then
return (entry.stage == "B" or entry.stage == "C") and "34px"
return (entry.stage == "B" or entry.stage == "C") and "34px"

Revision as of 18:11, 9 August 2025

Documentation for this module may be created at Module:Entry/metatable/doc

local titles = require("Module:Entry/titles").lookup
local entryMT = {}

function entryMT.__index(entry, k)
	local v = entryMT[k](entry)
	rawset(entry, k, v)
	return v
end

function entryMT.target(entry)
	return titles[entry][1]
end

function entryMT.selfLink(entry)
	return mw.title.getCurrentTitle().prefixedText == entry.target
end

function entryMT.title(entry)
	if entry.selfLink then return entry.target end
	return titles[entry][2] or entry.target
end

function entryMT.text(entry)
	local t = titles[entry]
	return t[3] or t[2] or t[1]
end

local function textWithTempoUp(entry, tempoUpSize)
	local t = entry.text
	if (entry.console == "GBA" or entry.console == "Arcade")
		and entry.stage == "EX"
	then
		tempoUpSize = tempoUpSize or "72px"
		t = mw.ustring.format("%s [[File:TempoUpExtra%s.png|%s|link=]]",
			t, entry.number, tempoUpSize)
	end
	return t
end

function entryMT.textWithTempoUp()
	return textWithTempoUp
end

local function _link(entry, tempoUpSize)
	local t = entry.text
	t = mw.ustring.format("[[%s|%s]]", entry.title, t)
	if (entry.console == "GBA" or entry.console == "Arcade")
		and entry.stage == "EX"
	then
		tempoUpSize = tempoUpSize or "72px"
		t = mw.ustring.format("%s [[File:TempoUpExtra%s.png|%s|link=%s]]",
			t, entry.number, tempoUpSize, entry.selfLink and "" or entry.title)
	end
	return t
end

function entryMT.link()
	return _link
end

function entryMT.defaultIconSize(entry)
	if entry.console == "GBA" or entry.console == "Arcade" then
		return (entry.stage == "E" or entry.stage == "T") and "40px" or "x20px"
	elseif entry.console == "DS" then
		return (entry.stage == "B" or entry.stage == "C") and "34px"
			or (entry.stage == "E" or entry.stage == "T"
			or entry.stage == "GB" or entry.stage == "GT") and "40px"
			or "32px"
	elseif entry.console == "Wii" then
		return (entry.stage == "E" or entry.stage == "T"
			or entry.stage == "EX" or entry.stage == "PE") and "40px" or "32px"
	elseif entry.console == "3DS" then
		return "44px"
	end
end

function entryMT.iconName(entry)
	local animateStages = {
		GBA = {T = true},
		Arcade = {},
		DS = {E = true, T = true},
		Wii = {E = true, T = true, EX = true, PE = true},
		["3DS"] = {},
		Switch = {}
	}
	local ext = animateStages[entry.console][entry.stage] and "gif" or "png"
	local console = entry.console
	if console == "Arcade" then console = "GBA" end
	local entryCode = titles[entry].icon or (entry.stage .. "-" .. entry.number)
	return mw.ustring.format("Game %s %s.%s", console, entryCode, ext)
end

local function _icon(entry, iconSize)
	iconSize = iconSize or entry.defaultIconSize
	return mw.ustring.format("[[File:%s|%s|link=%s]]",
		entry.iconName, iconSize, entry.selfLink and "" or entry.title)
end

function entryMT.icon()
	return _icon
end

local function _iconAndLink(entry, iconSize, tempoUpSize)
	return tostring(mw.html.create("span")
		:css("white-space", "nowrap")
		:wikitext(entry:icon(iconSize), " ", entry:link(tempoUpSize))
	)
end

function entryMT.iconAndLink()
	return _iconAndLink
end

return entryMT