From Wikipedia, the free encyclopedia

local checkType = require('libraryUtil').checkType



local p = {}



local BODY_PARAM = '$B'



local specialParams = {

	'$params' = 'parameter list',

	'$aliases' = 'parameter aliases',

	'$flags' = 'flags',

	'$B' = 'template content',

	'$template-name' = 'template invocation name override',

}



function p.main(frame, body)

	-- If we are substing, this function returns a template invocation, and if

	-- not, it returns the template body. The template body can be specified in

	-- the body parameter, or in the template parameter defined in the

	-- BODY_PARAM variable. This function can be called from Lua or from

	-- #invoke.



	-- Return the template body if we aren't substing.

	if not mw.isSubsting() then

		if body ~= nil then

			return body

		elseif frame.argsBODY_PARAM ~= nil then

			return frame.argsBODY_PARAM

		else

			error(string.format(

				"no template content specified (use parameter '%s' from #invoke)",

				BODY_PARAM

			), 2)

		end

	end



	-- Sanity check for the frame object.

	if type(frame) ~= 'table'

		or type(frame.getParent) ~= 'function'

		or not frame:getParent()

	then

		error(

			"argument #1 to 'main' must be a frame object with a parent " ..

			"frame available",

			2

		)

	end



	-- Find the invocation name.

	local mTemplateInvocation = require('Module:Template invocation')

	local name



	if frame.args'$template-name' and '' ~= frame.args'$template-name' then

		name = frame.args'$template-name'										-- override whatever the template name is with this name

	else

		name = mTemplateInvocation.name(frame:getParent():getTitle())

	end



	-- Combine passed args with passed defaults

	local args = {}

	if string.find( ','..(frame.args'$flags' or '')..',', ',%s*override%s*,' ) then

		for k, v in pairs( frame:getParent().args ) do

			argsk = v

		end

		for k, v in pairs( frame.args ) do

			if not specialParamsk then

				if v == '__DATE__' then

					v = mw.getContentLanguage():formatDate( 'F Y' )

				end

				argsk = v

			end

		end

	else

		for k, v in pairs( frame.args ) do

			if not specialParamsk then

				if v == '__DATE__' then

					v = mw.getContentLanguage():formatDate( 'F Y' )

				end

				argsk = v

			end

		end

		for k, v in pairs( frame:getParent().args ) do

			argsk = v

		end

	end



	-- Trim parameters, if not specified otherwise

	if not string.find( ','..(frame.args'$flags' or '')..',', ',%s*keep%-whitespace%s*,' ) then

		for k, v in pairs( args ) do argsk = mw.ustring.match(v, '^%s*(.*)%s*$') or '' end

	end



	-- Pull information from parameter aliases

	local aliases = {}

	if frame.args'$aliases' then

		local list = mw.text.split( frame.args'$aliases'], '%s*,%s*' )

		for k, v in ipairs( list ) do

			local tmp = mw.text.split( v, '%s*>%s*' )

			aliasestonumber(mw.ustring.match(tmp1], '^[1-9][0-9]*$')) or tmp1]] = ((tonumber(mw.ustring.match(tmp2], '^[1-9][0-9]*$'))) or tmp2])

		end

	end

	for k, v in pairs( aliases ) do

		if argsk and ( not argsv or argsv == '' ) then

			argsv = argsk

		end

		argsk = nil

	end



	-- Remove empty parameters, if specified

	if string.find( ','..(frame.args'$flags' or '')..',', ',%s*remove%-empty%s*,' ) then

		local tmp = 0

		for k, v in ipairs( args ) do

			if v ~= '' or ( argsk+1 and argsk+1 ~= '' ) or ( argsk+2 and argsk+2 ~= '' ) then

				tmp = k

			else

				break

			end

		end

		for k, v in pairs( args ) do

			if v == '' then

				if not (type(k) == 'number' and k < tmp) then argsk = nil end

			end

		end

	end



	-- Order parameters

	if frame.args'$params' then

		local params, tmp = mw.text.split( frame.args'$params'], '%s*,%s*' ), {}

		for k, v in ipairs(params) do

			v = tonumber(mw.ustring.match(v, '^[1-9][0-9]*$')) or v

			if argsv then tmpv], argsv = argsv], nil end

		end

		for k, v in pairs(args) do tmpk], argsk = argsk], nil end

		args = tmp

	end



	return mTemplateInvocation.invocation(name, args)

end



p'' = p.main -- For backwards compatibility



return p
From Wikipedia, the free encyclopedia

local checkType = require('libraryUtil').checkType



