Module:Disambiguation: Difference between revisions
From WikiMD's Wellness Encyclopedia
m 1 revision imported |
en>MSGJ deploy new version, code by User:Mr. Stradivarius |
||
| Line 1: | Line 1: | ||
local p = {} | local p = {} | ||
local mRedirect = require('Module:Redirect') | local mRedirect = require('Module:Redirect') | ||
local disambiguationTemplates = mw.loadData('Module:Disambiguation/templates') | |||
local | 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) | p.isDisambiguation = function(content) | ||
-- false if there is no content | -- false if there is no content | ||
if content == nil then return false end | if content == nil then | ||
return false | |||
end | |||
-- redirects are not disambiguation pages | -- redirects are not disambiguation pages | ||
if mRedirect.getTargetFromText(content) ~= nil then return false end | if mRedirect.getTargetFromText(content) ~= nil then | ||
return false | |||
end | |||
-- check for disambiguation templates in the content | -- check for disambiguation templates in the content | ||
local templateNames = {} | local templateNames = {} | ||
for | for template in string.gmatch(content, "{{%s*([^|}]-)%s*[|}]") do | ||
if isDisambiguationTemplate(template) then | |||
return true | |||
end | end | ||
end | end | ||
-- check for magic word | -- check for magic word | ||
if string.find(content, "__DISAMBIG__", 1, true) ~= nil then | if string.find(content, "__DISAMBIG__", 1, true) ~= nil then | ||
return true | return true | ||
end | end | ||
return false | return false | ||
end | end | ||
Revision as of 18:27, 19 September 2023
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 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 = {}
for template in string.gmatch(content, "{{%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