Module:Portal class/sandbox

require('strict')

local p = {}

local getArgs = require('Module:Arguments').getArgs
local classification = require('Module:Library of Congress Classification')._classification

local function portal_categories(class)
	local cats = {
		a = 'General',
		b = 'Ideology',
		c = 'Historiography',
		d = 'World history',
		e = 'United States',
		f = 'American history',
		g = 'Geo-anthropology',
		h = 'Social science',
		i = 'National',
		j = 'Political science',
		k = 'Law',
		l = 'Education',
		m = 'Music',
		n = 'Art',
		p = 'Language',
		q = 'Science',
		r = 'Medicine',
		s = 'Agriculture',
		t = 'Technology',
		u = 'Military',
		v = 'Naval',
		x = 'Miscellaneous',
		z = 'Library',
		default = 'Unclassified'
	}
	return '[[Category:' .. (portal_categories[class] or portal_categories['default']) .. ' portals]]'
end

local main_class_defaults = {
	['n/a'] = 'n/a',
	['?'] = '?'
}

local portal_base_links = '[[Portal:Portals|Main]]/[[Portal:Index|Index]]'

function p._portal_class(args)
	local in_portal_ns = (mw.title.getCurrentTitle():inNamespace('Portal'))
	
	local main_class
	if args.class == 'none' then
		main_class = main_class_defaults['n/a']
	elseif args.class then
		main_class = '[[Portal:' .. classification({class = args.class}) .. '|' .. string.upper(args.class) .. ']]'
	elseif in_portal_ns then
		main_class = main_class_defaults['?']
	else
		main_class = main_class_defaults['n/a']
	end
	
	local subclass1 = ''
	if args.subclass1 then
		subclass1 = '[[Portal:' .. classification({class = args.class, subclass1 = args.subclass1}) .. '|' .. string.upper(args.subclass1) .. ']]'
	end
	local subclass2 = ''
	if args.subclass2 then
		subclass2 = '[[Portal:' .. classification({class = args.class, subclass1 = args.subclass1, subclass2 = args.subclass2}) .. '|' .. string.upper(args.subclass2) .. ']]'
	end
	
	local box_div = mw.html.create('div')
		:addClass('wst-portal-class')
		:tag('div')
			:addClass('wst-portal-class-title')
			:wikitext('Class')
			:done()
		:tag('div')
			:addClass('wst-portal-class-text')
			:wikitext(main_class .. subclass1 .. subclass2)
		:tag('div')
			:addClass('wst-portal-class-base')
			:wikitext(portal_base_links)
			:done()
		:allDone()
	
	-- categorization
	if args.class ~= 'none' and in_portal_ns then
		box_div:wikitext(portal_categories(args.class))
	end
	
	return mw.getCurrentFrame():extensionTag('templatestyles', '', {src = 'Template:Portal Class/styles.css'}) .. tostring(box_div)
end

function p.portal_class(frame)
	return p._portal_class(getArgs(frame))
end

return p
Category:Module sandboxes