Toggle menu
13
222
68
27K
Kenshi Wiki
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.


Usage

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
Contents