Module:Check for clobbered parameters: Difference between revisions
| Template>Izno  use if preview | Bibbleskit (talk | contribs) m 1 revision imported: infobox person | 
| (No difference) | |
Latest revision as of 15:08, 30 December 2024
|  | This module is rated as beta, and is ready for widespread use. It is still new and should be used with some caution to ensure the results are as expected. | 
|  | This Lua module is used on approximately 1,410,000 pages, or roughly 98947% of all pages. To avoid major disruption and server load, any changes should be tested in the module's /sandbox or /testcases subpages, or in your own module sandbox. The tested changes can be added to this page in a single edit. Consider discussing changes on the talk page before implementing them. | 
|  | This module depends on the following other modules: | 
This module may be appended to a template to check for uses of tuples of conflicting parameters.
Usage
Basic usage
<syntaxhighlight lang="wikitext">
</syntaxhighlight>
Here, (arg1a, arg1b), (arg2a, arg2b, arg2c), are tuples of the conflicting parameters.
By default, the module ignores blank parameters which is useful for {{if empty}} chains of parameters.  For nested chains of parameters, use |nested=1 to consider blank parameters as well.
By default, the delimiter for the tuples is ; but this can be changed with |delimiter=.
The value of |template= is used to for the text of the preview warning message.  When omitted, the module will use a generic message.
Example 1
<syntaxhighlight lang="wikitext"> </syntaxhighlight>
Example 2
<syntaxhighlight lang="wikitext"> </syntaxhighlight>
See also
- Module:Check for unknown parameters
- Module:Check for deprecated parameters
- Module:Params
- Template:Conflicting parameters category (for use on category pages)
local p = {}
local function trim(s)
	return s:match('^%s*(.-)%s*$')
end
local function isnotempty(s)
	return s and s:match('%S')
end
function p.check(frame)
	local args = frame.args
	local pargs = frame:getParent().args
	local checknested = isnotempty(args['nested'])
	local delimiter = isnotempty(args['delimiter']) and args['delimiter'] or ';'
	local argpairs = {}
	
	for k, v in pairs(args) do
		if type(k) == 'number' then
			local plist = mw.text.split(v, delimiter)
			local pfound = {}
			local count = 0
			for ii, vv in ipairs(plist) do
				vv = trim(vv)
				if checknested and pargs[vv] or isnotempty(pargs[vv]) then
					count = count + 1
					table.insert(pfound, vv)
				end
			end
			if count > 1 then
				table.insert(argpairs, pfound)
			end
		end
	end
	
	local warnmsg = {}
	local res = ''
	local cat = ''
	if args['cat'] and mw.ustring.match(args['cat'],'^[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]:') then
		cat = args['cat']
	end
	local template = args['template'] and ' in ' .. args['template']  or ''
	if #argpairs > 0 then
		for i, v in ipairs( argpairs ) do
			table.insert(
				warnmsg,
				mw.ustring.format(
					'Using more than one of the following parameters%s: <code>%s</code>.',
					template,
					table.concat(v, '</code>, <code>')
				)
			)
			if cat ~= '' then
				res = res .. '[[' .. cat .. '|' .. (v[1] == '' and ' ' or '') .. v[1] .. ']]'
			end	
		end
	end
	
	if #warnmsg > 0 then
		res = require('Module:If preview')._warning({
			table.concat(warnmsg, '<br>')
		}) .. res
	end
	
	return res
end
return p