模組:Namespace/ForEach
外观

概要
[编辑]由Module:TemplateParameters#getFormatingStringByArgument擴展而來的用法,用來大量印出一樣的命名空間資料,如Wikipedia:编辑提示#建立編輯提示
參數及使用方法
[编辑]{{#invoke:Namespace/ForEach|main |template=<nowiki> * {{{nsid}}}:{{{ns}}}({{NSPN|2={{{nsid}}}}})</nowiki> |cond=<nowiki>{{#expr:{{{nsid}}}>=0}}</nowiki> |delnowiki=true |delmingw=true }}
- 0:(条目)
- 1:Talk(讨论)
- 2:User(用户)
- 3:User talk(用户讨论)
- 4:Wikipedia(项目)
- 5:Wikipedia talk(项目讨论)
- 6:File(文件)
- 7:File talk(文件讨论)
- 8:MediaWiki(界面)
- 9:MediaWiki talk(界面讨论)
- 10:Template(Template)
- 11:Template talk(模板讨论)
- 12:Help(帮助)
- 13:Help talk(帮助讨论)
- 14:Category(分类)
- 15:Category talk(分类讨论)
- 100:Portal(主题)
- 101:Portal talk(主题讨论)
- 102:WikiProject(维基专题)
- 103:WikiProject talk(维基专题讨论)
- 118:Draft(Draft)
- 119:Draft talk(草稿讨论)
- 126:MOS(MOS)
- 127:MOS talk(MOS talk)
- 710:TimedText(TimedText)
- 711:TimedText talk(字幕讨论)
- 828:Module(模块)
- 829:Module talk(模块讨论)
- 2600:Topic(结构式讨论)
- template支援參數列表:
nsid
:命名空間IDns
:命名空間名稱(相當於{{ns:{{{nsid}}}}}
)
- cond支援參數列表:
nsid
:命名空間ID
local p = {}
local getArgs = require('Module:Arguments').getArgs
local mError = require('Module:Error')
local mTemplateParameters = require('Module:TemplateParameters')
local yesno = require('Module:Yesno')
local data = mw.loadData('Module:Namespace/data')
local function formatStringWrap(str, args, forcePreprocess)
if not mw.ustring.match(str, '{') then
return str
end
local result = mTemplateParameters._getFormatingStringByArgument(str, args)
if mw.ustring.match(result, '{') and forcePreprocess then
result = mw.getCurrentFrame():preprocess(result)
end
return result
end
local function tryInvoke(expr, args, forcePreprocess)
if type(expr) == type(tryInvoke) then
return expr(args, forcePreprocess)
end
return formatStringWrap(tostring(expr), args, forcePreprocess)
end
function p._format(template, cond, reverse)
cond = cond or function () return true end
reverse = reverse or false
local output = ''
local function forEach(nsid)
local nsData = mw.site.namespaces[nsid]
if yesno(tryInvoke(cond, {nsid = nsid}, true)) then
output = output .. tryInvoke(template, {nsid = nsid, ns = nsData.name})
end
end
if reverse then
for index = #data.Namespace.list, 1, -1 do
forEach(data.Namespace.list[index])
end
else
for _, nsid in ipairs(data.Namespace.list) do
forEach(nsid)
end
end
return output
end
function p._main(args)
local template = args.template or args.format or args[1] or args['1']
local cond = args.cond or args[2] or args['2'] or 'false'
local delnowiki = yesno(args.delnowiki)
local delmsgnw = yesno(args.delmsgnw)
local reverse = yesno(args.reverse)
if not template or template == '' then
error('沒有提供渲染模板。')
end
if delnowiki then
template = mw.text.unstripNoWiki(template)
cond = mw.text.unstripNoWiki(cond)
end
if delmsgnw then
template = mw.text.decode(template)
cond = mw.text.unstripNoWiki(cond)
end
return mw.getCurrentFrame():preprocess(p._format(template, cond, reverse))
end
function p.main(frame)
local args = getArgs(frame)
local status, result = pcall(p._main, args)
return status and result or mError.error{'[[Module:Namespace/ForEach]]錯誤:' .. result}
end
return p