Module:Television episode redirect handler/sandbox

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/sandbox")
	
	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

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.