Jump to content

Module:Check for deprecated parameters/sandbox

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Hike395 (talk | contribs) at 15:27, 19 November 2025 (use correct category parameter, supply good default, Don't repeat yourself). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
-- 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 trim(s)
	return s:match('^%s*(.-)%s*$')
end

local function isnotempty(s)
	return s and 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 = '"'..v..'". '
        replaceString = replaceString..(replaceTable and 'Replace with "'..replaceTable[v]..'".' 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
	local args = frame.args
	local dep_values = {}
	for k, v in pairs(args) do
		if not (k == 'ignoreblank' or k == 'preview' or k == 'deprecated') then
			dep_values[k] = v
		end
	end

	-- Parse params to remove
	local removes = {}
	if frame.args['_remove'] then
		for r in frame.args['_remove']:gmatch("([^;]+)") do
			r = mw.ustring.gsub(r,'^%s*','')
			r = mw.ustring.gsub(r,'%s*$','')
			removes[r] = 1
		end
	end
	
	-- loop over the parent args and see if any are deprecated
	local values = {}
	local remove_values = {}
	local ignoreblank = isnotempty(frame.args['ignoreblank'])
	local pargs = frame:getParent().args
	for k, v in pairs(pargs) do
        if not ignoreblank or 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()
    local caller = frame:getParent():getTitle()

    -- create local defaulted arguments
    local args = {}
    args.category = frame.args["_category"] or title.namespace == 0 and "[[Category:Pages with deprecated parameters]]" or ""
	args.preview = frame.args['preview'] or 'Page using [['..caller..']] with deprecated parameter _VALUE_'
	if isnotempty(args.preview) then
		args.preview = require('Module:If preview')._warning({preview})
	end
	
    -- scan through values and remove_values and create output results
	local results = {}
    scanValues(values,results,args,dep_values)
    scanValues(remove_values,results,args)
	return table.concat(results)
end

return p