Notice: Firmware Links Under Maintenance We are currently undergoing maintenance on all firmware links. If any links are inaccessible, please email or contact Tech Support for the firmware. We appreciate your patience during the maintenance, thank you for your understanding.

Difference between revisions of "Module:Check for unknown parameters"

m (1 revision imported)
m (1 revision imported)
 
(One intermediate revision by one other user not shown)
Line 9: Line 9:
  
 
local function isnotempty(s)
 
local function isnotempty(s)
return s and trim(s) ~= ''
+
return s and s:match('%S')
 +
end
 +
 
 +
local function clean(text)
 +
-- Return text cleaned for display and truncated if too long.
 +
-- Strip markers are replaced with dummy text representing the original wikitext.
 +
local pos, truncated
 +
local function truncate(text)
 +
if truncated then
 +
return ''
 +
end
 +
if mw.ustring.len(text) > 25 then
 +
truncated = true
 +
text = mw.ustring.sub(text, 1, 25) .. '...'
 +
end
 +
return mw.text.nowiki(text)
 +
end
 +
local parts = {}
 +
for before, tag, remainder in text:gmatch('([^\127]*)\127[^\127]*%-(%l+)%-[^\127]*\127()') do
 +
pos = remainder
 +
table.insert(parts, truncate(before) .. '<' .. tag .. '>...</' .. tag .. '>')
 +
end
 +
table.insert(parts, truncate(text:sub(pos or 1)))
 +
return table.concat(parts)
 
end
 
end
  
Line 15: Line 38:
 
local args = frame.args
 
local args = frame.args
 
local pargs = frame:getParent().args
 
local pargs = frame:getParent().args
local ignoreblank = isnotempty(frame.args['ignoreblank'])
+
local ignoreblank = isnotempty(args['ignoreblank'])
local showblankpos = isnotempty(frame.args['showblankpositional'])
+
local showblankpos = isnotempty(args['showblankpositional'])
 
local knownargs = {}
 
local knownargs = {}
local unknown = frame.args['unknown'] or 'Found _VALUE_, '
+
local unknown = args['unknown'] or 'Found _VALUE_, '
local preview = frame.args['preview']
+
local preview = args['preview']
  
 
local values = {}
 
local values = {}
Line 34: Line 57:
 
end
 
end
 
end
 
end
if isnotempty(preview) then  
+
if isnotempty(preview) then
 
preview = '<div class="hatnote" style="color:red"><strong>Warning:</strong> ' .. preview .. ' (this message is shown only in preview).</div>'
 
preview = '<div class="hatnote" style="color:red"><strong>Warning:</strong> ' .. preview .. ' (this message is shown only in preview).</div>'
 
elseif preview == nil then
 
elseif preview == nil then
Line 44: Line 67:
 
if type(k) == 'string' and knownargs[k] == nil then
 
if type(k) == 'string' and knownargs[k] == nil then
 
local knownflag = false
 
local knownflag = false
for i, regexp in ipairs(regexps) do
+
for _, regexp in ipairs(regexps) do
 
if mw.ustring.match(k, regexp) then
 
if mw.ustring.match(k, regexp) then
 
knownflag = true
 
knownflag = true
Line 51: Line 74:
 
end
 
end
 
if not knownflag and ( not ignoreblank or isnotempty(v) )  then
 
if not knownflag and ( not ignoreblank or isnotempty(v) )  then
k = mw.ustring.gsub(k, '[^%w\-_ ]', '?')
+
table.insert(values, clean(k))
table.insert(values, k)
 
 
end
 
end
elseif type(k) == 'number' and  
+
elseif type(k) == 'number' and
 
knownargs[tostring(k)] == nil and
 
knownargs[tostring(k)] == nil and
 
( showblankpos or isnotempty(v) )
 
( showblankpos or isnotempty(v) )
 
then
 
then
local vlen = mw.ustring.len(v)
+
table.insert(values, k .. ' = ' .. clean(v))
v = mw.ustring.sub(v, 1, (vlen < 25) and vlen or 25)
 
v = mw.ustring.gsub(v, '[^%w\-_ ]', '?')
 
table.insert(values, k .. ' = ' .. v .. ((vlen >= 25) and ' ...' or ''))
 
 
end
 
end
 
end
 
end
  
-- add resuls to the output tables
+
-- add results to the output tables
 
if #values > 0 then
 
if #values > 0 then
 
if frame:preprocess( "{{REVISIONID}}" ) == "" then
 
if frame:preprocess( "{{REVISIONID}}" ) == "" then
 
unknown = preview
 
unknown = preview
 
end
 
end
for k, v in pairs(values) do
+
for _, v in pairs(values) do
 
if v == '' then
 
if v == '' then
-- Fix odd bug for | = which gets stripped to the empty string and
+
-- Fix odd bug for | = which gets stripped to the empty string and
-- breaks category links
+
-- breaks category links
v = ' '
+
v = ' '
 
end
 
end
local r =  unknown:gsub('_VALUE_', v)
+
-- avoid error with v = 'example%2' ("invalid capture index")
 +
local r =  unknown:gsub('_VALUE_', {_VALUE_ = v})
 
table.insert(res, r)
 
table.insert(res, r)
 
end
 
end

Latest revision as of 17:51, 21 March 2019

Documentation for this module may be created at Module:Check for unknown parameters/doc

Script error: Lua error: Internal error: The interpreter exited with status 127.

-- 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 s:match('%S')
end

local function clean(text)
	-- Return text cleaned for display and truncated if too long.
	-- Strip markers are replaced with dummy text representing the original wikitext.
	local pos, truncated
	local function truncate(text)
		if truncated then
			return ''
		end
		if mw.ustring.len(text) > 25 then
			truncated = true
			text = mw.ustring.sub(text, 1, 25) .. '...'
		end
		return mw.text.nowiki(text)
	end
	local parts = {}
	for before, tag, remainder in text:gmatch('([^\127]*)\127[^\127]*%-(%l+)%-[^\127]*\127()') do
		pos = remainder
		table.insert(parts, truncate(before) .. '&lt;' .. tag .. '&gt;...&lt;/' .. tag .. '&gt;')
	end
	table.insert(parts, truncate(text:sub(pos or 1)))
	return table.concat(parts)
end

function p.check (frame)
	local args = frame.args
	local pargs = frame:getParent().args
	local ignoreblank = isnotempty(args['ignoreblank'])
	local showblankpos = isnotempty(args['showblankpositional'])
	local knownargs = {}
	local unknown = args['unknown'] or 'Found _VALUE_, '
	local preview = args['preview']

	local values = {}
	local res = {}
	local regexps = {}

	-- 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(preview) then
		preview = '<div class="hatnote" style="color:red"><strong>Warning:</strong> ' .. preview .. ' (this message is shown only in preview).</div>'
	elseif preview == nil then
		preview = unknown
	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 _, 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
				table.insert(values, clean(k))
			end
		elseif type(k) == 'number' and
			knownargs[tostring(k)] == nil and
			( showblankpos or isnotempty(v) )
		then
			table.insert(values, k .. ' = ' .. clean(v))
		end
	end

	-- add results to the output tables
	if #values > 0 then
		if frame:preprocess( "{{REVISIONID}}" ) == "" then
			unknown = preview
		end
		for _, v in pairs(values) do
			if v == '' then
				-- Fix odd bug for | = which gets stripped to the empty string and
				-- breaks category links
				v = ' '
			end
			-- avoid error with v = 'example%2' ("invalid capture index")
			local r =  unknown:gsub('_VALUE_', {_VALUE_ = v})
			table.insert(res, r)
		end
	end

	return table.concat(res)
end

return p