Module:InfoboxParamCheck: Difference between revisions

From SW420
Jump to navigation Jump to search
imported>Cade Calrayn
Undo revision 10748269 by Cade Calrayn (talk)
 
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.
 
(16 intermediate revisions by the same user not shown)
Line 15: Line 15:
     local extra = false
     local extra = false
     local arglist = {}
     local arglist = {}
    local parentargs = frame:getParent().args
     for _, k in ipairs(frame.args) do
     for _, k in ipairs(frame.args) do
         arglist[k] = true
         arglist[k] = true
Line 30: Line 31:
         end
         end
     end
     end
     for k, v in pairs(frame:getParent().args) do
     for k, v in pairs(parentargs ) do
         if not arglist[k] and not optional[k] then
         if not arglist[k] and not optional[k] then
             extra = true
             extra = true

Latest revision as of 04:32, 21 February 2023

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