Module:Asbox

local p = { flags = {}, cats = {} } local WRAPPER_TEMPLATE = 'Template:Asbox' local attention = 'Stub message templates needing attention' local args, msgBox, stubCats

function demo(text, alt) return args.demo and text or alt end

function category(cat)--{{'cat', 'sort'}, 'cat2'} or 'cat' for _, v in ipairs(type(cat) == type'' and {cat} or cat) do		table.insert(p.cats, string.format( '%sCategory:%s', demo(':', ''), #v > 2 and v or string.format(				demo('%s|Category:%s|%s', '%s|%s%s'),				#v[1] < 2 and attention or v[1],				#v[1] < 2 and attention or v[1],				#v[1] < 2 and table.concat(v) or v[2]			) ))	end return cat.done and table.concat(p.cats, demo(' | ', )) or  end

function ombox(v)--{text, {subcat, page}} if v.ifNot then return '' end msgBox = msgBox or require('Module:Message box') return msgBox.ombox{ type = 'content', text = v[1] }	.. category{v[2]} end

function catStub(page, pageDoc)--p.templatepage passes page; p.main does not stubCats = { missing = {}, text = '', v = {} }	for k, _ in pairs(args) do		table.insert(stubCats, string.match(k, '^category(%d*)$')) end table.sort(stubCats) local cat, tsort for k, v in ipairs(stubCats) do cat = args['category' .. v] tsort = args['tempsort' .. v]		if v ~= '' or tsort ~= 'no' then table.insert(stubCats.v, {cat, page and (tsort or ('*' .. page.text))}) end if page then if not mw.title.new('Category:' .. cat).exists then table.insert(stubCats.missing, 'category' .. v)			end stubCats.text = stubCats.text .. (v ==  and pageDoc.exists and					category'Stub message templates with documentation subpages'					or (not string.match(cat, ' stubs$') and table.insert(stubCats.v, {'S', page.text}))					or 				) end end if #stubCats.missing > 0 then stubCats.missed = {} for k, meowFeedMe in ipairs(stubCats.missing) do			table.insert(stubCats.missed, ' ') end stubCats.text = stubCats.text .. ombox{ --Changed, original: One or more of the stub categories defined in this template do not seem to exist! Please double-check the parameters category, category1 and category2. 'The following parameter' .. (#stubCats.missing == 1 and ' defines a stub category that does' or 's define stub categories that do') .. ' not exist: ' .. mw.text.listToText(stubCats.missed), {'N', page.text} }	end category(stubCats.v)	return stubCats.text end

function population local wikitext, base = , '* Category:%s (population: (%s)\n'	if #stubCats == 0 then		return string.format(base, , 0)	end	for k, v in ipairs(stubCats) do		wikitext = wikitext .. string.format(base, args['category' .. v], mw.site.stats.pagesInCategory(args['category' .. v], 'all'))	end	return wikitext end

function p.templatepage(frame, page)--flags bad stub templates and creates standard doc page local tStubDoc = mw.title.new('Template:Stub documentation') local pageDoc = mw.title.new(page.fullText .. '/doc') page = page or mw.title.getCurrentTitle args = args or require('Module:Arguments').getArgs(frame, {		wrappers = WRAPPER_TEMPLATE	}) return category{ 'Stub message templates', 'Exclude in print' }	--Changed. Original Asbox does its first of 3 checks on params |category#= here. --Rather than checking multiple times, all operations involving those params have been rolled into catStub .. (args.icon and		category'Stub message templates using icon parameter'		or (args.image and (mw.title.new('Media:' .. mw.text.split(args.image, '|')[1]).exists and				''				or category			) or category'Stub message templates without images' )	)	.. (args.imagealt and 		category		or ''	) .. ombox{ ifNot = args.category, 'The  parameter is not set. Please add an appropriate stub category.', {'C', page.text} }	.. ombox{ ifNot = args.subject or args.article or args.qualifier, 'This stub template contains no description! At least one of the parameters,   or   must be defined.', {'D', page.text} }	.. catStub(page, pageDoc) .. ((args.demo and args.demo ~= 'doc' and '') or (require('Module:Documentation').main{ content = (page.text ~= 'Stub' and --This comparison performed in before it invokes Module:Asbox stubtree				require('Module:Asbox stubtree').subtree{args = {pagename = page.text}}				or ''			) .. '\n== About this template ==\nThis template is used to identify a ' .. string.format('%s stub%s.', args.subject or '', args.qualifier and (' ' .. args.qualifier) or '') .. ' It uses, which is a meta-template designed to ease the process of creating and maintaining stub templates.\n=== Usage ===\nTyping  produces the message shown at the beginning, and adds the article to the following categor' .. (#stubCats > 1 and 'ies' or 'y') .. ':\n' .. population .. (pageDoc.exists and --transclusion of /doc if it exists				frame:expandTemplate{title = pageDoc.text}				or ''			) .. '\n== General information ==\n'--Generic documentation .. frame:expandTemplate{title = tStubDoc.text} .. '\n\n' ,		['link box'] = string.format(				'This documentation is automatically generated by Template:Asbox/templatepage. The general information is transcluded from Template:Stub documentation. ([%s edit] | [%s history]) ',				tStubDoc:fullUrl('action=edit', 'relative'),				tStubDoc:fullUrl('action=history', 'relative')			) .. (page.protectionLevels.edit[1] == 'sysop' and					" This template is fully protected and any categories should be added to the template's ["					.. pageDoc:fullURL('action=edit&preload=Template:Category_interwiki/preload', 'relative')					.. '| /doc] subpage, which is not protected.'				or ''			) }	.. (args.demo ~= 'doc' and category{done = true} or ''))) end

function p.main(frame, page) page = page or mw.title.getCurrentTitle args = args or require('Module:Arguments').getArgs(frame, {		wrappers = WRAPPER_TEMPLATE	}) local output = mw.html.create local asbox = output:tag'table' :addClass('metadata plainlinks stub') :css('background', 'transparent') :attr('role', 'presentation') if args.icon or args.image then asbox:tag('td'):wikitext(args.icon or string.format( '',			args.image, args.pix or '40x30', args.imagealt or 'Stub icon' ))	end local buffer = asbox:tag('td') buffer:tag('i'):wikitext(string.format( 'This %s %s %s is a stub. You can help Wikipedia by [%s expanding it].', args.subject or '', args.article or 'article', args.qualifier or '', page:fullUrl('action=edit', 'relative') ))	if args.name then buffer:wikitext(require('Module:Navbar')._navbar{			args.name,			mini = 'yes',			style = 'position: absolute; right: 15px; display: none;'		}) end if args.note then buffer:tag('br') buffer:tag('span') :css('font-style', 'normal') :css('font-size', 'smaller') :wikitext(args.note) end if page.namespace == 0 then -- Main namespace category'All stub articles' catStub elseif args.demo then --Preview categories; not in original template, but shouldn't hurt p.templatepage(frame, page) table.sort(p.cats) output:wikitext(string.format(' Demo categories: %s ', category{done = true})) else local normalizedName = mw.title.new(args.name or '') if normalizedName and normalizedName.fullText == page.fullText then output:wikitext(p.templatepage(frame, page)) elseif not page.isSubpage and page.namespace == 10 then -- Template namespace and not a subpage category end end return output :wikitext(			category{done = not args.demo},			args.demo == 'doc' and p.templatepage(frame, page) or nil		) end

return p