Module:ScheduleNavbox

From Leaguepedia | League of Legends Esports Wiki
Jump to: navigation, search

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

local util_args = require('Module:ArgsUtil')
local util_cargo = require('Module:CargoUtil')
local m_team = require('Module:Team')

local p = {}
function p.main(frame)
	local frame = util_args.merge(true)
	
	local navboxArgs = p.navboxArgs()
	local exists = p.addToArgs(navboxArgs, args.navboxtype, args[1])
	if not exists then
		return ''
	else
		return frame:expandTemplate{ title = 'Navbox', args = navboxArgs }
	end
end

function p.addToArgs(navboxArgs, navtype, subarg, n)
	-- use just this if adding to another navbox
	local helper
	local subject
	if navtype == 'Team' then
		helper = require('Module:ScheduleNavboxTeamHelper')
		subject = m_team.teamlinkname(subarg or mw.title.getCurrentTitle().baseText)
	elseif navtype == 'Tournament' then
		helper = require('Module:ScheduleNavboxTournamentHelper')
		subject = mw.title.makeTitle('',subarg).redirectTarget or subarg
	else
		error('Invalid navbox type')
	end
	
	local query = p.makeQuery()
	query.where = helper.where(subject)
	local results = util_cargo.queryAndCast(query, true)
	if not next(results) then
		return false
	end
	p.formatResults(results)
	local makeNavbox = helper.makeNavboxArgs(navboxArgs, results, subject, n or 0)
	
	return true
end

function p.makeQuery()
	return {
		tables = 'MatchSchedule',
		fields = {
			'Team1',
			'Team2',
			'DateTime_UTC=DateTime',
			'OverviewPage=Tournament',
			'HasTime=TimeEntered',
			'ShownName'
		},
		groupBy = 'UniqueMatch',
		orderBy = 'DateTime_UTC ASC'
	}
end

function p.formatResults(results)
	for i, row in ipairs(results) do
		row.Team1Formatted = m_team.onlyimagelinked(row.Team1, {size=45})
		row.Team2Formatted = m_team.onlyimagelinked(row.Team2, {size=45})
		row.EventLinked = string.format('[[%s|%s]]', row.Tournament, row.ShownName)
	end
end

function p.navboxArgs()
	return {
		name = 'ScheduleNavbox',
		title = 'Upcoming Matches',
		state = 'mw-collapsible',
		id = 'schedule-navbox',
		liststyle ='white-space:nowrap;',
		bodyclass = 'upcoming-matches'
	}
end

return p