Module:Category disambiguation
Appearance
Lua error in package.lua at line 80: module 'Module:Yesno' not found. Script error: No such module "High-use".
Usage[edit source]
This module implements the {{Category disambiguation}} template. Please see the template page for usage instructions.
local concat = table.concat
local insert = table.insert
local makeTitle = mw.title.makeTitle
local messageBox = require("Module:Message box").main
local nowiki = mw.text.nowiki
local pagesInCategory = mw.site.stats.pagesInCategory
local remove = table.remove
local sort = table.sort
local trim = mw.text.trim
local yesno = require("Module:Yesno")
local title = mw.title.getCurrentTitle()
local namespace = title.namespace
local title_text = title.text
local p = {}
function p.main(frame)
local args
local len, needs_fixing = 0, {}
-- Documentation example.
if namespace == 10 and title_text:match("Category disambiguation") then
args = {
"the bird genus",
"Eremophila (bird)",
"the plant genus",
"Eremophila (plant)"
}
len = 4
-- Otherwise, process input arguments.
else
-- Produce a new args table, to get the actual length.
-- Trim input arguments, and add various maintenance warnings as needed.
args = {}
local raw_args = (frame:getParent() or frame).args
for k, v in pairs(raw_args) do
v = trim(v)
if type(k) == "number" then
if v == "" then
insert(needs_fixing, "Parameter " .. k .. " is blank.")
v = "{{{" .. k .. "}}}"
end
len = k > len and k or len
end
args[k] = v
end
-- Number of parameters should be even.
local orig_len = len
if len % 2 == 1 then
-- Don't give a blank parameter warning if the template call ends "|}}".
if args[len] == "{{{" .. len .. "}}}" then
args[len] = nil
len = len - 1
remove(needs_fixing)
-- Otherwise we need a blank final parameter for the missing category.
else
len = len + 1
end
end
if len < 4 then
insert(needs_fixing, "Should specify at least 2 categories.")
end
-- Fill out any missing parameters, but stop inputs like {{Category disambiguation|10000=foo}} causing a cascade of warnings.
local missing = 0
for i = 1, len do
if not args[i] then
insert(needs_fixing, "Parameter " .. i .. " not given.")
args[i] = "{{{" .. i .. "}}}"
missing = missing + 1
if missing == 10 then
error("Large number of missing parameters between 1 and " .. orig_len .. " (the highest specified parameter)")
end
end
end
end
local list = {}
for i = 2, len, 2 do
local topic, cat = args[i - 1], args[i]
local cat_title = makeTitle(14, cat)
-- Warn if the category isn't valid (e.g. "{" isn't a valid category name).
if not cat_title then
insert(needs_fixing, nowiki(cat) .. " is not a valid category title.")
end
insert(list, "* For " .. topic .. ", see '''[[:" .. (cat_title and cat_title.prefixedText or "Category:" .. cat) .. "]].'''")
-- Warn if the category is a redlink.
if cat_title and not (args.allowredlink or cat_title:getContent()) then
insert(needs_fixing, cat_title.prefixedText .. " is a redlink.")
end
end
local output = messageBox("cmbox", {
type = "content",
image = "[[File:Disambig gray.svg|50px]]",
text = "'''This category is not in use because it has an ambiguous title.'''" ..
frame:expandTemplate{
title = "Plainlist",
args = {
concat(list, "\n"),
style = "margin-left:1.6em;"
}
} ..
"'''Note:''' This category page should be empty. All entries should be recategorized under one of the above categories or an appropriate subcategory."
})
-- Add maintenance warnings if necessary.
if #needs_fixing > 0 then
sort(needs_fixing)
output = output .. messageBox("cmbox", {
type = "style",
text = frame:expandTemplate{
title = "Template link",
args = {
"Category disambiguation"
}
} .. " has the following issues:" ..
frame:expandTemplate{
title = "Plainlist",
args = {
"*" .. concat(needs_fixing, "\n*"),
style = "margin-left:1.6em;"
}
}
})
end
-- Only add behaviour switches and categories if in the category namespace.
if namespace == 14 then
output = output ..
"__DISAMBIG__" ..
"__EXPECTUNUSEDCATEGORY__" ..
"[[Category:Disambiguation categories]]" ..
"[[Category:All disambiguation pages]]" ..
(#needs_fixing > 0 and "[[Category:Wikipedia category-disambiguation box parameter needs fixing|∃" ..
title_text .. "]]" or "") ..
(pagesInCategory(title_text) > 0 and "[[Category:Non-empty disambiguation categories]]" or "")
elseif not yesno(args.nocat, true) then
output = output .. frame:expandTemplate{
title = "Incorrect namespace",
args = {
"category"
}
}
end
return output
end
return p