Module:Check for deprecated parameters

From Wikitia
Revision as of 07:51, 6 May 2026 by Wikitia (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

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