Toggle menu
9
204
47
18.7K
KenshiDB
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.


Main

This main function of this module checks all positional parameters to see if any of them is equal to the parameter |value=. If so, it will output "yes", otherwise "no".

If the plural |values= is used, then one or more alternative values may be specified.

Examples

  • {{#invoke:If any equal|main|a|b|c|d|value=c}} gives yes
  • {{#invoke:If any equal|main|a|b|c|d|value=r}} gives no
  • {{#invoke:If any equal|main|a|b|c|d|value=}} gives no
  • {{#invoke:If any equal|main|a|b|c|d|values=r, b}} gives yes

IfAnyEqual

The IfAnyEqual function works in a similar way, but instead takes the names of the parameters and checks these arguments of the parent frame.

Example

For example, if you have the following code on {{Template:Template link}}

{{#invoke:If any equal|IfAnyEqual|param1|param2|values=a, b, c}}

Then calling {{Template:Template link}} will give the following results:

Using a prefix

If a prefix is specified with |prefix= then the module will check any parameter that consists of that prefix and possibly a number afterwards.

Example

For example, if you have the following code on {{Template:Template link}}

{{#invoke:If any equal|IfAnyEqual|prefix=param|values=a, b, c}}

Then calling {{Template:Template link}} will give the following results:


require('strict')
local p = {}

p.main = function(frame)
	local check_value = function(value)
		for n, v in pairs(frame.args) do
			if type(n)=='number' and v:lower()==value:lower() then
				return true
			end
		end
	end
	local match = false
	if frame.args.value and frame.args.value~='' then
		match = check_value(frame.args.value)
	elseif frame.args.values and frame.args.values~='' then
		for value in mw.text.gsplit(frame.args.values, "%s*,%s*") do
			if check_value(value) then
				match = true
				break
			end
		end
	end
	return match and 'yes' or 'no'
end

p.IfAnyEqual = function(frame)
	local parent = frame:getParent()
	if not parent.args then
		return nil
	end
	local prefix = frame.args.prefix~='' and frame.args.prefix or nil
	local check_value = function(value)
		if prefix then -- check parameters which have a matching prefix
			for name, v in pairs(parent.args) do
				if type(name)=='string' and name:find('^' .. prefix .. '%d*$') and v:lower()==value:lower() then
					return name
				end
			end
		else
			for pos, name in pairs(frame.args) do
				if type(pos)=='number' and parent.args[name] and parent.args[name]:lower()==value:lower() then
					return name
				end
			end
		end
	end
	local match = false
	if frame.args.value and frame.args.value~='' then
		match = check_value(frame.args.value)
	elseif frame.args.values and frame.args.values~='' then
		for value in mw.text.gsplit(frame.args.values, "%s*,%s*") do
			local check = check_value(value)
			if check then
				match = check
				break
			end
		end
	end
	return match and 'yes' or 'no'
end

return p