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



    Farthest Frontier

    Module:Redirect hatnote

    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[edit source]

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

    Usage from Lua[edit source]

    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[edit source]


    --[[
    -- 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
    	else
    		return nil
    	end
    end
    
    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)
    end
    
    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',
    				'Template:Redirect#Errors',
    				args.category
    			)
    		end
    		redirect[i] = args[i]
    	end
    	-- Generate the text.
    	local formattedRedirect = {}
    	for k,v in pairs(redirect) do
    		formattedRedirect[k] = p._quote(v)
    	end
    	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
    		end
    	end
    	--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
    		then
    			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')
    				else
    					addCategory('Articles with redirect hatnotes needing review')
    				end
    			else
    				local target = targetTitle or redirTitle.redirectTarget
    				if target and target ~= currentTitle then
    					addCategory('Articles with redirect hatnotes needing review')
    				end
    			end
    		end
    
    		-- Generate the options to pass to [[Module:Hatnote]].
    		if currentTitle.namespace == 0 and not mhOptions.selfref
    			and redirTitle and redirTitle.namespace ~= 0
    		then
    			-- 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
    		else
    			mhOptions.selfref = options.selfref
    		end
    	end
    	--concatenate all the categories
    	local category = ''
    	for k,v in pairs(categoryTable) do
    		category = category .. k
    	end
    
    	return mHatnote._hatnote(text, mhOptions) .. category
    end
    
    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;"
    	end
    	-- Likewise if it ends with any of them
    	if quotationMarks[string.sub(title, -1, -1)] then
    		style = style .. "padding-right:0.15em;"
    	end
    	return style ~= "" and '"<span style="' .. style .. '">' .. title .. '</span>"' or '"' .. title .. '"'
    end
     
    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.