Module:InfoboxParamCheck
Jump to navigation
Jump to search
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 = {}
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(frame:getParent().args) 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
if frame.args.infobox then
ret[#ret + 1] = makeCategoryLink('Character infoboxes with missing parameters')
else
ret[#ret + 1] = makeCategoryLink('Infoboxes with missing parameters')
end
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