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
No edit summary
(Undid revision 704440740 by Frietjes (talk))
Line 39: Line 39:
if isnotempty(frame.args['preview']) then
if isnotempty(frame.args['preview']) then
preview = '<div class="hatnote" style="color:red"><strong>Warning:</strong> ' .. frame.args['preview'] .. ' (this message is shown only in preview).</div>'
preview = '<div class="hatnote" style="color:red"><strong>Warning:</strong> ' .. frame.args['preview'] .. ' (this message is shown only in preview).</div>'
elseif isnotempty(frame.args['preview']) then
elseif frame.args['preview'] then
preview = frame.args['preview']
preview = frame.args['preview']
else
else

Revision as of 16:42, 11 February 2016

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 trim(s)
	return s:match('^%s*(.-)%s*$')
end

local function isnotempty(s)
	return s and trim(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 = frame.args['unknown'] or 'Found _VALUE_, '
	local preview = frame.args['preview'] or unknown

	local res = {}
	local regexps = {}
	local comments = {}
	local commentstr = ''
	
	local ispreview = frame:preprocess( "{{REVISIONID}}" ) == "" and 1 or 0

	-- create the list of known args, regular expressions, and the return string
	for k, v in pairs(args) do
		if type(k) == 'number' then
			v = trim(v)
			knownargs[v] = 1
		elseif k:find('^regexp[1-9][0-9]*$') then
			table.insert(regexps, '^' .. v .. '$')
		end
	end
	if isnotempty(frame.args['preview']) then 
		preview = '<div class="hatnote" style="color:red"><strong>Warning:</strong> ' .. frame.args['preview'] .. ' (this message is shown only in preview).</div>'
	elseif frame.args['preview'] then
		preview = frame.args['preview']
	else
		preview = unknown
	end
	if ispreview == 1 then 
		unknown = preview
		ignoreblank = false
	end
	
	-- adds one result to the output tables
	local function addresult(k)
		if k == '' then
			-- Fix odd bug for | = which gets stripped to the empty string and
			-- breaks category links
			k = ' '
		end
		local r = unknown:gsub('_VALUE_', k)
		table.insert(res, r)
		table.insert(comments, '"' .. k .. '"')
	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
			local knownflag = false
			for i, regexp in ipairs(regexps) do
				if mw.ustring.match(k, regexp) then
					knownflag = true
					break
				end
			end
			if not knownflag and ( not ignoreblank or isnotempty(v) )  then
				k = mw.ustring.gsub(k, '[^%w\-_ ]', '?')
				addresult(k)
			end
		elseif checkpos and
			type(k) == 'number' and 
			knownargs[tostring(k)] == nil and
			( not ignoreblank or isnotempty(v) )
		then
			addresult(k)
		end
	end

	if #comments > 0 then
		commentstr = '<!-- Module:Check for unknown parameters results: ' ..
			table.concat(comments, ', ') .. '-->'
	end
	
	return table.concat(res) .. commentstr
end

return p