Module:GetEventPageInfo

local util_cargo = require('Module:CargoUtil') local util_page = require("Module:PageUtil") local util_table = require("Module:TableUtil") local util_text = require("Module:TextUtil") local util_vars = require('Module:VarsUtil')

local subpages = mw.loadData('Module:SubpageSettings').tournaments.names

local h = {} local p = {}

function p.getEventPageInfo(frame) local title = mw.title.getCurrentTitle.text local parsed = h.parseTitle(title) local subpage = parsed.subpage .. (parsed.subsubpage ~=  and '/' or ) .. parsed.subsubpage util_vars.setVar('overviewpage', parsed.event, frame) util_vars.setVar('subpage', subpage, frame) util_vars.setVar('subpagetype', parsed.subpage, frame) if parsed.subpage == 'Scoreboards' then h.setScoreboardVars(parsed.event) end local datadiv = h.getDataInfo(parsed.event) return datadiv end

function h.parseTitle(title) local titleparts = mw.text.split(title, '/') local event = {} local subpage = {} local parsed = {} for _,titlepart in ipairs(titleparts) do		if subpages[titlepart] then -- event is everything leading up to here event = subpage -- subpage will be the rest subpage = {[1] = titlepart} else -- just keep adding to whichever part we are in			subpage[#subpage+1] = titlepart end end -- case regular page if event[1] or subpages[titleparts[1]] then parsed.event = table.concat(event,'/') parsed.subpage = table.remove(subpage, 1) parsed.subsubpage = table.concat(subpage, '/') -- case overview page else parsed.event = table.concat(subpage, '/') parsed.subpage = '' parsed.subsubpage = '' end return parsed end

function h.getDataInfo(page) local allDataPages = h.getListOfAllDataPages(page) local div = mw.html.create('div') :attr('id','datapage-info') :attr('data-datapages', h.getNumberOfDataPages(allDataPages, page)) :attr('data-has-participants-datapage', h.hasParticipantsDatapage(allDataPages, page)) :attr('data-overviewpage', page) return div end

function h.getListOfAllDataPages(page) local result = util_page.getListOfPages(		mw.ustring.format('_pageName RLIKE "^Data:%s(/[^/]+)?$"', page)	) return result end

function h.getNumberOfDataPages(allDataPages, page) pageEscaped = util_text.escape(page) local counter = 0 for _, title in ipairs(allDataPages) do		-- technically we don't like this regex -- the / should really be in a capture group along with [0-9]+ -- and ? after the entire thing -- too bad lua's string matching is terrible -- but tbh, combined with the regex we have in the query this is pretty safe if mw.ustring.find(			title,			mw.ustring.format('^Data:%s/?[0-9]*$', pageEscaped)		) then counter = counter + 1 end end return counter end

function h.hasParticipantsDatapage(allDataPages, page) if util_table.keyOf(allDataPages, ('Data:%s/Participants'):format(page)) then return 'Yes' end end

function h.setScoreboardVars(page) local row = h.doScoreboardQuery(page) if not row then return end for k, v in pairs(row) do util_vars.setVar('sb' .. k, v)	end end

function h.doScoreboardQuery(page) local query = { tables = 'Tournaments', fields = { 'Region', 'TournamentLevel', 'IsQualifier', 'IsPlayoffs', 'IsOfficial', 'Year', 'League', 'OverviewPage' }, where = ('OverviewPage="%s"'):format(page) }	return util_cargo.getOneRow(query) end

return p