Loading
  • 21 Aug, 2019

  • By, Wikipedia

Module:Television Episode Redirect Handler

Module:Television episode redirect handler is used to tag a television episode redirect with the relevant redirect categories and adds a short description via {{Television episode short description}} and a DEFAULTSORT sort key when necessary.

Usage

{{#invoke:Television episode redirect handler|main}}

Episode specific parameter list

The parameter names use a corresponding parameter from Template:Infobox television episode to fill in the data. They are listed below.

Parameter Corresponding infobox parameter Description
series_name series The TV series name.
episode_num episode The episode's number.
season_num season The season's number.
season_num_uk series_no The season's number if using the British "series" term.
not_dab same name Set if the TV series name has parentheses as part of its name.
special same name Setting to "yes" will set the description as a "special episode". Any other value will replace the word "special" with the one entered. For example |special=recap will set the text to "recap episode".
limited same name Set if the series is a single season series, such as miniseries or limited series and does not need a season number as part of the description.

General parameter list

Parameter Explanation {{R with possibilities}} {{R printworthy}} or {{R unprintworthy}}
series_name The name of the series article, including disambiguation. Will set the value entered as series which this redirect belongs to. - -
series_name# For multiple series starting from the 2nd series in the style of |series_name2=. The name of the series article names, including disambiguation. Will set the values entered as series which this object belongs to. - -
multi_series_name_table Multiple series article names, including disambiguation. Will set the values entered as series which this object belongs to. This parameter can only be used from other modules as it requires the parameters to be passed as an args table. - -
parent_series Used for scenarios where a series has a short web-based companion series ("minisodes"), and the redirects should be placed in the parent series category. - -
restricted Will tag the redirect with: {{R restricted}} and set the value entered as the correct title. Yes printworthy
birth_name Only valid for character redirects; Any value will tag the redirect with: {{R from birth name}}. No printworthy
alt_name Any value will tag the redirect with: {{R from alternative name}}. No printworthy
former_name Any value will tag the redirect with: {{R from former name}}. No printworthy
short_name Any value will tag the redirect with: {{R from short name}}. No printworthy
long_name Any value will tag the redirect with: {{R from long name}}. No printworthy
sort_name Only valid for character redirects; Any value will tag the redirect with: {{R from sort name}}. The value must be two characters. See {{R from sort name}} for more information. No printworthy
title_name Only valid for character redirects; Any value will tag the redirect with: {{R from name with title}}. No unprintworthy
alt_spelling Will tag the redirect with: {{R from alternative spelling}} and set the value entered as the correct spelling to use. No unprintworthy
to_diacritic Any value will tag the redirect with: {{R to diacritic}}. No unprintworthy
incorrect_name Any value will tag the redirect with: {{R from incorrect name}} and set the |primary= value entered as the correct name to use. If |primary= isn't used, it will instead use the value entered here. No unprintworthy
capitalisation Any value will tag the redirect with: {{R from miscapitalisation}} and set the |primary= value entered as the correct capitalisation to use. If |primary= isn't used, it will instead use the value entered here. No unprintworthy
unneeded_dab Any value will tag the redirect with: {{R from unnecessary disambiguation}}. No unprintworthy
draft_move Any value will tag the redirect with: {{R from move}} and {{R from draft namespace}}. No unprintworthy
without_mention Any value will tag the redirect with: {{R to article without mention}}. No unprintworthy
anchor Set as default for episode redirects. Any value will tag the redirect with: {{R to anchor}}. - -
section Set as default for fictional character, element and location redirects. Any value will tag the redirect with: {{R to section}}. - -
list Any value will tag the redirect with: {{R to list entry}}. - -
to_article Used for redirects to articles, and not to a specific section of the article. - -
primary Will tag the redirect with: {{R avoided double redirect}} and set the value entered as the primary redirect. - -
merge Any value will tag the redirect with: {{R from merge}}. - -
history Any value will tag the redirect with: {{R with history}}. - -
dab_exception Any value will set the current disambiguation used as correct, regardless if it follows a standard style. See note below. - -
correct_disambiguation Value will be used for disambiguation validation. Should be used if the disambiguation is different than the series name, such as when using a franchise name. - -
test Any value will set instruct the function to return only testing validation data. Used in /testcases. - -
test_title Value will be used for title validation. Used in /testcases. - -

Notes


require("strict")

local p = {}

local addManualCategory = false
local currentFrame

local categoryList = {
	["SEASON_EPISODE_CATEGORY"] = "Category:%s (%s %s) episodes"
}

local TEMP_TRACKING_CATEGORY = "[[Category:Television episode redirect handler parameter usage tracking|%s]]"

--[[
Helper function which creates a season category, checks if it exists
and returns it if it does or an empty string if it doesn't.
--]]
local function getSeasonCategory(seriesName, seasonType, seasonNumber)
	local seasonCategory = string.format(categoryList["SEASON_EPISODE_CATEGORY"], seriesName, seasonType, seasonNumber)
	if (mw.title.new(seasonCategory).exists) then
		return "[[" .. seasonCategory .. "]]"
	else
		return ""
	end	
end

--[[
Local function which sets adds the primary episode redirect to a season category, if it exists.
--]]
local function getSeasonCategory(args)
	local seasonNumber
	local seasonType
	
	if (args.season_num) then
		seasonNumber = args.season_num
		seasonType = "season"
	elseif (args.season_num_uk) then
		seasonNumber = args.season_num_uk
		seasonType = "series"
	end
	
	local seasonCategory = ""
	if (args.series_name and seasonNumber) then
		seasonCategory = getSeasonCategory(args.series_name, seasonType, seasonNumber)
		if (seasonCategory == "") then
			local seriesNameNoDab = mw.ustring.gsub(args.series_name, "%s+%b()$", "")
			seasonCategory = getSeasonCategory(seriesNameNoDab, seasonType, seasonNumber)
		end
	end
	
	return seasonCategory
end

--[[
Local function which "Module:Sort title" to retrieve a sortkey and set it as the default sortkey.
--]]
local function getDefaultSortKey()
	local sortkeyModule = require("Module:Sort title")
	local sortkey = sortkeyModule._getSortKey()
	
	return currentFrame:preprocess{text = "{{DEFAULTSORT:" .. sortkey .. "}}"}
end

--[[
Local function which calls "Module:Television episode short description" to add a short description.
--]]
local function getShortDescription(args)
	local shortDescription = require("Module:Television episode short description")._getShortDescription
	return shortDescription(currentFrame, args)
end

--[[
Public function which is used to create a Redirect category shell
with relevant redirects, and a short description for a television episode.
A sort key is also added to the article.

Parameters: See module documentation for details.
--]]
function p.main(frame)
	currentFrame = frame
	local getArgs = require("Module:Arguments").getArgs
	local args = getArgs(currentFrame)
	local redirectTemplateHandler = require("Module:Redirect template handler")
	
	local validArgs = {"season_num", "season_num_uk", "episode_num", "limited", "not_dab", "parent_series", "special"}
	local redirectCategoryShell, mainRedirect, unknownParametersErrors = redirectTemplateHandler.setEpisodeRedirect(args, validArgs)

	-- Used for testcases testing.
	if (args.test) then
		-- This is not the shell, but just the redirect template names that were used.
		return redirectCategoryShell
	end
	
	-- Only add a short description to the main redirect,
	-- and not to a crossover episode, as the short description isn't set up to handle it.
	local shortDescription = ""
	if (mainRedirect and not args.series_name2) then
		shortDescription = getShortDescription(args)
	end
	
	local defaultSortKey = getDefaultSortKey()

	local seasonCategory = getSeasonCategory(args)
	
	if (unknownParametersErrors) then
		return redirectCategoryShell .. "\n" .. shortDescription .. "\n" .. defaultSortKey .. "\n" .. seasonCategory .. unknownParametersErrors
	else
		return redirectCategoryShell .. "\n" .. shortDescription .. "\n" .. defaultSortKey .. "\n" .. seasonCategory
	end
end

return p