Create a new article
Write your page title here:
We currently have 230 articles on Farthest Frontier. Type your article name above or create one of the articles listed here!

    Farthest Frontier

    This module produces a hatnote for disambiguating a page that is linked to by a given redirect. It implements the {{redirect}} hatnote template.

    Usage from wikitext

    This module cannot be used directly from wikitext. Please use the {{redirect}} or {{redirect2}} templates instead.

    Usage from Lua

    To use this module from Lua, first load the module.

    local mRedirectHatnote = require('Module:Redirect hatnote')

    The module can then be used with the following syntax:

    mRedirectHatnote._redirect(redirect, data, options, titleObj)

    See also

    -- This module produces a "redirect" hatnote. It looks like this:
    -- '"X" redirects here. For other uses, see Y.'
    -- It implements the {{redirect}} template.
    local mHatnote = require('Module:Hatnote')
    local mHatList = require('Module:Hatnote list')
    local mArguments --lazily initialize
    local libraryUtil = require('libraryUtil')
    local checkType = libraryUtil.checkType
    local checkTypeMulti = libraryUtil.checkTypeMulti
    local p = {}
    local function getTitle(...)
    	local success, titleObj = pcall(mw.title.new, ...)
    	if success then
    		return titleObj
    		return nil
    function p.redirect(frame)
    	mArguments = require('Module:Arguments')
    	local args = mArguments.getArgs(frame, {parentOnly=true})
    	--Get number of redirects
    	local numRedirects = tonumber(frame.args[1]) or 1
    	-- Create the options table.
    	local options = {}
    	options.selfref = args.selfref
    	return p._redirect(args, numRedirects, options)
    function p._redirect(args, numRedirects, options, currentTitle, redirectTitle, targetTitle)
    	-- Validate the input. Don't bother checking currentTitle, redirectTitle or
    	-- targetTitle, as they are only used in testing.
    	checkType('_redirect', 1, args, 'table')
    	checkType('_redirect', 2, numRedirects, 'number', true)
    	numRedirects = numRedirects or 1
    	checkType('_redirect', 3, options, 'table', true)
    	options = options or {}
    	currentTitle = currentTitle or mw.title.getCurrentTitle()
    	-- Get the table of redirects
    	local redirect = {}
    	for i = 1, numRedirects do
    		-- Return an error if a redirect parameter is missing.
    		if not args[i] then
    			return mHatnote.makeWikitextError(
    				'missing redirect parameter',
    		redirect[i] = args[i]
    	-- Generate the text.
    	local formattedRedirect = {}
    	for k,v in pairs(redirect) do
    		formattedRedirect[k] = p._quote(v)
    	local text = {
    		mHatList.andList(formattedRedirect) .. ' ' .. (#redirect == 1 and 'redirects' or 'redirect') .. ' here.',
    		mHatList._forSee(args, #redirect + 1, {title = redirect[1], extratext = args.text})
    	text = table.concat(text, ' ')
    	-- Functionality for adding categories	
    	local categoryTable = {}
    	local function addCategory(cat)
    		if cat and cat ~= '' then
    			-- Add by index to avoid duplicates
    			categoryTable[string.format('[[Category:%s]]', cat)] = true
    	--Generate tracking categories
    	local mhOptions = {}
    	local redirTitle
    	for k,v in pairs(redirect) do
    		-- We don't need a tracking category if the template invocation has been
    		-- copied directly from the docs, or if we aren't in main- or category-space.
    		if not v:find('^REDIRECT%d*$') and v ~= 'TERM' -- 
    			and currentTitle.namespace == 0 or currentTitle.namespace == 14
    			redirTitle = redirectTitle or getTitle(v)
    			if not redirTitle or not redirTitle.exists then
    				addCategory('Missing redirects')
    			elseif not redirTitle.isRedirect then
    				if string.find(redirTitle:getContent(), '#invoke:RfD') then
    					addCategory('Articles with redirect hatnotes impacted by RfD')
    					addCategory('Articles with redirect hatnotes needing review')
    				local target = targetTitle or redirTitle.redirectTarget
    				if target and target ~= currentTitle then
    					addCategory('Articles with redirect hatnotes needing review')
    		-- Generate the options to pass to [[Module:Hatnote]].
    		if currentTitle.namespace == 0 and not mhOptions.selfref
    			and redirTitle and redirTitle.namespace ~= 0
    			-- We are on a mainspace page, and the hatnote starts with something
    			-- like "Wikipedia:Foo redirects here", so automatically label it as
    			-- a self-reference.
    			mhOptions.selfref = true
    			mhOptions.selfref = options.selfref
    	--concatenate all the categories
    	local category = ''
    	for k,v in pairs(categoryTable) do
    		category = category .. k
    	return mHatnote._hatnote(text, mhOptions) .. category
    function p._quote(title)
    	local quotationMarks = {["'"]=true, ['"']=true, ['“']=true, ["‘"]=true, ['”']=true, ["’"]=true}
    	local style = ""
    	-- If string starts with anything in quotationMarks, kern to same degree {{-'}} does
    	if quotationMarks[string.sub(title, 1, 1)] then
    		style = "padding-left:0.15em;"
    	-- Likewise if it ends with any of them
    	if quotationMarks[string.sub(title, -1, -1)] then
    		style = style .. "padding-right:0.15em;"
    	return style ~= "" and '"<span style="' .. style .. '">' .. title .. '</span>"' or '"' .. title .. '"'
    return p
    Cookies help us deliver our services. By using our services, you agree to our use of cookies.
    Cookies help us deliver our services. By using our services, you agree to our use of cookies.