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