Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Documentation for this module may be created at Module:Disambiguation/doc

local p = {}
local mRedirect = require('Module:Redirect')
local disambiguationTemplates = mw.loadData('Module:Disambiguation/templates')
local PrepareText = require('Module:Wikitext Parsing').PrepareText

local function capitalize(s)
	-- This function only works on ASCII strings. If your wiki has
	-- disambiguation templates that use Unicode strings, use the commented-out
	-- line instead. Enwiki uses ASCII string manipulation only here to improve
	-- performance.
	return s:sub(1, 1):upper() .. s:sub(2, -1)
	-- return mw.ustring.upper(mw.ustring.sub(1, 1)) .. mw.ustring.sub(2, -1)
end

local function isDisambiguationTemplate(template)
	return disambiguationTemplates[capitalize(template)] or false
end

p.isDisambiguation = function(content)
	-- false if there is no content
	if content == nil then
		return false
	end

	-- redirects are not disambiguation pages
	if mRedirect.getTargetFromText(content) ~= nil then
		return false
	end

	-- check for disambiguation templates in the content
	local templateNames = {}
	-- remove nowiki content and html comments for this check
	local activecontent = PrepareText(content)
	for template in string.gmatch(activecontent, "{{%s*([^|}]-)%s*[|}]") do
		if isDisambiguationTemplate(template) then
			return true
		end
	end

	-- check for magic word
	if string.find(content, "__DISAMBIG__", 1, true) ~= nil then
		return true
	end

	return false
end

p._isDisambiguationPage = function(page)
	-- Look "(disambiguation)" in the title
	if string.find(page, "(disambiguation)",0,true) ~= nil then
		return true;
	end
	-- Look for disamiguation template in page content
	local title = mw.title.new(page)
	if not title then return false end
	local content = title:getContent()
	return p.isDisambiguation(content)
end

-- Entry points for templates
p.isDisambiguationPage = function(frame)
	local title = frame.args[1]
	return p._isDisambiguationPage(title) and "yes" or ""
end

return p