Permanently protected module
From Wikipedia, the free encyclopedia


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

			argsk = 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 argslen == "{{{" .. len .. "}}}" then

				argslen = 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 argsi then

				insert(needs_fixing, "Parameter " .. i .. " not given.")

				argsi = "{{{" .. 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 = argsi - 1], argsi

		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
Permanently protected module
From Wikipedia, the free encyclopedia


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

			argsk = 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 argslen == "{{{" .. len .. "}}}" then

				argslen = 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 argsi then

				insert(needs_fixing, "Parameter " .. i .. " not given.")

				argsi = "{{{" .. 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 = argsi - 1], argsi

		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

Videos

Youtube | Vimeo | Bing

Websites

Google | Yahoo | Bing

Encyclopedia

Google | Yahoo | Bing

Facebook