local p = {}
local mRedirect = require('Mô đun:Redirect')
local disambiguationTemplates = mw.loadData('Mô đun:Disambiguation/templates')
local function capitalize(s)
-- Hàm này chỉ hoạt động đối với chuỗi ký tự ASCII. Nếu wiki của bạn có
-- bản mẫu định hướng sử dụng chuỗi Unicode, hãy sử dụng dòng được comment.
-- viwiki chỉ sử dụng thao tác chuỗi ASCII ở đây để cải thiện hiệu suất
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)
-- trả về false nếu không có nội dung
if content == nil then
return false
end
-- trang đổi hướng không phải là trang định hướng
if mRedirect.getTargetFromText(content) ~= nil then
return false
end
-- kiểm tra bản mẫu định hướng trong nội dung trang
local templateNames = {}
for template in string.gmatch(content, "{{%s*([^|}]-)%s*[|}]") do
if isDisambiguationTemplate(template) then
return true
end
end
-- kiểm tra từ ma thuật
if string.find(content, "__DISAMBIG__", 1, true) ~= nil then
return true
end
return false
end
p._isDisambiguationPage = function(page)
-- Kiểm tra xem tên trang có chứa "(định hướng)" hay không
if string.find(page, "(định hướng)",0,true) ~= nil then
return true;
end
-- Kiểm tra xem nội dung trang có bản mẫu định hướng hay không
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