Module:Check for deprecated parameters
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 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
-- Fix: Check if category exists before using it
local category = args.category or ''
local c = category:gsub('_VALUE_', v)
if isnotempty(c) then
table.insert(results, c)
end
if v == '' then
-- Fix odd bug for | = which gets stripped to the empty string
-- and breaks category links
v = ' '
end
local replaceString = '"' .. v .. '". '
local replaceValue = replaceTable and replaceTable[v]
replaceString = replaceString .. (replaceValue and 'Replace with "' .. replaceValue .. '".' or 'It should be removed.')
-- Fix: Check if preview exists before using it
local preview = args.preview or ''
local p = preview:gsub('_VALUE_', replaceString)
if isnotempty(p) then
table.insert(results, p)
end
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 = {}
for k, v in pairs(args) do
if 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)
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_'
-- Fix: Only process preview if not empty
local previewResult = ''
if isnotempty(preview) then
local ifPreview = require('Module:If preview')
if ifPreview and ifPreview._warning then
previewResult = ifPreview._warning({preview})
else
previewResult = preview
end
end
local localArgs = {category = category, preview = previewResult}
-- scan through values and remove_values and create output results
local results = {}
scanValues(values, results, localArgs, dep_values)
scanValues(remove_values, results, localArgs)
return table.concat(results)
end
return p