×
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 is used to detect the page type of a given page. It detects redirect pages automatically and is highly customisable. It can be used on its own or as a meta-module to create other page-type-detection templates. This module can also be accessed using {{pagetype}}.

    Syntax

    Basic usage
    {{#invoke:pagetype|main}}
    
    All parameters
    {{#invoke:pagetype|main
    | page              = 
    | defaultns         = 
    | main              = 
    | user              = 
    | wikipedia         = 
    | project           = 
    | wp                = 
    | file              = 
    | image             = 
    | mediawiki         = 
    | template          = 
    | help              = 
    | category          = 
    | portal            = 
    | draft             = 
    | timedtext         = 
    | module            = 
    | topic             = 
    | special           = 
    | media             = 
    | talk              = 
    | redirect          = 
    | dab               = 
    | na                = 
    | other             = 
    | plural            = 
    }}
    

    Basic usage

    For simple detection of the page type of the current page, use the default settings:

    {{#invoke:pagetype|main}}
    

    That will produce the following results, depending on the page type or the namespace:

    Page type / namespace Output
    Redirects (in any namespace) redirect
    Main namespace article
    File namespace file
    Template namespace template
    Category namespace category
    Module namespace module
    Other namespaces page

    If the module is used on a talk page, it will detect the page type for the corresponding subject page.

    Example
    Code Result
    {{#invoke:pagetype|main}} module

    Page parameter

    You can use the page parameter to make the module act as though it was called from that page.

    {{#invoke:pagetype|main|page=page name}}
    
    Examples
    Code Result
    {{#invoke:pagetype|main|page=United Kingdom}} article
    {{#invoke:pagetype|main|page=UK}} article
    {{#invoke:pagetype|main|page=Talk:United Kingdom}} article
    {{#invoke:pagetype|main|page=File:Example.svg}} file
    {{#invoke:pagetype|main|page=Wikipedia:Namespace}} article
    {{#invoke:pagetype|main|page=TimedText:Imagine.ogg.en.srt}} page

    Adding and removing namespaces

    It is possible to specify different behaviour for each namespace than that described in the basic usage section. For example, you might want the module to display "user page" for pages in the user namespace, instead of the default "page". To do this, you can use the code |user=yes. This looks up the typical name used for pages in the user namespace, in this case "user page", and uses that text when the module is used with a page in the user namespace. To use this with other namespaces, use the namespace name in lower case as a parameter:

    {{#invoke:pagetype|main
    | user              = yes
    | wikipedia         = yes
    | project           = yes
    | wp                = yes
    | mediawiki         = yes
    | help              = yes
    | portal            = yes
    | draft             = yes
    | timedtext         = yes
    | topic             = yes
    | special           = yes
    | media             = yes
    }}
    

    You can use any of the following to specify the namespace: "yes", "y", "true" or "1". They can be used in any combination of upper and lower case. (These values are defined by Module:Yesno.)

    The default text for these namespaces is as follows:

    Page type / namespace Output
    User namespace user page
    Wikipedia namespace project page
    MediaWiki namespace interface page
    Help namespace help page
    Portal namespace portal
    Draft namespace draft
    Timed Text namespace Timed Text page
    Topic namespace topic
    Special namespace special page
    Media namespace file

    You can use a similar process to remove any of the default namespace values as well. For example, if you use the code |template=no, then the module will display "page" when used on a template page, rather than the default "template".

    {{#invoke:pagetype|main
    | main     = no
    | file     = no
    | template = no
    | category = no
    | module   = no
    }}
    

    The following values will all work to remove namespace values: "no", "n", "false" or "0". They can be used in any combination of upper and lower case.

    Examples
    Code Result
    {{#invoke:pagetype|main|page=Wikipedia:Namespace}} article
    {{#invoke:pagetype|main|page=Wikipedia:Namespace|wikipedia=yes}} article
    {{#invoke:pagetype|main|page=Talk:United Kingdom}} article
    {{#invoke:pagetype|main|page=Talk:United Kingdom|talk=y}} talk page
    {{#invoke:pagetype|main|page=United Kingdom}} article
    {{#invoke:pagetype|main|page=United Kingdom|main=no}} page
    {{#invoke:pagetype|main|page=TimedText:Imagine.ogg.en.srt}} page
    {{#invoke:pagetype|main|page=TimedText:Imagine.ogg.en.srt|timedtext=Yes}} Timed Text page

    Default namespace sets

    As well as adding and removing individual namespaces, it is possible to specify different sets of namespaces by using the |defaultns=. There are four different sets available: all, extended, none and the default set. These sets allow you to specify many namespaces at once, without having to use all of the individual namespace parameters. Namespaces are set according to the following table:

    Namespace Value of |defaultns= Output
    none extended all Other values
    Main Template:Cross
    1. REDIRECT w:Template:Tick
    1. REDIRECT w:Template:Tick
    1. REDIRECT w:Template:Tick
    article
    User Template:Cross
    1. REDIRECT w:Template:Tick
    1. REDIRECT w:Template:Tick
    Template:Cross user page
    Wikipedia Template:Cross
    1. REDIRECT w:Template:Tick
    1. REDIRECT w:Template:Tick
    Template:Cross project page
    File Template:Cross
    1. REDIRECT w:Template:Tick
    1. REDIRECT w:Template:Tick
    1. REDIRECT w:Template:Tick
    file
    MediaWiki Template:Cross
    1. REDIRECT w:Template:Tick
    1. REDIRECT w:Template:Tick
    Template:Cross interface page
    Template Template:Cross
    1. REDIRECT w:Template:Tick
    1. REDIRECT w:Template:Tick
    1. REDIRECT w:Template:Tick
    template
    Help Template:Cross
    1. REDIRECT w:Template:Tick
    1. REDIRECT w:Template:Tick
    Template:Cross help page
    Category Template:Cross
    1. REDIRECT w:Template:Tick
    1. REDIRECT w:Template:Tick
    1. REDIRECT w:Template:Tick
    category
    Portal Template:Cross
    1. REDIRECT w:Template:Tick
    1. REDIRECT w:Template:Tick
    Template:Cross portal
    Draft Template:Cross
    1. REDIRECT w:Template:Tick
    1. REDIRECT w:Template:Tick
    Template:Cross draft
    TimedText Template:Cross Template:Cross
    1. REDIRECT w:Template:Tick
    Template:Cross Timed Text page
    Module Template:Cross
    1. REDIRECT w:Template:Tick
    1. REDIRECT w:Template:Tick
    1. REDIRECT w:Template:Tick
    module
    Topic (Flow boards) Template:Cross Template:Cross
    1. REDIRECT w:Template:Tick
    Template:Cross topic
    All talk namespaces Template:Cross Template:Cross
    1. REDIRECT w:Template:Tick
    Template:Cross talk page
    Special Template:Cross Template:Cross
    1. REDIRECT w:Template:Tick
    Template:Cross special page
    Media Template:Cross Template:Cross
    1. REDIRECT w:Template:Tick
    Template:Cross file
    Examples
    Code Result
    {{#invoke:pagetype|main|page=United Kingdom}} article
    {{#invoke:pagetype|main|page=United Kingdom|defaultns=none}} page
    {{#invoke:pagetype|main|page=Talk:United Kingdom}} article
    {{#invoke:pagetype|main|page=Talk:United Kingdom|defaultns=all}} talk page
    {{#invoke:pagetype|main|page=File:Example.svg}} file
    {{#invoke:pagetype|main|page=File:Example.svg|defaultns=none}} page
    {{#invoke:pagetype|main|page=Wikipedia:Namespace}} article
    {{#invoke:pagetype|main|page=Wikipedia:Namespace|defaultns=extended}} article
    {{#invoke:pagetype|main|page=TimedText:Imagine.ogg.en.srt|defaultns=extended}} page
    {{#invoke:pagetype|main|page=TimedText:Imagine.ogg.en.srt|defaultns=all}} Timed Text page

    Custom namespace values

    It is possible to specify a custom value for any namespace:

    {{#invoke:pagetype|main
    | main              = custom text
    | user              = custom text
    | wikipedia         = custom text
    | project           = custom text
    | wp                = custom text
    | file              = custom text
    | image             = custom text
    | mediawiki         = custom text
    | template          = custom text
    | help              = custom text
    | category          = custom text
    | portal            = custom text
    | draft             = custom text
    | timedtext         = custom text
    | module            = custom text
    | topic             = custom text
    | special           = custom text
    | media             = custom text
    }}
    
    Examples
    Code Result
    {{#invoke:pagetype|main|page=Wikipedia:Namespace}} article
    {{#invoke:pagetype|main|page=Wikipedia:Namespace|wikipedia=custom text}} article
    {{#invoke:pagetype|main|page=Talk:United Kingdom}} article
    {{#invoke:pagetype|main|page=Talk:United Kingdom|talk=custom text}} custom text
    {{#invoke:pagetype|main|page=United Kingdom}} article
    {{#invoke:pagetype|main|page=United Kingdom|main=custom text}} custom text
    {{#invoke:pagetype|main|page=TimedText:Imagine.ogg.en.srt}} page
    {{#invoke:pagetype|main|page=TimedText:Imagine.ogg.en.srt|timedtext=custom text}} custom text

    Talk parameter

    Normally, the module will treat talk pages as if they were in the corresponding subject namespace. However, if the talk parameter is set, the module will treat talk pages separately from subject pages. The talk parameter sets values for all talk pages, i.e. pages in the Talk: namespace, pages in the User talk: namespace, pages in the Wikipedia talk: namespace, and so on.

    {{#invoke:pagetype|main|talk=yes}}
    
    {{#invoke:pagetype|main|talk=custom text}}
    

    The default value for "talk=yes" is "talk page".

    Examples
    Code Result
    {{#invoke:pagetype|main|page=Wikipedia talk:Namespace}} article
    {{#invoke:pagetype|main|page=Wikipedia talk:Namespace|wikipedia=yes}} article
    {{#invoke:pagetype|main|page=Wikipedia talk:Namespace|talk=yes}} article
    {{#invoke:pagetype|main|page=Wikipedia talk:Namespace|wikipedia=yes|talk=yes}} article
    {{#invoke:pagetype|main|page=Wikipedia talk:Namespace|talk=custom text}} article
    {{#invoke:pagetype|main|page=Wikipedia talk:Namespace|wikipedia=yes|talk=custom text}} article

    Main namespace classes

    For pages in the main namespace, it is possible to add a class value in the first positional parameter:

    {{#invoke:pagetype|main|class}}
    

    If the class value matches one of the values in the table below, it will produce an alternative to the default output of article.

    Class Class values Output
    Disambiguation page disambiguation, disambig, disamb, dab page
    No applicable class na, n/a page

    You can input the class value in any combination of upper and lower case.

    Custom main namespace classes

    It is also possible to specify a custom value for the main namespace classes:

    {{#invoke:pagetype|main|class|dab=yes|na=yes}}
    
    {{#invoke:pagetype|main|class|dab=custom text|na=custom text}}
    

    This works the same way that it does for the custom namespace page types. Possible parameters are:

    • dab: a custom value for disambiguation-class pages. If set to "yes", "y", "true" or "1", this produces "disambiguation page". If set to "no", "n", "false" or "0", no custom value is produced. If set to any other value it produces that text.
    • na: a custom value for NA-class pages. It works in the same way as the dab parameter. The default value for "yes" etc. is "page".
    Examples
    Code Result
    {{#invoke:pagetype|main|page=United Kingdom}} article
    {{#invoke:pagetype|main|page=United Kingdom|dab}} page
    {{#invoke:pagetype|main|page=United Kingdom|dab|dab=custom text}} custom text
    {{#invoke:pagetype|main|page=United Kingdom|na}} page
    {{#invoke:pagetype|main|page=United Kingdom|na|na=custom text}} custom text

    Redirects

    By default, the module automatically detects redirects in all namespace. It is not possible to specify redirect behaviour by namespace, but you can turn redirect detection off, or use a custom value for redirect pages.

    {{#invoke:pagetype|main|redirect=no}}
    
    {{#invoke:pagetype|main|redirect=custom text}}
    
    Examples
    Code Result
    {{#invoke:pagetype|main|page=UK}} article
    {{#invoke:pagetype|main|page=UK|redirect=no}} article
    {{#invoke:pagetype|main|page=UK|redirect=custom text}} article

    Other namespaces

    By default, the module produces "page" if used from a namespace that hasn't been specified. This value can be changed with the |other= parameter:

    {{#invoke:pagetype|main|other=custom text}}
    
    Examples
    Code Result
    {{#invoke:pagetype|main|page=Wikipedia:Namespace}} article
    {{#invoke:pagetype|main|page=Wikipedia:Namespace|other=custom text}} article
    {{#invoke:pagetype|main|page=Wikipedia:Namespace|other=custom text|wikipedia=wikipedia-space text}} article

    Plurals

    By default the module returns the name of the namespace in the singular. Adding the parameter |plural=y returns the plural form.

    Code Result
    {{#invoke:pagetype|main|page=United Kingdom}} article
    {{#invoke:pagetype|main|page=United Kingdom|plural=y}} articles
    {{#invoke:pagetype|main|page=Category:Books}} category
    {{#invoke:pagetype|main|page=Category:Books|plural=y}} categories

    The rules for pluralisation can be customised in Module:Pagetype/config to allow localisation.

    Capitalisation

    By default the module returns the page type in lowercase. Adding the parameter |caps=y returns a version with a capital letter at the start.

    Code Result
    {{#invoke:pagetype|main|page=United Kingdom}} article
    {{#invoke:pagetype|main|page=United Kingdom|caps=y}} Article
    {{#invoke:pagetype|main|page=United Kingdom|plural=y|caps=y}} Articles

    --------------------------------------------------------------------------------
    --                                                                            --
    --                                PAGETYPE                                    --
    --                                                                            --
    --      This is a meta-module intended to replace {{pagetype}} and similar    --
    --      templates. It automatically detects namespaces, and allows for a      --
    --      great deal of customisation. It can easily be ported to other         --
    --      wikis by changing the values in the [[Module:Pagetype/config]].       --
    --                                                                            --
    --------------------------------------------------------------------------------
    
    -- Load config.
    local cfg = mw.loadData('Module:Pagetype/config')
    
    -- Load required modules.
    local getArgs = require('Module:Arguments').getArgs
    local yesno = require('Module:Yesno')
    local nsDetectModule = require('Module:Namespace detect')
    local nsDetect = nsDetectModule._main
    local getParamMappings = nsDetectModule.getParamMappings
    local getPageObject = nsDetectModule.getPageObject
    
    local p = {}
    
    local function shallowCopy(t)
    	-- Makes a shallow copy of a table.
    	local ret = {}
    	for k, v in pairs(t) do
    		ret[k] = v
    	end
    	return ret
    end
    
    local function checkPagetypeInput(namespace, val)
    	-- Checks to see whether we need the default value for the given namespace,
    	-- and if so gets it from the pagetypes table.
    	-- The yesno function returns true/false for "yes", "no", etc., and returns
    	-- val for other input.
    	local ret = yesno(val, val)
    	if ret and type(ret) ~= 'string' then
    		ret = cfg.pagetypes[namespace]
    	end
    	return ret
    end
    
    local function getPagetypeFromClass(class, param, aliasTable, default)
    	-- Gets the pagetype from a class specified from the first positional
    	-- parameter.
    	param = yesno(param, param)
    	if param ~= false then -- No check if specifically disallowed.
    		for _, alias in ipairs(aliasTable) do
    			if class == alias then
    				if type(param) == 'string' then
    					return param
    				else
    					return default
    				end
    			end
    		end
    	end
    end
    
    local function getNsDetectValue(args)
    	-- Builds the arguments to pass to [[Module:Namespace detect]] and returns
    	-- the result.
    
    	-- Get the default values.
    	local ndArgs = {}
    	local defaultns = args[cfg.defaultns]
    	if defaultns == cfg.defaultnsAll then
    		ndArgs = shallowCopy(cfg.pagetypes)
    	else
    		local defaultnsArray
    		if defaultns == cfg.defaultnsExtended then
    			defaultnsArray = cfg.extendedNamespaces
    		elseif defaultns == cfg.defaultnsNone then
    			defaultnsArray = {}
    		else
    			defaultnsArray = cfg.defaultNamespaces
    		end
    		for _, namespace in ipairs(defaultnsArray) do
    			ndArgs[namespace] = cfg.pagetypes[namespace]
    		end
    	end
    
    	--[[
    	-- Add custom values passed in from the arguments. These overwrite the
    	-- defaults. The possible argument names are fetched from
    	-- Module:Namespace detect automatically in case new namespaces are
    	-- added. Although we accept namespace aliases as parameters, we only pass
    	-- the local namespace name as a parameter to Module:Namespace detect.
    	-- This means that the "image" parameter can overwrite defaults for the
    	-- File: namespace, which wouldn't work if we passed the parameters through
    	-- separately.
    	--]]
    	local mappings = getParamMappings()
    	for ns, paramAliases in pairs(mappings) do
    		-- Copy the aliases table, as # doesn't work with tables returned from
    		-- mw.loadData.
    		paramAliases = shallowCopy(paramAliases)
    		local paramName = paramAliases[1]
    		-- Iterate backwards along the array so that any values for the local
    		-- namespace names overwrite those for namespace aliases.
    		for i = #paramAliases, 1, -1 do
    			local paramAlias = paramAliases[i]
    			local ndArg = checkPagetypeInput(paramAlias, args[paramAlias])
    			if ndArg == false then
    				-- If any arguments are false, convert them to nil to protect
    				-- against breakage by future changes to
    				-- [[Module:Namespace detect]].
    				ndArgs[paramName] = nil
    			elseif ndArg then
    				ndArgs[paramName] = ndArg
    			end
    		end
    	end
    	-- Check for disambiguation-class and N/A-class pages in mainspace.
    	if ndArgs.main then
    		local class = args[1]
    		if type(class) == 'string' then
    			-- Put in lower case so e.g. "Dab" and "dab" will both match.
    			class = mw.ustring.lower(class)
    		end
    		local dab = getPagetypeFromClass(
    			class,
    			args[cfg.dab],
    			cfg.dabAliases,
    			cfg.dabDefault
    		)
    		if dab then
    			ndArgs.main = dab
    		else
    			local na = getPagetypeFromClass(
    				class,
    				args[cfg.na],
    				cfg.naAliases,
    				cfg.naDefault
    			)
    			if na then
    				ndArgs.main = na
    			end
    		end
    	end
    	-- If there is no talk value specified, use the corresponding subject 
    	-- namespace for talk pages.
    	if not ndArgs.talk then
    		ndArgs.subjectns = true
    	end
    	-- Add the fallback value. This can also be customised, but it cannot be
    	-- disabled.
    	local other = args[cfg.other]
    	-- We will ignore true/false/nil results from yesno here, but using it
    	-- anyway for consistency.
    	other = yesno(other, other)
    	if type(other) == 'string' then
    		ndArgs.other = other
    	else
    		ndArgs.other = cfg.otherDefault
    	end
    	-- Allow custom page values.
    	ndArgs.page = args.page
    	return nsDetect(ndArgs)
    end
    
    local function detectRedirects(args)
    	local redirect = args[cfg.redirect]
    	-- The yesno function returns true/false for "yes", "no", etc., and returns
    	-- redirect for other input.
    	redirect = yesno(redirect, redirect)
    	if redirect == false then
    		-- Detect redirects unless they have been explicitly disallowed with
    		-- "redirect=no" or similar.
    		return
    	end
    	local pageObject = getPageObject(args.page)
    	-- If we are using subject namespaces elsewhere, do so here as well.
    	if pageObject
    		and not yesno(args.talk, true)
    		and args[cfg.defaultns] ~= cfg.defaultnsAll
    	then
    		pageObject = getPageObject(
    			pageObject.subjectNsText .. ':' .. pageObject.text
    		)
    	end
    	-- Allow custom values for redirects.
    	if pageObject and pageObject.isRedirect then
    		if type(redirect) == 'string' then
    			return redirect
    		else
    			return cfg.redirectDefault
    		end
    	end
    end
    
    function p._main(args)
    	local redirect = detectRedirects(args)
    	local pagetype = ""
    	if redirect then
    		pagetype = redirect
    	else
    		pagetype = getNsDetectValue(args)
    	end
    	if yesno(args.plural, false) then
    		if cfg.irregularPlurals[pagetype] then
    			pagetype = cfg.irregularPlurals[pagetype]
    		else
    			pagetype = pagetype .. cfg.plural -- often 's'
    		end
    	end
    	if yesno(args.caps, false) then
    		pagetype = mw.ustring.upper(mw.ustring.sub(pagetype, 1, 1)) ..
    			mw.ustring.sub(pagetype, 2)
    	end
    	return pagetype
    end
    
    function p.main(frame)
    	local args = getArgs(frame)
    	return p._main(args)
    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.