Module:Asbox

From Zoophilia Wiki
Revision as of 03:07, 25 December 2014 by meta>Mr. Stradivarius (anchor the category pattern to the start and the end of the string so we don't match keys like "nocategoryplease" etc.)
Jump to navigationJump to search

Documentation for this module may be created at Module:Asbox/doc

local WRAPPER_TEMPLATE = 'Template:Asbox'
local p = {}

function p._main(args, frame)
	local output = mw.html.create('table')
	local page = mw.title.getCurrentTitle()
	output
		:addClass('metadata plainlinks stub')
		:css('background','transparent')
		:attr('role','presentation')
	if args.icon or args.image then
		output
			:tag('td'):wikitext(args.icon or string.format(
				'[[File:%s|%spx|alt=%s]]',
				args.image,
				args.pix or '40x30',
				args.imagealt or 'Stub icon'
			))
	end
	local buffer = output:tag('td')
	buffer
		:tag('i')
			:wikitext(string.format(
				'This %s %s %s is a [[Wikipedia:stub|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
	output = tostring(output)
	if page.namespace == 0 then -- Main namespace
		output = output .. '[[Category:All stub articles]]'
		for k,v in pairs(args) do
			if string.match(k, '^category%d*$') then
				output = output .. string.format('[[Category:%s]]', v)
			end
		end
	end
	-- Instead of the title check you do here, see if the parent frame's title is the same as the current page's title.
	if not args.demo and page.basePageTitle ~= WRAPPER_TEMPLATE then
		--mw.title.new('') is always nil. This is intentional and matches the results of original {{FULLPAGENAME:{{{name|}}}}}
		if mw.title.new(args.name or '') == page then
			-- This can go away once you un-split main and _main, as I describe below.
			frame = frame or mw.getCurrentFrame()
			-- You should probably convert Template:Asbox/templatepage to Lua too.
			-- Do it in this module, in a function called templatepage.
			output = output .. frame:expandTemplate{
				title = 'Asbox/templatepage',
				args = args
			}
		elseif not page.isSubpage and page.namespace == 10 then -- Template namespace and not a subpage
			output = output .. string.format(
				'[[Category:Stub message templates needing attention|%s]]',
				(args.name and 'E' or 'W') .. page.text
			)
		end
	end
	return output
end

-- Having main and _main split is really only beneficial for modules that get called from other modules a lot, which this module wouldn't be.
function p.main(frame)
	local args = require('Module:Arguments').getArgs(frame, {
		wrappers = WRAPPER_TEMPLATE
	})
	return p._main(args, frame)
end

return p