Module:Asbox

local p = {} local WRAPPER_TEMPLATE = 'Template:Asbox' local args, msgBox local stubCatNum = {}

function category(cat, name) local result = '' if type(cat) == type'' then cat = {cat} end for _, v in ipairs(cat) do v = (#v > 1 and '' or 'Stub message templates needing attention|') .. v result = result .. ('')	end return result end

function ombox(catSort, text, name) msgBox = msgBox or require('Module:Message box') return msgBox.ombox{ type = 'content', text = mw.getCurrentFrame:preprocess(text) }	.. category(catSort, name) end

function stubCats(page, tempsort) local wikitext, missingCats, hasDoc = '', 0 for k, v in pairs(args) do		if type(k) == 'string' then table.insert(stubCatNum, string.match(k, '^category(%d*)$')) end end

--if page then table.sort(stubCatNum) local key for k, v in ipairs(stubCatNum) do		key = { cat = 'category' .. v, ts = 'tempsort' .. v		} wikitext = wikitext .. (v ==  and args[key.ts] == 'no' and						or category{args[key.cat]				.. (page and--True if stubCats called by p.templatepage ('|' .. (						args[key.ts] or ('*' .. page.text) ))					or '' )			}		)		if page then missingCats = missingCats + mw.getCurrentFrame:callParserFunction{ name = '#ifexist', args = {'Category:' .. args[key.cat], 0, 1} }			hasDoc = false if v == '' then hasDoc = mw.getCurrentFrame:callParserFunction{ name = '#ifexist', args = {page.prefixedText .. '/doc', true, false} }				wikitext = wikitext .. (hasDoc and  or ) end if not hasDoc and not string.match(args[key.cat], ' stubs$') then wikitext = wikitext .. category('S', page.text) end end stubCatNum[k] = {args[key.cat], key.cat} -- replace with values to be used in population end if missingCats > 0 then wikitext = wikitext .. ombox(			'N',			'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.'		) end return wikitext end

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

function p.templatepage(frame, page) 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' }	.. stubCats(page, args.tempsort) .. ((args.icon and '')		or (args.image and frame:callParserFunction{ name = '#ifexist', args = { 'Media:' .. mw.text.split(args.image, '|')[1], '',					category('B', page.text) }			}			or '' )	)	.. (args.imagealt and 		category('I', page.text)		or ''	) .. (args.category and 		'' 		or ombox( 'C', 'The category parameter is not set. Please add an appropriate stub category.', page.text )	)	.. ((args.subject or args.article or args.qualifier) and		''		or ombox( 'D', 'This stub template contains no description! At least one of the parameters subject, article or qualifier must be defined.', page.text )	) 	-- Note: Original Asbox/templatepage checks categories for valid names and whether they exist here. -- Module has already done so at the first call of stubCats, avoiding a repeat checking if category# args are set. .. require('Module:Documentation').main{ content = (			'\n' .. (page.text ~= 'Stub' and require('Module:Asbox stubtree')._subtree{ page.text, pagename = page.text }				or '' )			.. '\n\n== About this template ==\n\nThis template is used to identify a '			.. string.format('%sstub%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\n=== Usage ===\n\nTyping  produces the message shown at the beginning, and adds the article to the following categor' .. (#stubCatNum > 1 and 'ies' or 'y') .. ':\n'			.. population			.. '\n'			.. (mw.title.new(page.basePageTitle .. '/doc').exists and frame:expandTemplate{title = page.basePageTitle .. '/doc'} or '' )			.. '\n== General information ==\n\n'			.. frame:expandTemplate{title = 'Stub documentation'} .. '\n\n'		), ['link box'] = frame:preprocess'This documentation is automatically generated by Template:Asbox/templatepage. The general information is transcluded from Template:Stub documentation. ([ edit] &#124; [ history]) \n\n}}' } 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 output :wikitext'' :wikitext(stubCats) elseif args.demo then --not in original Template:Asbox, but shouldn't hurt output:wikitext(' Demo categories: ' .. string.gsub(stubCats, '%[%[', ' | %[%[:') .. ' ') elseif page.basePageTitle ~= WRAPPER_TEMPLATE then --mw.title.new('') is always nil. This is intentional and matches the results of original if mw.title.new(args.name or '') == page then output:wikitext(p.templatepage(frame, page)) elseif not page.isSubpage and page.namespace == 10 then -- Template namespace and not a subpage output:wikitext(string.format( '',				(args.name and 'E' or 'W') .. page.text ))		end end return output end

return p