Module:Release: Difference between revisions
From Zelda Wiki, the Zelda encyclopedia
no edit summary
PhantomCaleb (talk | contribs) No edit summary |
PhantomCaleb (talk | contribs) 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) | ||
local args, err = utilsArg.parse(frame:getParent().args, p.Templates.Release) | |||
local categories = err and err.categoryText or "" | |||
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( | 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 = | 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 |