Module:If any equal

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