Module:Exp Game: Difference between revisions

From Zelda Wiki, the Zelda encyclopedia
Jump to navigation Jump to search
No edit summary
No edit summary
 
(8 intermediate revisions by the same user not shown)
Line 1: Line 1:
local p = {}
local Franchise = require("Module:Franchise")
local Franchise = require("Module:Franchise")
local utilsArg = require("Module:UtilsArg")
local utilsArg = require("Module:UtilsArg")
local utilsMarkup = require("Module:UtilsMarkup")
local utilsTable = require("Module:UtilsTable")


local p = {}
local CLASS_EXP_GAME = "exp-game" -- [[Module:Infobox]] searches for this value and has to be changed if this value changes
local CLASS_NOEXCERPT = require("Module:Constants/class/noexcerpt")


-- Main function called by Template:Exp Game
-- Main function called by Template:Exp Game
function p.Main(frame)
function p.Main(frame)
local args, err = utilsArg.parse(frame:getParent().args, p.Templates["Exp Game"])
local args, err = utilsArg.parse(frame:getParent().args, p.Templates["Exp Game"])
local result = p.printGames(args.games)
local categories = err and err.categoryText or ""
if err then
result = result .. utilsMarkup.categories(err.categories)
local games = args.games
if not games or #games == 0 then
return "", categories
end
end
return result
end
local gameExp = {}
 
for i, game in ipairs(games) do
function p.printGames(games)
local shortName = Franchise.shortName(game)
games = games or {}
if shortName then
games = utilsTable.intersection(Franchise.enum(true), games) -- sorts the games, removes duplicates and invalid values
local exp = frame:expandTemplate({
games = utilsTable.difference(games, {""}) -- removes empty string if present
title = "Exp",
if #games == 0 then
args = {shortName, game}
return ""
})
table.insert(gameExp, "<b>"..exp.."</b>")
end
end
end
games = utilsTable.map(games, p.printGame)
gameExp = table.concat(gameExp, " &#124; ") -- &#124 is the HTML entity for the pipe character. Needs to be entered like this in order to not break tables and such
games = table.concat(games, " | ")
gameExp = string.format('<sup class="%s %s">(%s)</sup>', CLASS_EXP_GAME, CLASS_NOEXCERPT, gameExp) -- Exp Game looks odd in page preview popups, "noexcerpt" removes it from the previews
return "<sup>("..games..")</sup>"
end
return gameExp, categories
 
function p.printGame(game)
local result = utilsMarkup.tooltip(game, Franchise.shortName(game), "highlight")
return utilsMarkup.bold(result)
end
end


p.Templates = {
p.Templates = {
["Exp Game"] = {
["Exp Game"] = {
purpose = "{{Exp Game/Purpose}}",
purpose = "Indicates for which game(s) a particular statement is true, when that statement is not true for all games.",
format = "inline",
format = "inline",
params = {
params = {
Line 43: Line 44:
type = "string",
type = "string",
required = true,
required = true,
enum = Franchise.enum(true),
enum = Franchise.enum({ includeSeries = true }),
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,
}
}
},
},

Latest revision as of 13:36, 25 November 2022

This is the main module for the following templates:
local p = {}

local Franchise = require("Module:Franchise")
local utilsArg = require("Module:UtilsArg")

local CLASS_EXP_GAME = "exp-game" -- [[Module:Infobox]] searches for this value and has to be changed if this value changes
local CLASS_NOEXCERPT = require("Module:Constants/class/noexcerpt")

-- Main function called by Template:Exp Game
function p.Main(frame)
	local args, err = utilsArg.parse(frame:getParent().args, p.Templates["Exp Game"])
	local categories = err and err.categoryText or ""
	
	local games = args.games
	if not games or #games == 0 then
		return "", categories
	end
	
	local gameExp = {}
	for i, game in ipairs(games) do
		local shortName = Franchise.shortName(game)
		if shortName then
			local exp = frame:expandTemplate({
				title = "Exp",
				args = {shortName, game}
			})
			table.insert(gameExp, "<b>"..exp.."</b>")
		end
	end
	gameExp = table.concat(gameExp, " &#124; ") -- &#124 is the HTML entity for the pipe character. Needs to be entered like this in order to not break tables and such
	gameExp = string.format('<sup class="%s %s">(%s)</sup>', CLASS_EXP_GAME, CLASS_NOEXCERPT, gameExp) -- Exp Game looks odd in page preview popups, "noexcerpt" removes it from the previews
	
	return gameExp, categories
end

p.Templates = {
	["Exp Game"] = {
		purpose = "Indicates for which game(s) a particular statement is true, when that statement is not true for all games.",
		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