Module:Good Articles

local p = {}

p.main = function (frame)

local NNN = 2 -- provide counts only over this threshold

local args = require("Module:Arguments").getArgs(frame)

-- expect args.shortcut e.g. GA/H, args.type e.g. History, args.text a long list

local subpage = frame:preprocess("{{SUBPAGENAME}}") -- I never did look up if there's a better way to do this...

local header, shortcuts = ,

local type = args.type or "error: specify type = Good Articles type"

local image = args.image and '' .. args.image .. '' or ''

local sectioncount = 0

if (subpage == type or args.override) then -- I haven't figured out how to deal with missing shortcut so why pretend

shortcuts = frame:expandTemplate{ title = 'shortcut', args = { args.shortcut } }

header = frame:expandTemplate{ title = 'Wikipedia:Good articles/Summary', args = { shortcuts = shortcuts } }

end

local introtext = args.text or ''

replace = function(t)

local xxxx, links = mw.ustring.gsub(t, "(%[%^%[%-%]%])", "%1", nil) -- count how many links

if links >= NNN then

t = t .. " (" .. tostring(links) .. " articles)"

end

return t .. "\n"

end

local sectionfooter = [===[

]===]

-- comments in the text below are historical from the page's own markup

local output = header .. [===[

__NOTOC__

]===] .. image .. [===[]===] .. type .. [===[

]===] .. introtext

local section = 0

local finaltext = ''

repeat

local wrap = true

section = section + 1

local text = (args['section' .. tostring(section)] or args[section] or '')

local title = args['title' .. tostring(section)]

if (not title) then

if (text == '') then

break

else

local wrap = false

output = output .. text -- sections without headers go in unwrapped

end

else

local image = args['image' .. tostring(section)]

text = mw.ustring.gsub(text .. "\n=", "(==.-)\n%s*%f[=]", replace)

text = mw.ustring.sub(text,1,-2) -- ditching "=" mark from line above

if (image) then

image = '' .. image .. ''

else

image = '' -- make section without an image

end

output = output .. [===[

]===] .. image .. title .. [===[

­ 

]===] .. text .. sectionfooter

end

until false

return output

end

function p.subsection(frame)

if not mw.ustring.find( (frame.args[1] or frame:getParent().args[1] or '') ,'[[',1,true) then

return '(0 articles)'

else

local linkList, count = mw.ustring.gsub(mw.text.trim(frame.args[1] or frame:getParent().args[1]), '\n', ' –\n')

return linkList .. '  (' .. (count + 1) .. ' article' .. ( (count ~= 0) and 's' or '') .. ')'

end

end

return p