Module:ExternalContentQuery

From Call of Duty Esports Wiki
Jump to: navigation, search

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

local util_args = require('Module:ArgsUtil')
local util_cargo = require('Module:CargoUtil')
local util_esports = require('Module:EsportsUtil')
local util_game = require('Module:GameUtil')
local util_html = require('Module:HtmlUtil')
local util_table = require('Module:TableUtil')
local util_text = require('Module:TextUtil')
local util_time = require('Module:TimeUtil')
local util_title = require('Module:TitleUtil')
local util_vars = require('Module:VarsUtil')
local i18n = require('Module:i18nUtil')
local TabsDynamic = require('Module:TabsDynamic').constructor

local Query = require('Module:ExternalContentQueryAbstract'):extends()

local YEAR
local SECONDS_IN_DAY = 24 * 60 * 60

local h = {}

local p = {}

function p.main(frame)
	local args = util_args.merge()
	return Query():run(args)
end

function Query:groupDataByTab(data, args)
	local tabs = h.initTabTable(args)
	h.castTabDates(tabs)
	h.addDataToTabs(tabs, data)
	return tabs
end

function h.initTabTable(args)
	if args.dates then
		return h.initTabTableFromArgs(args)
	else
		return h.initDefaultTabTable()
	end
end

function h.initTabTableFromArgs(args)
	local ret = {}
	local dates = util_text.split(args.dates)
	local names = util_text.split(args.names)
	for k, v in ipairs(dates) do
		ret[k] = { date = v, name = names[k] }
	end
	return ret
end

function h.initDefaultTabTable()
	local ret = { { date = '*', name = 'Before 2010' } }
	for _, v in ipairs(util_game.years) do
		ret[#ret+1] = { date = v .. '-01-01', name = v }
	end
	return ret
end

function h.castTabDates(tabs)
	for _, row in ipairs(tabs) do
		if row.date ~= '*' then
			row.date = util_time.strToDate(row.date)
		end
	end
end

function h.addDataToTabs(tabs, data)
	local currentTabIndex = 1
	for _, row in ipairs(data) do
		currentTabIndex = h.getUpdatedIndex(tabs, row, currentTabIndex)
		tabs[currentTabIndex][#tabs[currentTabIndex]+1] = row
	end
end

function h.getUpdatedIndex(tabs, row, currentTabIndex)
	while h.belongsInTab(tabs[currentTabIndex+1], row) do
		currentTabIndex = currentTabIndex + 1
	end
	return currentTabIndex
end

function h.belongsInTab(tab, row)
	if not tab then return false end
	if not row.Date.day or not row.Date.month or not row.Date.year then
		error(i18n.print('error_incompleteDate'), row.Title)
	end
	return os.difftime(os.time(tab.date), os.time(row.Date)) < SECONDS_IN_DAY
end

return p