Module:Page

From IxWiki
Jump to navigation Jump to search

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.

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

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