Module:Portal parent

require('strict')

local p = {}

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

local default_portals = {
	['portals'] = '[[Portal:Portals]]',
	['index'] = '[[Portal:Index]]'
}
local unclassified_cat = '[[Category:Unclassified portals]]'

local function class_link_text(class, class_text)
	return 'Class ' .. string.upper(class) .. ' - [[Portal:' .. class_text .. '|' .. class_text .. ']]'
end

local function subclass_link_text(subclass_text, class_text)
	return 'Subclass ' .. string.upper(subclass_text) .. ' - [[Portal:' .. class_text .. '|' .. class_text .. ']]'
end

function p._portal_parent(args)
	local current_title = mw.title.getCurrentTitle()
	local pagename = current_title.text
	local class_text
	
	local class = args.class
	local class_link = ''
	local cat = ''
	if class then
		if class ~= 'none' then
			class_text = classification({class = class})
			if class_text == pagename then
				class_link = default_portals['portals']
			else
				class_link = class_link_text(class, class_text)
			end
		end
	else
		class_link = default_portals['index']
		if current_title:inNamespace('Portal') then
			cat = unclassified_cat
		end
	end
	
	local subclasses = {}
	table.insert(subclasses, args.subclass1)
	table.insert(subclasses, args.subclass2)
	
	local subclass_links = {}
	local midclass = yesno(args.midclass) or false
	local classification_args = {class = class}
	
	for i, subclass in ipairs(subclasses) do
		classification_args['subclass' .. i] = subclass
		class_text = classification(classification_args)
		local subclass_text
		if midclass then
			subclass_text = subclass
		elseif i == #subclasses then
			subclass_text = table.concat(subclasses, '', 1, i)
		end
		if subclass_text then
			table.insert(subclass_links, '<br>' .. subclass_link_text(subclass_text, class_text))
		end
	end
	
	return class_link .. table.concat(subclass_links) .. cat
end

function p.portal_parent(frame)
	return p._portal_parent(getArgs(frame))
end

return p
Category:Wikisource protected modules