Module:Unsubst

Democratising Wireless Innovation
Revision as of 15:48, 22 August 2014 by *>Mr. Stradivarius (add tracking category per protected edit request by User:Jackmcbarn)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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( 'Lua error at line 13: <strong class="error"><span class="scribunto-error" id="mw-scribunto-error-0">Lua error at line 13: {{#invoke:Unsubst|}} requires parameter $B (template content).</span></strong> requires parameter $B (template content). makes no sense without a parent frame' ) end if not frame.args['$B'] then error( 'Lua error at line 13: <strong class="error"><span class="scribunto-error" id="mw-scribunto-error-0">Lua error at line 13: {{#invoke:Unsubst|}} requires parameter $B (template content).</span></strong> requires parameter $B (template content). 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 or ) end end

return p