Module:Portal maintenance status/sandbox explained

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 cleanArgsend

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', '%%}') return patternend

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 falseend

function getSubjectPageContent(contentNamespaceNumber) local namespace = mw.site.namespaces[contentNamespaceNumber] ["name"] local talkTitle = mw.title.getCurrentTitle if talkTitle.namespace ~= contentNamespaceNumber + 1 then return error('Wrong namespace', 0) end local subjectTitle = mw.title.new(namespace .. ":" .. talkTitle.text) return subjectTitle:getContentend

-- 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