Module:Sandbox/Harryboyles/Article history

From WikiProjectMed
Jump to navigation Jump to search
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|' .. iconsize .. 'px|Former featured article]]')
                    :done()
                :tag('td')
                    :addClass('mbox-text')
                    :wikitext("'''" .. p.title.prefixedText .. "''' is a [[Wikipedia:Former featured articles|former featured article]]. "..
                        "Please see the links under Article milestones below for its original nomination page (for older articles, check " ..
                        "[[Wikipedia:Featured article candidates/Archived nominations/Index|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 {{[[Template:fac|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("[[File:Cscr-former.svg|" .. iconsize .. "px]]")
            :done()
            :tag('td')
                :addClass('mbox-text')
                :wikitext("'''" .. p.title.prefixedText .. "''' is a former [[Wikipedia:Featured article candidates|featured article candidate]]. "..
                    "Please view the links under Article milestones below to see why the nomination failed. " ..
                    "For older candidates, please check the [[Wikipedia:Featured article candidates/Archived nominations/Index|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|" ..iconsize .. "px|Featured article]]")
            :done()
            :tag('td')
                :addClass('mbox-text')
                :wikitext("'''"..p.title.prefixedText .. "''' is a [[Wikipedia:Featured articles|featured article]]; " ..
                    "it (or a previous version of it) has been '''''[[" .. actionlink .. "|identified]]''''' " ..
                    "as one of the best articles produced by the [[Wikipedia:Wikipedians|Wikipedia community]]. " ..
                    "Even so, if you can update or improve it, [[Wikipedia:Be bold|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 {{[[Template:FAR|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|".. iconsize .. "px|Former FLC]]")
            :done()
            :tag('td')
                :addClass('mbox-text')
                :wikitext("'''"..p.title.prefixedText .. "''' is a former [[Wikipedia:Featured list candidates|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 [[Wikipedia:Featured list candidates#Resubmitting nominations|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|" .. iconsize .. "px|Featured list]]")
            :done()
            :tag('td')
                :addClass('mbox-text')
                :wikitext("'''"..p.title.prefixedText .. "''' is a [[Wikipedia:Featured lists|featured list]], " ..
                    "which means it has been '''''[[" .. actionlink .. "|identified]]''''' as one of the best [[Wikipedia:Lists|lists]] produced by the [[Wikipedia:Wikipedians|Wikipedia community]]. " ..
                    "If you can update or improve it, [[Wikipedia:Be bold|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|" .. iconsize .. "px|Former featured list]]")
            :done()
            :tag('td')
                :addClass('mbox-text')
                :wikitext("'''"..p.title.prefixedText .. "''' is a [[Wikipedia:Former featured lists|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 [[Wikipedia:Featured list criteria|featured list standard]], you may " ..
                    "[[Wikipedia:Featured list candidates|renominate]] the article to become a [[Wikipedia:Featured list|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|" .. iconsize .. "px|Good article]]")
            :done()
            :tag('td')
                :addClass('mbox-text')
                :wikitext("'''"..p.title.prefixedText .. "''' has been listed as one of the '''''[[Wikipedia:Good articles" .. topiclink .."|" ..gatopic.."good articles]]''''' " ..
                    "under the [[Wikipedia:Good article criteria|good article criteria]]. If you can improve it further, [[Wikipedia:Be bold|please do so]]. " ..
                    "<small>''If it no longer meets these criteria, you can '''[[Wikipedia:Good article reassessment|reassess]]''' it''.</small>")
                
    if p.title:inNamespace("Talk") then
        table.insert(p.includeonly, "[[Category:Wikipedia good articles]][[Category:Wikipedia CD Selection-GAs]][[Category:GA-Class Good articles]]")
        if gatopic then
            table.insert(p.includeonly,"[[Category:"..gatopic.." good articles|"..p.title.prefixedText.."]]")
        else
            table.insert(p.includeonly, "|[[Category:Uncategorized good articles|"..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|" .. iconsize .. "px|Former good article nominee]]")
            :done()
            :tag('td')
                :addClass('mbox-text')
                :wikitext("'''"..p.title.prefixedText .. "''' was one of the '''''[[Wikipedia:Good articles|" .. gatopic .." good article]]''''' nominees, " ..
                    "but did not meet the [[Wikipedia:Good article criteria|good article criteria]] at the time. There are suggestions below for improving the article. " ..
                    "Once these issues have been addressed, the article can be [[Wikipedia:Good article nominations|renominated]]. " ..
                    "Editors may also seek a '''[[Wikipedia:Good article reassessment|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|" .. iconsize .. "px|Former good article]]")
            :done()
            :tag('td')
                :addClass('mbox-text')
                :wikitext("'''"..p.title.prefixedText .. "''' was one of the '''''[[Wikipedia:Good articles|" .. gatopic .." good articles]]''''', " ..
                    "but it has been removed from the list. There are suggestions below for improving the article to meet the [[Wikipedia:Good article criteria|good article criteria]]. " ..
                    "Once these issues have been addressed, the article can be [[Wikipedia:Good article nominations|renominated]]. " ..
                    "Editors may also seek a '''[[Wikipedia:Good article reassessment|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|" .. iconsize .. "px|Former featured topic]]")
            :done()
            :tag('td')
                :addClass('mbox-text')
                :wikitext("This article is part of a ''[[Wikipedia:Former featured topics|former featured topic]]'' series. " ..
                    "If it has improved again to [[Wikipedia:Featured topic criteria|featured topic standard]], " ..
                    "you may [[Wikipedia:Featured topic candidates|renominate]] the topic to become a [[Wikipedia:Featured topic|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|" .. iconsize.. "px|Former featured topic candidate]]")
            :done()
            :tag('td')
                :addClass('mbox-text')
                :wikitext("This article is part of a ''former'' [[Wikipedia:Featured topic candidates|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|" .. iconsize .. "px|Former featured topic candidate]]")
            :done()
            :tag('td')
                :addClass('mbox-text')
                :wikitext("The '''"..p.title.text .." Portal''' is a [[Wikipedia:Featured portals|featured portal]], " ..
                    "which means it has been '''''[[Wikipedia:Featured portal candidates/Portal:"..p.title.prefixedText .."|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, "[[Category:Wikipedia featured portals|"..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|" .. iconsize .. "px|Former featured portal]]")
            :done()
            :tag('td')
                :addClass('mbox-text')
                :wikitext("This portal is a [[Wikipedia:Former featured portals|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, "[[Category:Wikipedia former featured portals|"..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|" .. iconsize .. "px|Former featured portal candidate]]")
            :done()
            :tag('td')
                :addClass('mbox-text')
                :wikitext("This portal is a '''''former''''' [[Wikipedia:Featured portal candidates|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, "[[Category:Wikipedia featured portal candidates (contested)|"..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|' .. iconsize ..'px|Featured topic star]]'
    else
        image = '[[File:Support cluster.svg|' .. iconsize ..'px|Good topic star]]'
    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 '''[[Wikipedia:Featured topics/" .. args['ftname'] .. '|' .. args['ftname'] .. "]] series''', a ")
            if p.featuredTopicSum(args['ftname']) then
                cell:wikitext('[[Wikipedia:Featured topics|featured topic]]. ')
            else
                cell:wikitext('[[Wikipedia:Good topics|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 '''[[Wikipedia:Featured topics/" .. args['ft2name'] .. '|' .. args['ft2name'] .. "]] series''', a ")
                if p.featuredTopicSum(args['ft2name']) then
                    cell:wikitext('[[Wikipedia:Featured topics|featured topic]]')
                else
                    cell:wikitext('[[Wikipedia:Good topics|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 '''[[Wikipedia:Featured topics/" .. args['ft3name'] .. '|' .. args['ft3name'] .. "]] series''', a ")
                if p.featuredTopicSum(args['ft3name']) then
                    cell:wikitext('[[Wikipedia:Featured topics|featured topic]]')
                else
                    cell:wikitext('[[Wikipedia:Good topics|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 '''[[Wikipedia:Featured topics/" .. args['ft4name'] .. '|' .. args['ft4name'] .. "]] series''', a ")
                if p.featuredTopicSum(args['ft4name']) then
                    cell:wikitext('[[Wikipedia:Featured topics|featured topic]]')
                else
                    cell:wikitext('[[Wikipedia:Good topics|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:Wikipedians|Wikipedia community]]. If you can update or improve ")
        if args['ft2name'] then
            cell:wikitext('them')
        else
            cell:wikitext('it')
        end
        cell:wikitext(", [[Wikipedia:Be bold|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,'[[Category:Top-importance Featured topics articles|'..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,'[[Category:Mid-importance Featured topics articles|'..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,'[[Category:Top-importance Featured topics articles|'..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,'[[Category:Mid-importance Featured topics articles|'..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,'[[Category:Top-importance Featured topics articles|'..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,'[[Category:Mid-importance Featured topics articles|'..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,'[[Category:Top-importance Featured topics articles|'..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,'[[Category:Mid-importance Featured topics articles|'..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|"  .. iconsize ..  "px|Main Page trophy]]")
            :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 [[Wikipedia:Today's featured " .. mptype .. "/" .. lang:formatDate('F j, Y',args['maindate']) .. "|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 .. ('[[File:Nuvola apps kedit.svg|15px]]')
    end
    if args['dykdate'] then
        images = images .. ('[[File:DYK questionmark icon.svg|Did You Know|15px]]')
    end
    if args['itndate'] then
        images = images .. ('[[File:Globe current.svg|In the news|20px]]')
    end
    if args['otddate'] then
        images = images .. ('[[File:Nuvola apps date.svg|On this day...|20px]]')
    end
    if args['aciddate'] then
        images = images .. ('[[File:Article_Collaboration_and_Improvement_Drive.svg|20px]]')
    end
    if args['loceNotAnActiveOption'] then
        images = images .. ('[[File:LoCiconRevised.png|15px]]')
    end
    if args['v1.0NotAnActiveOption'] then
       images = images .. ('[[File:WP1 0 Icon.svg|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, '[[Category:Wikipedia former featured articles|#'..p.title.text..']]')
                else
                    table.insert(p.category, '[[Category:Wikipedia former featured articles|'..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, '[[Category:Wikipedia former brilliant prose|'..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, '[[Category:Former good article nominees|'..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, '[[Category:Delisted good articles|'..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, '[[Category:Wikipedia former featured lists|#'..p.title.text..']]')
                else
                    table.insert(p.category, '[[Category:Wikipedia former featured lists|'..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|Did You Know|' .. ((args['small'] == 'yes' and '15') or '20') ..'px]]&#32;')
    else
        row = row:tag('td')
            :addClass('mbox-image')
            :wikitext('[[File:DYK questionmark icon.svg|Did You Know|' .. ((args['small'] == 'yes' and '15') or '20') ..'px]]')
            :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 '''[[Wikipedia:Recent additions/"..lang:formatDate('Y/F#j F Y', args['dykdate']).."|fact from this article]]'''"
    else
        text = "A '''[[Wikipedia:Recent additions|fact from this article]]'''"
    end
    text = text .." appeared on Wikipedia's [[Main Page]] in the '' \"[[:Template:Did you know|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|In the news|20px]]"
    local text = "A news item involving this article was featured on Wikipedia's [[Main Page]] in the ''\"[[:Template:In the news|In the news]]\"''"
        if args['itnlink'] then
            text = text .. " [[" .. args['itnlink'].."|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|On this day...|20px]]"
    local text = "A fact from this article was featured on Wikipedia's [[Main Page]] in the  ''\"[[Wikipedia:Selected anniversaries|On this day...]]\"''"
        if args['otdlink'] then
            text = text .. " [[" .. args['otdlink'].."|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|Article Collaboration and Improvement Drive|20px]]"
    local text = "This article was on the [[WP:ACID|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|League of Copyeditors|" .. ((args['small'] == "yes") and "20px") or "25px" .. "]]"
    local text = "This article, or a portion of it, was copyedited by the [[WP:LoCE|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,"[[Category:ArticleHistory error|#]]")
    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, '[[Category:ArticleHistory error|$]]')
        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