From 859ae41bafc74fb637884cc385c1b92ecf996afe Mon Sep 17 00:00:00 2001 From: ElectricalBoy <15651807+ElectricalBoy@users.noreply.github.com> Date: Fri, 2 Jan 2026 15:23:32 +0900 Subject: [PATCH 1/9] add DateExt.daysToSeconds --- lua/wikis/commons/Date/Ext.lua | 10 ++++++++++ 1 file changed, 10 insertions(+) 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 From e0b9b34074795d09cda20fb0e9032e1ebd168d57 Mon Sep 17 00:00:00 2001 From: ElectricalBoy <15651807+ElectricalBoy@users.noreply.github.com> Date: Fri, 2 Jan 2026 15:27:33 +0900 Subject: [PATCH 2/9] replace hardcoded 86400s with daysToSeconds --- lua/wikis/commons/MatchGroup/Input/Util.lua | 2 +- lua/wikis/commons/NotabilityChecker.lua | 3 ++- lua/wikis/commons/TournamentsSummaryTable.lua | 2 +- lua/wikis/commons/TransferRow.lua | 3 ++- lua/wikis/commons/Widget/Infobox/UpcomingTournaments.lua | 4 +++- 5 files changed, 9 insertions(+), 5 deletions(-) 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..978bb52d009 100644 --- a/lua/wikis/commons/TournamentsSummaryTable.lua +++ b/lua/wikis/commons/TournamentsSummaryTable.lua @@ -31,7 +31,7 @@ local BooleanOperator = Condition.BooleanOperator local ColumnName = Condition.ColumnName local ConditionUtil = Condition.Util -local SECONDS_PER_DAY = 86400 +local SECONDS_PER_DAY = DateExt.daysToSeconds(1) local _today = os.date('!%Y-%m-%d', os.time()) 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', { From 0c32a7181f9b811b7deccd2242018ccc0c052ea2 Mon Sep 17 00:00:00 2001 From: ElectricalBoy <15651807+ElectricalBoy@users.noreply.github.com> Date: Fri, 2 Jan 2026 15:28:53 +0900 Subject: [PATCH 3/9] kick redundant constant --- lua/wikis/commons/TournamentsSummaryTable.lua | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/lua/wikis/commons/TournamentsSummaryTable.lua b/lua/wikis/commons/TournamentsSummaryTable.lua index 978bb52d009..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 = DateExt.daysToSeconds(1) - 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{ From 1619c713fe1d1fea1b5441d5855f60a685a7aa7f Mon Sep 17 00:00:00 2001 From: ElectricalBoy <15651807+ElectricalBoy@users.noreply.github.com> Date: Fri, 2 Jan 2026 11:05:58 +0900 Subject: [PATCH 4/9] use WidgetUtil.collect --- lua/wikis/commons/MainPageLayout.lua | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lua/wikis/commons/MainPageLayout.lua b/lua/wikis/commons/MainPageLayout.lua index d2ec1155f86..366c7976892 100644 --- a/lua/wikis/commons/MainPageLayout.lua +++ b/lua/wikis/commons/MainPageLayout.lua @@ -20,6 +20,7 @@ local HtmlWidgets = Lua.import('Module:Widget/Html/All') 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 +42,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{ @@ -72,8 +73,8 @@ function MainPageLayout.make(frame) } } }, - MainPageLayout._makeCells(layout), - }, + MainPageLayout._makeCells(layout) + ), } end From 0a79b154352d5eaa571655ba8a6ce191abc8db66 Mon Sep 17 00:00:00 2001 From: ElectricalBoy <15651807+ElectricalBoy@users.noreply.github.com> Date: Fri, 2 Jan 2026 11:14:55 +0900 Subject: [PATCH 5/9] automate in memory of --- lua/wikis/commons/MainPageLayout.lua | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/lua/wikis/commons/MainPageLayout.lua b/lua/wikis/commons/MainPageLayout.lua index 366c7976892..ec82dbe6584 100644 --- a/lua/wikis/commons/MainPageLayout.lua +++ b/lua/wikis/commons/MainPageLayout.lua @@ -9,14 +9,22 @@ 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 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') @@ -73,11 +81,28 @@ function MainPageLayout.make(frame) } } }, + MainPageLayout._makeInMemoryOfDisplay(), MainPageLayout._makeCells(layout) ), } end +---@return Widget[]? +function MainPageLayout._makeInMemoryOfDisplay() + local passedAwayPlayers = mw.ext.LiquipediaDB.lpdb('player', { + conditions = tostring( + ConditionNode(ColumnName('deathdate'), Comparator.ge, DateExt.getCurrentTimestamp - 1209600 --[[2 weeks]]) + ), + 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) From d4c8d349e8e5be295e4369745a233bd45e57f4f1 Mon Sep 17 00:00:00 2001 From: ElectricalBoy <15651807+ElectricalBoy@users.noreply.github.com> Date: Fri, 2 Jan 2026 11:16:07 +0900 Subject: [PATCH 6/9] oops --- lua/wikis/commons/MainPageLayout.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/wikis/commons/MainPageLayout.lua b/lua/wikis/commons/MainPageLayout.lua index ec82dbe6584..09a516a6cf1 100644 --- a/lua/wikis/commons/MainPageLayout.lua +++ b/lua/wikis/commons/MainPageLayout.lua @@ -91,7 +91,7 @@ end function MainPageLayout._makeInMemoryOfDisplay() local passedAwayPlayers = mw.ext.LiquipediaDB.lpdb('player', { conditions = tostring( - ConditionNode(ColumnName('deathdate'), Comparator.ge, DateExt.getCurrentTimestamp - 1209600 --[[2 weeks]]) + ConditionNode(ColumnName('deathdate'), Comparator.ge, DateExt.getCurrentTimestamp() - 1209600 --[[2 weeks]]) ), query = 'pagename' }) From 931f2014f5ecfd82fe5e3f3989eb21ab8a6fb92f Mon Sep 17 00:00:00 2001 From: ElectricalBoy <15651807+ElectricalBoy@users.noreply.github.com> Date: Fri, 2 Jan 2026 11:45:27 +0900 Subject: [PATCH 7/9] adjust lpdb query condition --- lua/wikis/commons/MainPageLayout.lua | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/lua/wikis/commons/MainPageLayout.lua b/lua/wikis/commons/MainPageLayout.lua index 09a516a6cf1..ba62560fc65 100644 --- a/lua/wikis/commons/MainPageLayout.lua +++ b/lua/wikis/commons/MainPageLayout.lua @@ -17,6 +17,8 @@ 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 @@ -90,9 +92,12 @@ end ---@return Widget[]? function MainPageLayout._makeInMemoryOfDisplay() local passedAwayPlayers = mw.ext.LiquipediaDB.lpdb('player', { - conditions = tostring( - ConditionNode(ColumnName('deathdate'), Comparator.ge, DateExt.getCurrentTimestamp() - 1209600 --[[2 weeks]]) - ), + conditions = tostring(ConditionTree(BooleanOperator.all):add{ + ConditionNode(ColumnName('deathdate'), Comparator.neq, DateExt.defaultDate), + ConditionNode(ColumnName('deathdate'), Comparator.ge, DateExt.toYmdInUtc( + DateExt.getCurrentTimestamp() - 1209600 --[[2 weeks]] + )) + }), query = 'pagename' }) if Logic.isEmpty(passedAwayPlayers) then From cde6985d5522d08b18db5571856c296b23dae4d0 Mon Sep 17 00:00:00 2001 From: ElectricalBoy <15651807+ElectricalBoy@users.noreply.github.com> Date: Fri, 2 Jan 2026 11:45:46 +0900 Subject: [PATCH 8/9] move position --- lua/wikis/commons/MainPageLayout.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/wikis/commons/MainPageLayout.lua b/lua/wikis/commons/MainPageLayout.lua index ba62560fc65..7dd90650272 100644 --- a/lua/wikis/commons/MainPageLayout.lua +++ b/lua/wikis/commons/MainPageLayout.lua @@ -74,6 +74,7 @@ function MainPageLayout.make(frame) frame:callParserFunction('#searchbox', ''), } }, + MainPageLayout._makeInMemoryOfDisplay(), AnalyticsWidget{ analyticsName = 'Quick navigation', children = { @@ -83,7 +84,6 @@ function MainPageLayout.make(frame) } } }, - MainPageLayout._makeInMemoryOfDisplay(), MainPageLayout._makeCells(layout) ), } From c8811abd4c7e630406fe26bc3a02d96a53baf7d2 Mon Sep 17 00:00:00 2001 From: ElectricalBoy <15651807+ElectricalBoy@users.noreply.github.com> Date: Fri, 2 Jan 2026 15:32:35 +0900 Subject: [PATCH 9/9] kick magic number --- lua/wikis/commons/MainPageLayout.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/wikis/commons/MainPageLayout.lua b/lua/wikis/commons/MainPageLayout.lua index 7dd90650272..c5203dc3d1d 100644 --- a/lua/wikis/commons/MainPageLayout.lua +++ b/lua/wikis/commons/MainPageLayout.lua @@ -95,7 +95,7 @@ function MainPageLayout._makeInMemoryOfDisplay() conditions = tostring(ConditionTree(BooleanOperator.all):add{ ConditionNode(ColumnName('deathdate'), Comparator.neq, DateExt.defaultDate), ConditionNode(ColumnName('deathdate'), Comparator.ge, DateExt.toYmdInUtc( - DateExt.getCurrentTimestamp() - 1209600 --[[2 weeks]] + DateExt.getCurrentTimestamp() - DateExt.daysToSeconds(14) )) }), query = 'pagename'