模 組 :Pagetype
此模块被 |
此模块已 |
語法
基本 代 码
{{#invoke:pagetype|main}}
完 整 代 码
{{#invoke:pagetype|main | page = | defaultns = | main = | user = | wikipedia = | project = | wp = | file = | image = | mediawiki = | template = | help = | category = | portal = | book = | draft = | education program = | timedtext = | module = | topic = | special = | media = | talk = | redirect = | dab = | na = | other = }}
基本 用法
如需对当
{{#invoke:pagetype|main}}
如此
页面类型 / |
输出 |
---|---|
图书 |
图书 |
其他 |
页面 |
(
範 例
结果 | |
---|---|
{{#invoke:pagetype|main}} |
頁 面 參 數
您可page
{{#invoke:pagetype|main|page=page name}}
範 例
结果 | |
---|---|
{{#invoke:pagetype|main|page= |
|
{{#invoke:pagetype|main|page=UK}} |
|
{{#invoke:pagetype|main|page=Talk: |
|
{{#invoke:pagetype|main|page=File:Example.svg}} |
|
{{#invoke:pagetype|main|page=Wikipedia:Namespace}} |
|
{{#invoke:pagetype|main|page=TimedText:Imagine.ogg.en.srt}} |
页面 |
增減 名字 空間
|user=yes
。这样
{{#invoke:pagetype|main | user = yes | wikipedia = yes | project = yes | wikiproject = yes | wp = yes | mediawiki = yes | help = yes | portal = yes | draft = yes | education program = yes | timedtext = yes | topic = yes | special = yes | media = yes }}
您可yes
"、"y
"、"true
"1
",
此类
页面类型 / |
输出 |
---|---|
User | |
Wikipedia | 維基 |
MediaWiki | MediaWiki |
Help | 幫助 |
Portal | |
WikiProject | 維基 |
Draft | |
Education | |
Timed Text | |
Topic | |
Special | |
Media |
(
您亦|template=no
,则模块
{{#invoke:pagetype|main | main = no | file = no | template = no | category = no | module = no | book = no }}
no
"、"n
"、"false
"0
",
範 例
结果 | |
---|---|
{{#invoke:pagetype|main|page=Wikipedia:Namespace}} |
|
{{#invoke:pagetype|main|page=Wikipedia:Namespace|wikipedia=yes}} |
|
{{#invoke:pagetype|main|page=Talk: |
|
{{#invoke:pagetype|main|page=Talk: |
|
{{#invoke:pagetype|main|page= |
|
{{#invoke:pagetype|main|page= |
页面 |
{{#invoke:pagetype|main|page=TimedText:Imagine.ogg.en.srt}} |
页面 |
{{#invoke:pagetype|main|page=TimedText:Imagine.ogg.en.srt|timedtext=Yes}} |
默認 名字 空間 設置
|defaultns=
all
、extended
、none
|defaultns= 值
|
|||||
---|---|---|---|---|---|
none
|
extended
|
all
|
其他值 | ||
User | |||||
Wikipedia | 維基 | ||||
File | |||||
MediaWiki | MediaWiki | ||||
Template | |||||
Help | 幫助 | ||||
Category | |||||
Portal | |||||
WikiProject | 維基 | ||||
Book | 图书 | ||||
Draft | |||||
Education Program | |||||
TimedText | |||||
Topic (Flow boards) | |||||
Special | |||||
Media |
(
範 例
结果 | |
---|---|
{{#invoke:pagetype|main|page= |
|
{{#invoke:pagetype|main|page= |
页面 |
{{#invoke:pagetype|main|page=Talk: |
|
{{#invoke:pagetype|main|page=Talk: |
|
{{#invoke:pagetype|main|page=File:Example.svg}} |
|
{{#invoke:pagetype|main|page=File:Example.svg|defaultns=none}} |
页面 |
{{#invoke:pagetype|main|page=Wikipedia:Namespace}} |
|
{{#invoke:pagetype|main|page=Wikipedia:Namespace|defaultns=extended}} |
|
{{#invoke:pagetype|main|page=TimedText:Imagine.ogg.en.srt|defaultns=extended}} |
页面 |
{{#invoke:pagetype|main|page=TimedText:Imagine.ogg.en.srt|defaultns=all}} |
自 訂 名字 空間 值
{{#invoke:pagetype|main | main =文字 | user =文字 | wikipedia =文字 | project =文字 | wp =文字 | file =文字 | image =文字 | mediawiki =文字 | template =文字 | help =文字 | category =文字 | portal =文字 | book =文字 | draft =文字 | education program =文字 | timedtext =文字 | module =文字 | topic =文字 | special =文字 | media =文字 }}
範 例
结果 | |
---|---|
{{#invoke:pagetype|main|page=Wikipedia:Namespace}} |
|
{{#invoke:pagetype|main|page=Wikipedia:Namespace|wikipedia= |
|
{{#invoke:pagetype|main|page=Talk: |
|
{{#invoke:pagetype|main|page=Talk: |
|
{{#invoke:pagetype|main|page= |
|
{{#invoke:pagetype|main|page= |
|
{{#invoke:pagetype|main|page=TimedText:Imagine.ogg.en.srt}} |
页面 |
{{#invoke:pagetype|main|page=TimedText:Imagine.ogg.en.srt|timedtext= |
討論 參 數
talk
talk
{{#invoke:pagetype|main|talk=yes}}
{{#invoke:pagetype|main|talk=文字 }}
"talk=yes
"
範 例
结果 | |
---|---|
{{#invoke:pagetype|main|page=Wikipedia talk:Namespace}} |
|
{{#invoke:pagetype|main|page=Wikipedia talk:Namespace|wikipedia=yes}} |
|
{{#invoke:pagetype|main|page=Wikipedia talk:Namespace|talk=yes}} |
|
{{#invoke:pagetype|main|page=Wikipedia talk:Namespace|wikipedia=yes|talk=yes}} |
|
{{#invoke:pagetype|main|page=Wikipedia talk:Namespace|talk= |
|
{{#invoke:pagetype|main|page=Wikipedia talk:Namespace|wikipedia=yes|talk= |
主 名字 空 间评级
对于
{{#invoke:pagetype|main|class}}
如果该评级值与
评级 | 评级值 | 输出 |
---|---|---|
disambiguation 、disambig 、disamb 、dab |
页面 | |
na 、n/a |
页面 |
自 定 义主名字 空 间评级
{{#invoke:pagetype|main|class|dab=yes|na=yes}}
{{#invoke:pagetype|main|class|dab=文字 |na=文字 }}
- dab:
消 歧义级页面 的 自 定 义值,若 设为"yes
"、"y
"、"true
"或 "1
",则生成 "消 歧义页"。若 设为"no
"、"n
"、"false
"或 "0
",则不生成 自 定 义值。若 设为其他任 何 值,则生成 该文本 。 - na:
不 适用级页面 的 自 定 义值,与 dab
参 数 的 运作方式 相 同 。默 认值为"yes
",即 "页面"。
範 例
结果 | |
---|---|
{{#invoke:pagetype|main|page= |
|
{{#invoke:pagetype|main|page= |
页面 |
{{#invoke:pagetype|main|page= |
|
{{#invoke:pagetype|main|page= |
页面 |
{{#invoke:pagetype|main|page= |
重定 向
{{#invoke:pagetype|main|redirect=no}}
{{#invoke:pagetype|main|redirect=文字 }}
範 例
结果 | |
---|---|
{{#invoke:pagetype|main|page=UK}} |
|
{{#invoke:pagetype|main|page=UK|redirect=no}} |
|
{{#invoke:pagetype|main|page=UK|redirect= |
其他名字 空間
页面
",该值|other=
{{#invoke:pagetype|main|other=文字 }}
範 例
结果 | |
---|---|
{{#invoke:pagetype|main|page=Wikipedia:Namespace}} |
|
{{#invoke:pagetype|main|page=Wikipedia:Namespace|other= |
|
{{#invoke:pagetype|main|page=Wikipedia:Namespace|other= |
--------------------------------------------------------------------------------
-- --
-- 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)
if redirect then
return redirect
else
return getNsDetectValue(args)
end
end
function p.main(frame)
local args = getArgs(frame)
return p._main(args)
end
return p