跳转到内容

模組:Namespace

被永久保护的模块
维基百科,自由的百科全书

这是本页的一个历史版本,由SunAfterRain留言 | 贡献2021年2月4日 (四) 12:11编辑。这可能和当前版本存在着巨大的差异。

local p = {}

local function lan (args, lang)
	-- from [[Module:Lan]]
	local userlanguage = lang or mw.getCurrentFrame():callParserFunction{ name = 'int', args = {'Conversionname'} }
	local fallbackList = require('Module:Lan').fallbackList
	local fallback = fallbackList[userlanguage]
	if fallback == nil then
		fallback = fallbackList['zh']
	end
	for _,langArgName in ipairs(fallback)  do
		if 	args[langArgName] ~= nil then
			return args[langArgName]
		end
	end
	return ''
end

local function ifempty (ret, val)
	return ret ~= '' and ret or val
end

local MessageCallFunc = {
	['NS'] = (function (nsid) 
		return nsid < 0 and 'nstab-' .. mw.site.namespaces[nsid].canonicalName:lower() or 'Conversion-ns' .. nsid
	end),
	['NS1'] = (function (nsid) 
		return 'nstab-' .. ifempty(mw.site.namespaces[nsid].canonicalName:lower(), 'main')
	end),
}

for key, func in pairs(MessageCallFunc) do
	p['_' .. key] = function (args)
		local lang = ifempty(args[1] and args[1]:lower(), mw.getCurrentFrame():callParserFunction{ name = 'int', args = {'Conversionname'} })
		local arg = args[2]
		local nsid
		local isTalk = false
		if arg then
			if arg == '' then
				nsid = -3
			else
				local nsid_info = mw.site.namespaces[tonumber(arg)] or mw.site.namespaces[arg]
				if not nsid_info then
					nsid = -3
				else
					nsid = nsid_info.id
				end
			
			end
		else
			nsid = mw.title.getCurrentTitle().namespace
		end
		if nsid < -2 then
			return tostring(mw.html.create('span'):attr('style', 'color:red;'):wikitext(
				lan ({
					['zh'] = 'Input namespace error',
					['zh-hans'] = '输入名字空间错误',
					['zh-hant'] = '輸入命名空間錯誤'
				}, lang)
			):done())
		elseif mw.site.talkNamespaces[nsid] then
			nsid = nsid - 1
			isTalk = true
		end
		return 
			mw.message.new(func(nsid)):inLanguage(lang):plain() .. 
			(isTalk and mw.message.new('talk'):inLanguage(lang):plain() or '')
	end
	
	p[key] = function (frame) 
		local args = require('Module:Arguments').getArgs(frame, {
			valueFunc = function (key, value)
				if key == 2 then
					return type(value) == 'string' and mw.text.trim(value) or value
				elseif value then
					value = mw.text.trim(value)
					if value ~= '' then
						return value
					end
				end
				return nil
			end
		})
		return p['_' .. key](args)
	end
end

return p