Module:Release: Difference between revisions
Jump to navigation
Jump to search
PhantomCaleb (talk | contribs) No edit summary |
PhantomCaleb (talk | contribs) No edit summary |
||
(18 intermediate revisions by the same user not shown) | |||
Line 2: | Line 2: | ||
local h = {} | local h = {} | ||
local Region = require("Module:Region") | |||
local utilsArg = require("Module:UtilsArg") | local utilsArg = require("Module:UtilsArg") | ||
local utilsMarkup = require("Module:UtilsMarkup") | local utilsMarkup = require("Module:UtilsMarkup") | ||
local utilsTable = require("Module:UtilsTable") | local utilsTable = require("Module:UtilsTable") | ||
local | local regionCodes = Region.enum() | ||
function p. | function p.Main(frame) | ||
local args, err = utilsArg.parse(frame:getParent().args, p.Templates.Release) | |||
local categories = err and err.categoryText or "" | |||
-- 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 args, err = | local flags = Region.getRegion(code).flags | ||
return #flags > 1 | |||
local | |||
local | |||
return | |||
end) | 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 | |||
end | |||
local list = utilsMarkup.list(releases) | |||
return list, categories | |||
local | |||
end | end | ||
function h.getReleasesWithFlags(args) | |||
function h. | local releases = {} | ||
local | for i, code in ipairs(regionCodes) do | ||
local releaseDate = args[code] | |||
for | if releaseDate then | ||
local | 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 | end | ||
return | return releases | ||
end | end | ||
function h. | function h.getReleasesWithAbbrs(args) | ||
releases = | local releases = {} | ||
for i, | local regionCodesByAbbr = Region.enum({ sortBy = "abbr" }) | ||
local | for i, code in ipairs(regionCodesByAbbr) do | ||
local | local releaseDate = args[code] | ||
if releaseDate then | |||
local | 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 | end | ||
local releaseWithAbbr = string.format("'''%s''': %s", abbr, releaseDate) | |||
table.insert(releases, releaseWithAbbr) | |||
end | end | ||
end | end | ||
return | return releases | ||
end | end | ||
regionCodes.reference = nil | |||
local params = {} | |||
for i, code in ipairs(regionCodes) do | |||
params[code] = { | |||
type = "date", | |||
desc = "Release date in "..Region.getRegion(code).name, | |||
trim = true, | |||
nilIfEmpty = true, | |||
} | } | ||
end | |||
local countryCodes, multiCountryCodes = utilsTable.partition(regionCodes, function(str) | |||
return str:len() == 2 | |||
end) | |||
p.Templates = { | |||
["Release"] = { | |||
format = "block", | |||
indent = 1, | |||
paramOrder = utilsTable.concat(countryCodes, multiCountryCodes), | |||
params = params, | |||
boilerplate = { | |||
tabs = { | |||
} | { | ||
label = "Countries", | |||
params = countryCodes, | |||
}, | |||
{ | |||
label = "Multi-Country Regions", | |||
params = multiCountryCodes, | |||
}, | |||
} | |||
} | |||
} | } | ||
} | } | ||
return p | return p |
Latest revision as of 20:08, 22 November 2022
This is the main module for the following templates:
local p = {}
local h = {}
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)
local args, err = utilsArg.parse(frame:getParent().args, p.Templates.Release)
local categories = err and err.categoryText or ""
-- 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
regionCodes.reference = nil
local params = {}
for i, code in ipairs(regionCodes) do
params[code] = {
type = "date",
desc = "Release date in "..Region.getRegion(code).name,
trim = true,
nilIfEmpty = true,
}
end
local countryCodes, multiCountryCodes = utilsTable.partition(regionCodes, function(str)
return str:len() == 2
end)
p.Templates = {
["Release"] = {
format = "block",
indent = 1,
paramOrder = utilsTable.concat(countryCodes, multiCountryCodes),
params = params,
boilerplate = {
tabs = {
{
label = "Countries",
params = countryCodes,
},
{
label = "Multi-Country Regions",
params = multiCountryCodes,
},
}
}
}
}
return p