Module:Check for unknown parameters: Difference between revisions

Nothing to hide, but nothing to show you either.
Jump to navigation Jump to search
Content added Content deleted
(add optional ignoreblank parameter)
(start check for positional)
Line 12: Line 12:
local pargs = frame:getParent().args
local pargs = frame:getParent().args
local ignoreblank = isnotempty(frame.args['ignoreblank'])
local ignoreblank = isnotempty(frame.args['ignoreblank'])
local checkpos = isnotempty(frame.args['checkpositional'])
local knownargs = {}
local knownargs = {}
local unknown = 'Found _VALUE_, '
local unknown = 'Found _VALUE_, '
Line 31: Line 32:
-- loop over the parent args, and make sure they are on the list
-- loop over the parent args, and make sure they are on the list
for k,v in pairs(pargs) do
for k,v in pairs(pargs) do
if (knownargs[k] == nil and type(k) == 'string') then
if (type(k) == 'string' and knownargs[k] == nil) then
if( (not ignoreblank) or (ignoreblank and isnotempty(v)) ) then
if( (not ignoreblank) or (ignoreblank and isnotempty(v)) ) then
k = mw.ustring.gsub(k, '[^%w\-_ ]', '?')
k = mw.ustring.gsub(k, '[^%w\-_ ]', '?')
local r = mw.ustring.gsub(unknown, '_VALUE_', k)
table.insert(res, r)
end
elseif(checkpos and type(k) == 'number' and knownargs[tostring(k)] == nil) then
if( (not ignoreblank) or (ignoreblank and isnotempty(v)) ) then
local r = mw.ustring.gsub(unknown, '_VALUE_', k)
local r = mw.ustring.gsub(unknown, '_VALUE_', k)
table.insert(res, r)
table.insert(res, r)

Revision as of 00:07, 24 February 2015

Documentation for this module may be created at Module:Check for unknown parameters/doc

-- This module may be used to compare the arguments passed to the parent
-- with a list of arguments, returning a specified result if an argument is
-- not on the list
local p = {}

local function isnotempty(s)
	return s and s:match( '^%s*(.-)%s*$' ) ~= ''
end

function p.check (frame)
	local args = frame.args
	local pargs = frame:getParent().args
	local ignoreblank = isnotempty(frame.args['ignoreblank'])
	local checkpos = isnotempty(frame.args['checkpositional'])
	local knownargs = {}
	local unknown = 'Found _VALUE_, '
	
	local res = {}
	
	-- create the list of known args, and the return string
	for k, v in pairs(args) do
		if type(k) == 'number' then
			v = mw.ustring.gsub(v, '^%s*(.-)%s*$', '%1')
			knownargs[v] = 1
		else
			if (k == 'unknown' and type(v) == 'string') then
				unknown = v
			end
		end
	end

	-- loop over the parent args, and make sure they are on the list
	for k,v in pairs(pargs) do
		if (type(k) == 'string' and knownargs[k] == nil) then
			if( (not ignoreblank) or (ignoreblank and isnotempty(v)) ) then
				k = mw.ustring.gsub(k, '[^%w\-_ ]', '?')
				local r = mw.ustring.gsub(unknown, '_VALUE_', k)
				table.insert(res, r)
			end
		elseif(checkpos and type(k) == 'number' and knownargs[tostring(k)] == nil) then
			if( (not ignoreblank) or (ignoreblank and isnotempty(v)) ) then
				local r = mw.ustring.gsub(unknown, '_VALUE_', k)
				table.insert(res, r)
			end
		end
	end

	return table.concat(res)
end

return p