Module:Template wrapper: Difference between revisions

From Vigyanwiki
Template>Anthony Appleyard
m (Anthony Appleyard moved page Module:Citation/CS1/Wrapper to Module:Template wrapper without leaving a redirect: histmerge)
Template>Anthony Appleyard
(rv histmerge junk)
Line 3: Line 3:
local p={};
local p={};


function p.cs1_wrapper (frame)
local function isInTable(tbl, item)
    for key, value in pairs(tbl) do
        if value == item then return true end
    end
    return false
end
 
function p.wrap (frame)
local args = {};
local args = {};
local template;
local template;
local exclude = {};
for k, v in pairs (frame.args) do -- here we get the wrapper template's 'default' parameters
for k, v in pairs (frame.args) do -- here we get the wrapper template's 'default' parameters
if 'template' == k then
if '_template' == k then
template = v; -- save the name of template that we are wrapping
template = v; -- save the name of template that we are wrapping
elseif '_exclude' == k then
exclude = mw.text.split(v, "%s*,%s*"); -- save the excluded parameters
else
else
args[k] = v; -- copy frame parameters to args table
args[k] = v; -- copy frame parameters to args table
Line 21: Line 31:
local pframe = frame:getParent(); -- here we get the wrapper template's 'live' parameters
local pframe = frame:getParent(); -- here we get the wrapper template's 'live' parameters
for k, v in pairs (pframe.args) do
for k, v in pairs (pframe.args) do
if 'string' == type (k) and not k:find ('^_') then -- do not pass along positional parameters or parameter with names that begin with an underscore
if 'string' == type (k) and not isInTable(exclude, k) then -- do not pass along positional or excluded parameters
if v and v ~= '' then -- pass along only those parameters that have assigned values
if v and v ~= '' then -- pass along only those parameters that have assigned values
if 'unset' == v:lower() then -- special keyword to unset 'default' parameters set in the wrapper template
if 'unset' == v:lower() then -- special keyword to unset 'default' parameters set in the wrapper template
Line 31: Line 41:
end
end
return frame:expandTemplate {title=template, args=args}; -- render the citation
return frame:expandTemplate {title=template, args=args}; -- render the template
end
end


return p;
return p;

Revision as of 11:29, 19 February 2018

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

require('Module:No globals');

local p={};

local function isInTable(tbl, item)
    for key, value in pairs(tbl) do
        if value == item then return true end
    end
    return false
end

function p.wrap (frame)
	local args = {};
	local template;
	local exclude = {};
	
	for k, v in pairs (frame.args) do											-- here we get the wrapper template's 'default' parameters
		if '_template' == k then
			template = v;														-- save the name of template that we are wrapping
		elseif '_exclude' == k then
			exclude = mw.text.split(v, "%s*,%s*");								-- save the excluded parameters
		else
			args[k] = v;														-- copy frame parameters to args table
		end
	end
	
	if nil == template or '' == template then									-- this is the one parameter required by this module
		return '<span style=\"font-size:100%\" class=\"error\"><code style=\"color:inherit; border:inherit; padding:inherit;\">&#124;template=</code> missing or empty</span>';
	end

	local pframe = frame:getParent();											-- here we get the wrapper template's 'live' parameters
	for k, v in pairs (pframe.args) do
		if 'string' == type (k) and not isInTable(exclude, k) then				-- do not pass along positional or excluded parameters
			if v and v ~= '' then												-- pass along only those parameters that have assigned values
				if 'unset' == v:lower() then									-- special keyword to unset 'default' parameters set in the wrapper template
					v = '';														-- unset the value
				end
				args[k] = v;													-- copy parent frame parameters to args table
			end
		end
	end
	
	return frame:expandTemplate {title=template, args=args};					-- render the template
end

return p;