Module:Disambiguation
From Thetacola Wiki
Jump to navigationJump to search
Protected | This module is subject to page protection. It is a highly visible module in use by a very large number of pages, or is substituted very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is protected from editing. |
Warning | This Lua module is used on approximately 214,000 pages. To avoid major disruption and server load, any changes should be tested in the module's /sandbox or /testcases subpages, or in your own module sandbox. The tested changes can be added to this page in a single edit. Consider discussing changes on the talk page before implementing them. |
This module detects if a given page is a disambiguation page.
Usage[edit source]
{{#invoke:Disambiguation|isDisambiguationPage|Page title}}
- returns
yes
if the page is a disambiguation page, or nothing if the page is not a disambiguation page
Examples:
{{#invoke:Disambiguation|isDisambiguationPage|Paris}}
→{{#invoke:Disambiguation|isDisambiguationPage|New}}
→{{#invoke:Disambiguation|isDisambiguationPage|Black swan (disambiguation)}}
→ yes
You can also use magic words like {{SUBJECTPAGENAME}}:
{{#invoke:Disambiguation|isDisambiguationPage|{{SUBJECTPAGENAME}}}}
→ yes
Usage within Lua modules[edit source]
Import this module, e.g with
local mDisambiguation = require('Module:Disambiguation')
Then you can use the functions isDisambiguation
and _isDisambiguationPage
.
If you have already have a Title object for the page to check, get the content using the title object's getContent() method, and pass that into isDisambiguation
:
local isDab = mDisambiguation.isDisambiguation(content) -- returns true or false
- (where
content
is a string, the wikitext content of page to check)
If you don't otherwise need the title, you can pass in the page name to _isDisambiguationPage
:
local isDab = mDisambiguation._isDisambiguationPage(pageName) -- returns true or false
- (where
pageName
is a string, the name of page to check)
local p = {}
local mRedirect = require('Module:Redirect')
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]urname",
"[Ss]urnames",
"[Ss]pecies Latin name disambiguation",
"[Ss]peciesLatinNameDisambig",
"[Ll]atinNameDisambig",
"[Mm]athematical disambiguation",
"[Mm]athematics disambiguation",
"[Mm]athdab",
"[Mm]ath dab",
"[Rr]oad disambiguation",
"[Rr]oaddis",
}
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
for _i, v in ipairs(disambigTemplates) do
if mw.ustring.find(content, "{{%s*".. v .. "%s*%f[|}]") ~= nil then
return true
end
end
-- check for magic word
if mw.ustring.find(content, "__DISAMBIG__", 1, true) ~= nil then
return true
end
return false
end
p._isDisambiguationPage = function(page)
-- Look "(disambiguation)" in the title
if mw.ustring.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