Jump to content

Module:Check for unknown parameters: Difference between revisions

From Fifth Empire Wiki
No edit summary
rv, requires more testing
Line 17: Line 17:


local res = {}
local res = {}
local regexps = {}
local comments = {}
local comments = {}
local commentstr = ''
local commentstr = ''
-- create the list of known args, regular expressions, and the return string
-- create the list of known args, and the return string
for k, v in pairs(args) do
for k, v in pairs(args) do
if type(k) == 'number' then
if type(k) == 'number' then
Line 29: Line 28:
if (k == 'unknown' and type(v) == 'string') then
if (k == 'unknown' and type(v) == 'string') then
unknown = v
unknown = v
elseif (k:match('^regexp[%d]*$') and type(v) == 'string') then
table.insert(regexps, '^' .. v .. '$')
end
end
end
end
Line 38: Line 35:
for k,v in pairs(pargs) do
for k,v in pairs(pargs) do
if (type(k) == 'string' and knownargs[k] == nil) then
if (type(k) == 'string' and knownargs[k] == nil) then
local knownflag = nil
if( (not ignoreblank) or (ignoreblank and isnotempty(v)) ) then
for r = 1,#regexps do
if( k:match(regexps[r]) ) then
knownflag = 1
end
end
if( (not knownflag) and (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)
local r = mw.ustring.gsub(unknown, '_VALUE_', k)

Revision as of 17:06, 26 June 2015

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 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 = {}
	local comments = {}
	local commentstr = ''
	
	-- 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)
				table.insert(comments, '"' .. k .. '"')
			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)
				table.insert(comments, '"' .. k .. '"')
			end
		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