Jump to content
Wikipedia The Free Encyclopedia

Module:If any equal

From Wikipedia, the free encyclopedia
Module documentation[view] [edit] [history] [purge]
[画像:Ready for use] This module is rated as ready for general use. It has reached a mature form and is thought to be relatively bug-free and ready for use wherever appropriate. It is ready to mention on help pages and other Wikipedia resources as an option for new users to learn. To reduce server load and bad output, it should be improved by sandbox testing rather than repeated trial-and-error editing.
[画像:Protected] This module is subject to page protection. It is a highly visible module in use by a very large number of pages, or is substituted very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is protected from editing.
Warning This Lua module is used on approximately 242,000 pages .
To avoid major disruption and server load, any changes should be tested in the module's /sandbox or /testcases subpages, or in your own module sandbox. The tested changes can be added to this page in a single edit. Consider discussing changes on the talk page before implementing them.

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 }}

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

Then calling {{Template }} 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 }}

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

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

The above documentation is transcluded from Module:If any equal/doc. (edit | history)
Editors can experiment in this module's sandbox (edit | diff) and testcases (edit | run) pages.
Subpages of this module.

 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

AltStyle によって変換されたページ (->オリジナル) /