模組:TemplateArgSpreader

萌娘百科,萬物皆可萌的百科全書!轉載請標註來源頁面的網頁連結,並聲明引自萌娘百科。內容不可商用。
貢獻者:
模塊文檔  [] [刷新]
local module = {}

local getArgs = require('Module:Arguments').getArgs

function _main(args)
	local templateTitle = args['__tl']
	local templateArgs = mw.text.jsonDecode(args['__args'] or '{}')
	if mw.title.new(templateTitle, 'Template') == nil then error('模板“'..titleTemplate..'”不存在!') end
	
	args['__tl'] = nil
	args['__args'] = nil
	
	for k, v in pairs(args) do
		local argValue = v
		
		if templateArgs[k] ~= nil then
			local tlArgBlendMode = templateArgs[k].blendMode
			local tlArgVal = templateArgs[k].value
			
			if tlArgBlendMode == 'begin' then
				argValue = v..tlArgVal
			elseif tlArgBlendMode == 'end' then
				argValue = tlArgVal..v
			elseif tlArgBlendMode == 'middle' then
				argValue = mw.ustring.gsub(tlArgVal, '%${__arg}', v)
			end
		end
		
		templateArgs[k] = argValue
	end
	
	for k, v in pairs(templateArgs) do
		if type(v) == 'table' then
			templateArgs[k] = templateArgs[k].value
		end
	end
	
	return mw.getCurrentFrame():expandTemplate{ title = templateTitle, args = templateArgs }
end

function _stringify(args)
	local blendModesStr = args['__blendModes'] or ''

	local blendModes = {}
	if #blendModesStr ~= 0 then
		for v in mw.text.gsplit(blendModesStr, ',', true) do
			local mode = mw.text.split(v, ':', true)
			blendModes[mw.text.trim(mode[1])] = mw.text.trim(mode[2])
		end
	end
	
	args['__blendModes'] = nil
	
	local templateArgs = {}
	for k, v in pairs(args) do
		if k:find('^%d+$') then error('不能出現匿名(數字)參數!') end
		templateArgs[k] = {
			value = v,
			blendMode = blendModes[k] or 'rewrite'
		}
	end

	return mw.text.jsonEncode(templateArgs)
end

function module.main(frame)
	local args = getArgs(frame)
	return _main(args)
end

function module.stringify(frame)
	local args = getArgs(frame)
	return _stringify(args)
end

return module
此頁面最後編輯於 2020年3月16日 (星期一) 23:21。

阅读更多:https://mzh.moegirl.tw/Module:TemplateArgSpreader
本文引自萌娘百科(https://mzh.moegirl.tw ),文字内容默认使用《知识共享 署名-非商业性使用-相同方式共享 3.0 中国大陆》协议。
有新的未讀公告