PhantomCaleb (talk | contribs) m (Protected "Module:Exp Game": Critical wiki page ([Edit=Allow only administrators] (indefinite) [Move=Allow only administrators] (indefinite))) |
PhantomCaleb (talk | contribs) No edit summary |
||
Line 17: | Line 17: | ||
function p.printGames(games) |
function p.printGames(games) |
||
− | games = games or {} |
+ | games = utilsTable.difference(games or {}, {""}) -- removes empty string if present |
− | games = utilsTable.intersection(Franchise.enum({ includeSeries = true }), games) -- sorts the games, removes duplicates and invalid values |
||
− | games = utilsTable.difference(games, {""}) -- removes empty string if present |
||
if #games == 0 then |
if #games == 0 then |
||
return "" |
return "" |
||
Line 46: | Line 44: | ||
desc = "A comma-separated list of one or more [[Data:Franchise|game codes]].", |
desc = "A comma-separated list of one or more [[Data:Franchise|game codes]].", |
||
split = true, |
split = true, |
||
+ | sortAndRemoveDuplicates = true, |
||
} |
} |
||
}, |
}, |
Revision as of 19:32, 4 August 2020
This is the main module for the following templates:
local Franchise = require("Module:Franchise")
local utilsArg = require("Module:UtilsArg")
local utilsMarkup = require("Module:UtilsMarkup")
local utilsTable = require("Module:UtilsTable")
local p = {}
-- Main function called by Template:Exp Game
function p.Main(frame)
local args, err = utilsArg.parse(frame:getParent().args, p.Templates["Exp Game"])
local result = p.printGames(args.games)
if err then
result = result .. utilsMarkup.categories(err.categories)
end
return result
end
function p.printGames(games)
games = utilsTable.difference(games or {}, {""}) -- removes empty string if present
if #games == 0 then
return ""
end
games = utilsTable.map(games, p.printGame)
games = table.concat(games, " | ")
return "<sup>("..games..")</sup>"
end
function p.printGame(game)
local result = utilsMarkup.tooltip(game, Franchise.shortName(game), "highlight")
return utilsMarkup.bold(result)
end
p.Templates = {
["Exp Game"] = {
purpose = "{{Exp Game/Purpose}}",
format = "inline",
params = {
[1] = {
name = "games",
placeholder = "game1, game2, ..., gameN",
type = "string",
required = true,
enum = Franchise.enum({ includeSeries = true }),
desc = "A comma-separated list of one or more [[Data:Franchise|game codes]].",
split = true,
sortAndRemoveDuplicates = true,
}
},
examples = {
{"OoT"},
{"Series, OoT, MM"},
{"MM, OoT, MM, OoT"},
{},
{""},
{"fakeGame"},
{"OoT, fakeGame, MM"}
}
}
}
return p