Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions lua/wikis/commons/Widget/EmptyPagePreview.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
---
-- @Liquipedia
-- page=Module:Widget/EmptyPagePreview
--
-- Please see https://github.com/Liquipedia/Lua-Modules to contribute
--

local Lua = require('Module:Lua')

local Class = Lua.import('Module:Class')
local Namespace = Lua.import('Module:Namespace')
local TeamTemplate = Lua.import('Module:TeamTemplate')

local EmptyTeamPagePreview = Lua.import('Module:Widget/EmptyPagePreview/Team')
local EmptyPersonPagePreview = Lua.import('Module:Widget/EmptyPagePreview/Person')
local Widget = Lua.import('Module:Widget')

---@class EmptyPagePreview: Widget
---@operator call(table): EmptyPagePreview
local EmptyPagePreview = Class.new(Widget)


---@return Widget?
function EmptyPagePreview:render()
if not Namespace.isMain() then
return
end

if TeamTemplate.exists(self.props.pageName or mw.title.getCurrentTitle().prefixedText) then
return EmptyTeamPagePreview(self.props)
end

return EmptyPersonPagePreview(self.props)
end

return EmptyPagePreview
250 changes: 250 additions & 0 deletions lua/wikis/commons/Widget/EmptyPagePreview/Person.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,250 @@
---
-- @Liquipedia
-- page=Module:Widget/EmptyPagePreview/Person
--
-- Please see https://github.com/Liquipedia/Lua-Modules to contribute
--

local Lua = require('Module:Lua')

local Array = Lua.import('Module:Array')
local BroadcasterTable = Lua.import('Module:BroadcastTalentTable')
local Class = Lua.import('Module:Class')
local DateExt = Lua.import('Module:Date/Ext')
local Info = Lua.import('Module:Info', {loadData = true})
local Infobox = Lua.import('Module:Infobox/Person/Player/Custom')
local Logic = Lua.import('Module:Logic')
local MatchTable = Lua.import('Module:MatchTable/Custom')
local Namespace = Lua.import('Module:Namespace')
local Opponent = Lua.import('Module:Opponent/Custom')
local Page = Lua.import('Module:Page')
local ResultsTable = Lua.import('Module:ResultsTable/Custom')
local Table = Lua.import('Module:Table')
local Tabs = Lua.import('Module:Tabs')
local Variables = Lua.import('Module:Variables')

local PlayerAutoTeamNavBox = Lua.import('Module:Widget/NavBox/AutoTeam/Player')
local HtmlWidgets = Lua.import('Module:Widget/Html/All')
local Widget = Lua.import('Module:Widget')
local WidgetUtil = Lua.import('Module:Widget/Util')

local Condition = Lua.import('Module:Condition')
local ConditionTree = Condition.Tree
local ConditionNode = Condition.Node
local Comparator = Condition.Comparator
local BooleanOperator = Condition.BooleanOperator
local ColumnName = Condition.ColumnName

local DEFAULT_MAX_PLAYERS_PER_PLACEMENT = Info.config.defaultMaxPlayersPerPlacement or 10

---@class EmptyPersonPagePreview: Widget
---@operator call(table): EmptyPersonPagePreview
local EmptyPersonPagePreview = Class.new(Widget)
EmptyPersonPagePreview.defaultProps = {pageName = mw.title.getCurrentTitle().prefixedText}

---@return Widget?
function EmptyPersonPagePreview:render()
if not Namespace.isMain() then
return
end

--disable storage ... just to be sure ...
Variables.varDefine('disable_LPDB_storage', 'true')

self.person = Page.applyUnderScoresIfEnforced(self.props.pageName)

return HtmlWidgets.Div{
children = WidgetUtil.collect(
self:_infobox(),
HtmlWidgets.H2{children = {'Overview'}},
self:_results(),
self:_matches(),
HtmlWidgets.Br{},
PlayerAutoTeamNavBox{}
),
}
end

---@private
---@return Widget
function EmptyPersonPagePreview:_infobox()
local infoboxArgsFromSquadInfo = self:_backfillInformationFromSquadInfo()

local infoboxArgs = Table.merge(
{
default = 'Infobox player NoImage.png',
defaultDark = 'Infobox player NoImage darkmode.png',
},
infoboxArgsFromSquadInfo,
self:_backfillInformationFromPlacements()
)
table.insert(infoboxArgs.idsArray, infoboxArgsFromSquadInfo.id)
infoboxArgs.idsArray = Array.unique(infoboxArgs.idsArray)
infoboxArgs.idsArray = Array.filter(infoboxArgs.idsArray, function(id)
return id ~= infoboxArgs.id
end)
infoboxArgs.ids = table.concat(infoboxArgs.idsArray, ', ')
infoboxArgs.id = infoboxArgs.id or self.props.pageName

