模块:Page name

求闻百科,共笔求闻

本模块用于生成一个对某个页面(或当前页面)的一个描述性的词语。比如,在模板页面(如Template:Fullurl)返回“模板”,在用户页面(如User:Example)返回“用户”。此外,对于模板和模块文档,还会返回“模板文档”或“模块文档”。

用法

指定页面

你可以使用参数title指定一个页面的标题,如果不指定标题,将会默认为当前页面标题。例如:

  • {{#invoke: page name|main}}返回:模块
  • {{#invoke: page name|main|title=Template:Tlx}}返回:模板
  • {{#invoke: page name|main|title=火山}}返回:条目
  • {{#invoke: page name|main|title=特殊:展开模板}}返回:特殊页面
  • {{#invoke: page name|main|title=user talk:MediaWiki default}}返回:用户讨论页

指定命名空间

你可以使用参数namespace指定显示特定命名空间的页面名称。命名空间可以根据其名称、别称或id来指定。这种情况下,不会检测/doc。例如:

  • {{#invoke: page name|main|namespace=114514}}返回:页面
  • {{#invoke: page name|main|namespace=Template}}返回:模板
  • {{#invoke: page name|main|namespace=828}}返回:模块

指定繁简转换

一般地,模块会返回简体中文,并通过繁简转换系统转换为你当前看到的语言变种(如果需要转换的话)。但是某些消息页面,不支持繁简转换,需要手动转换为简体或繁体,可以设置参数variant=-1以强制显示简体,variant=1以强制显示繁体,variant=2以强制显示台湾繁体,这在消息页面中会比较实用。

代码 结果(未转换) 结果(已转换)
{{#invoke: page name|main}} -{zh-hans:模块;zh-hant:模組}- 模块
{{#invoke: page name|main|variant=1}} -{zh-hans:模块;zh-hant:模組}- 模块
{{#invoke: page name|main|variant=-1}} -{zh-hans:模块;zh-hant:模組}- 模块
{{#invoke: page name|main|title=Template:Tl/doc}} 模板-{zh-hans:文档;zh-hant:文件}- 模板文档
{{#invoke: page name|main|title=Template:Tl/doc|variant=1}} 模板-{zh-hans:文档;zh-hant:文件}- 模板文档
{{#invoke: page name|main|title=Template:Tl/doc|variant=-1}} 模板-{zh-hans:文档;zh-hant:文件}- 模板文档
{{#invoke: page name|main|title=User talk:Example}} -{zh-hans:用户;zh-hant:用戶;zh-tw:使用者}-讨论页 用户讨论页
{{#invoke: page name|main|title=User talk:Example|variant=1}} -{zh-hans:用户;zh-hant:用戶;zh-tw:使用者}-讨论页 用户讨论页
{{#invoke: page name|main|title=User talk:Example|variant=-1}} -{zh-hans:用户;zh-hant:用戶;zh-tw:使用者}-讨论页 用户讨论页

不检查文档

如果需要表述到模板或者模块本身,而不需要检查页面是否为文档,可以添加一个doc=false,例如:

代码 效果
模板链接:{{#invoke:page name|main|title=Template:Tl/doc}} 模板文档
模板链接:{{#invoke:page name|main|doc=true|title=Template:Tl/doc}} 模板文档
模板链接:{{#invoke:page name|main|doc=false|title=Template:Tl/doc}} 模板

函数用法

如需在Lua模块中使用此功能,应该使用类似于如下语法:

local pageName = require'Module:Page name'.pageName

local page
-- 如果需要获取当前页面的表述
page = pageName()

-- 如需获取特定页面(以User talk:Example为例)的表述
page = pageName(mw.title.new'User talk:Example')

-- 如需获取特定语言变种(以简体中文为例)的表述
page = pageName(nil, -1)

-- 如需获取特定页面(以Template:消息框/doc为例)的特定语言变种(以繁体中文为例)的表述
page = pageName(mw.title.new'Template:消息框/doc', 1)

从上面的示例可以看出,两个参数都是可以省略的,第一个参数表示页面标题对象(默认为当前页面标题对象),第二个参数为语言变种(默认为0,即不指定)。

此外,如果只需要获取指定命名空间的页面名称,可以直接使用

local namespacePageName = require 'Module:Page name'.namespacePageName

该参数的第一个参数为命名空间的名称或者id(若为id,应该是数字而不是用字符串)。

上述文档内容嵌入自Module:Page name/doc编辑 | 历史
编者可以在本模块的沙盒创建 | 镜像和测试样例创建页面进行实验。
请将模块自身所属的分类添加在文档中。本模块的子页面
local p = {}
local getArgs = require 'Module:Arguments'.getArgs
local yesno = require 'Module:yesno'

function p.convert(variant, simplified, traditional, taiwan, transfer)
	-- 0允许繁简转换
	-- -1强制简体
	-- 1强制繁体
	-- 2强制台湾繁体
	if not traditional then
		return simplified
	elseif variant == 2 then
		return taiwan or traditional
	elseif variant == 1 then
		return traditional
	elseif variant == -1 then
		return simplified
	else -- if variant == 0
		if transfer and taiwan then
			return string.format('-{zh-hans:%s;zh-hant:%s;zh-tw:%s}-',
								simplified, traditional, taiwan)
		elseif transfer then
			return string.format('-{zh-hans:%s;zh-hant:%s}-',
								simplified, traditional)
		else
			return simplified
		end
	end
end

local title
local function getConfig(variant)
	variant = variant or 0
	-- 0允许繁简转换
	-- -1强制简体
	-- 1强制繁体
	local t = {}
	local function convert(simplified, traditional, taiwan, transfer)
		return p.convert(variant, simplified, traditional, taiwan, transfer)
		-- 这里只是简化一下p.convert,省略一个参数。
		-- 这里的variant是getConfig函数中的,不是p.convert中的。
	end
				
	t[0] = convert('条目','條目')
	t.page = convert('页面','頁面')
	local page = t.page
	t[1] = convert('讨论页','討論頁')
	local talk = t[1]
	t[10] = convert'模板'
	t[11] = t[10] .. talk
	t[828] = convert('模块','模組',nil,true)
	t[829] = t[828] .. talk
	t[2] = convert('用户页','用戶頁','使用者頁面')
	t[3] = convert('用户','用戶','使用者',true) .. talk
	t[4] = convert('项目','專案','計畫',true) .. page
	t[5] = convert('项目','專案','計劃',true) .. talk
	t[6] = convert('文件','檔案',nil,true)
	t[7] = t[6] .. talk
	t[8] = convert('消息','介面',nil,true) .. page
	t[9] = convert('消息','介面',nil,true) .. talk
	t[12] = convert('帮助','幫助') .. page
	t[13] = convert('帮助','幫助') .. talk
	t[14] = convert('分类','分類')
	t[15] = t[14] .. talk
	t[118] = '草稿'
	t[119] = t[118] .. talk
	t[218] = '新草稿'
	t[219] = '新草稿' .. talk
	t[460] = convert('活动','活動')
	t[461] = t[460] .. talk
	t[-1] = convert('特殊页面','特殊頁面')
	t.doc = convert('文档','文件',nil,true)
	
	return t
end

p.getConfig = getConfig

function p.pageName(title, variant, doc)
	-- doc : bool 是否检查文档
	if type(title)=='string' then
		title = mw.title.new(title)
	end
	title = title or mw.title.getCurrentTitle()
	variant = variant or 0
	local id = title.namespace
	local t = getConfig(variant)
	local ret = t[id] or t.page
	if (id==10 or id==828) and doc and title.subpageText=='doc' then
		ret = ret .. t.doc
	end
	return ret
end

function p.namespacePageName(namespace, variant)
	local id = (mw.site.namespaces[namespace] or {}).id
	local t = getConfig(variant)
	return t[id] or t.page
end

function p.main(frame)
	local args = getArgs(frame)
	local title = args.title
	local namespace = args.namespace
	local variant = args.variant
	return namespace and
		p.namespacePageName(tonumber(namespace) or namespace, variant)
	or	p.pageName(title and mw.title.new(title), variant, yesno(args.doc, true) ~= false)
end

function p.template(frame)
	return p.main(frame:getParent())
end
return p