Jump to content

Module:Check for unknown parameters

From Fifth Empire Wiki
Revision as of 17:31, 21 December 2015 by wikipedia>Frietjes (blank check)

Lua error in Module:Effective_protection_level at line 64: attempt to index field 'TitleBlacklist' (a nil value).

Lua error in Module:Effective_protection_level at line 64: attempt to index field 'TitleBlacklist' (a nil value).

Module:Check for unknown parameters is used to check for uses of unknown parameters in a template or module. It may be appended to a template at the end or called directly from a module.

Usage

From a template

To sort entries into a tracking category by parameter, use:

To sort the entries into a tracking category by parameter with a preview error message, use:

For an explicit red error message, use:

To use Lua patterns, use:

  • {{#invoke:Check for unknown parameters|check|unknown=[[Category:Some tracking category|_VALUE_]]|preview=unknown parameter "_VALUE_"|arg1|arg2|...|argN|regexp1=header[%d]+|regexp2=date[1-9]}}

From a module

To call from a module, use: <syntaxhighlight lang="lua"> local checkForUnknownParameters = require("Module:Check for unknown parameters") local result = checkForUnknownParameters._check(validArgs, args) </syntaxhighlight>

Where the first set of args are the module args below and the second set of args are the parameters that are checked.

Parameters

  • arg1, arg2, ..., argN, are the known parameters.
  • Unnamed (positional) parameters can be added too: |1|2|arg1|arg2|....
  • Lua patterns (similar to regular expressions) usage with parameters is also supported (such as: |regexp1=header[%d]+, |regexp2=date[1-9], |regexp3=data[%d]+[abc]?). This is useful when there are many known parameters which use a systematic pattern.
  • |unknown= – what happens when an unknown parameter is used. Typically use either a tracking category to place pages that use unknown parameters, or an error.
  • |preview= – the text to be displayed when in preview mode and an unknown parameter is used.
  • The _VALUE_ keyword, if used, will be changed to the name of the parameter. This is useful for either sorting the entries in a tracking category, or for provide more explicit information.
  • |ignoreblank=1 – by default, the module makes no distinction between a defined-but-blank parameter and a non-blank parameter. That is, both unlisted |foo=x and |foo= are reported. To only track non-blank parameters use |ignoreblank=1. If you clean your arguments with Module:Arguments and call this module afterwards, you need not use this parameter as that module ignores blank arguments by default.
  • |showblankpositional=1 – by default, the module ignores blank positional parameters. That is, an unlisted |2= is ignored. To include blank positional parameters in the tracking use |showblankpositional=1.
  • |mapframe_args= – When this is set to a non-null value, the various Module:Infobox mapframe parameters will be automatically included in the list of valid parameters. This eliminates the need to manually add all 20+ params. NOTE this should only be used when {{#invoke:Infobox mapframe|autoWithCation}} is in the template calling Check for unknown. Do NOT use if using {{Infobox mapframe}} as not all parameters are included when calling the template.

Example

<syntaxhighlight lang="wikitext"> </syntaxhighlight>

Call from within Lua code

See the end of Module:Rugby box for a simple example or Module:Infobox3cols or Module:Flag for more complicated examples.

See also

User scripts


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