return Infobox.run(infoboxArgs)
end

---@private
---@return Widget[]
function EmptyPersonPagePreview:_matches()
return {
HtmlWidgets.H3{children = 'Most Recent Matches'},
MatchTable.results{
tableMode = 'solo',
player = self.person,
showType = true,
limit = 10,
}
}
end

---@private
---@return (Widget|Html)[]
function EmptyPersonPagePreview:_results()
---@type table<string, string|boolean|Widget>
local tabArgs = {
suppressHeader = true,
name1 = 'Achievements',
content1 = ResultsTable.results{
player = self.person,
showType = true,
gameIcons = true,
awards = false,
achievements = true,
querytype = 'solo',
}
}
local index = 2

local awardsAchievements = ResultsTable.awards{
player = self.person,
showType = true,
gameIcons = true,
awards = true,
achievements = true,
querytype = 'solo',
}
if Logic.isNotEmpty(awardsAchievements) then
tabArgs['name' .. index] = 'Awards Achievements'
tabArgs['content' .. index] = awardsAchievements
index = index + 1
end

local talentAchievements = BroadcasterTable.run{
broadcaster = self.person,
achievements = true,
useTickerNames = true,
}
if Logic.isNotEmpty(talentAchievements) then
tabArgs['name' .. index] = 'Talent Achievements'
tabArgs['content' .. index] = talentAchievements
end

return {
HtmlWidgets.H3{children = 'Achievements'},
Tabs.dynamic(tabArgs)
}
end

--- checks the last 100 placements for the wanted data
---@private
---@return table
function EmptyPersonPagePreview:_backfillInformationFromPlacements()
local personConditions = ConditionTree(BooleanOperator.any)
-- players
:add(Array.map(Array.range(1, DEFAULT_MAX_PLAYERS_PER_PLACEMENT), function(index)
return ConditionNode(ColumnName('p' .. index, 'opponentplayers'), Comparator.eq, self.person)
end))
-- coaches (etc)
:add(Array.map(Array.range(1, 5), function(index)
return ConditionNode(ColumnName('c' .. index, 'opponentplayers'), Comparator.eq, self.person)
end))

local conditions = ConditionTree(BooleanOperator.all):add{
ConditionNode(ColumnName('date'), Comparator.neq, DateExt.defaultDateTime),
ConditionNode(ColumnName('opponentplayers'), Comparator.neq, ''),
ConditionNode(ColumnName('opponentplayers'), Comparator.neq, '[]'),
ConditionNode(ColumnName('liquipediatier'), Comparator.neq, -1),
personConditions
}

local placements = mw.ext.LiquipediaDB.lpdb('placement', {
conditions = tostring(conditions),
query = 'opponenttype, opponentname, opponenttemplate, opponentplayers',
order = 'date desc',
limit = 100,
})

local infoboxArgs = {idsArray = {}}

if #placements == 0 then
return infoboxArgs
end

---@param personData table<string, string>
---@return standardPlayer?
local getPerson = function(personData)
local index = 1
while personData['p' .. index] or personData['c' .. index] do
if personData['p' .. index] == self.person then
return Opponent.playerFromLpdbStruct(personData, index)
end
if personData['c' .. index] == self.person then
return Opponent.staffFromLpdbStruct(personData, index)
end
index = index + 1
end
end

Array.forEach(Array.reverse(placements), function(placement)
local person = getPerson(placement.opponentplayers)
if not person then
return
end

local id = Logic.nilIfEmpty(person.displayName)
table.insert(infoboxArgs.idsArray, id)
Table.mergeInto(infoboxArgs, {
id = id,
country = person.flag,
faction = person.faction,
})
end)

return infoboxArgs
end

---@private
---@return table
function EmptyPersonPagePreview:_backfillInformationFromSquadInfo()
local squadEntry = mw.ext.LiquipediaDB.lpdb('squadplayer', {
conditions = tostring(ConditionNode(ColumnName('link'), Comparator.eq, self.person)),
query = 'name, id, nationality, leavedate, inactivedate, pagename, extradata',
order = 'joindate desc',
limit = 1,
})[1]

if not squadEntry then
return {}
end

local infoboxArgs = {
id = Logic.nilIfEmpty(squadEntry.id),
country = Logic.nilIfEmpty(squadEntry.nationality),
faction = Logic.nilIfEmpty((squadEntry.extradata or {}).faction),
name = Logic.nilIfEmpty(squadEntry.name),
}

if DateExt.isDefaultTimestamp(squadEntry.leavedate) and DateExt.isDefaultTimestamp(squadEntry.inactivedate) then
infoboxArgs.team = squadEntry.pagename
end

