No edit summary |
No edit summary |
||
Line 183: | Line 183: | ||
self:initializeToggleData() |
self:initializeToggleData() |
||
self:printQuery(args) |
self:printQuery(args) |
||
+ | util_vars.log(self:printQuery(args)) |
||
local tbl = mw.html.create('table') |
local tbl = mw.html.create('table') |
||
:addClass('wikitable sortable') |
:addClass('wikitable sortable') |
Revision as of 19:51, 24 August 2021
Documentation for this module may be created at Module:PowerRankingsAbstract/doc
local util_args = require('Module:ArgsUtil')
local util_cargo = require('Module:CargoUtil')
local util_html = require('Module:HtmlUtil')
local util_map = require('Module:MapUtil')
local util_pr = require("Module:PrUtil")
local util_sort = require('Module:SortUtil')
local util_table = require('Module:TableUtil')
local util_text = require('Module:TextUtil')
local util_toggle = require('Module:ToggleUtil')
local util_vars = require('Module:VarsUtil')
local i18n = require('Module:I18nUtil')
local Country = require('Module:Country')
local CountryList = require('Module:CountryList')
local m_team = require('Module:Team')
local h = {}
local p = require('Module:LuaClassSystem').class.abstract()
function p:init(queryType)
i18n.init('PowerRankings')
self.TOGGLES = {
class = 'PR_toggle%s',
}
self.MAX_SHOWN = 5
self.HIDDEN = false
self.DISABLE_HIDDEN_RESULTS = false
self.COLUMNS = { 'index', 'Team', 'Player', 'Points', 'Gold', 'Silver', 'Bronze', 'Copper' }
end
function p:run(args)
h.castArgs(args)
self:setTogglePreferences(args)
local query = self:getQuery(args)
local result = util_cargo.queryAndCast(query)
util_map.selfRowsInPlace(self, result, self.formatOneRow)
return self:makeOutput(result, args)
end
function h.castArgs(args)
args.country = CountryList(args.country)
end
function p:setTogglePreferences(args)
if not args.country:exists() then
self.MAX_SHOWN = -1
end
if args.max_shown then
self.MAX_SHOWN = args.max_shown
end
self.DISABLE_HIDDEN_RESULTS = args.disable_hidden_results
end
function p:getQuery(args)
local query = {
tables = self:getTables(args),
fields = self:getFields(),
join = self:getJoin(args),
where = self:getWhere(args),
limit = self:getLimit(args),
orderBy = 'SUM(Res.PRPoints) DESC',
offset = self:getOffset(args),
groupBy = 'PR._pageName',
}
util_cargo.logQuery(query)
return query
end
function p:getTables(args)
if not args.country:exists() then
return {
'Tournaments=T',
'TournamentResults=Res',
'TournamentResults__RosterLinks=RL',
'PlayerRedirects=PR',
'Players=P',
}
else
return {
'Tournaments=T',
'TournamentResults=Res',
'TournamentResults__RosterLinks=RL',
'PlayerRedirects=PR',
'Players=P',
'Countries=C'
}
end
end
function p:getJoin(args)
if not args.country:exists() then
return {
'T._pageName = Res.OverviewPage',
'Res._ID=RL._rowID',
'RL._value=PR.AllName',
'PR._pageName=P._pageName',
}
else
return {
'T._pageName = Res.OverviewPage',
'Res._ID=RL._rowID',
'RL._value=PR.AllName',
'PR._pageName=P._pageName',
'T.PrRegion=C.Region'
}
end
end
function p:getFields()
local fields = {
'P.ID=Player',
'PR._pageName=Link',
'SUM(Res.PRPoints)=Points',
'P.Team=Team',
--'PR.Squad=Squad',
'P.Nationality=Country[country]',
'SUM(Res.Gold)=Gold',
'SUM(Res.Silver)=Silver',
'SUM(Res.Bronze)=Bronze',
'SUM(Res.Copper)=Copper',
'P.TeamLast=TeamLast',
}
return fields
end
function p:getWhere(args)
local where = {
args.region and ('P.Residency="%s"'):format(args.region),
args.region and ('T.Region="%s"'):format(args.region),
h.getFreeAgentWhereCondition(args),
util_cargo.whereFromCompoundEntity('P.Nationality="%s"', args.country),
args.country and util_cargo.whereFromCompoundEntity('C.Country="%s"', args.country),
h.getRetiredWhereCondition(args.include_retired),
'(P.IsInactive="0" OR P.IsInactive IS NULL)',
self:getWhereCondition(args),
}
return where
end
function p:getWhereCondition(args) end
function p:getLimit(args)
return args.limit or 9999
end
function p:getOffset(args) return args.offset end
function h.getRetiredWhereCondition(include_retired)
-- if util_args.castAsBool(include_retired) then return nil end
-- return '(P.IsRetired="No" OR P.IsRetired IS NULL)'
end
function h.getFreeAgentWhereCondition(args)
-- if args.fa == 'only' then
-- return ('P.Team IS NULL')
-- elseif not util_args.castAsBool(args.fa) then
-- return ('P.Team IS NOT NULL')
-- else
-- return nil
-- end
end
-- format row
function p:formatOneRow(row)
row.Team = m_team.onlyimagelinked(row.Team)
row.Player = self:formatPlayer(row)
end
function p:formatPlayer(row)
if not row.Country:exists() or row.Country.unknown then
return self:makePlayerOnly(row)
end
local image = row.Country:image()
return image .. ' ' .. self:makePlayerOnly(row)
end
function p:makePlayerOnly(row)
return util_text.intLink(row.Link, row.Player)
end
-- make output
function p:makeOutput(result, args)
self:initializeToggleData()
self:printQuery(args)
util_vars.log(self:printQuery(args))
local tbl = mw.html.create('table')
:addClass('wikitable sortable')
:addClass('hoverable-rows')
self:printHeader(tbl, result, args.country:flairs())
self:printRows(tbl, result)
return tbl
end
function p:printQuery(args) end
function p:initializeToggleData()
local i = util_vars.setGlobalIndex('PR_i')
self.TOGGLES.class = self.TOGGLES.class:format(i)
end
function p:printHeader(tbl, result, countryList)
self:printColspanHeader(tbl, result, countryList)
util_html.printHeaderFromI18n(tbl, self.COLUMNS)
util_html.printEmptySortRow(tbl, #self.COLUMNS)
end
function p:printColspanHeader(tbl, result, countryList)
if not country then return end
util_html.printColspanHeader(tbl, countryList, #self.COLUMNS)
end
function p:printRows(tbl, result)
for i, row in ipairs(result) do
self:printRow(tbl, row, i == self.MAX_SHOWN and i < #result)
end
if self.HIDDEN then
self:endHiddenResults(tbl)
end
end
function p:printRow(tbl, row, isHidden)
if isHidden and self.DISABLE_HIDDEN_RESULTS then return end
local tr = tbl:tag('tr')
for _, col in ipairs(self.COLUMNS) do
tr:tag('td'):wikitext(row[col])
end
if self.HIDDEN then
util_toggle.sepCellClasses(tr, self.TOGGLES)
end
if isHidden then
self.HIDDEN = true
self:printShowButton(tbl)
end
end
function p:printShowButton(tbl)
local tr = tbl:tag('tr')
local th = tr:tag('th')
:attr('colspan', #self.COLUMNS)
util_toggle.printSepToggler(th, self.TOGGLES)
util_toggle.sepCellClasses(tr, self.TOGGLES, true)
end
function p:endHiddenResults(tbl)
local tr = tbl:tag('tr')
local th = tr:tag('th')
:attr('colspan', #self.COLUMNS)
util_toggle.sepCellClasses(tr, self.TOGGLES, false)
util_toggle.printSepToggler(th, self.TOGGLES, true)
end
return p