Module:Television crossover note
Appearance
This module depends on the following other modules: |
Module:Television crossover note is used to add a note into the episode summary of the television crossover episodes, noting the crossover and other episodes contained within it.
Usage
[edit]{{#invoke:Television crossover note|main}}
Parameter list
[edit]Parameter | Explanation | Requirement |
---|---|---|
part
|
The crossover part number of the current episode. | Required |
parts
|
The number of total crossover episodes. | Required |
no_hr
|
Any value will disable the addition of the <hr> tag.
|
Optional |
1...5
|
The TV series which are part of the crossover, by order of crossover appearance. | Required |
series1...series5
|
Optional replacement for the positional TV series parameters. | Optional |
local description = {
[1] = {
[1] = "This episode is a crossover with %s."
},
[2] = {
[1] = "This episode begins a crossover event that concludes on %s.",
[2] = "This episode concludes a crossover event that begins on %s."
},
[3] = {
[1] = "This episode begins a crossover event that continues on %s and concludes on %s.",
[2] = "This episode continues a crossover event that begins on %s and concludes on %s.",
[3] = "This episode concludes a crossover event that begins on %s and continues on %s."
},
[4] = {
[1] = "This episode begins a crossover event that continues on %s and %s, and concludes on %s.",
[2] = "This episode continues a crossover event that begins on %s continues on %s, and concludes on %s.",
[3] = "This episode continues a crossover event that begins on %s and %s, and concludes on %s.",
[4] = "This episode concludes a crossover event that begins on %s and continues on %s and %s."
},
[5] = {
[1] = "This episode begins a crossover event that continues on %s, %s, and %s, and concludes on %s.",
[2] = "This episode continues a crossover event that begins on %s, continues on %s and %s, and concludes on %s.",
[3] = "This episode continues a crossover event that begins on %s and %s, continues on %s, and concludes on %s.",
[4] = "This episode continues a crossover event that begins on %s, %s, and %s, and concludes on %s.",
[5] = "This episode concludes a crossover event that begins on %s, and continues on %s, %s, and %s."
}
}
local errorMessages = {
["MISSING_VALUE"] = "missing |%s= value",
["NOT_A_NUMBER"] = "value of |%s= should be a number",
}
local errors = {}
local p = {}
--[[
Local function which is used to create an error message.
--]]
local function createErrorMsg(errorText)
local errorMsg = '<span style="font-size:100%;" class="error"> <strong>Error: </strong>' .. errorText .. '.</span>'
table.insert(errors, errorMsg)
end
--[[
Local function which gets the series list from either the numbered (positional) or named parameters,
and checks if the number of series parameters match the value of parts - creates an error message if they aren't.
Returns the series list or nil.
--]]
local function getSeriesList(parts, args)
local seriesList = {}
parts = parts - 1
if (parts < 1) then
parts = 1
end
for i = 1, parts do
if (args[i] or args["series" .. i]) then
seriesList[i] = args[i] or args["series" .. i]
else
createErrorMsg(string.format(errorMessages["MISSING_VALUE"], i))
return nil
end
end
return seriesList
end
--[[
Local function which checks if the parameters used are correct.
Creates an error message if they aren't.
--]]
local function isArgValidNumber(name, value)
if (value) then
if (tonumber(value)) then
return tonumber(value)
else
createErrorMsg(string.format(errorMessages["NOT_A_NUMBER"], name))
return nil
end
else
createErrorMsg(string.format(errorMessages["MISSING_VALUE"], name))
return nil
end
end
--[[
Local function which is used to handle the actual main proccess.
--]]
local function _main(args)
local parts = isArgValidNumber("parts", args.parts)
local currentPart = isArgValidNumber("part", args.part)
-- If missing parts or current part values, show an error.
if (not parts or not (currentPart or parts == 1)) then
-- Error message handling.
return table.concat(errors)
end
local seriesList = getSeriesList(parts, args)
-- If missing series parts, show an error.
if (not seriesList) then
-- Error message handling.
return table.concat(errors)
end
if (parts == 1) then
currentPart = 1
end
local text = string.format(description[parts][currentPart], seriesList[1], seriesList[2], seriesList[3], seriesList[4], seriesList[5])
if (args.no_hr) then
return text
else
return "<hr>" .. text
end
end
--[[
Public function which is used to handle the logic for creating a note for television crossover episodes.
Parameters:
-- |part= — required; The crossover part number of the current episode.
-- |parts= — required; The number of total crossover episodes.
-- |no_hr= — optional; Any value will disable the addition of the <hr> tag.
-- |1...5= — required; The TV series which are part of the crossover, by order of crossover appearance.
-- |series1...series5= — optional; Optional replacement for the positional series parameters.
--]]
function p.main(frame)
local getArgs = require('Module:Arguments').getArgs
local args = getArgs(frame)
return _main(args)
end
return p