return infoboxArgs
end

return EmptyPersonPagePreview
4 changes: 2 additions & 2 deletions lua/wikis/commons/Widget/EmptyPagePreview/Team.lua
Original file line number Diff line number Diff line change
Expand Up @@ -246,7 +246,7 @@ function EmptyTeamPagePreview:_rosterFromTransfers()
end

---@private
---@return (Widget|Html)[]
---@return Widget[]
function EmptyTeamPagePreview:_matches()
return {
HtmlWidgets.H3{children = 'Most Recent Matches'},
Expand All @@ -260,7 +260,7 @@ function EmptyTeamPagePreview:_matches()
end

---@private
---@return (Widget|Html)[]
---@return Widget[]
function EmptyTeamPagePreview:_results()
return {
HtmlWidgets.H3{children = 'Achievements'},
Expand Down
8 changes: 4 additions & 4 deletions lua/wikis/starcraft/Infobox/Person/Player/Custom.lua
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ function CustomInjector:parse(id, widgets)
return {
Cell{
name = 'Race',
children = {CustomPlayer._getRaceDisplay(args.race)}
children = {CustomPlayer._getRaceDisplay(args.race or args.faction)}
}
}
elseif id == 'role' then return {}
Expand Down Expand Up @@ -148,7 +148,7 @@ end
---@param args table
---@return string
function CustomPlayer:nameDisplay(args)
local factions = Faction.readMultiFaction(args.race or Faction.defaultFaction, {alias = false})
local factions = Faction.readMultiFaction(args.race or args.faction or Faction.defaultFaction, {alias = false})

local raceIcons = table.concat(Array.map(factions, function(faction)
return Faction.Icon{faction = faction, size = 'medium'}
Expand Down Expand Up @@ -176,7 +176,7 @@ end
function CustomPlayer:adjustLPDB(lpdbData, args, personType)
local extradata = lpdbData.extradata or {}

local factions = Faction.readMultiFaction(args.race, {alias = false})
local factions = Faction.readMultiFaction(args.race or args.faction, {alias = false})

extradata.race = factions[1]
extradata.faction = Faction.toName(factions[1])
Expand Down Expand Up @@ -517,7 +517,7 @@ function CustomPlayer:getWikiCategories(categories)
table.insert(categories, 'Foreign Players')
end

for _, faction in pairs(Faction.readMultiFaction(args.race, {alias = false})) do
for _, faction in pairs(Faction.readMultiFaction(args.race or args.faction, {alias = false})) do
table.insert(categories, Faction.toName(faction) .. ' Players')
end

Expand Down
4 changes: 2 additions & 2 deletions lua/wikis/starcraft2/Infobox/Person/Custom.lua
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ end
---@param args table
---@return string
function CustomPerson:nameDisplay(args)
local raceData = self:readFactions(args.race or Faction.defaultFaction)
local raceData = self:readFactions(args.race or args.faction or Faction.defaultFaction)

local raceIcons
if raceData.isAll then
Expand Down Expand Up @@ -109,7 +109,7 @@ end
function CustomPerson:adjustLPDB(lpdbData, args, personType)
local extradata = lpdbData.extradata or {}

local raceData = self:readFactions(args.race)
local raceData = self:readFactions(args.race or args.faction)

extradata.race = raceData.isAll and RACE_ALL_SHORT or raceData.factions[1]
extradata.faction = raceData.isAll and RACE_ALL or raceData.factions[1]
Expand Down
2 changes: 1 addition & 1 deletion lua/wikis/starcraft2/Infobox/Person/MapMaker/Custom.lua
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ function CustomInjector:parse(id, widgets)
return {
Cell{
name = 'Race',
children = {self.caller:getRaceData(args.race)}
children = {self.caller:getRaceData(args.race or args.faction)}
}
}
elseif id == 'role' then return {}
Expand Down
4 changes: 2 additions & 2 deletions lua/wikis/starcraft2/Infobox/Person/Player/Custom.lua
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ function CustomInjector:parse(id, widgets)
return {
Cell{
name = 'Race',
children = {caller:getRaceData(args.race, RACE_FIELD_AS_CATEGORY_LINK)}
children = {caller:getRaceData(args.race or args.faction, RACE_FIELD_AS_CATEGORY_LINK)}
}
}
elseif id == 'role' then return {}
Expand Down Expand Up @@ -455,7 +455,7 @@ end
---@param categories string[]
---@return string[]
function CustomPlayer:getWikiCategories(categories)
for _, faction in pairs(self:readFactions(self.args.race).factions) do
for _, faction in pairs(self:readFactions(self.args.race or self.args.faction).factions) do
table.insert(categories, faction .. ' Players')
end

Expand Down
Loading
Loading