Module:Sandbox/Harryboyles/Article history explained

local p =

--If the latest FAR failed--If currentstatus is FA or FL

> Do nothing--If there is no currentstatus

> Error--Else

> FFA trfunction 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('') :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, "") else row :tag('tr') :addClass('error') :tag('td') :addClass('mbox-image') :wikitext("") :done :tag('td') :addClass('mbox-text') :wikitext('Former featured articles should have a current status!') :done :done table.insert(p.errors, '') 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 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, '') 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("") :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, "") 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("") :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, "") 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 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, "") 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("") :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, "") 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("") :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, "") 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("") :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("") :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, "") if gatopic then table.insert(p.includeonly,"") else table.insert(p.includeonly, "|") 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("") :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, "") 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("") :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, "") 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("") :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("") :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("") :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, "") 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("") :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, "") 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("") :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, "") 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, "") return tostring(row)end

function p.statusUnknown(args) local row = mw.html.create row :tag('tr') :addClass('error') :tag('td') :addClass('mbox-image') :wikitext("") :done :tag('td') :addClass('mbox-text') :wikitext("Unknown current status!") :done :done table.insert(p.errors, "") 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 = '' else image = '' 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,'') table.insert(p.includeonly,'') if args['ft2name'] then table.insert(p.includeonly,'') end if args['ft3name'] then table.insert(p.includeonly,'') end if args['ft4name'] then table.insert(p.includeonly,'') end

elseif args['currentstatus']

'FL' then table.insert(p.includeonly,'') table.insert(p.includeonly,'') if args['ft2name'] then table.insert(p.includeonly,'') end if args['ft3name'] then table.insert(p.includeonly,'') end if args['ft4name'] then table.insert(p.includeonly,'') end elseif args['currentstatus']

'FFA/GA' or args['currentstatus']

'GA' then table.insert(p.includeonly,'') table.insert(p.includeonly,'') if args['ft2name'] then table.insert(p.includeonly,'') end if args['ft3name'] then table.insert(p.includeonly,'') end if args['ft4name'] then table.insert(p.includeonly,'') end else table.insert(p.includeonly,'') table.insert(p.includeonly,'') if args['ft2name'] then table.insert(p.includeonly,'') end if args['ft3name'] then table.insert(p.includeonly,'') end if args['ft4name'] then table.insert(p.includeonly,'') end end

if p.featuredTopicSum(args['ftname']) then if args['ftmain']

'yes' then table.insert(p.includeonly,'') else table.insert(p.includeonly,'') end else if args['ftmain']

'yes' then table.insert(p.includeonly,'') else table.insert(p.includeonly,'') end end

if args['ft2name'] then if p.featuredTopicSum(args['ft2name']) then if args['ft2main']

'yes' then table.insert(p.includeonly,'') else table.insert(p.includeonly,'') end else if args['ft2main']

'yes' then table.insert(p.includeonly,'') else table.insert(p.includeonly,'') end end end if args['ft3name'] then if p.featuredTopicSum(args['ft3name']) then if args['ft3main']

'yes' then table.insert(p.includeonly,'') else table.insert(p.includeonly,'') else table.insert(p.includeonly,'') else table.insert(p.includeonly,'') else table.insert(p.includeonly,'") :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, "") 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 .. ('') end if args['dykdate'] then images = images .. ('') end if args['itndate'] then images = images .. ('') end if args['otddate'] then images = images .. ('') end if args['aciddate'] then images = images .. ('') end if args['loceNotAnActiveOption'] then images = images .. ('') end if args['v1.0NotAnActiveOption'] then images = images .. ('') 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:allDoneend

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,) end end output:done

--Process if link

nil or link

"" then link = tostring(p.title.talkPageTitle) end local processcell = output:tag('td'):wikitext("") 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,) 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, '') 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,) 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,) 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,) 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,) 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,) 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,) 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,) 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,) 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,) end else resultcell:wikitext('?') table.insert(p.errors,) 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, '') else table.insert(p.category, '') 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, '') 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, '') 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, '') 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, '') else table.insert(p.category, '') end end elseif action

'PR' then table.insert(p.category, '') end return outputend

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(' ') else row = row:tag('td') :addClass('mbox-image') :wikitext('') :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, '') elseif args['currentstatus']

FL then table.insert(p.includeonly, '') elseif args['currentstatus']

'FFA/GA' or args['currentstatus']

'GA' then table.insert(p.includeonly, '') else table.insert(p.includeonly, '') end

return row:allDoneend

function p.milestoneITN(args) local lang = mw.language.getContentLanguage table.insert(p.category,"") local mboximage = "" 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 rowend

function p.milestoneOTD(args) local lang = mw.language.getContentLanguage table.insert(p.category, "") local mboximage = "" 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 rowend

function p.milestoneACID(args) local lang = mw.language.getContentLanguage local mboximage = "" 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 rowend

function p.milestoneLoC(args) local mboximage = "" 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 rowend

function p.currentstatus(args) local row = mw.html.create local statuses =

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("") :done :tag('td') :addClass('mbox-text') :wikitext("Current status is supplied without any actions!") table.insert(p.errors,"") end return rowend

function p.fourawardtest(args, status) -- If article has not yet been tested for 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 falseend

function p._articlehistory(args, frame) local status = args['currentstatus'] local gatopic = frame:expandTemplate 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,"") elseif status

'FL' then table.insert(p.category,"") 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,"") 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, "") end if args['list'] then table.insert(p.errors, "") end if args['topic'] then if not gatopic or gatopic

"" then table.insert(p.errors, "") end end if status

"FFA/GA" or status

"GA" then if args['gacat']

'actors' then table.insert(p.includeonly, "" .. "") elseif args['gacat']

'bands' then table.insert(p.includeonly, "") elseif args['gacat']

'hist figures' then table.insert(p.includeonly, "" .. "") elseif args['gacat']

'musicians' then table.insert(p.includeonly, "" .. "") elseif args['gacat']

'politicians' then table.insert(p.includeonly, "" .. "") elseif args['gacat']

'royalty' then table.insert(p.includeonly, "" .. "") elseif args['gacat']

'writers' then table.insert(p.includeonly, "" .. "") elseif args['gacat']

"" then else table.insert(p.errors, "") end if p.fourawardtest(args, status) then table.insert(p.includeonly, "") 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