m (→top: standardize util_html.printHeaderFromI18n) |
m (→top: HTML -> Html) |
||
Line 2: | Line 2: | ||
local util_cargo = require('Module:CargoUtil') |
local util_cargo = require('Module:CargoUtil') |
||
local util_game = require('Module:GameUtil') |
local util_game = require('Module:GameUtil') |
||
− | local util_html = require('Module: |
+ | local util_html = require('Module:HtmlUtil') |
local util_table = require('Module:TableUtil') |
local util_table = require('Module:TableUtil') |
||
local util_text = require('Module:TextUtil') |
local util_text = require('Module:TextUtil') |
Revision as of 19:25, 17 September 2019
Edit the documentation or categories for this module. This module has an i18n file.
local util_args = require('Module:ArgsUtil')
local util_cargo = require('Module:CargoUtil')
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_tournament = require('Module:TournamentUtil')
i18n = require('Module:I18nUtil')
local sep = '%s*;;%s*'
local m_team = require('Module:Team')
local League = require('Module:League').league
local placement = require('Module:Placement')
local COLUMNS = { 'Date', 'TeamSize', 'Place', 'PRPoints', 'Event', 'Team', 'Roster' }
local h = {}
function h.doQuery(player, show, use_redirect_table, args)
-- use_redirect_table will be false in self namespace
local tbl = {
tables = h.getTables(use_redirect_table),
join = h.getJoin(use_redirect_table),
where = h.getWhere(player, use_redirect_table, args),
fields = h.getFields(player, use_redirect_table),
orderBy = 'Tournaments.Date DESC',
limit = h.getLimit(show),
}
return util_cargo.queryAndCast(tbl)
end
function h.getTables(redirects)
local tbl = { 'TournamentResults=Results', 'Tournaments' }
if redirects then
tbl[#tbl+1] = 'PlayerRedirects'
end
return tbl
end
function h.getJoin(redirects)
local tbl = {
'Results.OverviewPage=Tournaments._pageName'
}
if redirects then
tbl[#tbl+1] = 'Results.RosterLinks HOLDS PlayerRedirects.AllName'
end
return util_table.concat(tbl, ', ')
end
function h.getWhere(player, use_redirect_table, args)
local tbl = {
'Results.UniqueLine IS NOT NULL',
'Tournaments._pageName IS NOT NULL',
args.minplacement and ('Place_Number <= "%s"'):format(args.minplacement),
h.getPlayerWhereCondition(player, use_redirect_table),
}
return util_cargo.concatWhere(tbl)
end
function h.getPlayerWhereCondition(player, use_redirect_table)
local tbl = {}
if use_redirect_table then
tbl[#tbl+1] = ('PlayerRedirects._pageName="%s"'):format(player)
tbl[#tbl+1] = 'Results.RosterLinks HOLDS PlayerRedirects.AllName'
else
tbl[#tbl+1] = ('Results.RosterLinks HOLDS "%s"'):format(player)
end
return util_cargo.concatWhere(tbl)
end
function h.getFields(player, redirects)
local tbl = {
"Results.Team=Team",
"Results.Prize_Markup=PrizeMarkup",
"Tournaments.Date=Date",
"Results.Place=Place",
"Tournaments.Name=Event",
"Tournaments.TeamSize=TeamSize",
"Results.Phase=Phase",
"Tournaments._pageName=EventLink",
"Results.RosterLinks__full=RosterLinks",
"Results.Roster=RosterNames",
"Tournaments.League=League",
"Results.PRPoints=PRPoints",
}
if redirects then
tbl[#tbl+1] = "PlayerRedirects.AllName=ThisName"
else
tbl[#tbl+1] = ('CONCAT("%s")=ThisName'):format(player)
end
return tbl
end
function h.getLimit(show)
if show == 'overviewpage' then
return 500
elseif show == 'everything' then
return 500
end
return nil
end
function h.getTeammates(namesstr, linksstr, this)
local teammates = {}
local names = mw.text.split(namesstr or '',sep)
local links = mw.text.split(linksstr or '',sep)
for i,link in ipairs(links) do
if mw.ustring.lower(link) == mw.ustring.lower(this) then
teammates[#teammates+1] = ("'''%s'''"):format(names[i])
else
teammates[#teammates+1] = ("[[%s|%s]]"):format(link, names[i])
end
end
return table.concat(teammates, ", ")
end
function h.intro(args)
-- if args.show == 'overviewpage' then
-- return "''" .. i18n.print('seeall', mw.title.getCurrentTitle().rootText) .. "''"
-- end
return ''
end
local p = {}
function p.playerResults( frame )
i18n.initGlobalFromFile('PlayerResults')
local args = util_args.merge(true)
local player = args[1] or mw.title.getCurrentTitle().baseText
local use_redirect_table = not util_args.castAsBool(args.noredirects)
local result = h.doQuery(player, args.show, use_redirect_table, args)
local output = mw.html.create('div')
if args.show == 'everything' then
output = output:tag('div')
output:attr('id','trf-content')
end
local tbl = output:tag('table')
tbl:addClass("wikitable sortable hoverable-rows"):css("font-size","90%")
util_html.printColspanHeader(tbl, i18n.print('TournamentResults', player), #COLUMNS)
util_html.printHeaderFromI18n(tbl, COLUMNS)
for _,row in ipairs(result) do
tr = tbl:tag("tr")
tr:tag("td"):addClass('achievements-date'):wikitext(row.Date):done()
tr:tag('td'):wikitext(util_game.teamsize_names[row.TeamSize])
tr:node(placement.makeNode(row.Place))
tr:tag('td'):wikitext(row.PRPoints)
tr:tag("td")
:wikitext(League{row.League, 'onlyimage'})
:wikitext(util_text.intLink(row.EventLink, h.eventDisplay(row)))
tr:tag("td"):wikitext(m_team.rightshortlinked(row.Team))
tr:tag("td"):wikitext(h.getTeammates(row.RosterNames, row.RosterLinks, row.ThisName))
end
frame:callParserFunction{name="#vardefine:hasnewresults",args={"yes"}}
return h.intro(args), output
end
function h.eventDisplay(row)
if row.Phase then
return ('%s - %s'):format(row.Event, row.Phase)
end
return row.Event
end
return p