Jump to content

Module:Disambiguation/sandbox

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by MSGJ (talk | contribs) at 11:57, 15 May 2023. The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
local p = {}
local mRedirect = require('Module:Redirect')

p.isDisambiguation = function(content)
	local disambigTemplates = {
		"[Dd][Aa][Bb]",
		"[Dd]big",
		"[Dd]is",
		"[Dd]isambiguation",
		"[%w_%s]-%f[%w][Dd]isam[%w]-",
		"[Gg]eodis",
		"[Hh][Nn][Dd][Ii][Ss]",
		"[Hh]ndisambig",
		"[Ll]etter%-[Nn]umber [Cc]ombination [Dd]isambiguation",
		"[Ll]etter%-NumberCombDisambig",
		"[Mm]il%-unit%-dis",
		"[Nn]umberdis",
		"[Ss]choold[ai][bs]",
		"[Mm]il-unit-disambig",
		"[Mm]ilitary unit disambiguation",
		"[Gg]eo-dis",
		"[Gg]eodisambig",
		"[Dd]isambig[Gg]eo",
		"[Dd]isambig[GN]",
		"[Dd]isambigNm",
		"[Dd]isambigName",
		"[Ss]urnames?",
		"[Ss]pecies Latin name disambiguation",
		"[Ss]peciesLatinNameDisambig",
		"[Ll]atinNameDisambig",
		"[Mm]athematical disambiguation",
		"[Mm]athematics disambiguation",
		"[Mm]ath ?dab",
		"[Rr]oad disambiguation",
		"[Rr]oaddis",
	}
	-- 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 = {}
	for name in string.gmatch(content, "{{%s*([^|}]-)%s*[|}]") do
		templateNames[name] = true
	end
	for _i, v in ipairs(disambigTemplates) do
		for template, _ in pairs(templateNames) do
			if string.match(template, "^"..v.."$") then
				return 3
			end
		end
	end
	-- check for magic word
	if string.find(content, "__DISAMBIG__", 1, true) ~= nil then
		return 4
	end
	return false
end

p._isDisambiguationPage = function(page)
	-- Look "(disambiguation)" in the title
	if string.find(page, "(disambiguation)",0,true) ~= nil then
		return 1
	end
	-- Check Wikidata to see if it's an instance of Q4167410
	local qid
	if page and page~='' then
		qid = mw.wikibase.getEntityIdForTitle(page)
	else
		qid = mw.wikibase.getEntityIdForCurrentPage()
	end
	for _,statement in ipairs(mw.wikibase.getBestStatements(qid,'P31')) do
		if statement.mainsnak.snaktype == 'value' then
			if statement.mainsnak.datavalue.value.id=='Q4167410' then
				return 2
			end
		end
	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