X

Track changes made to this page

If you find this page useful and would like to be notified of changes made to this page, start by inputting your email below.



Privacy policy
Close this window

powered by ChangeDetection

Unsubst

Documentation for this module may be created at Module:Unsubst/doc

local p = {}
 
local specialParams = {
	['$N'] = 'template name',
	['$B'] = 'template content',
}
 
p[''] = function ( frame )
	if not frame:getParent() then
		error( '{{#invoke:Unsubst|unsubst}} makes no sense without a parent frame' )
	end
	for k, v in pairs( specialParams ) do
		if not frame.args[k] then
			error( '{{#invoke:Unsubst|unsubst}} requires parameter ' .. k .. ' (' .. v .. ')' )
		end
	end
 
	if frame:preprocess( '{{subst:NAMESPACE}}' ) ~= '{{subst:NAMESPACE}}' then
		---- substing
		-- Combine passed args with passed defaults
		local args = {}
		for k, v in pairs( frame.args ) do
			if not specialParams[k] then
				if v == '__DATE__' then
					v = mw.getContentLanguage():formatDate( 'F Y' )
				end
				args[k] = v
			end
		end
		for k, v in pairs( frame:getParent().args ) do
			args[k] = v
		end
 
		-- Now, build an equivalent template invocation
		-- First numbered args, then named
		local ret = '{{' .. frame.args['$N']
		for k, v in ipairs( args ) do
			if string.find( v, '=', 1, true ) then
				-- likely something like 1=foo=bar, we need to do it as a named arg
				break
			end
			ret = ret .. '|' .. v
			args[k] = nil
		end
		for k, v in pairs( args ) do
			ret = ret .. '|' .. k .. '=' .. v
		end
 
		return ret .. '}}'
	else
		---- Not substing
		-- Just return the "body"
		return frame.args['$B']
	end
end
 
return p