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 support for preview messages)
(enhance preview message)
Line 41: Line 41:
end
end
end
end
if preview then preview = '<div class="hatnote" style="color:red"><strong>Warning:</strong> ' .. preview .. ' (this message is shown only in preview).</div>' end
if ispreview == 1 and preview then unknown = preview end
if ispreview == 1 and preview then unknown = preview end

Revision as of 17:30, 21 December 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 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 = 'Found _VALUE_, '
	local preview = nil

	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 == 'unknown' and ispreview == 0 then
			unknown = v
		elseif k == 'preview' and ispreview == 1 then
			preview = v
		elseif k:find('^regexp[1-9][0-9]*$') then
			table.insert(regexps, '^' .. v .. '$')
		end
	end
	if preview then preview = '<div class="hatnote" style="color:red"><strong>Warning:</strong> ' .. preview .. ' (this message is shown only in preview).</div>' end
	if ispreview == 1 and preview then unknown = preview 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