Anonymous

Module:Release: Difference between revisions

From Zelda Wiki, the Zelda encyclopedia
no edit summary
No edit summary
No edit summary
 
(10 intermediate revisions by the same user not shown)
Line 1: Line 1:
local p = {}
local p = {}
local h = {}


local Region = require("Module:Region")
local Region = require("Module:Region")
local utilsArg = require("Module:UtilsArg")
local utilsMarkup = require("Module:UtilsMarkup")
local utilsTable = require("Module:UtilsTable")
local regionCodes = Region.enum()


function p.Main(frame)
function p.Main(frame)
return frame:expandTemplate({
local args, err = utilsArg.parse(frame:getParent().args, p.Templates.Release)
title = "Release/Legacy",
local categories = err and err.categoryText or ""
args = frame:getParent().args
})
-- List releases using the region flag, unless there is at least one release using a multi-flag (i.e. multi-country) region
-- In that case, we use abbrevations instead of flags for consistency
local hasMultiFlags = utilsTable.find(utilsTable.keys(args), function(code)
local flags = Region.getRegion(code).flags
return #flags > 1
end)
local releases = hasMultiFlags and h.getReleasesWithAbbrs(args) or h.getReleasesWithFlags(args)
-- escape commas in the date format so that the year doesn't get rendered on a separate line in the infobox
for i in ipairs(releases) do
releases[i] = string.gsub(releases[i], ",", ",")
end
 
local list = utilsMarkup.list(releases)
return list, categories
end
function h.getReleasesWithFlags(args)
local releases = {}
for i, code in ipairs(regionCodes) do
local releaseDate = args[code]
if releaseDate then
local region = Region.getRegion(code, { flagTooltip = "name" })
local flag = region.flags[1]
local releaseWithFlag = string.format("%s %s", flag, releaseDate)
table.insert(releases, releaseWithFlag)
end
end
return releases
end
 
function h.getReleasesWithAbbrs(args)
local releases = {}
local regionCodesByAbbr = Region.enum({ sortBy = "abbr" })
for i, code in ipairs(regionCodesByAbbr) do
local releaseDate = args[code]
if releaseDate then
local region = Region.getRegion(code)
local abbr = region.abbr
if region.name == "United Kingdom" then -- for UK the tooltip is "United Kingdom" and the abbreviation is "GBR" which doesn't line up - needs a bit more explaining
abbr = mw.getCurrentFrame():expandTemplate({
title = "Exp",
args = {"United Kingdom (Great Britain)", "GBR"}
})
end
local releaseWithAbbr = string.format("'''%s''': %s", abbr, releaseDate)
table.insert(releases, releaseWithAbbr)
end
end
return releases
end
end


regionCodes.reference = nil
local params = {}
local params = {}
for i, code in ipairs(Region.enum()) do
for i, code in ipairs(regionCodes) do
params[code] = {
params[code] = {
type = "date",
type = "date",
Line 19: Line 75:
}
}
end
end
local countryCodes, multiCountryCodes = utilsTable.partition(regionCodes, function(str)
return str:len() == 2
end)
p.Templates = {
p.Templates = {
["Release"] = {
["Release"] = {
format = "block",
format = "block",
paramOrder = Region.enum(),
indent = 1,
paramOrder = utilsTable.concat(countryCodes, multiCountryCodes),
params = params,
params = params,
boilerplate = {
tabs = {
{
label = "Countries",
params = countryCodes,
},
{
label = "Multi-Country Regions",
params = multiCountryCodes,
},
}
}
}
}
}
}


return p
return p