Module:Check for deprecated parameters
From Phuketer
Documentation for this module may be created at Module:Check for deprecated 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
-- on the list
local p = {}
local MAX_PARAMS = 9 -- Limit to only showing 10 preview warnings
local function isnotempty(s)
return s and mw.text.trim(s) ~= ''
end
local function scanValues(values,results,args,replaceTable)
for k, v in pairs(values) do
local c = args.category:gsub('_VALUE_', v)
table.insert(results, c)
if v == '' then
-- Fix odd bug for | = which gets stripped to the empty string
-- and breaks category links
v = ' '
end
local replaceString = '<code>'..v..'</code>. '
local replaceValue = replaceTable and replaceTable[v]
replaceString = replaceString..(replaceValue and 'Replace with <code>'..replaceValue..'</code>.' or 'It should be removed.')
local p = args.preview:gsub('_VALUE_',replaceString)
table.insert(results, p )
end
end
function p.check (frame)
-- create the table of deprecated values and their matching new value
return p._check(frame.args, frame:getParent().args, frame:getParent():getTitle())
end
local moduleParams = {ignoreblank=true, preview=true, _category=true, _remove=true}
function p._check(args, pargs, caller)
local dep_values = {}
local reg_exps = {}
for k, v in pairs(args) do
if ( type(k) == 'string' and k:find('^_regexp[1-9][0-9]*$') and v:find('=') ) then
local v_split = mw.text.split(v, '%s*=%s*')
if ( #v_split == 2 ) then
table.insert(reg_exps, { '^' .. v_split[1] .. '$', v_split[2] } )
end
elseif not moduleParams[k] then
dep_values[k] = v
end
end
-- Parse params to remove
local removes = {}
if args['_remove'] then
for r in args['_remove']:gmatch("([^;]+)") do
removes[mw.text.trim(r)] = 1
end
end
-- loop over the parent args and see if any are deprecated
local values = {}
local remove_values = {}
local ignoreblank = isnotempty(args['ignoreblank'])
for k, v in pairs(pargs) do
if not ignoreblank or isnotempty(v) then
if dep_values[k] then
table.insert(values, k)
elseif removes[k] then
table.insert(remove_values, k)
else
for _, regexp in ipairs(reg_exps) do
if mw.ustring.match( tostring(k), regexp[1] ) then
table.insert(values, k)
dep_values[k] = mw.ustring.gsub(tostring(k), regexp[1], regexp[2])
break
end
end
end
end
end
-- find out about calling context
local title = mw.title.getCurrentTitle()
-- create local defaulted arguments
local category = args["_category"] or title.namespace == 0 and "[[Category:Pages with deprecated parameters]]" or ""
local preview = args['preview'] or 'Page using [['..caller..']] with deprecated parameter _VALUE_'
if isnotempty(preview) then
preview = require('Module:If preview')._warning({preview})
end
local localArgs = {category=category,preview=preview}
-- scan through values and remove_values and create output results
local results = {}
scanValues(values,results,localArgs,dep_values)
scanValues(remove_values,results,localArgs)
if #results >= MAX_PARAMS*2 then
while #results > MAX_PARAMS*2 do
table.remove(results) -- Calling without index removes the last element
end
table.insert(results, require('Module:If preview')._warning({'Page using [['..caller..']] with <b>multiple other</b> deprecated parameters. Fix those above and preview again.'}))
end
return table.concat(results)
end
return p