Module:Entry: Difference between revisions
Jump to navigation
Jump to search
HyperNervie (talk | contribs) No edit summary |
HyperNervie (talk | contribs) (Fix stage linking in p.doclist) |
||
| Line 49: | Line 49: | ||
if noQM and stage.label == "?" then return end | if noQM and stage.label == "?" then return end | ||
local stageName = stage.name | local stageName = stage.name | ||
if stage.target then | if stage.link then | ||
local link = stage.target or stage.link | |||
if mw.title.getCurrentTitle().prefixedText == link | |||
or stage.link == true | |||
then | |||
stageName = "[[" .. stageName .. "]]" | |||
else | |||
stageName = mw.ustring.format("[[%s|%s]]", link, stageName) | |||
end | |||
end | end | ||
wikitable = wikitable:tag("tr") | wikitable = wikitable:tag("tr") | ||
| Line 121: | Line 128: | ||
for _, rh in ipairs(require("Module:Entry/titles").sequence) do | for _, rh in ipairs(require("Module:Entry/titles").sequence) do | ||
for _, stage in ipairs(rh.stages) do | for _, stage in ipairs(rh.stages) do | ||
for number, | for number, data in ipairs(stage.entries) do | ||
local entry = p.new(rh.console, stage.label, number) | local entry = p.new(rh.console, stage.label, number) | ||
if | if data.variants then addEntry(entry) end | ||
end | end | ||
end | end | ||
Revision as of 04:19, 23 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 = mw.text.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.link then
local link = stage.target or stage.link
if mw.title.getCurrentTitle().prefixedText == link
or stage.link == true
then
stageName = "[[" .. stageName .. "]]"
else
stageName = mw.ustring.format("[[%s|%s]]", link, stageName)
end
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(rh, stage) end
tabs = tabs .. tostring(wikitable) .. "\n"
end
return frame:extensionTag("tabber", tabs)
end
function p.doclistvar(frame)
local tempFmt = mw.text.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)
for var, _ in pairs(entry.iconVariants) do
local tempCall = mw.ustring.format(
tempFmt, entry.console, entry.stage, entry.number, var)
wikitable:tag("tr")
: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, data in ipairs(stage.entries) do
local entry = p.new(rh.console, stage.label, number)
if data.variants then addEntry(entry) end
end
end
end
return tostring(wikitable)
end
return p