Module:InfoboxParamCheck

From SW420
Revision as of 04:32, 21 February 2023 by Admin (talk | contribs) (Removing the hack done in order to find infoboxes with missing images. It worked by, if an image was set in the 'image' field of the infobox, checking if the File existed. If not, it would repeat it out into the body of the article so that it could be found via the WantedFiles special page.)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Documentation for this module may be created at Module:InfoboxParamCheck/doc

local p = {}

local function makeCategoryLink(cat)
	-- "Category" is split out here so that the module isn't put into the
	-- category "%s" when the page is saved.
	return string.format('[[%s:%s]]', 'Category', cat)
end

function p.main(frame)
    if mw.title.getCurrentTitle().namespace ~= 0 then
        return ''
    end
    local missing = false
    local empty = true
    local extra = false
    local arglist = {}
    local parentargs = frame:getParent().args
    for _, k in ipairs(frame.args) do
        arglist[k] = true
    end
    local ignore = {}
    if frame.args.ignore then
        for k in frame.args.ignore:gmatch('[^%,]+') do
            ignore[k] = true
        end
    end
    local optional = {}
    if frame.args.optional then
        for k in frame.args.optional:gmatch('[^%,]+') do
            optional[k] = true
        end
    end
    for k, v in pairs(parentargs ) do
        if not arglist[k] and not optional[k] then
            extra = true
        elseif empty and not ignore[k] and #v > 0 then
            empty = false
        end
        arglist[k] = nil
    end
    if next(arglist) then
        -- nil if the table is empty, or a string key
        -- that evaluates to true if not empty
        missing = true
    end
    local ret = {''}
    if missing then
        ret[#ret + 1] = makeCategoryLink('Infoboxes with missing parameters')
    end
    if empty then
        ret[#ret + 1] = makeCategoryLink('Articles with empty infoboxes')
    end
    if extra then
        ret[#ret + 1] = makeCategoryLink('Infoboxes with unrecognized parameters')
    end
    return table.concat(ret)
end

return p