Module:Sandbox/Harryboyles/Article history
local p = {
--collect categories to avoid cluttering the HTML tree.
category = {},
includeonly = {},
errors = {},
title = mw.title.getCurrentTitle(),
}
--If the latest FAR failed
--If currentstatus is FA or FL ==> Do nothing
--If there is no currentstatus ==> Error
--Else ==> FFA tr
function p._statusFFA(args, action)
local row = mw.html.create()
local result = mw.ustring.upper(args['action' .. action .. 'result'])
local status = mw.ustring.upper(args['currentstatus'])
if result == 'FAILED' or result == 'REMOVED' or result == 'FAIL' or result == 'REMOVE' or result == 'DEMOTED' then
if status == 'FA' and status == 'FL' then
-- Do nothing
elseif status then
if status == 'FFA/GA' or args['small'] == 'yes' then
iconsize = 30
else
iconsize = 50
end
row
:tag('tr')
:tag('td')
:addClass('mbox-image')
:wikitext('File:Featured article star - cross.svg')
:done()
:tag('td')
:addClass('mbox-text')
:wikitext("" .. p.title.prefixedText .. " is a former featured article. "..
"Please see the links under Article milestones below for its original nomination page (for older articles, check " ..
"the nomination archive) and why it was removed.")
table.insert(p.includeonly, "Category:Wikipedia former featured articles")
else
row
:tag('tr')
:addClass('error')
:tag('td')
:addClass('mbox-image')
:wikitext("File:Imbox deletion.png")
:done()
:tag('td')
:addClass('mbox-text')
:wikitext('Former featured articles should have a current status!')
:done()
:done()
table.insert(p.errors, 'Category:ArticleHistory error')
end
end
return tostring(row)
end
function p.statusFAC(args)
local row = mw.html.create()
row
:tag('tr')
:addClass('error')
:tag('td')
:addClass('mbox-image')
:done()
:tag('td')
:addClass('mbox-text')
:wikitext("'''Use the template {{fac}} to nominate an article for Featured article status; " ..
"this simplifies the nomination procedure. A bot will add the details to the ArticleHistory template when the FAC process is closed.'''")
:done()
:done()
table.insert(p.errors, 'Category:ArticleHistory error')
return tostring(row)
end
function p.statusFFAC(args)
local row = mw.html.create()
if args['small'] == 'yes' then
iconsize = 30
else
iconsize = 50
end
row
:tag('tr')
:tag('td')
:addClass('mbox-image')
:wikitext("" .. iconsize .. "px")
:done()
:tag('td')
:addClass('mbox-text')
:wikitext("" .. p.title.prefixedText .. " is a former featured article candidate. "..
"Please view the links under Article milestones below to see why the nomination failed. " ..
"For older candidates, please check the archive.")
table.insert(p.includeonly, "Category:Wikipedia featured article candidates (contested)")
return tostring(row)
end
function p.statusFA(args)
local row = mw.html.create()
for i=20 , 1 , -1 do
if args["action".. i] and mw.ustring.upper(args["action".. i]) == "FAC" then
actionlink = args["action" .. i .. "link"]
break
end
end
if not actionlink then
actionlink = "Wikipedia:Featured article candidates/" .. p.title.prefixedText
end
if args['small'] == 'yes' then
iconsize = 30
else
iconsize = 48
end
row
:tag('tr')
:tag('td')
:addClass('mbox-image')
:wikitext("File:Featured article star.svg")
:done()
:tag('td')
:addClass('mbox-text')
:wikitext(""..p.title.prefixedText .. " is a featured article; " ..
"it (or a previous version of it) has been identified " ..
"as one of the best articles produced by the Wikipedia community. " ..
"Even so, if you can update or improve it, please do so.")
table.insert(p.includeonly, "Category:Wikipedia featured articles")
return tostring(row)
end
function p.statusFAR(args)
local row = mw.html.create()
row
:tag('tr')
:addClass('error')
:tag('td')
:addClass('mbox-image')
:done()
:tag('td')
:addClass('mbox-text')
:wikitext("'''Use the template {{FAR}} to nominate an article for Featured article status; " ..
"this simplifies the nomination procedure. A bot will add the details to the ArticleHistory template when the FAR process is closed.'''")
table.insert(p.errors, "Category:ArticleHistory error")
return tostring(row)
end
function p.statusFFLC(args)
if args['small'] == 'yes' then
iconsize = 30
else
iconsize = 50
end
local row = mw.html.create()
row
:tag('tr')
:tag('td')
:addClass('mbox-image')
:wikitext("File:Cscr-former.svg")
:done()
:tag('td')
:addClass('mbox-text')
:wikitext(""..p.title.prefixedText .. " is a former featured list candidate. " ..
"Please view the link under Article milestones below to see why the nomination failed. " ..
"Once the objections have been addressed you may resubmit the article for featured list status.")
table.insert(p.includeonly, "Category:Wikipedia featured list candidates (contested)")
return tostring(row)
end
function p.statusFL(args)
local row = mw.html.create()
for i=20 , 1 , -1 do
if args["action".. i] == "FL" then
actionlink = args["action" .. i .. "link"]
break
end
end
if not actionlink then
actionlink = "Wikipedia:Featured list candidates/" .. p.title.prefixedText
end
if args['small'] == 'yes' then
iconsize = 30
else
iconsize = 48
end
row
:tag('tr')
:tag('td')
:addClass('mbox-image')
:wikitext("File:Featured article star.svg")
:done()
:tag('td')
:addClass('mbox-text')
:wikitext(""..p.title.prefixedText .. " is a featured list, " ..
"which means it has been identified as one of the best lists produced by the Wikipedia community. " ..
"If you can update or improve it, please do so.")
table.insert(p.includeonly, "Category:Wikipedia featured lists")
return tostring(row)
end
function p.statusFFL(args)
local row = mw.html.create()
if args['small'] == 'yes' then
iconsize = 30
else
iconsize = 50
end
row
:tag('tr')
:tag('td')
:addClass('mbox-image')
:wikitext("File:Cscr-featured-strike.svg")
:done()
:tag('td')
:addClass('mbox-text')
:wikitext(""..p.title.prefixedText .. " is a former featured list. " ..
"Please see the links under Article milestones below for its original nomination page and why it was removed. " ..
"If it has improved again to featured list standard, you may " ..
"renominate the article to become a featured list.")
:done()
:done()
return tostring(row)
end
function p.statusGA(args, gatopic)
local row = mw.html.create()
if string.len(gatopic) > 0 then
topiclink = '/' .. gatopic
else
topiclink = ''
end
if args['currentstatus'] =='FFA/GA' then
iconsize = 25
elseif args['small'] == 'yes' then
iconsize = 30
else
iconsize = 40
end
row
:tag('tr')
:tag('td')
:addClass('mbox-image')
:wikitext("File:Symbol support vote.svg")
:done()
:tag('td')
:addClass('mbox-text')
:wikitext(""..p.title.prefixedText .. " has been listed as one of the " ..gatopic.."good articles " ..
"under the good article criteria. If you can improve it further, please do so. " ..
"If it no longer meets these criteria, you can reassess it.")
if p.title:inNamespace("Talk") then
table.insert(p.includeonly, "Category:Wikipedia good articlesCategory:Wikipedia CD Selection-GAsCategory:GA-Class Good articles")
if gatopic then
table.insert(p.includeonly,""..p.title.prefixedText.."")
else
table.insert(p.includeonly, "|"..p.title.prefixedText.."")
end
end
return tostring(row)
end
function p.statusFGAN(args, gatopic)
local row = mw.html.create()
if args['small'] == 'yes' then
iconsize = 30
else
iconsize = 50
end
row
:tag('tr')
:tag('td')
:addClass('mbox-image')
:wikitext("File:Symbol unsupport vote.svg")
:done()
:tag('td')
:addClass('mbox-text')
:wikitext(""..p.title.prefixedText .. " was one of the " .. gatopic .." good article nominees, " ..
"but did not meet the good article criteria at the time. There are suggestions below for improving the article. " ..
"Once these issues have been addressed, the article can be renominated. " ..
"Editors may also seek a reassessment of the decision if they believe there was a mistake.")
table.insert(p.includeonly, "Category:Former good article nominees")
return tostring(row)
end
function p.statusDGA(args, gatopic)
local row = mw.html.create()
if args['small'] == 'yes' then
iconsize = 30
else
iconsize = 50
end
row
:tag('tr')
:tag('td')
:addClass('mbox-image')
:wikitext("File:Symbol unsupport vote.svg")
:done()
:tag('td')
:addClass('mbox-text')
:wikitext(""..p.title.prefixedText .. " was one of the " .. gatopic .." good articles, " ..
"but it has been removed from the list. There are suggestions below for improving the article to meet the good article criteria. " ..
"Once these issues have been addressed, the article can be renominated. " ..
"Editors may also seek a reassessment of the decision if they believe there was a mistake.")
table.insert(p.includeonly, "Category:Delisted good articles")
return tostring(row)
end
function p.statusFFT(args)
local row = mw.html.create()
if args['small'] == 'yes' then
iconsize = 30
else
iconsize = 50
end
row
:tag('tr')
:tag('td')
:addClass('mbox-image')
:wikitext("File:Cscr-featured-strike.svg")
:done()
:tag('td')
:addClass('mbox-text')
:wikitext("This article is part of a former featured topic series. " ..
"If it has improved again to featured topic standard, " ..
"you may renominate the topic to become a featured topic.")
:done()
:done()
return tostring(row)
end
function p.statusFFTC(args)
local row = mw.html.create()
if args['small'] == 'yes' then
iconsize = 30
else
iconsize = 50
end
row
:tag('tr')
:tag('td')
:addClass('mbox-image')
:wikitext("File:Cscr-former.svg")
:done()
:tag('td')
:addClass('mbox-text')
:wikitext("This article is part of a former featured topic candidate. " ..
"Please view the links under Article milestones below to see why the nomination failed.")
return tostring(row)
end
function p.statusFPO(args)
local row = mw.html.create()
if args['small'] == 'yes' then
iconsize = 30
else
iconsize = 50
end
row
:tag('tr')
:tag('td')
:addClass('mbox-image')
:wikitext("File:Cscr-featured.svg")
:done()
:tag('td')
:addClass('mbox-text')
:wikitext("The "..p.title.text .." Portal is a featured portal, " ..
"which means it has been identified " ..
"as one of the best portals on Wikipedia. If you see a way this portal can be updated or improved without compromising previous work, please feel free to contribute.")
table.insert(p.includeonly, ""..p.title.text .."")
return tostring(row)
end
function p.statusFFPO(args)
local row = mw.html.create()
if args['small'] == 'yes' then
iconsize = 30
else
iconsize = 50
end
row
:tag('tr')
:tag('td')
:addClass('mbox-image')
:wikitext("File:Featured article star - cross.svg")
:done()
:tag('td')
:addClass('mbox-text')
:wikitext("This portal is a former featured portal. " ..
"Please see the links under Portal milestones below for its original nomination page and why it was removed.")
table.insert(p.includeonly, ""..p.title.text .."")
return tostring(row)
end
function p.statusFFPOC(args)
local row = mw.html.create()
if args['small'] == 'yes' then
iconsize = 30
else
iconsize = 50
end
row
:tag('tr')
:tag('td')
:addClass('mbox-image')
:wikitext("File:Cscr-former.svg")
:done()
:tag('td')
:addClass('mbox-text')
:wikitext("This portal is a former featured portal candidate. " ..
"Please see the links under Portal milestones below for its original nomination page and why the nomination failed.")
table.insert(p.includeonly, ""..p.title.text .."")
return tostring(row)
end
function p.statusInvalid(args)
local row = mw.html.create()
row
:tag('tr')
:addClass('error')
:tag('td')
:addClass('mbox-image')
:done()
:tag('td')
:addClass('mbox-text')
:wikitext("Please do not use " .. args['currentstatus'] .." as a currentstatus parameter: " ..
"these assessments are the responsibility of individual WikiProjects.")
table.insert(p.errors, "Category:ArticleHistory error")
return tostring(row)
end
function p.statusUnknown(args)
local row = mw.html.create()
row
:tag('tr')
:addClass('error')
:tag('td')
:addClass('mbox-image')
:wikitext("File:Imbox deletion.png")
:done()
:tag('td')
:addClass('mbox-text')
:wikitext("Unknown current status!")
:done()
:done()
table.insert(p.errors, "Category:ArticleHistory error")
return tostring(row)
end
function p.statusFT(args)
local isFA = false
if args['ftname'] then
if p.featuredTopicSum(args['ftname']) then
isFA = true
elseif args['ft2name'] then
if p.featuredTopicSum(args['ft2name']) then
isFA = true
elseif args['ft3name'] then
if p.featuredTopicSum(args['ft3name']) then
isFA = true
elseif args['ft4name'] then
if p.featuredTopicSum(args['ft4name']) then
isFA = true
end
end
end
end
end
if args['small'] then
iconsize = 30
else
iconsize = 48
end
if isFA then
image = 'File:cscr-featuredtopic.svg'
else
image = 'File:Support cluster.svg'
end
local row = mw.html.create():tag('tr')
:tag('td')
:addClass('mbox-image')
:wikitext(image)
:done()
local cell = row:tag('td')
:addClass('mbox-text')
:wikitext(""..p.title.prefixedText .. " is ")
if (args['ftmain'] == 'yes') then
cell:wikitext('the main article in')
else
cell:wikitext('part of')
end
cell:wikitext(" the ' .. args['ftname'] .. " series, a ")
if p.featuredTopicSum(args['ftname']) then
cell:wikitext('featured topic. ')
else
cell:wikitext('good topic. ')
end
if (args['ft2name']) then
cell:wikitext('It is also ')
if (args['ft2main'] == 'yes') then
cell:wikitext('the main article in')
else
cell:wikitext('part of')
end
cell:wikitext(" the ' .. args['ft2name'] .. " series, a ")
if p.featuredTopicSum(args['ft2name']) then
cell:wikitext('featured topic')
else
cell:wikitext('good topic')
end
end
if (args['ft3name']) then
cell:wikitext('It is also ')
if (args['ft3main'] == 'yes') then
cell:wikitext('the main article in')
else
cell:wikitext('part of')
end
cell:wikitext(" the ' .. args['ft3name'] .. " series, a ")
if p.featuredTopicSum(args['ft3name']) then
cell:wikitext('featured topic')
else
cell:wikitext('good topic')
end
end
if (args['ft4name']) then
cell:wikitext('It is also ')
if (args['ft4main'] == 'yes') then
cell:wikitext('the main article in')
else
cell:wikitext('part of')
end
cell:wikitext(" the ' .. args['ft4name'] .. " series, a ")
if p.featuredTopicSum(args['ft4name']) then
cell:wikitext('featured topic')
else
cell:wikitext('good topic')
end
end
if args['ft2name'] then
cell:wikitext('These are ')
else
cell:wikitext('This is ')
end
cell:wikitext("identified as among the best series of articles produced by the Wikipedia community. If you can update or improve ")
if args['ft2name'] then
cell:wikitext('them')
else
cell:wikitext('it')
end
cell:wikitext(", please do so.")
-- Categories
if args['currentstatus'] == 'FA' then
table.insert(p.includeonly,'Category:FA-Class Featured topics articles')
table.insert(p.includeonly,'Category:Wikipedia featured topics '..args['ftname']..' featured content')
if args['ft2name'] then
table.insert(p.includeonly,'Category:Wikipedia featured topics '..args['ft2name']..' featured content')
end
if args['ft3name'] then
table.insert(p.includeonly,'Category:Wikipedia featured topics '..args['ft3name']..' featured content')
end
if args['ft4name'] then
table.insert(p.includeonly,'Category:Wikipedia featured topics '..args['ft4name']..' featured content')
end
elseif args['currentstatus'] == 'FL' then
table.insert(p.includeonly,'Category:FL-Class Featured topics articles')
table.insert(p.includeonly,'Category:Wikipedia featured topics '..args['ftname']..' featured content')
if args['ft2name'] then
table.insert(p.includeonly,'Category:Wikipedia featured topics '..args['ft2name']..' featured content')
end
if args['ft3name'] then
table.insert(p.includeonly,'Category:Wikipedia featured topics '..args['ft3name']..' featured content')
end
if args['ft4name'] then
table.insert(p.includeonly,'Category:Wikipedia featured topics '..args['ft4name']..' featured content')
end
elseif args['currentstatus'] == 'FFA/GA' or args['currentstatus'] == 'GA' then
table.insert(p.includeonly,'Category:GA-Class Featured topics articles')
table.insert(p.includeonly,'Category:Wikipedia featured topics '..args['ftname']..' good content')
if args['ft2name'] then
table.insert(p.includeonly,'Category:Wikipedia featured topics '..args['ft2name']..' good content')
end
if args['ft3name'] then
table.insert(p.includeonly,'Category:Wikipedia featured topics '..args['ft3name']..' good content')
end
if args['ft4name'] then
table.insert(p.includeonly,'Category:Wikipedia featured topics '..args['ft4name']..' good content')
end
else
table.insert(p.includeonly,'Category:Unassessed Featured topics articles')
table.insert(p.includeonly,'Category:Wikipedia featured topics '..args['ftname']..'')
if args['ft2name'] then
table.insert(p.includeonly,'Category:Wikipedia featured topics '..args['ft2name']..'')
end
if args['ft3name'] then
table.insert(p.includeonly,'Category:Wikipedia featured topics '..args['ft3name']..'')
end
if args['ft4name'] then
table.insert(p.includeonly,'Category:Wikipedia featured topics '..args['ft4name']..'')
end
end
if p.featuredTopicSum(args['ftname']) then
if args['ftmain'] == 'yes' then
table.insert(p.includeonly,''..args['ftname'].. ' ' .. p.title.text .. '')
else
table.insert(p.includeonly,'Category:High-importance Featured topics articles')
end
else
if args['ftmain'] == 'yes' then
table.insert(p.includeonly,''..args['ftname'].. ' ' .. p.title.text .. '')
else
table.insert(p.includeonly,'Category:Low-importance Featured topics articles')
end
end
if args['ft2name'] then
if p.featuredTopicSum(args['ft2name']) then
if args['ft2main'] == 'yes' then
table.insert(p.includeonly,''..args['ft2name'].. ' ' .. p.title.text .. '')
else
table.insert(p.includeonly,'Category:High-importance Featured topics articles')
end
else
if args['ft2main'] == 'yes' then
table.insert(p.includeonly,''..args['ft2name'].. ' ' .. p.title.text .. '')
else
table.insert(p.includeonly,'Category:Low-importance Featured topics articles')
end
end
end
if args['ft3name'] then
if p.featuredTopicSum(args['ft3name']) then
if args['ft3main'] == 'yes' then
table.insert(p.includeonly,''..args['ft3name'].. ' ' .. p.title.text .. '')
else
table.insert(p.includeonly,'[[Category:High-importance Featured topics articles)')
end
else
if args['ft3main'] == 'yes' then
table.insert(p.includeonly,''..args['ft3name'].. ' ' .. p.title.text .. '')
else
table.insert(p.includeonly,'[[Category:Low-importance Featured topics articles)')
end
end
end
if args['ft4name'] then
if p.featuredTopicSum(args['ft4name']) then
if args['ft4main'] == 'yes' then
table.insert(p.includeonly,''..args['ft4name'].. ' ' .. p.title.text .. '')
else
table.insert(p.includeonly,'[[Category:High-importance Featured topics articles)')
end
else
if args['ft4main'] == 'yes' then
table.insert(p.includeonly,''..args['ft4name'].. ' ' .. p.title.text .. '')
else
table.insert(p.includeonly,'[[Category:Low-importance Featured topics articles)')
end
end
end
return tostring(row)
end
function p.featuredTopicSum(topic)
--featured topics need at least two featured-class articles (FT criteria 3(a)(i)); if this criterion is not met, the article is a GT.-->
--at least 50% of the articles in the topic need to be featured for the topic to be an FT
return mw.site.stats.pagesInCategory('Wikipedia featured topics ' .. topic .. ' featured content') > 1 and
mw.site.stats.pagesInCategory('Wikipedia featured topics ' .. topic .. ' featured content') >=
(mw.site.stats.pagesInCategory('Wikipedia featured topics ' .. topic) + mw.site.stats.pagesInCategory('Wikipedia featured topics ' .. topic .. ' good content')-2)
end
function p.milestoneMainPage(args)
local lang = mw.language.getContentLanguage()
local status = args['currentstatus']
if lang:formatDate('Ymd', args['maindate']) < lang:formatDate('Ymd', '20110613') then
mptype = 'article'
elseif args['currentstatus'] == 'FL' or args['currentstatus'] == 'FFL' then
mptype = 'list'
else
mptype = 'article'
end
if args['small'] == 'yes' then
iconsize = 15
else
iconsize = 30
end
local row = mw.html.create('tr')
:tag('td')
:addClass('mbox-image')
:wikitext("File:Wikipedia-logo-v2.svg")
:done()
local text = "This article "
if lang:formatDate('Ymd', args['maindate']) < lang:formatDate('Ymd') then
text = text .. "appeared"
elseif lang:formatDate('Ymd', args['maindate']) > lang:formatDate('Ymd') then
text = text .. "will appear"
else
text = text .. "is currently"
end
text = text .. " on Wikipedia's Main Page as Today's featured " .. mptype .. ""
if lang:formatDate('Ymd', args['maindate']) ~= lang:formatDate('Ymd') then
text = text .. " on " .. lang:formatDate('F j, Y',args['maindate'])
end
text = text .. "."
row:tag('td')
:addClass('mbox-text')
:wikitext(text)
if args['currentstatus'] == 'FA' or args['currentstatus'] == 'FL' then
table.insert(p.includeonly, "Category:Featured " .. mptype .. "s that have not appeared on the main page")
end
return tostring(row)
end
function p.historyheader(args)
local status = args['currentstatus']
local images = ""
if status == 'PR' or status == 'NA' or not status then
images = images .. ('15px')
end
if args['dykdate'] then
images = images .. ('File:DYK questionmark icon.svg')
end
if args['itndate'] then
images = images .. ('File:Globe current.svg')
end
if args['otddate'] then
images = images .. ('File:Nuvola apps date.svg')
end
if args['aciddate'] then
images = images .. ('20px')
end
if args['loceNotAnActiveOption'] then
images = images .. ('15px')
end
if args['v1.0NotAnActiveOption'] then
images = images .. ('15px')
end
local header = mw.html.create('tr')
:tag('th')
:attr('colspan', 3)
:attr('style', 'font-size:110%')
:tag('span')
:attr('style', 'float:left')
:wikitext(images)
:done()
if status == 'FL' or status == 'FFLC' or status == 'FFL' then
header:wikitext('List')
else
header:wikitext(p.title.subjectNsText)
end
header:wikitext(' milestones')
return header:allDone()
end
function p.historyoutput(action, date, link, result, oldid, args)
local output = mw.html.create():tag('tr')
if action then
action = mw.ustring.upper(action)
end
if result then
result = mw.ustring.lower(result)
end
--Date
local datecell = output:tag('td')
if oldid then
datecell:tag('span')
:addClass('plainlinks')
:wikitext('['.. p.title:fullUrl('oldid='..oldid))
if date then
datecell:wikitext(' ' .. mw.language.getContentLanguage():formatDate('F j, Y', date))
else
datecell:wikitext(' ?')
table.insert(p.errors, Category:ArticleHistory error)
end
datecell:wikitext(']')
datecell:done()
else
if date then
datecell:wikitext(mw.language.getContentLanguage():formatDate('F j, Y', date))
else
datecell:wikitext(' ?')
table.insert(p.errors, Category:ArticleHistory error)
end
end
output:done()
--Process
if link == nil or link == "" then
link = tostring(p.title.talkPageTitle)
end
local processcell = output:tag('td'):wikitext("'''[[" .. link .. "|")
if action == 'FAC' then
processcell:wikitext('Featured article candidate')
elseif action == 'FAR' or action == 'FARC' then
processcell:wikitext('Featured article review')
elseif action == 'BP' then
processcell:wikitext('Brilliant prose')
elseif action == 'RBP' then
processcell:wikitext('Refreshing brilliant prose')
elseif action == 'PR' then
processcell:wikitext('Peer review')
elseif action == 'WPR' and (result == "Approved" or result == "approved" or result == "Approved version" or result == "approved version") then
processcell:wikitext('WikiProject approved revision')
elseif action == 'WPR' and (result == "Copyedit" or result == "copyedit" or result == "Copyedited" or result == "copyedited" or result == "Proofread" or result == "proofread") then
processcell:wikitext('Guild of Copy Editors')
elseif action == 'WPR' and (result == "COTW" or result == "CotW" or result == "Cotw" or result == "cotw" or
result == "Collaborated" or result == "collaborated" or result == "Collaboration" or result == "collaboration") then
processcell:wikitext('WikiProject collaboration')
elseif action == 'WPR' and (result == "Maindate" or result == "maindate") then
processcell:wikitext("Today's featured article")
elseif action == 'WPR' then
processcell:wikitext("WikiProject peer review")
elseif action == 'WAR' then
processcell:wikitext("WikiProject A-class review")
elseif action == 'GAN' or action == 'GAC' then
processcell:wikitext("Good article nominee")
elseif action == 'GAR' then
processcell:wikitext("Good article reassessment")
elseif action == 'MFD' then
processcell:wikitext("Miscellanea for deletion")
elseif action == 'AFD' then
processcell:wikitext("Articles for deletion")
elseif action == 'IFD' then
processcell:wikitext("Images for deletion")
elseif action == 'TFD' then
processcell:wikitext("Templates for deletion")
elseif action == 'CSD' then
processcell:wikitext("Candidate for speedy deletion")
elseif action == 'PROD' then
processcell:wikitext("Proposed deletion")
elseif action == 'DRV' then
processcell:wikitext("Deletion review")
elseif action == 'FTC' then
processcell:wikitext("Featured topic candidate")
elseif action == 'FTR' then
processcell:wikitext("Featured topic removal candidate")
elseif action == 'GTC' then
processcell:wikitext("Good topic candidate")
elseif action == 'GTR' then
processcell:wikitext("Good topic removal candidate")
elseif action == 'FLC' then
processcell:wikitext("Featured list candidate")
elseif action == 'FLR' then
processcell:wikitext("Featured list removal candidate")
elseif action == 'FPOC' then
processcell:wikitext("Featured portal candidate")
elseif action == 'FPOR' then
processcell:wikitext("Featured portal review")
end
processcell:wikitext("]]'''")
output:done()
--Result
local resultcell = output:tag('td')
if action == 'FAC' or action == 'FLC' or action == 'FTC' or action == 'GTC' or action == 'FPOC' then
if result == 'pass' or result == 'passed' or result == 'promoted' then
resultcell:wikitext('Promoted')
elseif result == 'fail' or result == 'failed' or result == 'not promoted' then
resultcell:wikitext('Not promoted')
else
resultcell:wikitext('?')
table.insert(p.errors, Category:ArticleHistory error)
end
elseif action == 'FAR' or action == 'FARC' or action == 'FLR' or action == 'FTR' or action == 'GTR' or action == 'FPOR' then
if result == 'pass' or result == 'passed' or result == 'keep' or result == 'kept' then
resultcell:wikitext('Kept')
if action == 'FAR' or action == 'FARC' then
table.insert(p.category, 'Category:Wikipedia featured article review candidates (closed)')
end
elseif result == 'fail' or result == 'failed' or result == 'remove' or result == 'removed' or result == 'demoted' then
resultcell:wikitext('Demoted')
elseif result == 'merged' or result == 'merge' then
resultcell:wikitext('Merged')
else
resultcell:wikitext('?')
table.insert(p.errors, Category:ArticleHistory error)
end
elseif action == 'RBP' then
if result == 'pass' or result == 'keep' or result == 'kept' then
resultcell:wikitext('Kept')
elseif result == 'fail' or result == 'failed' or result == 'remove' or result == 'removed' or result == 'demoted' then
resultcell:wikitext('Not kept')
else
resultcell:wikitext('?')
table.insert(p.errors, Category:ArticleHistory error)
end
elseif action == 'BP' then
if result == 'pass' or result == 'promoted' or result == 'nominated' or result == 'nom' then
resultcell:wikitext('Nominated')
else
resultcell:wikitext('?')
table.insert(p.errors, Category:ArticleHistory error)
end
elseif action == 'GAN' or action == 'GAC' then
if result == 'pass' or result == 'passed' or result == 'promoted' or result == 'listed' then
resultcell:wikitext('Listed')
elseif result == 'fail' or result == 'failed' or result == 'not promoted' or result == 'not listed' then
resultcell:wikitext('Not liseted')
else
resultcell:wikitext('?')
table.insert(p.errors, Category:ArticleHistory error)
end
elseif action == 'GAR' then
if result == 'pass' or result == 'passed' or result == 'keep' or result == 'kept' then
resultcell:wikitext('Kept')
elseif result == 'fail' or result == 'failed' or result == 'delisted' then
resultcell:wikitext('Delisted')
elseif result == 'listed' then
resultcell:wikitext('Listed')
elseif result == 'not listed' then
resultcell:wikitext('Not listed')
else
resultcell:wikitext('?')
table.insert(p.errors, Category:ArticleHistory error)
end
elseif action == 'MFD' or action == 'AFD' or action == 'TFD' or action == 'IFD' or action == 'CSD' or action == 'PROD' then
if result == 'withdrawn' or result == 'keep' or result == 'kept' then
resultcell:wikitext('Kept')
elseif result == 'delete' or result == 'deleted'then
resultcell:wikitext('Deleted')
elseif result == 'merged' or result == 'merge' then
resultcell:wikitext('Merged')
elseif result == 'no consensus' then
resultcell:wikitext('No consensus')
elseif result == 'speedy keep' or result == 'speedily kept' then
resultcell:wikitext('Speedily kept')
elseif result == 'speedy delete' or result == 'speedily deleted' then
resultcell:wikitext('Speedily deleted')
elseif result == 'redirect' or result == 'redirected' then
resultcell:wikitext('Redirected')
elseif result == 'rename' or result == 'renamed' or result == 'move' or result == 'moved' then
resultcell:wikitext('Renamed')
else
resultcell:wikitext('?')
table.insert(p.errors, Category:ArticleHistory error)
end
elseif action == 'DRV' then
if result == 'endorse' or result == 'endorsed' then
resultcell:wikitext('Endorsed')
elseif result == 'relisted' or result == 'relist' then
resultcell:wikitext('Relisted')
elseif result == 'overturn' or result == 'overturned' then
resultcell:wikitext('Overturned')
elseif result == 'no consensus' then
resultcell:wikitext('No consensus')
else
resultcell:wikitext('?')
table.insert(p.errors, Category:ArticleHistory error)
end
elseif action == 'PR' then
if result == 'not reviewed' then
resultcell:wikitext('Not reviewed')
else
resultcell:wikitext('Reviewed')
end
elseif action == 'WPR' then
if result == 'approved' or result == 'approved version' then
if oldid then
resultcell:tag('small')
:wikitext('[' .. p.title:fullUrl('diff=cur&oldid='..oldid) .. ' Diff to current version]')
:done()
else
resultcell:wikitext('?')
table.insert(p.errors, Category:ArticleHistory error)
end
elseif result == 'copyedit' or result == 'copyedited' or result == 'proofread' then
resultcell:wikitext('Copyedited')
elseif result == 'maindate' then
resultcell:wikitext('Main Page')
elseif result == 'cotw' or result == 'collaborated' or result == 'collaboration' then
resultcell:wikitext('Collaborated')
elseif result == 'reviewed' then
resultcell:wikitext('Reviewed')
elseif result == 'not reviewed' then
resultcell:wikitext('Not reviewed')
else
resultcell:wikitext('Reviewed')
end
elseif action == 'WAR' then
if result == 'pass' or result == 'passed' or result == 'approved' then
resultcell:wikitext('Approved')
elseif result == 'fail' or result == 'failed' or result == 'not approved' or result == 'not reviewed' then
resultcell:wikitext('Not approved')
elseif result == 'reviewed' or result == '' then
resultcell:wikitext('Reviewed')
elseif result == 'keep' or result == 'kept' then
resultcell:wikitext('kept')
elseif result == 'demote' or result == 'demoted' then
resultcell:wikitext('Demoted')
else
resultcell:wikitext('?')
table.insert(p.errors, Category:ArticleHistory error)
end
else
resultcell:wikitext('?')
table.insert(p.errors, Category:ArticleHistory error)
end
output:done():done()
--Categories
if action == 'FAR' or action == 'FARC' then
if result == 'fail' or result == 'failed' or result == 'remove' or result == 'removed' or result == 'demoted' or result == 'merged' or result == 'merge' then
if args['currentstatus'] == 'FA' or args['currentstatus'] == 'FL' then
table.insert(p.category, '#'..p.title.text..'')
else
table.insert(p.category, ''..p.title.text..'')
end
end
elseif action == 'RBP' then
if result == 'fail' or result == 'failed' or result == 'remove' or result == 'removed' or result == 'demoted' then
table.insert(p.category, ''..p.title.text..'')
end
elseif action == 'GAN' or action == 'GAC' then
if result == 'fail' or result == 'failed' or result == 'not promoted' or result == 'not listed' then
if args['currentstatus'] == 'FA' or args['currentstatus'] == 'GA' or args['currentstatus'] == 'FFA' or args['currentstatus'] == 'FFA/GA' then
else
table.insert(p.category, ''..p.title.text..'')
end
end
elseif action == 'GAR' then
if result == 'fail' or result == 'failed' or result == 'delisted' then
if args['currentstatus'] == 'FA' or args['currentstatus'] == 'GA' or args['currentstatus'] == 'FFA/GA' then
else
table.insert(p.category, ''..p.title.text..'')
end
end
elseif action == 'FLR' then
if result == 'fail' or result == 'failed' or result == 'remove' or result == 'removed' or result == 'demoted' or result == 'merged' or result == 'merge' then
if args['currentstatus'] == 'FL' then
table.insert(p.category, '#'..p.title.text..'')
else
table.insert(p.category, ''..p.title.text..'')
end
end
elseif action == 'PR' then
table.insert(p.category, 'Category:Old requests for peer review')
end
return output
end
function p.milestoneDYK(args)
local td = mw.html.create('tr')
local row = td
if args['action1'] then
row = row:tag('td')
:attr('colspan', '3')
:attr('width', '100%')
if args['dykentry'] then
row = row:tag('table')
:addClass('collapsible collapsed')
:attr('style', 'margin: 0; padding: 0; border-collapse: collapse; width: 100%; background: transparent')
:tag('tr')
:tag('th')
:attr('style', 'font-weight: normal; text-align: left; width: 100%')
end
row = row:wikitext('File:DYK questionmark icon.svg ')
else
row = row:tag('td')
:addClass('mbox-image')
:wikitext('File:DYK questionmark icon.svg')
:done()
if args['dykentry'] then
row = row:tag('td')
:addClass('mbox-text')
:tag('table')
:addClass('collapsible collapsed')
:attr('style', 'margin: 0; padding: 0; border-collapse: collapse; width: 100%; background: transparent')
:tag('tr')
:tag('th')
:attr('style', 'font-weight: normal; text-align: left; width: 100%')
else
row = row:tag('td')
:addClass('mbox-text')
end
end
local lang = mw.language.getContentLanguage()
local text
if mw.title.makeTitle('Wikipedia', 'Recent additions/' .. lang:formatDate('Y/F#j F Y', args['dykdate'])).exists then
text = "A fact from this article"
else
text = "A fact from this article"
end
text = text .." appeared on Wikipedia's Main Page in the \"Did you know?\" column on ".. lang:formatDate('F j, Y',args['dykdate'])
if args['dykdate2'] then
text = text .. ', and on '.. lang:formatDate('F j, Y',args['dykdate'])
end
text = text .. '.'
row = row:wikitext(text)
if args['dykentry'] then
row = row:done():done()
:tag('tr')
:tag('td')
:attr('style', 'border: 1px silver solid')
:wikitext("The text of the entry was: Did you know " .. args['dykentry'].."")
:done():done():done()
elseif args['action1'] then
row:done()
end
if args['action1'] then
row:done()
end
row:done()
if args['currentstatus'] == FA then
table.insert(p.includeonly, 'Category:Wikipedia Did you know articles that are featured articles')
elseif args['currentstatus'] == FL then
table.insert(p.includeonly, 'Category:Wikipedia Did you know articles that are featured lists')
elseif args['currentstatus'] == 'FFA/GA' or args['currentstatus'] == 'GA' then
table.insert(p.includeonly, 'Category:Wikipedia Did you know articles that are good articles')
else
table.insert(p.includeonly, 'Category:Wikipedia Did you know articles')
end
return row:allDone()
end
function p.milestoneITN(args)
local lang = mw.language.getContentLanguage()
table.insert(p.category,"Category:Wikipedia In the news articles")
local mboximage = "File:Globe current.svg"
local text = "A news item involving this article was featured on Wikipedia's Main Page in the \"In the news\""
if args['itnlink'] then
text = text .. " column"
else
text = text .. " column"
end
text = text .. " on " .. lang:formatDate('F j, Y', args['itndate'])
if args['itndate2'] then
text = text .. ", and on " .. lang:formatDate('F j, Y', args['itndate2'])
end
text = text .. '.'
local row = mw.html.create('tr')
if args['action1'] then
row:tag('td')
:attr('colspan', '3')
:wikitext(mboximage .. " " .. text)
else
row:tag('td')
:addClass('mbox-image')
:wikitext(mboximage)
:done()
:tag('td')
:addClass('mbox-text')
:wikitext(text)
end
return row
end
function p.milestoneOTD(args)
local lang = mw.language.getContentLanguage()
table.insert(p.category, "Category:Selected anniversaries articles")
local mboximage = "File:Nuvola apps date.svg"
local text = "A fact from this article was featured on Wikipedia's Main Page in the \"On this day...\""
if args['otdlink'] then
text = text .. " column"
else
text = text .. " column"
end
text = text .. " on " .. lang:formatDate('F j, Y', args['otddate'])
if args['otddate2'] then
text = text .. ", and on " .. lang:formatDate('F j, Y', args['otddate2'])
end
text = text .. '.'
local row = mw.html.create('tr')
if args['action1'] then
row:tag('td')
:attr('colspan', '3')
:wikitext(mboximage .. " " .. text)
else
row:tag('td')
:addClass('mbox-image')
:wikitext(mboximage)
:done()
:tag('td')
:addClass('mbox-text')
:wikitext(text)
end
return row
end
function p.milestoneACID(args)
local lang = mw.language.getContentLanguage()
local mboximage = "File:Article_Collaboration_and_Improvement_Drive.svg"
local text = "This article was on the Article Collaboration and Improvement Drive for the week of " .. lang:formatDate('F j, Y', args['aciddate']) .. '.'
local row = mw.html.create('tr')
if args['action1'] then
row:tag('td')
:attr('colspan', '3')
:wikitext(mboximage .. " " .. text)
else
row:tag('td')
:addClass('mbox-image')
:wikitext(mboximage)
:done()
:tag('td')
:addClass('mbox-text')
:wikitext(text)
end
return row
end
function p.milestoneLoC(args)
local mboximage = "File:LoCiconRevised.png"
local text = "This article, or a portion of it, was copyedited by the League of Copyeditors."
local row = mw.html.create('tr')
if args['action1'] then
row:tag('td')
:attr('colspan', '3')
:wikitext(mboximage .. " " .. text)
else
row:tag('td')
:addClass('mbox-image')
:wikitext(mboximage)
:done()
:tag('td')
:addClass('mbox-text')
:wikitext(text)
end
return row
end
function p.currentstatus(args)
local row = mw.html.create()
local statuses = {
FA="Featured article",
FAR="Featured article review candidate",
FARC="Featured article review candidate",
FFA="Former featured article",
["FFA/GA"]="Former featured article, current good article",
FFAC="Former featured article candidate",
FACFAILED="Former featured article candidate",
FFLC="Former featured list candidate",
FL="Featured list",
FFL="Former featured list",
GA="Good article",
FGAN="Former good article nominee",
FAILEDGA="Former good article nominee",
DGA="Delisted good article",
DELISTEDGA="Delisted good article",
FFT="Part of former featured topic",
FFTC="Former featured topic candidate",
FPO="Featured portal",
FFPO="Former featured portal",
FFPOC="Former featured portal candidate",
PR="Peer reviewed",
}
local currentstatus = false
for i=2, 20, 1 do
if args['action'..i] then
currentstatus = true
end
end
if currentstatus then
local td = row:tag('tr'):tag('td')
:attr('colspan', '3')
if statuses[args['currentstatus']] then
td:wikitext("Current status: " .. statuses[args['currentstatus']] .. "")
if args['currentstatus'] == "FA" or args['currentstatus'] == "FL" or args['currentstatus'] == "FFA/GA" or args['currentstatus'] == "GA" then
if args['gacat'] then
td:wikitext(" (" .. args['gacat'] .. ")")
end
end
else
td:wikitext("Current status: ?")
end
elseif args['action1'] == nil then
row:tag('tr')
:addClass('error')
:tag('td')
:addClass('mbox-image')
:wikitext("File:Imbox deletion.png")
:done()
:tag('td')
:addClass('mbox-text')
:wikitext("Current status is supplied without any actions!")
table.insert(p.errors,"#")
end
return row
end
function p.fourawardtest(args, status)
-- If article has not yet been tested for WP:FOUR
if args['four'] then
return false
end
-- If article has been on DYK
if not args['dykdate'] then
return false
end
-- If article is currently FA
if status ~= FA then
return false
end
-- If successful GAN is anywhere in the history
for i=1, 20, 1 do
if args['action'..i] and mw.ustring.upper(args['action' .. i]) == 'GAN' then
if args['action'..i .. 'result'] and mw.ustring.lower(args['action' .. i .. 'result']) == 'listed' then
return true
end
end
end
--No successful GAN in history
return false
end
function p._articlehistory(args, frame)
local status = args['currentstatus']
local gatopic = frame:expandTemplate { title='GA/Topic' , args = {args['topic']}}
if status then
status = mw.ustring.upper(args['currentstatus'])
end
local tbl = mw.html.create('table')
tbl
:addClass('tmbox')
:addClass('tmbox-notice')
if args.small == 'yes' then
tbl:addClass('mbox-small')
end
--Sorting current status
--FFA check based on most recent FAR (if there is one)
for i=20 , 1 , -1 do
if args["action".. i] and mw.ustring.upper(args["action".. i]) == "FAR" then
tbl:node(p._statusFFA(args, i))
break
end
end
if status == 'FFA' then
-- Already covered in FFA check previously--
elseif status == 'FAC' then
tbl:node(p.statusFAC(args))
elseif status == 'FFAC' or status == 'FACFAILED' then
tbl:node(p.statusFFAC(args))
elseif status == 'FA' then
tbl:node(p.statusFA(args))
elseif status == 'FAR' then
tbl:node(p.statusFAR(args))
elseif status == 'FFLC' then
tbl:node(p.statusFFLC(args))
elseif status == 'FL' then
tbl:node(p.statusFL(args))
elseif status == 'FFL' then
tbl:node(p.statusFFL(args))
elseif status == 'FFA/GA' or status == 'GA' then
tbl:node(p.statusGA(args, gatopic))
elseif status == 'FGAN' or status == 'FAILEDGA' then
tbl:node(p.statusFGAN(args, gatopic))
elseif status == 'DGA' or status == 'DELISTEDGA' then
tbl:node(p.statusDGA(args, gatopic ))
elseif status == 'FFT' then
tbl:node(p.statusFFT(args))
elseif status == 'FFTC' then
tbl:node(p.statusFFTC(args))
elseif status == 'FPO' then
tbl:node(p.statusFPO(args))
elseif status == 'FFPO' then
tbl:node(p.statusFFPO(args))
elseif status == 'FFPOC' then
tbl:node(p.statusFFPOC(args))
elseif status == 'START' or status == 'STUB' or status == 'B' or status == 'A' then
tbl:node(p.statusInvalid(args))
elseif status == 'PR' or status == 'NA' or status == nil or status == '' then
--do nothing if no status selected
else
tbl:node(p.statusUnknown(args))
end
if args['ftname'] then
tbl:node(p.statusFT(args))
end
if args['maindate'] then
tbl:node(p.milestoneMainPage(args))
--If the article is an FA or FL but has not been on the main page, add it to a category
elseif status == 'FA' then
table.insert(p.category,"Category:Featured articles that have not appeared on the main page")
elseif status == 'FL' then
table.insert(p.category,"Category:Featured lists that have not appeared on the main page")
end
--Article milestones
local history = tbl
if args['action1'] then
history = history:tag('tr')
:tag('td')
:attr('colspan', 2)
:attr('style', 'width: 100%;')
:tag('table')
:attr('style','width:100%; background:transparent; font-size:90%')
:addClass('AH-milestones')
if args['action2'] or args['dykdate'] or args['itndate'] or args['otddate'] or args['aciddate'] or args['loceNotAnActiveOption'] then
history:addClass('collapsible collapsed')
history:node(p.historyheader(args))
history:tag('tr')
:attr('style', 'text-align: left')
:tag('th'):wikitext('Date'):done()
:tag('th'):wikitext('Process'):done()
:tag('th'):wikitext('Result'):done()
end
for i=1, 20, 1 do
if args['action'..i] then
history:node(p.historyoutput(args['action'..i], args['action'..i..'date'], args['action'..i..'link'], args['action'..i..'result'], args['action'..i..'oldid'], args))
elseif args['action'..i..'date'] or args['action'..i..'link'] or args['action'..i..'result'] or args['action'..i..'oldid'] then
table.insert(p.errors, '$')
end
end
end
if args['dykdate'] then
history:node(p.milestoneDYK(args))
end
if args['four'] and mw.ustring.lower(args['four']) == 'yes' then
table.insert(p.includeonly,"Category:Wikipedia four award articles")
end
if args['itndate'] then
history:node(p.milestoneITN(args))
end
if args['otddate'] then
history:node(p.milestoneOTD(args))
end
if args['aciddate'] then
history:node(p.milestoneACID(args))
end
if args['loceNotAnActiveOption'] then
history:node(p.milestoneLoC(args))
end
if args['currentstatus'] ~= nil and args['currentstatus'] ~= "" then
history:node(p.currentstatus(args))
end
if args['action1'] then
--width hack
history:done():done():tag('td')
end
--Categories
if args['categories'] or args['category'] then
table.insert(p.errors, "Category:ArticleHistory error")
end
if args['list'] then
table.insert(p.errors, "Category:ArticleHistory error")
end
if args['topic'] then
if not gatopic or gatopic == "" then
table.insert(p.errors, "Category:ArticleHistory error")
end
end
if status == "FFA/GA" or status == "GA" then
if args['gacat'] == 'actors' then
table.insert(p.includeonly, "Category:Wikipedia good articles on actors, models and celebrities" ..
"Category:Wikipedia CD Selection - People")
elseif args['gacat'] == 'bands' then
table.insert(p.includeonly, "Category:Wikipedia good articles on performers and composers")
elseif args['gacat'] == 'hist figures' then
table.insert(p.includeonly, "Category:Wikipedia good articles on historical figures" ..
"Category:Wikipedia CD Selection - People")
elseif args['gacat'] == 'musicians' then
table.insert(p.includeonly, "Category:Wikipedia good articles on performers and composers" ..
"Category:Wikipedia CD Selection - People")
elseif args['gacat'] == 'politicians' then
table.insert(p.includeonly, "Category:Wikipedia good articles on politicians" ..
"Category:Wikipedia CD Selection - People")
elseif args['gacat'] == 'royalty' then
table.insert(p.includeonly, "Category:Wikipedia good articles on royalty" ..
"Category:Wikipedia CD Selection - People")
elseif args['gacat'] == 'writers' then
table.insert(p.includeonly, "Category:Wikipedia good articles on writers and critics" ..
"Category:Wikipedia CD Selection - People")
elseif args['gacat'] == "" then
else
table.insert(p.errors, "Category:ArticleHistory error")
end
if p.fourawardtest(args, status) then
table.insert(p.includeonly, "Category:Possible Wikipedia four award articles")
end
end
return tostring(tbl) .. table.concat(p.category) .. table.concat(p.includeonly) .. table.concat(p.errors)
end
function p.articlehistory(frame)
local pframe = frame:getParent()
local args = {};
for k, v in pairs( pframe.args ) do
args[k] = v;
end
for k, v in pairs( frame.args ) do
args[k] = v;
end
return p._articlehistory( args , frame )
end
return p