diff --git a/lua/wikis/commons/Date/Ext.lua b/lua/wikis/commons/Date/Ext.lua index 6722419088d..1dc4d51434a 100644 --- a/lua/wikis/commons/Date/Ext.lua +++ b/lua/wikis/commons/Date/Ext.lua @@ -35,6 +35,8 @@ DateExt.defaultYear = '0000' DateExt.defaultTimezone = 'UTC' +local SECONDS_PER_DAY = 86400 + --- Parses a date string into a timestamp, returning the number of seconds since UNIX epoch. --- The timezone offset is incorporated into the timestamp, and the timezone is discarded. --- If the timezone is not specified, then the date is assumed to be in UTC. @@ -254,4 +256,12 @@ function DateExt.calculateAge(to, from) return age - 1 end +---@param days number +---@return number +---@nodiscard +function DateExt.daysToSeconds(days) + assert(days >= 0, 'Invalid number of days') + return days * SECONDS_PER_DAY +end + return DateExt diff --git a/lua/wikis/commons/MainPageLayout.lua b/lua/wikis/commons/MainPageLayout.lua index d2ec1155f86..c5203dc3d1d 100644 --- a/lua/wikis/commons/MainPageLayout.lua +++ b/lua/wikis/commons/MainPageLayout.lua @@ -9,17 +9,28 @@ local Lua = require('Module:Lua') local Arguments = Lua.import('Module:Arguments') local Array = Lua.import('Module:Array') +local Condition = Lua.import('Module:Condition') +local DateExt = Lua.import('Module:Date/Ext') local Count = Lua.import('Module:Count') local Image = Lua.import('Module:Image') +local Logic = Lua.import('Module:Logic') local Table = Lua.import('Module:Table') +local ConditionNode = Condition.Node +local ConditionTree = Condition.Tree +local BooleanOperator = Condition.BooleanOperator +local Comparator = Condition.Comparator +local ColumnName = Condition.ColumnName + local AnalyticsMapping = Lua.import('Module:MainPageLayout/AnalyticsMapping', {loadData = true}) local WikiData = Lua.import('Module:MainPageLayout/data') local GridWidgets = Lua.import('Module:Widget/Grid') local HtmlWidgets = Lua.import('Module:Widget/Html/All') +local InMemoryOf = Lua.import('Module:Widget/MainPage/InMemoryOf') local NavigationCard = Lua.import('Module:Widget/MainPage/NavigationCard') local PanelWidget = Lua.import('Module:Widget/Panel') local AnalyticsWidget = Lua.import('Module:Widget/Analytics') +local WidgetUtil = Lua.import('Module:Widget/Util') local MainPageLayout = {} @@ -41,7 +52,7 @@ function MainPageLayout.make(frame) return HtmlWidgets.Div{ classes = {'mainpage-v2'}, - children = { + children = WidgetUtil.collect( NO_TABLE_OF_CONTENTS, frame:callParserFunction('DISPLAYTITLE', WikiData.title), HtmlWidgets.Div{ @@ -63,6 +74,7 @@ function MainPageLayout.make(frame) frame:callParserFunction('#searchbox', ''), } }, + MainPageLayout._makeInMemoryOfDisplay(), AnalyticsWidget{ analyticsName = 'Quick navigation', children = { @@ -72,11 +84,30 @@ function MainPageLayout.make(frame) } } }, - MainPageLayout._makeCells(layout), - }, + MainPageLayout._makeCells(layout) + ), } end +---@return Widget[]? +function MainPageLayout._makeInMemoryOfDisplay() + local passedAwayPlayers = mw.ext.LiquipediaDB.lpdb('player', { + conditions = tostring(ConditionTree(BooleanOperator.all):add{ + ConditionNode(ColumnName('deathdate'), Comparator.neq, DateExt.defaultDate), + ConditionNode(ColumnName('deathdate'), Comparator.ge, DateExt.toYmdInUtc( + DateExt.getCurrentTimestamp() - DateExt.daysToSeconds(14) + )) + }), + query = 'pagename' + }) + if Logic.isEmpty(passedAwayPlayers) then + return + end + return Array.map(passedAwayPlayers, function (player) + return InMemoryOf{pageLink = player.pagename} + end) +end + ---@param body (string|Widget|Html|nil)|(string|Widget|Html|nil)[] ---@return (string|Widget|Html|nil)|(string|Widget|Html|nil)[] function MainPageLayout._processCellBody(body) diff --git a/lua/wikis/commons/MatchGroup/Input/Util.lua b/lua/wikis/commons/MatchGroup/Input/Util.lua index 678e3559f01..ed936fd0de1 100644 --- a/lua/wikis/commons/MatchGroup/Input/Util.lua +++ b/lua/wikis/commons/MatchGroup/Input/Util.lua @@ -96,7 +96,7 @@ MatchGroupInputUtil.WINNER_DRAW = 0 local ASSUME_FINISHED_AFTER = { EXACT = 30800, - ESTIMATE = 86400, + ESTIMATE = DateExt.daysToSeconds(1), } MatchGroupInputUtil.ASSUME_FINISHED_AFTER = ASSUME_FINISHED_AFTER diff --git a/lua/wikis/commons/NotabilityChecker.lua b/lua/wikis/commons/NotabilityChecker.lua index 8dfebd80c15..f2ed5e472ca 100644 --- a/lua/wikis/commons/NotabilityChecker.lua +++ b/lua/wikis/commons/NotabilityChecker.lua @@ -9,6 +9,7 @@ local Lua = require('Module:Lua') local Array = Lua.import('Module:Array') local Class = Lua.import('Module:Class') +local DateExt = Lua.import('Module:Date/Ext') local Config = Lua.import('Module:NotabilityChecker/config') local Info = Lua.import('Module:Info', {loadData = true}) local Logic = Lua.import('Module:Logic') @@ -19,7 +20,7 @@ local NotabilityChecker = {} local LANG = mw.getContentLanguage() local NOW = os.time() -local SECONDS_IN_YEAR = 365.2425 * 86400 +local SECONDS_IN_YEAR = DateExt.daysToSeconds(365.2425) local MAX_NUMBER_OF_PARTICIPANTS = Config.MAX_NUMBER_OF_PARTICIPANTS or Info.config.defaultMaxPlayersPerPlacement or 10 NotabilityChecker.LOGGING = true diff --git a/lua/wikis/commons/TournamentsSummaryTable.lua b/lua/wikis/commons/TournamentsSummaryTable.lua index 3bda6441f14..6e3d390dadd 100644 --- a/lua/wikis/commons/TournamentsSummaryTable.lua +++ b/lua/wikis/commons/TournamentsSummaryTable.lua @@ -31,8 +31,6 @@ local BooleanOperator = Condition.BooleanOperator local ColumnName = Condition.ColumnName local ConditionUtil = Condition.Util -local SECONDS_PER_DAY = 86400 - local _today = os.date('!%Y-%m-%d', os.time()) -- Default settings @@ -193,9 +191,9 @@ function TournamentsSummaryTable.dateConditions(type) local currentTime = os.time() local upcomingThreshold = os.date('!%Y-%m-%d', currentTime - + TournamentsSummaryTable.upcomingOffset * SECONDS_PER_DAY) + + DateExt.daysToSeconds(TournamentsSummaryTable.upcomingOffset)) local completedThreshold = os.date('!%Y-%m-%d', currentTime - - TournamentsSummaryTable.completedOffset * SECONDS_PER_DAY) + - DateExt.daysToSeconds(TournamentsSummaryTable.completedOffset)) if type == TournamentsSummaryTable.upcomingType then conditions:add{ diff --git a/lua/wikis/commons/TransferRow.lua b/lua/wikis/commons/TransferRow.lua index ad284ff497d..46d6f2cbb1d 100644 --- a/lua/wikis/commons/TransferRow.lua +++ b/lua/wikis/commons/TransferRow.lua @@ -9,6 +9,7 @@ local Lua = require('Module:Lua') local Array = Lua.import('Module:Array') local Class = Lua.import('Module:Class') +local DateExt = Lua.import('Module:Date/Ext') local Faction = Lua.import('Module:Faction') local Flags = Lua.import('Module:Flags') local FnUtil = Lua.import('Module:FnUtil') @@ -218,7 +219,7 @@ function TransferRow._shiftDate(dateInput) local year, month, day = dateInput:match('(%d+)-(%d+)-(%d+)') local date = os.time{day=day, month=month, year=year} - date = date - 86400 + date = date - DateExt.daysToSeconds(1) return os.date( "%Y-%m-%d", date) --[[@as string]] end diff --git a/lua/wikis/commons/Widget/Infobox/UpcomingTournaments.lua b/lua/wikis/commons/Widget/Infobox/UpcomingTournaments.lua index 23c3fd8c3af..75233005ac2 100644 --- a/lua/wikis/commons/Widget/Infobox/UpcomingTournaments.lua +++ b/lua/wikis/commons/Widget/Infobox/UpcomingTournaments.lua @@ -52,7 +52,9 @@ end function UpcomingTournamentsWidget:_getTournaments() local conditions = ConditionTree(BooleanOperator.all) :add(self.props.opponentConditions) - :add(ConditionNode(ColumnName('date'), Comparator.gt, DateExt.getCurrentTimestamp() - 86400)) + :add(ConditionNode( + ColumnName('date'), Comparator.gt, DateExt.getCurrentTimestamp() - DateExt.daysToSeconds(1) + )) :add(ConditionNode(ColumnName('placement'), Comparator.eq, '')) local placements = mw.ext.LiquipediaDB.lpdb('placement', {