Difference between revisions of "Module:Portal maintenance status/sandbox"
Jump to navigation
Jump to search
test>Evad37 (legacy code) |
m (21 revisions imported) |
||
| (14 intermediate revisions by 2 users not shown) | |||
| Line 21: | Line 21: | ||
local first = string.sub(template, 1, 1) | local first = string.sub(template, 1, 1) | ||
local rest = string.sub(template, 2) | 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*|[^%}]*%}%}') | + | local pattern = mw.ustring.format('%s[%s%s]%s%s', '%{%{%s*', mw.ustring.upper(first), mw.ustring.lower(first), rest, '%s*|?[^%}]*%}%}') |
return pattern | return pattern | ||
end | end | ||
| Line 29: | Line 29: | ||
end | end | ||
| − | function | + | function getMatchingTemplateWikitext(content, template, leadOnly) |
if leadOnly then | if leadOnly then | ||
content = mw.ustring.gsub(content, "%c%s*==.*","") -- remove first ==Heading== and everything after it | content = mw.ustring.gsub(content, "%c%s*==.*","") -- remove first ==Heading== and everything after it | ||
end | end | ||
| − | local | + | for templateWikitext in mw.ustring.gmatch(content, '%b{}') do |
| − | + | local isCorrectTemplate = mw.ustring.match(templateWikitext, makeTemplatePattern(template)) | |
| − | + | if isCorrectTemplate then | |
| − | + | return templateWikitext | |
| − | + | end | |
| − | |||
| − | |||
| − | |||
end | end | ||
| + | return false | ||
end | end | ||
| Line 54: | Line 52: | ||
end | end | ||
| − | p. | + | -- 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 parent = frame.getParent(frame) | ||
local args = cleanupArgs(frame.args) | local args = cleanupArgs(frame.args) | ||
local demo = args.demo and true or false | local demo = args.demo and true or false | ||
| − | local | + | local content |
if demo then | if demo then | ||
local demoText = mw.ustring.gsub(args.demo, '%{%{%!%}%}', '|') | local demoText = mw.ustring.gsub(args.demo, '%{%{%!%}%}', '|') | ||
| − | + | content = '{{' .. demoText .. '}}' | |
if args.demo2 then | if args.demo2 then | ||
local demo2Text = mw.ustring.gsub(args.demo2, '%{%{%!%}%}', '|') | local demo2Text = mw.ustring.gsub(args.demo2, '%{%{%!%}%}', '|') | ||
| − | + | content= portalContent .. '{{' .. demo2Text .. '}}' | |
end | end | ||
else | else | ||
| − | + | content = getSubjectPageContent(4) | |
end | 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 | 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 | end | ||
| − | local | + | local status = getMatchingTemplateWikitext(portalContent, 'Portal maintenance status') or getMatchingTemplateWikitext(portalContent, 'Portal flag') |
| − | + | if not status then | |
| − | + | return '' | |
| − | |||
| − | |||
| − | |||
| − | if | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
end | end | ||
| − | local | + | local output = mw.ustring.sub(status, 0, -3) .. '|embed=yes}}' |
| − | + | return frame:preprocess(output) | |
| − | |||
| − | return output | ||
end | end | ||
return p | return p | ||
Latest revision as of 17:26, 8 September 2020
Documentation for this module may be created at Module:Portal maintenance status/sandbox/doc
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