Module:Entry: Difference between revisions

From Rhythm Heaven Wiki
Jump to navigation Jump to search
(Reimplement p.main)
(Add p.doclistvar for listing variant icons)
Line 42: Line 42:
function p.doclist(frame)
function p.doclist(frame)
local tempFmt = "{{" .. trim(frame.args[1]) .. "}}"
local tempFmt = "{{" .. trim(frame.args[1]) .. "}}"
local noQM = not trim(frame.args["?"])
local tabs = ""
local tabs = ""
local wikitable
local wikitable
local function addStage(rh, stage)
if noQM and stage.label == "?" then return end
local stageName = stage.name
if stage.target then
stageName = "[[" .. stageName .. "]]"
end
wikitable = wikitable:tag("tr")
:tag("td")
:attr("rowspan", tostring(#stage.entries))
:css("text-align", "center")
:wikitext(stageName)
:done()
for number, _ in ipairs(stage.entries) do
if number ~= 1 then wikitable = wikitable:tag("tr") end
local tempCall = mw.ustring.format(
tempFmt, rh.console, stage.label, number)
wikitable = wikitable
:tag("td")
:css("text-align", "center")
:tag("code"):wikitext(mw.text.nowiki(tempCall)):done()
:done()
:tag("td"):wikitext(frame:preprocess(tempCall)):done()
:done()
end
end


for _, rh in ipairs(require("Module:Entry/titles").sequence) do
for _, rh in ipairs(require("Module:Entry/titles").sequence) do
Line 58: Line 87:
:done()
:done()
for _, stage in ipairs(rh.stages) do
for _, stage in ipairs(rh.stages) do addStage(stage) end
local stageName
tabs = tabs .. tostring(wikitable) .. "\n"
if stage.link == nil then
end
stageName = stage.name
return frame:extensionTag("tabber", tabs)
elseif stage.link == true then
end
stageName = mw.ustring.format("[[%s]]", stage.name)
 
else
function p.doclistvar(frame)
stageName = mw.ustring.format("[[%s|%s]]", stage.link, stage.name)
local tempFmt = "{{" .. trim(frame.args[1]) .. "}}"
end
local wikitable = mw.html.create("table")
wikitable = wikitable:tag("tr")
:addClass("wikitable")
:css("white-space", "nowrap")
:css("max-width", "100%")
:css("overflow-x", "auto")
:tag("tr")
:tag("th"):wikitext("Source"):done()
:tag("th"):wikitext("Output"):done()
:done()
local function addEntry(entry)
wikitable = wikitable:tag("tr")
for _, var in ipairs(entry.iconVariants) do
local tempCall = mw.ustring.format(
tempFmt, entry.console, entry.stage, entry.number, var)
wikitable = wikitable
:tag("td")
:tag("td")
:attr("rowspan", tostring(#stage.entries))
:css("text-align", "center")
:css("text-align", "center")
:wikitext(stageName)
:tag("code"):wikitext(mw.text.nowiki(tempCall)):done()
:done()
:done()
:tag("td"):wikitext(frame:preprocess(tempCall)):done()
:done()
end
end
for _, rh in ipairs(require("Module:Entry/titles").sequence) do
for _, stage in ipairs(rh.stages) do
for number, _ in ipairs(stage.entries) do
for number, _ in ipairs(stage.entries) do
if number ~= 1 then wikitable = wikitable:tag("tr") end
local entry = p.new(rh.console, stage.label, number)
local tempCall = mw.ustring.format(
if entry.iconVariants then addEntry(entry) end
tempFmt, rh.console, stage.label, number)
wikitable = wikitable
:tag("td")
:css("text-align", "center")
:tag("code"):wikitext(mw.text.nowiki(tempCall)):done()
:done()
:tag("td"):wikitext(frame:preprocess(tempCall)):done()
:done()
end
end
end
end
tabs = tabs .. tostring(wikitable) .. "\n"
end
end
return frame:extensionTag("tabber", tabs)
end
end


return p
return p

Revision as of 19:55, 22 August 2025

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

local entryMT = require("Module:Entry/metatable")
local p = {}

function p.new(console, stage, number)
	if type(console) == "table" and stage == nil and number == nil then
		stage = console[2] or console.stage
		number = console[3] or console.number
		console = console[1] or console.console
	end
	return setmetatable({
		console = console,
		stage = stage,
		number = number
	}, entryMT)
end

local function trim(s)
	if s == nil then return nil end
	s = mw.text.trim(s)
	return s == "" and nil or s
end

function p.main(frame)
	local args = frame:getParent().args
	local entry = p.new(trim(args[1]), trim(args[2]), tonumber(trim(args[3])))
	local result = entry[trim(frame.args[1])]
	if type(result) == "function" then
		local methodArgNames = {
			"variant",
			"tempoUpSize",
			"iconSize"
		}
		local methodArgs = {}
		for _, argName in ipairs(methodArgNames) do
			methodArgs[argName] = trim(args[argName])
		end
		return result(entry, methodArgs)
	end
	return result
end

function p.doclist(frame)
	local tempFmt = "{{" .. trim(frame.args[1]) .. "}}"
	local noQM = not trim(frame.args["?"])
	local tabs = ""
	local wikitable

	local function addStage(rh, stage)
		if noQM and stage.label == "?" then return end
		local stageName = stage.name
		if stage.target then
			stageName = "[[" .. stageName .. "]]"
		end
		wikitable = wikitable:tag("tr")
			:tag("td")
				:attr("rowspan", tostring(#stage.entries))
				:css("text-align", "center")
				:wikitext(stageName)
			:done()
		
		for number, _ in ipairs(stage.entries) do
			if number ~= 1 then wikitable = wikitable:tag("tr") end
			local tempCall = mw.ustring.format(
				tempFmt, rh.console, stage.label, number)
			
			wikitable = wikitable
				:tag("td")
					:css("text-align", "center")
					:tag("code"):wikitext(mw.text.nowiki(tempCall)):done()
				:done()
				:tag("td"):wikitext(frame:preprocess(tempCall)):done()
			:done()
		end
	end

	for _, rh in ipairs(require("Module:Entry/titles").sequence) do
		tabs = tabs .. "|-|" .. rh.console .. "="
		wikitable = mw.html.create("table")
			:addClass("wikitable")
			:css("white-space", "nowrap")
			:css("max-width", "100%")
			:css("overflow-x", "auto")
			:tag("tr")
				:tag("th"):wikitext("Stage"):done()
				:tag("th"):wikitext("Source"):done()
				:tag("th"):wikitext("Output"):done()
			:done()
		
		for _, stage in ipairs(rh.stages) do addStage(stage) end
		tabs = tabs .. tostring(wikitable) .. "\n"
	end
	return frame:extensionTag("tabber", tabs)
end

function p.doclistvar(frame)
	local tempFmt = "{{" .. trim(frame.args[1]) .. "}}"
	local wikitable = mw.html.create("table")
		:addClass("wikitable")
		:css("white-space", "nowrap")
		:css("max-width", "100%")
		:css("overflow-x", "auto")
		:tag("tr")
			:tag("th"):wikitext("Source"):done()
			:tag("th"):wikitext("Output"):done()
		:done()
	
	local function addEntry(entry)
		wikitable = wikitable:tag("tr")
		for _, var in ipairs(entry.iconVariants) do
			local tempCall = mw.ustring.format(
				tempFmt, entry.console, entry.stage, entry.number, var)
			wikitable = wikitable
				:tag("td")
					:css("text-align", "center")
					:tag("code"):wikitext(mw.text.nowiki(tempCall)):done()
				:done()
				:tag("td"):wikitext(frame:preprocess(tempCall)):done()
			:done()
		end
	end
	
	for _, rh in ipairs(require("Module:Entry/titles").sequence) do
		for _, stage in ipairs(rh.stages) do
			for number, _ in ipairs(stage.entries) do
				local entry = p.new(rh.console, stage.label, number)
				if entry.iconVariants then addEntry(entry) end
			end
		end
	end
end

return p