Module:Portal maintenance status
Template:Module rating This module searches a Portal_talk: page's portal page, and returns an appropriate message based if {{Portal maintenance status}} is found in the page's wikitext, and which parameters are used. An error is reported if this module is used outside of the Portal_talk namespace. It can be demonstrated, in any namespace, with the Template:Para and Template:Para parameters, which take the name of templates to "find" (instead of actually searching a page).
Usage
{{#invoke:Portal maintenance status|main}}
- Looks for {{Portal maintenance status}} on a Portal_talk: page's related portal page.
- Returns an appropriate message string if found or an empty string if not found, or an error if used in the wrong namespace.
{{#invoke:Portal maintenance status|historical}}
- Looks for {{Historical}} on a Wikipedia_talk: page's related project page.
- Returns yes if found or an empty string if not found, or an error if used in the wrong namespace.
{{#invoke:Portal maintenance status|featured}}
- Looks for {{Featured portal}} on a Wikipedia_talk: page's related project page.
- Returns yes if found or an empty string if not found, or an error if used in the wrong namespace.
Examples
If the portal contains Template:Tld
Template:Portal maintenance status
If the portal contains Template:Tld
Template:Portal maintenance status
If the portal contains Template:Tld
Template:Portal maintenance status
If the portal contains Template:Tld
Template:Portal maintenance status
If the portal contains Template:Tld
Template:Portal maintenance status
If the portal contains Template:Tld
Template:Portal maintenance status
If the portal contains Template:Tld
Template:Portal maintenance status
If the portal does not contain the template, there should be no output
If used in the wrong namespace, an error should be reported
See also
Template:Portal templates navbox
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('Wrong namespace', 0) end local subjectTitle = mw.title.new(namespace .. ":" .. talkTitle.text) return subjectTitle:getContent() end -- historical function -- Looks for {{Historical}} 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 = '{{' .. demoText .. '}}' if args.demo2 then local demo2Text = mw.ustring.gsub(args.demo2, '%{%{%!%}%}', '|') content= portalContent .. '{{' .. demo2Text .. '}}' 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, "<noinclude>.-</noinclude>", "") -- 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 {{Featured portal}} 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 = '{{' .. demoText .. '}}' if args.demo2 then local demo2Text = mw.ustring.gsub(args.demo2, '%{%{%!%}%}', '|') content= portalContent .. '{{' .. demo2Text .. '}}' end else content = getSubjectPageContent(100) end content = mw.ustring.gsub(content, "<!%-%-.-%-%->","") -- remove HTML comments content = mw.ustring.gsub(content, "<noinclude>.-</noinclude>", "") -- 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 {{Portal maintenance status}} (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 = '{{' .. demoText .. '}}' if args.demo2 then local demo2Text = mw.ustring.gsub(args.demo2, '%{%{%!%}%}', '|') portalContent = portalContent .. '{{' .. demo2Text .. '}}' 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