Editing Module:Unsubst
Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.
The edit can be undone.
Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 1: | Line 1: | ||
− | |||
− | |||
local p = {} | local p = {} | ||
− | |||
− | |||
local specialParams = { | local specialParams = { | ||
− | ['$ | + | ['$N'] = 'template name', -- Deprecated, but keeping until it is removed from transcluding templates |
− | + | ['$B'] = 'template content', | |
− | |||
− | ['$B'] = 'template content' | ||
} | } | ||
− | function | + | p[''] = function ( frame ) |
− | + | if not frame:getParent() then | |
− | + | error( '{{#invoke:Unsubst|}} makes no sense without a parent frame' ) | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
− | + | if not frame.args['$B'] then | |
− | + | error( '{{#invoke:Unsubst|}} requires parameter $B (template content)' ) | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
− | + | ||
− | + | if mw.isSubsting() then | |
− | + | ---- substing | |
− | + | -- Combine passed args with passed defaults | |
− | + | local args = {} | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
for k, v in pairs( frame.args ) do | for k, v in pairs( frame.args ) do | ||
if not specialParams[k] then | if not specialParams[k] then | ||
Line 75: | Line 29: | ||
args[k] = v | args[k] = v | ||
end | 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 | end | ||
− | |||
− | |||
− | + | -- Build the invocation body with numbered args first, then named | |
− | + | local ret = '{{' .. title | |
− | local | ||
for k, v in ipairs( args ) do | for k, v in ipairs( args ) do | ||
− | if v | + | if string.find( v, '=', 1, true ) then |
− | + | -- likely something like 1=foo=bar, we need to do it as a named arg | |
− | |||
break | break | ||
end | end | ||
+ | ret = ret .. '|' .. v | ||
+ | args[k] = nil | ||
end | end | ||
for k, v in pairs( args ) do | for k, v in pairs( args ) do | ||
− | + | ret = ret .. '|' .. k .. '=' .. v | |
− | |||
− | |||
end | 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 '[[Category:Calls to Module:Unsubst that use $N]]' or '') | ||
end | end | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
− | |||
− | |||
return p | return p |