Mô đun:Portal maintenance status

local p = {}

function cleanupArgs(argsTable)
local cleanArgs = {}
for key, val in pairs(argsTable) do
if type(val) == 'string' then
val = val:match('^%s(.-)%s$')
if val ~= then
cleanArgs[key] = val
end
else
cleanArgs[key] = val
end
end
return cleanArgs
end

local content = {}

function makeTemplatePattern(template)
local first = string.sub(template, 1, 1)
local rest = string.sub(template, 2)
local pattern = mw.ustring.format('%s[%s%s]%s%s', '%{%{%s', mw.ustring.upper(first), mw.ustring.lower(first), rest, '%s|?[^%}]%}%}')
return pattern
end

function makeParameterPattern(parameter)
return mw.ustring.format('%s%s%s%s', '|%s', parameter, '%s=%s', '([^|%}])', '%s[|%}]')
end

function getMatchingTemplateWikitext(content, template, leadOnly)
if leadOnly then
content = mw.ustring.gsub(content, "%c%s.","") -- remove first Heading== and everything after it
end
for templateWikitext in mw.ustring.gmatch(content, '%b{}') do
local isCorrectTemplate = mw.ustring.match(templateWikitext, makeTemplatePattern(template))
if isCorrectTemplate then
return templateWikitext
end
end
return false
end

function getSubjectPageContent(contentNamespaceNumber)
local namespace = mw.site.namespaces[contentNamespaceNumber] ["name"]
local talkTitle = mw.title.getCurrentTitle()
if talkTitle.namespace ~= contentNamespaceNumber + 1 then
return error('Không gian tên sai', 0)
end
local subjectTitle = mw.title.new(namespace .. ":" .. talkTitle.text)
return subjectTitle:getContent()
end

-- historical function
-- Looks for on a Wikipedia_talk: page's related project page.
-- Returns 'yes' if found or (empty string) if not found, or an error if used in the wrong namespace.
p.historical = function(frame)
local parent = frame.getParent(frame)
local args = cleanupArgs(frame.args)
local demo = args.demo and true or false
local content
if demo then
local demoText = mw.ustring.gsub(args.demo, '%{%{%!%}%}', '|')
content =
if args.demo2 then
local demo2Text = mw.ustring.gsub(args.demo2, '%{%{%!%}%}', '|')
content= portalContent ..
end
else
content = getSubjectPageContent(4)
end

content = mw.ustring.gsub(content, "","") -- remove HTML comments
content = mw.ustring.gsub(content, "%c%s.","") -- remove first Heading== and everything after it
content = mw.ustring.gsub(content, ".-", "") -- remove noinclude bits

local isHistorical = mw.ustring.match(content, makeTemplatePattern('Historical')) and true or false
return isHistorical and 'yes' or
end

-- featured function
-- Looks for on a Portal_talk: page's related portal page.
-- Returns 'yes' if found or (empty string) if not found, or an error if used in the wrong namespace.
p.featured = function(frame)
local parent = frame.getParent(frame)
local args = cleanupArgs(frame.args)
local demo = args.demo and true or false
local content
if demo then
local demoText = mw.ustring.gsub(args.demo, '%{%{%!%}%}', '|')
content =
if args.demo2 then
local demo2Text = mw.ustring.gsub(args.demo2, '%{%{%!%}%}', '|')
content= portalContent ..
end
else
content = getSubjectPageContent(100)
end

content = mw.ustring.gsub(content, "","") -- remove HTML comments
content = mw.ustring.gsub(content, ".-", "") -- remove noinclude bits

local isFeatured = mw.ustring.match(content, makeTemplatePattern('Featured portal')) and true or false
return isFeatured and 'yes' or
end

-- main function
-- Looks for (or earlier deprecated templates) on a Portal_talk: page's related portal page.
-- Returns an appropriate message string if found or (empty string) if not found, or an error if used in the wrong namespace.
p.main = function(frame)
local parent = frame.getParent(frame)
local args = cleanupArgs(frame.args)
local demo = args.demo and true or false
local portalContent
if demo then
local demoText = mw.ustring.gsub(args.demo, '%{%{%!%}%}', '|')
portalContent =
if args.demo2 then
local demo2Text = mw.ustring.gsub(args.demo2, '%{%{%!%}%}', '|')
portalContent = portalContent ..
end
else
portalContent = getSubjectPageContent(100)
end

local status = getMatchingTemplateWikitext(portalContent, 'Portal maintenance status') or getMatchingTemplateWikitext(portalContent, 'Portal flag')
if not status then
return
end

local output = mw.ustring.sub(status, 0, -3) .. '|embed=yes}}'
return frame:preprocess(output)
end

return p