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

Difference between revisions of "Unsubst"

(add tracking category per protected edit request by User:Jackmcbarn)
 
Line 1: Line 1:
 
local p = {}
 
local p = {}
+
 
 
local specialParams = {
 
local specialParams = {
['$N'] = 'template name',
+
['$N'] = 'template name', -- Deprecated, but keeping until it is removed from transcluding templates
 
['$B'] = 'template content',
 
['$B'] = 'template content',
 
}
 
}
+
 
 
p[''] = function ( frame )
 
p[''] = function ( frame )
 
if not frame:getParent() then
 
if not frame:getParent() then
error( '{{#invoke:Unsubst|unsubst}} makes no sense without a parent frame' )
+
error( '{{#invoke:Unsubst|}} makes no sense without a parent frame' )
 
end
 
end
for k, v in pairs( specialParams ) do
+
if not frame.args['$B'] then
if not frame.args[k] then
+
error( '{{#invoke:Unsubst|}} requires parameter $B (template content)' )
error( '{{#invoke:Unsubst|unsubst}} requires parameter ' .. k .. ' (' .. v .. ')' )
 
end
 
 
end
 
end
+
if frame:preprocess( '{{subst:NAMESPACE}}' ) ~= '{{subst:NAMESPACE}}' then
+
if mw.isSubsting() then
 
---- substing
 
---- substing
 
-- Combine passed args with passed defaults
 
-- Combine passed args with passed defaults
Line 31: Line 29:
 
args[k] = v
 
args[k] = v
 
end
 
end
+
 
-- Now, build an equivalent template invocation
+
-- Build an equivalent template invocation
-- First numbered args, then named
+
-- First, find the title to use
local ret = '{{' .. frame.args['$N']
+
local titleobj = mw.title.new(frame:getParent():getTitle())
 +
local title
 +
if titleobj.namespace == 10 then -- NS_TEMPLATE
 +
title = titleobj.text
 +
elseif titleobj.namespace == 0 then -- NS_MAIN
 +
title = ':' .. titleobj.text
 +
else
 +
title = titleobj.prefixedText
 +
end
 +
 
 +
-- Build the invocation body with numbered args first, then named
 +
local ret = '{{' .. title
 
for k, v in ipairs( args ) do
 
for k, v in ipairs( args ) do
 
if string.find( v, '=', 1, true ) then
 
if string.find( v, '=', 1, true ) then
Line 46: Line 55:
 
ret = ret .. '|' .. k .. '=' .. v
 
ret = ret .. '|' .. k .. '=' .. v
 
end
 
end
+
 
return ret .. '}}'
 
return ret .. '}}'
 
else
 
else
 
---- Not substing
 
---- Not substing
 
-- Just return the "body"
 
-- Just return the "body"
return frame.args['$B']
+
return frame.args['$B'] .. (frame.args['$N'] and frame:getParent():getTitle() == mw.title.getCurrentTitle().prefixedText and '[[wikipedia:Category:Calls to Module:Unsubst that use $N|Category:Calls to Module:Unsubst that use $N]]' or '')
 
end
 
end
 
end
 
end
+
 
 
return p
 
return p

Latest revision as of 09:48, 22 August 2014

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

local p = {}

local specialParams = {
	['$N'] = 'template name', -- Deprecated, but keeping until it is removed from transcluding templates
	['$B'] = 'template content',
}

p[''] = function ( frame )
	if not frame:getParent() then
		error( '{{#invoke:Unsubst|}} makes no sense without a parent frame' )
	end
	if not frame.args['$B'] then
		error( '{{#invoke:Unsubst|}} requires parameter $B (template content)' )
	end
	
	if mw.isSubsting() 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

		-- Build an equivalent template invocation
		-- First, find the title to use
		local titleobj = mw.title.new(frame:getParent():getTitle())
		local title
		if titleobj.namespace == 10 then -- NS_TEMPLATE
			title = titleobj.text
		elseif titleobj.namespace == 0 then -- NS_MAIN
			title = ':' .. titleobj.text
		else
			title = titleobj.prefixedText
		end

		-- Build the invocation body with numbered args first, then named
		local ret = '{{' .. title
		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'] .. (frame.args['$N'] and frame:getParent():getTitle() == mw.title.getCurrentTitle().prefixedText and '[[wikipedia:Category:Calls to Module:Unsubst that use $N|Category:Calls to Module:Unsubst that use $N]]' or '')
	end
end

return p