Module:Page
Jump to navigation
Jump to search
This Lua module is used in system messages, and on approximately 114,000 pages. Changes to it can cause immediate changes to the Wikipedia user interface. To avoid major disruption and server load, any changes should be tested in the module's /sandbox or /testcases subpages, or in your own module sandbox. The tested changes can be added to this page in a single edit. Please discuss changes on the talk page before implementing them. |
This module is rated as ready for general use. It has reached a mature form and is thought to be relatively bug-free and ready for use wherever appropriate. It is ready to mention on help pages and other Wikipedia resources as an option for new users to learn. To reduce server load and bad output, it should be improved by sandbox testing rather than repeated trial-and-error editing. |
This module is meant to allow the goodies listed in mw:Extension:Scribunto/Lua reference manual § Title objects to be accessed by people who do not want to write a Lua module.
Usage is: {{#invoke:Page|function|parameters}}
Functions
In the usage above, function is one of the following fields or functions for title objects:
- id: The page_id. 0 if the page does not exist.
- interwiki: The interwiki prefix, or the empty string if none.
- namespace: The namespace number.
- fragment: The fragment, or the empty string. May be assigned.
- nsText: The text of the namespace for the page.
- subjectNsText: The text of the subject namespace for the page.
- text: The title of the page, without the namespace or interwiki prefixes.
- prefixedText: The title of the page, with the namespace and interwiki prefixes.
- fullText: The title of the page, with the namespace and interwiki prefixes and the fragment.
- rootText: If this is a subpage, the title of the root page without prefixes. Otherwise, the same as title.text.
- baseText: If this is a subpage, the title of the page it is a subpage of without prefixes. Otherwise, the same as title.text.
- subpageText: If this is a subpage, just the subpage name. Otherwise, the same as title.text.
- canTalk: Whether the page for this title could have a talk page.
- exists: Whether the page exists. Alias for fileExists for Media-namespace titles.
- fileExists: Whether the file exists. For File- and Media-namespace titles, this is expensive.
- isContentPage: Whether this title is in a content namespace.
- isExternal: Whether this title has an interwiki prefix.
- isLocal: Whether this title is in this project. For example, on the English Wikipedia, any other Wikipedia is considered "local" while Wiktionary and such are not.
- isRedirect: Whether this is the title for a page that is a redirect.
- isSpecialPage: Whether this is the title for a possible special page (i.e. a page in the Special: namespace).
- isSubpage: Whether this title is a subpage of some other title.
- isTalkPage: Whether this is a title for a talk page.
- isSubpageOf( title2 ): Whether this title is a subpage of the given title.
- inNamespace( ns ): Whether this title is in the given namespace. Namespaces may be specified by anything that is a key found in mw.site.namespaces.
- inNamespaces( ... ): Whether this title is in any of the given namespaces. Namespaces may be specified by anything that is a key found in mw.site.namespaces.
- hasSubjectNamespace( ns ): Whether this title's subject namespace is in the given namespace. Namespaces may be specified by anything that is a key found in mw.site.namespaces.
- contentModel: The content model for this title, as a string.
- basePageTitle: The same as mw.title.makeTitle( title.namespace, title.baseText ).
- rootPageTitle: The same as mw.title.makeTitle( title.namespace, title.rootText ).
- talkPageTitle: The same as mw.title.makeTitle( mw.site.namespaces[title.namespace].talk.id, title.text ), or nil if this title cannot have a talk page.
- subjectPageTitle: The same as mw.title.makeTitle( mw.site.namespaces[title.namespace].subject.id, title.text ).
- subPageTitle( text ): The same as mw.title.makeTitle( title.namespace, title.text .. '/' .. text ).
- partialUrl(): Returns title.text encoded as it would be in a URL.
- fullUrl( query, proto ): Returns the full URL (with optional query table/string) for this title. proto may be specified to control the scheme of the resulting url: "http", "https", "relative" (the default), or "canonical".
- localUrl( query ): Returns the local URL (with optional query table/string) for this title.
- canonicalUrl( query ): Returns the canonical URL (with optional query table/string) for this title.
- getContent(): Returns the (unparsed) content of the page, or nil if there is no page.
Parameters
Page selection
- id = Page ID of the page to load and evaluate. If this parameter is specified, then other page selection parameters are ignored.
- page = name of the page to load and evaluate. This is parameter "text" passed to mw.title.new or "title" passed to mw.title.makeTitle in the Mediawiki documentation.
- Leave page blank to call mw.title.getCurrentTitle() and thus default to the page presently being viewed.
- makeTitle = Set this to any nonblank value to call mw.title.makeTitle. Otherwise mw.title.new is called. The functions available for these and for getCurrentTitle() are generally (exactly?) the same.
- namespace = This parameter is passed to new/makeTitle to define what page to open.
- fragment = This parameter is passed to makeTitle per the MediaWiki documentation.
- interwiki = This parameter is passed to makeTitle per the MediaWiki documentation.
Title object function parameters
- p1 is the first parameter passed to the functions within the title object.
- "title2" for isSubPageOf
- "ns" for inNamespace
- (first parameter) of inNameSpaces
- "ns" for hasSubjectNamespace
- "text" for subpageTitle
- "query" for fullUrl, localUrl, canonicalUrl
- p2 is the second parameter passed to the functions within the title object.
- (second parameter) of inNameSpaces
- "proto" for fullUrl
- p3 to p9 are collected and passed to the functions, but should only affect inNamespaces.
- p1 is the first parameter passed to the functions within the title object.
Postprocessing
- as = Changes how contents of a page is returned when function getContent() is called.
- "pre" (default) to wrap the page's content inside <pre></pre>.
- "nowiki" to wrap the page's content inside <nowiki></nowiki>
- "expand" to expand the page's content
- "raw" (or any other unrecognized value) to return the page content without any wrapping
- as = Changes how contents of a page is returned when function getContent() is called.
local callAssert = require('Module:CallAssert')
local function main(frame, field)
local args, pargs = frame.args, ( frame:getParent() or {} ).args or {}
local makeTitle=args.makeTitle or pargs.makeTitle
local namespace=args.namespace or pargs.namespace or ""
local fragment=args.fragment or pargs.fragment or ""
local interwiki=args.interwiki or pargs.interwiki or ""
local page=args.page or args[1] or pargs.page or pargs[1] or ""
local id= tonumber( args.id or pargs.id )
local pn = {}
local title -- holds the result of the mw.title.xxx call
for i = 1,9 do pn[i] = args['p'..i] or pargs['p'..i] end
if not id and not mw.ustring.match( page, '%S' ) then page = nil end
if id then
title = callAssert(mw.title.new, 'mw.title.new', id)
elseif not page then
title = callAssert(mw.title.getCurrentTitle, 'getCurrentTitle')
elseif makeTitle then
title = callAssert(mw.title.makeTitle, 'makeTitle', namespace, page, fragment, interwiki)
else
title = callAssert(mw.title.new, 'mw.title.new', page, namespace)
end
local result = title[field]
if type(result) == "function" then
result = result(title, unpack(pn))
end
return tostring(result or "")
end
-- handle all errors in main
main = require('Module:Protect')(main)
local p = {}
-- main function does all the work
local meta = {}
function meta.__index(self, key)
return function(frame)
return main(frame, key)
end
end
setmetatable(p, meta)
function p.getContent(frame)
local args, pargs = frame.args, ( frame:getParent() or {} ).args or {}
local fmt = args.as or pargs.as or "pre"
local text = main(frame, "getContent")
fmt = mw.text.split( fmt, ", ?" )
for _, how in ipairs( fmt ) do
if how == "pre" then
text = table.concat{ "<pre>", text, "</pre>" }
elseif how == "expand" then
text = frame:preprocess(text)
elseif how == "nowiki" then
text = mw.text.nowiki(text)
end
end
return text
end
return p