From 50728104a593e1ffe4586ee9ef3423014ac7baed Mon Sep 17 00:00:00 2001 From: Vladimir <48841210+LemurVladimir@users.noreply.github.com> Date: Sat, 14 Mar 2026 00:23:41 +0300 Subject: [PATCH 1/8] [feat] Listing articles in need of translation --- lua/wikis/commons/Widget/TranslationList.lua | 52 ++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 lua/wikis/commons/Widget/TranslationList.lua diff --git a/lua/wikis/commons/Widget/TranslationList.lua b/lua/wikis/commons/Widget/TranslationList.lua new file mode 100644 index 00000000000..52ddb167817 --- /dev/null +++ b/lua/wikis/commons/Widget/TranslationList.lua @@ -0,0 +1,52 @@ +--- +-- @Liquipedia +-- page=Module:Widget/TranslationList +-- +-- Please see https://github.com/Liquipedia/Lua-Modules to contribute +-- + +local Lua = require('Module:Lua') + +local Array = Lua.import('Module:Array') +local Class = Lua.import('Module:Class') +local Variables = Lua.import('Module:Variables') + +local Link = Lua.import('Module:Widget/Basic/Link') +local HtmlWidget = Lua.import('Module:Widget/Html/All') +local Widget = Lua.import('Module:Widget') + +---@class TranslationList: Widget +---@operator call(table): TranslationList +local TranslationList = Class.new(Widget) + +local DEFAULT_LIMIT = 3 + +---@return Widget[] +function TranslationList:render() + -- can not use defaultProps due to casting to number + local limit = tonumber(self.props.limit) or DEFAULT_LIMIT + + local translations = TranslationList._getTranslations() + Variables.varDefine('total_number_of_translations', #translations) + + translations = Array.sub(Array.randomize(translations), 1, limit) + + return HtmlWidget.Ul{children = Array.map(translations, function(translation) + return HtmlWidget.Li{ + children = { + Link{link = translation.pagename, children = {translation.name}}, + } + } + end)} +end + +---Fetches "Translations" datapoints +---@return table +function TranslationList._getTranslations() + return mw.ext.LiquipediaDB.lpdb('datapoint', { + limit = 5000, + conditions = '[[type::trans]]' + }) +end + +return TranslationList From 12ea9776437e1b32bd31e19ebfa827e6349fb553 Mon Sep 17 00:00:00 2001 From: Vladimir <48841210+LemurVladimir@users.noreply.github.com> Date: Sat, 14 Mar 2026 07:49:29 +0300 Subject: [PATCH 2/8] Change condition type from 'trans' to 'translation' --- lua/wikis/commons/Widget/TranslationList.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/wikis/commons/Widget/TranslationList.lua b/lua/wikis/commons/Widget/TranslationList.lua index 52ddb167817..b8a9ba37a52 100644 --- a/lua/wikis/commons/Widget/TranslationList.lua +++ b/lua/wikis/commons/Widget/TranslationList.lua @@ -45,7 +45,7 @@ end function TranslationList._getTranslations() return mw.ext.LiquipediaDB.lpdb('datapoint', { limit = 5000, - conditions = '[[type::trans]]' + conditions = '[[type::translation]]' }) end From 69ba257a0b7f51ac977596faed9d89d5cdd79e69 Mon Sep 17 00:00:00 2001 From: Vladimir <48841210+LemurVladimir@users.noreply.github.com> Date: Sat, 14 Mar 2026 10:01:14 +0300 Subject: [PATCH 3/8] Add TranslationNeededList.lua as a substitution to TranslationList.lua --- .../commons/Widget/TranslationNeededList.lua | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 lua/wikis/commons/Widget/TranslationNeededList.lua diff --git a/lua/wikis/commons/Widget/TranslationNeededList.lua b/lua/wikis/commons/Widget/TranslationNeededList.lua new file mode 100644 index 00000000000..898dd5f1908 --- /dev/null +++ b/lua/wikis/commons/Widget/TranslationNeededList.lua @@ -0,0 +1,53 @@ +--- +-- @Liquipedia +-- page=Module:Widget/TranslationNeededList +-- +-- Please see https://github.com/Liquipedia/Lua-Modules to contribute +-- + +local Lua = require('Module:Lua') + +local Array = Lua.import('Module:Array') +local Class = Lua.import('Module:Class') +local Variables = Lua.import('Module:Variables') + +local Link = Lua.import('Module:Widget/Basic/Link') +local HtmlWidget = Lua.import('Module:Widget/Html/All') +local Widget = Lua.import('Module:Widget') + +---@class TranslationNeededList: Widget +---@operator call(table): TranslationNeededList +local TranslationNeededList = Class.new(Widget) + +local DEFAULT_LIMIT = 3 + +---@return Widget[] +function TranslationNeededList:render() + -- can not use defaultProps due to casting to number + local limit = tonumber(self.props.limit) or DEFAULT_LIMIT + + local translations = TranslationNeededList._getTranslations() + Variables.varDefine('total_number_of_translations', #translations) + + translations = Array.sub(Array.randomize(translations), 1, limit) + + return HtmlWidget.Ul{children = Array.map(translations, function(translation) + return HtmlWidget.Li{ + children = { + Link{link = translation.pagename, children = {translation.name}}, + } + } + end)} +end + +---Fetches "Translations" datapoints +---@private +---@return datapoint[] +function TranslationNeededList._getTranslations() + return mw.ext.LiquipediaDB.lpdb('datapoint', { + limit = 5000, + conditions = '[[type::translation]]' + }) +end + +return TranslationNeededList From c261d60d24c78a71d636dd943568eebc3127fd37 Mon Sep 17 00:00:00 2001 From: Vladimir <48841210+LemurVladimir@users.noreply.github.com> Date: Sat, 14 Mar 2026 10:01:34 +0300 Subject: [PATCH 4/8] Delete TranslationList.lua as deprecated --- lua/wikis/commons/Widget/TranslationList.lua | 52 -------------------- 1 file changed, 52 deletions(-) delete mode 100644 lua/wikis/commons/Widget/TranslationList.lua diff --git a/lua/wikis/commons/Widget/TranslationList.lua b/lua/wikis/commons/Widget/TranslationList.lua deleted file mode 100644 index b8a9ba37a52..00000000000 --- a/lua/wikis/commons/Widget/TranslationList.lua +++ /dev/null @@ -1,52 +0,0 @@ ---- --- @Liquipedia --- page=Module:Widget/TranslationList --- --- Please see https://github.com/Liquipedia/Lua-Modules to contribute --- - -local Lua = require('Module:Lua') - -local Array = Lua.import('Module:Array') -local Class = Lua.import('Module:Class') -local Variables = Lua.import('Module:Variables') - -local Link = Lua.import('Module:Widget/Basic/Link') -local HtmlWidget = Lua.import('Module:Widget/Html/All') -local Widget = Lua.import('Module:Widget') - ----@class TranslationList: Widget ----@operator call(table): TranslationList -local TranslationList = Class.new(Widget) - -local DEFAULT_LIMIT = 3 - ----@return Widget[] -function TranslationList:render() - -- can not use defaultProps due to casting to number - local limit = tonumber(self.props.limit) or DEFAULT_LIMIT - - local translations = TranslationList._getTranslations() - Variables.varDefine('total_number_of_translations', #translations) - - translations = Array.sub(Array.randomize(translations), 1, limit) - - return HtmlWidget.Ul{children = Array.map(translations, function(translation) - return HtmlWidget.Li{ - children = { - Link{link = translation.pagename, children = {translation.name}}, - } - } - end)} -end - ----Fetches "Translations" datapoints ----@return table -function TranslationList._getTranslations() - return mw.ext.LiquipediaDB.lpdb('datapoint', { - limit = 5000, - conditions = '[[type::translation]]' - }) -end - -return TranslationList From 56150d57f4513350b84b5472789e0253e4a0be42 Mon Sep 17 00:00:00 2001 From: Vladimir <48841210+LemurVladimir@users.noreply.github.com> Date: Wed, 18 Mar 2026 19:28:08 +0300 Subject: [PATCH 5/8] Add assertion to ensure limit is a number --- lua/wikis/commons/Widget/TranslationNeededList.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/lua/wikis/commons/Widget/TranslationNeededList.lua b/lua/wikis/commons/Widget/TranslationNeededList.lua index 898dd5f1908..f00404b6302 100644 --- a/lua/wikis/commons/Widget/TranslationNeededList.lua +++ b/lua/wikis/commons/Widget/TranslationNeededList.lua @@ -25,6 +25,7 @@ local DEFAULT_LIMIT = 3 function TranslationNeededList:render() -- can not use defaultProps due to casting to number local limit = tonumber(self.props.limit) or DEFAULT_LIMIT + assert(limit, "Limit must be a number") local translations = TranslationNeededList._getTranslations() Variables.varDefine('total_number_of_translations', #translations) From 5813caaf095d0db7465763e3464bc11632c0c3eb Mon Sep 17 00:00:00 2001 From: Vladimir <48841210+LemurVladimir@users.noreply.github.com> Date: Thu, 19 Mar 2026 17:40:08 +0300 Subject: [PATCH 6/8] Rework limit definition per suggestions. Co-authored-by: hjpalpha <75081997+hjpalpha@users.noreply.github.com> --- lua/wikis/commons/Widget/TranslationNeededList.lua | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/lua/wikis/commons/Widget/TranslationNeededList.lua b/lua/wikis/commons/Widget/TranslationNeededList.lua index f00404b6302..ede24090fef 100644 --- a/lua/wikis/commons/Widget/TranslationNeededList.lua +++ b/lua/wikis/commons/Widget/TranslationNeededList.lua @@ -18,14 +18,13 @@ local Widget = Lua.import('Module:Widget') ---@class TranslationNeededList: Widget ---@operator call(table): TranslationNeededList local TranslationNeededList = Class.new(Widget) - -local DEFAULT_LIMIT = 3 +TranslationNeededList.defaultProps = { + limit = 3, +} ---@return Widget[] function TranslationNeededList:render() - -- can not use defaultProps due to casting to number - local limit = tonumber(self.props.limit) or DEFAULT_LIMIT - assert(limit, "Limit must be a number") + local limit = assert(MathUtil.toInteger(limit), "Limit must be a number") local translations = TranslationNeededList._getTranslations() Variables.varDefine('total_number_of_translations', #translations) From 5ba5a47b056949eb47d711b218748308351918f7 Mon Sep 17 00:00:00 2001 From: Vladimir <48841210+LemurVladimir@users.noreply.github.com> Date: Thu, 19 Mar 2026 17:44:09 +0300 Subject: [PATCH 7/8] Add MathUtil import to definitions --- lua/wikis/commons/Widget/TranslationNeededList.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/lua/wikis/commons/Widget/TranslationNeededList.lua b/lua/wikis/commons/Widget/TranslationNeededList.lua index ede24090fef..e6e751b5e84 100644 --- a/lua/wikis/commons/Widget/TranslationNeededList.lua +++ b/lua/wikis/commons/Widget/TranslationNeededList.lua @@ -10,6 +10,7 @@ local Lua = require('Module:Lua') local Array = Lua.import('Module:Array') local Class = Lua.import('Module:Class') local Variables = Lua.import('Module:Variables') +local MathUtil = Lua.import('Module:MathUtil') local Link = Lua.import('Module:Widget/Basic/Link') local HtmlWidget = Lua.import('Module:Widget/Html/All') From 4a0d105507e4fb5be46eca425325822ac1652262 Mon Sep 17 00:00:00 2001 From: Vladimir <48841210+LemurVladimir@users.noreply.github.com> Date: Thu, 19 Mar 2026 17:47:41 +0300 Subject: [PATCH 8/8] Fix limit assertion to use self.props.limit --- lua/wikis/commons/Widget/TranslationNeededList.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/wikis/commons/Widget/TranslationNeededList.lua b/lua/wikis/commons/Widget/TranslationNeededList.lua index e6e751b5e84..2365b74ee1c 100644 --- a/lua/wikis/commons/Widget/TranslationNeededList.lua +++ b/lua/wikis/commons/Widget/TranslationNeededList.lua @@ -25,7 +25,7 @@ TranslationNeededList.defaultProps = { ---@return Widget[] function TranslationNeededList:render() - local limit = assert(MathUtil.toInteger(limit), "Limit must be a number") + local limit = assert(MathUtil.toInteger(self.props.limit), "Limit must be a number") local translations = TranslationNeededList._getTranslations() Variables.varDefine('total_number_of_translations', #translations)