diff --git a/lua/wikis/commons/Widget/TranslationNeededList.lua b/lua/wikis/commons/Widget/TranslationNeededList.lua new file mode 100644 index 00000000000..2365b74ee1c --- /dev/null +++ b/lua/wikis/commons/Widget/TranslationNeededList.lua @@ -0,0 +1,54 @@ +--- +-- @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 MathUtil = Lua.import('Module:MathUtil') + +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) +TranslationNeededList.defaultProps = { + limit = 3, +} + +---@return Widget[] +function TranslationNeededList:render() + local limit = assert(MathUtil.toInteger(self.props.limit), "Limit must be a number") + + 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