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