Module:FeaturedLeagues

From NBA 2K Esports Wiki
Jump to: navigation, search
To edit the documentation or categories for this module, click here.
local util_args = require('Module:ArgsUtil')
local util_table = require('Module:TableUtil')
local util_title = require('Module:TitleUtil')
local util_vars = require('Module:VarsUtil')
local SETTINGS = mw.loadData('Module:FeaturedLeagues/Settings')
local REGION
local TOURNAMENT

local h = {}

local p = {}
function p.main(frame)
	local args = util_args.merge(true)
	local tabs = h.getTabsFromArgs(args)
	REGION = tonumber(args.showregion)
	TOURNAMENT = tonumber(args.showtournament)
	return h.makeOutput(tabs)
end

function h.getTabsFromArgs(args)
	local ret = {}
	for i = 1, SETTINGS.maxregions do
		if args['r' .. i] and util_args.castAsBool(args['r' .. i .. 'active']) then
			ret[#ret+1] = args['r' .. i]
			ret[args['r' .. i]] = h.getSecondLevelTabs(args, i)
		else
			ret[#ret+1] = false
		end
	end
	return ret
end

function h.getSecondLevelTabs(args, i)
	local ret = {}
	for j = 1, SETTINGS.maxtournaments do
		if args[('r%st%s'):format(i, j)] and util_args.castAsBool(args[('r%st%sactive'):format(i, j)]) then
			ret[#ret+1] = args['r' .. i .. 't' .. j]
		else
			ret[#ret+1] = false
		end
	end
	return ret
end

function h.makeOutput(tabs)
	local output = mw.html.create('div')
		:addClass('fl-section')
	h.printTopLevelTabs(output, tabs)
	h.printAllSecondLevelTabs(output, tabs)
	h.printAllContent(output, tabs)
	return output
end

function h.topClass(i)
	return ('flfp-top-%s'):format(i)
end

function h.bottomClass(i, j)
	return ('flfp-bottom-%s-%s'):format(i, j)
end

function h.sectionClass(i, j)
	return ('flfp-section-%s-%s'):format(i, j)
end

function h.printTopLevelTabs(output, tabs)
	local div = output:tag('div')
		:addClass('titletabs-tabs')
	for i, region in ipairs(tabs) do
		if region then
			h.printTopTab(div, i, region, tabs[region])
		end
	end
end

function h.printTopTab(div, i, region, regionTabs)
	local inner = div:tag('div')
		:addClass('titletabs-tab')
		:addClass('flfp-alltabs')
		:addClass(h.topClass(i))
		:attr('data-toggle-section', 'flfp-alltabs')
		:attr('data-toggler-setactive', h.getFirstBottomClass(i, regionTabs))
		:attr('data-toggler-show', h.getFirstSectionClass(i, regionTabs))
		:attr('data-toggler-hide', 'flfp-sections, .flfp-bottoms')
		:attr('data-replaceid', h.getFirstSectionClass(i, regionTabs))
		:wikitext(region)
	if i == REGION then
		inner:addClass('active')
		inner:addClass('optionfromlist-toggler')
	else
		inner:addClass('optionfromlist-toggler-lazy')
	end
end

function h.getFirstSectionClass(i, regionTabs)
	return h.sectionClass(i, h.getFirstIndex(regionTabs))
end

function h.getFirstBottomClass(i, regionTabs)
	return h.bottomClass(i, h.getFirstIndex(regionTabs))
end

function h.getFirstIndex(regionTabs)
	for j, region in ipairs(regionTabs) do
		if region then
			return j
		end
	end
end

function h.printAllSecondLevelTabs(output, tabs)
	for i, region in ipairs(tabs) do
		if region then
			local div = output:tag('div')
				:addClass('titletabs-tabs titletabs-row2')
				:addClass('flfp-bottoms')
			if i ~= REGION then
				div:addClass('toggle-section-hidden')
			end
			h.printSetOfSecondLevelTabs(div, tabs[region], i)
		end
	end
end

function h.printSetOfSecondLevelTabs(div, regionTabs, i)
	for j, tournament in ipairs(regionTabs) do
		if tournament then
			h.printBottomTab(div, i, j, tournament, regionTabs)
		end
	end
end

function h.printBottomTab(div, i, j, tournament, regionTabs)
	div:addClass(h.getFirstSectionClass(i, regionTabs))
	local inner = div:tag('div')
		:addClass('titletabs-tab')
		:addClass('flfp-alltabs')
		:addClass(h.bottomClass(i, j))
		:attr('data-toggle-section', 'flfp-alltabs')
		:attr('data-toggler-setactive', h.topClass(i))
		:attr('data-toggler-show', h.sectionClass(i, j))
		:attr('data-toggler-hide', 'flfp-sections')
		:attr('data-replaceid', h.sectionClass(i, j))
		:wikitext(tournament)
	if i == REGION and j == TOURNAMENT then
		inner:addClass('active')
		inner:addClass('optionfromlist-toggler')
	else
		inner:addClass('optionfromlist-toggler-lazy')
	end
end

function h.printAllContent(output, tabs)
	for i, region in ipairs(tabs) do
		if region then
			h.printRegionContent(output, i, region, tabs)
		end
	end
end

function h.printRegionContent(output, i, region, tabs)
	for j, event in ipairs(tabs[region]) do
		if event then
			local container = output:tag('div')
				:addClass('fl-container')
				:addClass('flfp-sections')
				:addClass(h.sectionClass(i, j))
				:attr('id', h.sectionClass(i, j))
			if i == REGION and j == TOURNAMENT then
				container:wikitext(h.getPageEmbed(region, event))
			else
				container:attr('data-templatecode', h.getExpandTitle(region, event))
					:addClass('toggle-section-hidden')
			end
		end
	end
end

function h.getPageEmbed(region, event)
	return h.expandTemplate(h.getExpandTitle(region, event))
end

function h.getExpandTitle(region, event)
	local tbl = { 'Project:Featured Leagues', region, event }
	return util_table.concat(tbl, '/')
end

function h.expandTemplate(title)
	return mw.getCurrentFrame():expandTemplate{ title = title, args = {} }
end

return p