local p = {}



local BODY_PARAM = '$B'



local specialParams = {

	'$params' = 'parameter list',

	'$aliases' = 'parameter aliases',

	'$flags' = 'flags',

	'$B' = 'template content',

	'$template-name' = 'template invocation name override',

}



function p.main(frame, body)

	-- If we are substing, this function returns a template invocation, and if

	-- not, it returns the template body. The template body can be specified in

	-- the body parameter, or in the template parameter defined in the

	-- BODY_PARAM variable. This function can be called from Lua or from

	-- #invoke.



	-- Return the template body if we aren't substing.

	if not mw.isSubsting() then

		if body ~= nil then

			return body

		elseif frame.argsBODY_PARAM ~= nil then

			return frame.argsBODY_PARAM

		else

			error(string.format(

				"no template content specified (use parameter '%s' from #invoke)",

				BODY_PARAM

			), 2)

		end

	end



	-- Sanity check for the frame object.

	if type(frame) ~= 'table'

		or type(frame.getParent) ~= 'function'

		or not frame:getParent()

	then

		error(

			"argument #1 to 'main' must be a frame object with a parent " ..

			"frame available",

			2

		)

	end



	-- Find the invocation name.

	local mTemplateInvocation = require('Module:Template invocation')

	local name



	if frame.args'$template-name' and '' ~= frame.args'$template-name' then

		name = frame.args'$template-name'										-- override whatever the template name is with this name

	else

		name = mTemplateInvocation.name(frame:getParent():getTitle())

	end



	-- Combine passed args with passed defaults

	local args = {}

	if string.find( ','..(frame.args'$flags' or '')..',', ',%s*override%s*,' ) then

		for k, v in pairs( frame:getParent().args ) do

			argsk = v

		end

		for k, v in pairs( frame.args ) do

			if not specialParamsk then

				if v == '__DATE__' then

					v = mw.getContentLanguage():formatDate( 'F Y' )

				end

				argsk = v

			end

		end

	else

		for k, v in pairs( frame.args ) do

			if not specialParamsk then

				if v == '__DATE__' then

					v = mw.getContentLanguage():formatDate( 'F Y' )

				end

				argsk = v

			end

		end

		for k, v in pairs( frame:getParent().args ) do

			argsk = v

		end

	end



	-- Trim parameters, if not specified otherwise

	if not string.find( ','..(frame.args'$flags' or '')..',', ',%s*keep%-whitespace%s*,' ) then

		for k, v in pairs( args ) do argsk = mw.ustring.match(v, '^%s*(.*)%s*$') or '' end

	end



	-- Pull information from parameter aliases

	local aliases = {}

	if frame.args'$aliases' then

		local list = mw.text.split( frame.args'$aliases'], '%s*,%s*' )

		for k, v in ipairs( list ) do

			local tmp = mw.text.split( v, '%s*>%s*' )

			aliasestonumber(mw.ustring.match(tmp1], '^[1-9][0-9]*$')) or tmp1]] = ((tonumber(mw.ustring.match(tmp2], '^[1-9][0-9]*$'))) or tmp2])

		end

	end

	for k, v in pairs( aliases ) do

		if argsk and ( not argsv or argsv == '' ) then

			argsv = argsk

		end

		argsk = nil

	end



	-- Remove empty parameters, if specified

	if string.find( ','..(frame.args'$flags' or '')..',', ',%s*remove%-empty%s*,' ) then

		local tmp = 0

		for k, v in ipairs( args ) do

			if v ~= '' or ( argsk+1 and argsk+1 ~= '' ) or ( argsk+2 and argsk+2 ~= '' ) then

				tmp = k

			else

				break

			end

		end

		for k, v in pairs( args ) do

			if v == '' then

				if not (type(k) == 'number' and k < tmp) then argsk = nil end

			end

		end

	end



	-- Order parameters

	if frame.args'$params' then

		local params, tmp = mw.text.split( frame.args'$params'], '%s*,%s*' ), {}

		for k, v in ipairs(params) do

			v = tonumber(mw.ustring.match(v, '^[1-9][0-9]*$')) or v

			if argsv then tmpv], argsv = argsv], nil end

		end

		for k, v in pairs(args) do tmpk], argsk = argsk], nil end

		args = tmp

	end



	return mTemplateInvocation.invocation(name, args)

end



p'' = p.main -- For backwards compatibility



return p

Videos

Youtube | Vimeo | Bing

Websites

Google | Yahoo | Bing

Encyclopedia

Google | Yahoo | Bing

Facebook