From 6f701f493600490c4a7b35f0d37701bd55ef103e Mon Sep 17 00:00:00 2001 From: ElectricalBoy <15651807+ElectricalBoy@users.noreply.github.com> Date: Mon, 1 Jun 2026 10:31:00 +0900 Subject: [PATCH 1/4] filter button to widget3 --- .../commons/Widget/FilterButtons/Button.lua | 33 +++++++++---------- 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/lua/wikis/commons/Widget/FilterButtons/Button.lua b/lua/wikis/commons/Widget/FilterButtons/Button.lua index df1aea238cd..a0a2660958f 100644 --- a/lua/wikis/commons/Widget/FilterButtons/Button.lua +++ b/lua/wikis/commons/Widget/FilterButtons/Button.lua @@ -8,35 +8,32 @@ local Lua = require('Module:Lua') local Array = Lua.import('Module:Array') -local Class = Lua.import('Module:Class') local Logic = Lua.import('Module:Logic') -local Widget = Lua.import('Module:Widget') -local HtmlWidgets = Lua.import('Module:Widget/Html/All') +local Component = Lua.import('Module:Widget/Component') +local Html = Lua.import('Module:Widget/Html') + +---@alias FilterButton VNode ---@class FilterButtonParameters ---@field buttonClasses string[]? ---@field css table? ---@field active boolean? ---@field value string? ----@field display Renderable - ----@class FilterButton: Widget ----@operator call(table): FilterButton ----@field props FilterButtonParameters -local FilterButton = Class.new(Widget) +---@field display Renderable|Renderable[]? ----@return Widget -function FilterButton:render() - return HtmlWidgets.Span{ +---@param props FilterButtonParameters +---@return VNode +local function FilterButton(props) + return Html.Span{ classes = Array.extend({ 'filter-button', - Logic.readBool(self.props.active) and 'filter-button--active' or nil - }, self.props.buttonClasses), - attributes = { ['data-filter-on'] = self.props.value }, - css = self.props.css, - children = { self.props.display } + Logic.readBool(props.active) and 'filter-button--active' or nil + }, props.buttonClasses), + attributes = { ['data-filter-on'] = props.value }, + css = props.css, + children = props.display } end -return FilterButton +return Component.component(FilterButton) From e92a62e27b9b163a672e38226582bcba70b530ce Mon Sep 17 00:00:00 2001 From: ElectricalBoy <15651807+ElectricalBoy@users.noreply.github.com> Date: Mon, 1 Jun 2026 10:35:01 +0900 Subject: [PATCH 2/4] button row to widget3 --- .../Widget/FilterButtons/ButtonRow.lua | 33 ++++++++----------- 1 file changed, 14 insertions(+), 19 deletions(-) diff --git a/lua/wikis/commons/Widget/FilterButtons/ButtonRow.lua b/lua/wikis/commons/Widget/FilterButtons/ButtonRow.lua index 10600c6a301..2f384eabb8d 100644 --- a/lua/wikis/commons/Widget/FilterButtons/ButtonRow.lua +++ b/lua/wikis/commons/Widget/FilterButtons/ButtonRow.lua @@ -7,13 +7,12 @@ local Lua = require('Module:Lua') -local Class = Lua.import('Module:Class') local I18n = Lua.import('Module:I18n') local String = Lua.import('Module:StringUtils') -local Widget = Lua.import('Module:Widget') +local Component = Lua.import('Module:Widget/Component') local FilterButton = Lua.import('Module:Widget/FilterButtons/Button') -local HtmlWidgets = Lua.import('Module:Widget/Html/All') +local Html = Lua.import('Module:Widget/Html') local IconFa = Lua.import('Module:Widget/Image/Icon/Fontawesome') local WidgetUtil = Lua.import('Module:Widget/Util') @@ -26,20 +25,16 @@ local WidgetUtil = Lua.import('Module:Widget/Util') local CLASS_NAME = 'filter-buttons' ----@class FilterButtonRow: Widget ----@operator call(table): FilterButtonRow ----@field props FilterButtonRowParameters -local FilterButtonRow = Class.new(Widget) - ----@return Widget -function FilterButtonRow:render() - return HtmlWidgets.Div{ +---@param props FilterButtonRowParameters +---@return VNode +local function FilterButtonRow(props) + return Html.Div{ classes = {CLASS_NAME}, attributes = { ['data-filter'] = 'data-filter', ['data-filter-effect'] = 'fade', - ['data-filter-group'] = 'filterbuttons-' .. self.props.categoryName, - ['data-filter-default-curated'] = self.props.featuredByDefault and 'true' or nil, + ['data-filter-group'] = 'filterbuttons-' .. props.categoryName, + ['data-filter-default-curated'] = props.featuredByDefault and 'true' or nil, }, children = WidgetUtil.collect( FilterButton{ @@ -47,22 +42,22 @@ function FilterButtonRow:render() value = 'all', display = I18n.translate('filterbuttons-all') }, - self.props.hasFeatured and FilterButton{ + props.hasFeatured and FilterButton{ value = 'curated', display = I18n.translate('filterbuttons-featured') }, - self.props.buttons, - String.isNotEmpty(self.props.expandKey) and HtmlWidgets.Div{ + props.buttons, + String.isNotEmpty(props.expandKey) and Html.Div{ classes = {CLASS_NAME}, attributes = { ['data-filter'] = 'data-filter', ['data-filter-effect'] ='fade', - ['data-filter-group'] = 'tournaments-list-dropdown-' .. self.props.expandKey + ['data-filter-group'] = 'tournaments-list-dropdown-' .. props.expandKey }, children = { FilterButton{ buttonClasses = { 'filter-button-dropdown' }, - value = 'dropdown-' .. self.props.expandKey, + value = 'dropdown-' .. props.expandKey, display = IconFa{iconName = 'expand'} }, FilterButton{ @@ -75,4 +70,4 @@ function FilterButtonRow:render() } end -return FilterButtonRow +return Component.component(FilterButtonRow) From cce858bb6b3fc5ef289e19a59478f426151fafd4 Mon Sep 17 00:00:00 2001 From: ElectricalBoy <15651807+ElectricalBoy@users.noreply.github.com> Date: Mon, 1 Jun 2026 10:37:44 +0900 Subject: [PATCH 3/4] buttons container to widget3 --- lua/wikis/commons/Widget/FilterButtons.lua | 23 ++++++++++------------ 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/lua/wikis/commons/Widget/FilterButtons.lua b/lua/wikis/commons/Widget/FilterButtons.lua index 5fc30db5e34..d333496d4d2 100644 --- a/lua/wikis/commons/Widget/FilterButtons.lua +++ b/lua/wikis/commons/Widget/FilterButtons.lua @@ -8,21 +8,18 @@ local Lua = require('Module:Lua') local Array = Lua.import('Module:Array') -local Class = Lua.import('Module:Class') local FnUtil = Lua.import('Module:FnUtil') local Logic = Lua.import('Module:Logic') local Variables = Lua.import('Module:Variables') local Table = Lua.import('Module:Table') -local HtmlWidgets = Lua.import('Module:Widget/Html/All') -local Div = HtmlWidgets.Div +local Component = Lua.import('Module:Widget/Component') +local Html = Lua.import('Module:Widget/Html') +local Div = Html.Div local FilterButton = Lua.import('Module:Widget/FilterButtons/Button') local FilterButtonRow = Lua.import('Module:Widget/FilterButtons/ButtonRow') -local Widget = Lua.import('Module:Widget') ----@class FilterButtons: Widget ----@operator call(table): FilterButtons -local FilterButtons = Class.new(Widget) +local FilterButtons = {} ---@class FilterButtonCategory ---@field name string @@ -32,7 +29,7 @@ local FilterButtons = Class.new(Widget) ---@field defaultItem string? ---@field itemToPropertyValues? fun(item: string): string? ---@field itemIsValid? fun(item: string): boolean ----@field transform? fun(item: string): string|Widget|Html|nil +---@field transform? fun(item: string): Renderable? ---@field expandKey string? ---@field expandable boolean? ---@field order? fun(a: string, b: string): boolean @@ -40,10 +37,10 @@ local FilterButtons = Class.new(Widget) ---@field hasFeatured boolean? ---@field featuredByDefault boolean? +---@param props {categories: FilterButtonCategory[]?} ---@return Widget -function FilterButtons:render() - ---@type FilterButtonCategory[] - local categories = self.props.categories or Lua.import('Module:FilterButtons/Config').categories +function FilterButtons.render(props) + local categories = props.categories or Lua.import('Module:FilterButtons/Config').categories Array.forEach(categories, FilterButtons._loadCategories) @@ -86,7 +83,7 @@ function FilterButtons._makeButton(category, value, text) end ---@param category FilterButtonCategory ----@return Widget +---@return VNode function FilterButtons.getButtonRow(category) local transformValueToText = category.transform or FnUtil.identity local itemToPropertyValues = category.itemToPropertyValues or FnUtil.identity @@ -118,4 +115,4 @@ function FilterButtons.getButtonRow(category) return buttons end -return FilterButtons +return Component.component(FilterButtons.render) From 1cf0b90e675abf86fd4aebfcd482d497e7676cef Mon Sep 17 00:00:00 2001 From: ElectricalBoy <15651807+ElectricalBoy@users.noreply.github.com> Date: Mon, 1 Jun 2026 10:38:57 +0900 Subject: [PATCH 4/4] annotations --- lua/wikis/commons/Widget/FilterButtons.lua | 5 ++++- lua/wikis/commons/Widget/FilterButtons/ButtonRow.lua | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/lua/wikis/commons/Widget/FilterButtons.lua b/lua/wikis/commons/Widget/FilterButtons.lua index d333496d4d2..cc3fcd802f1 100644 --- a/lua/wikis/commons/Widget/FilterButtons.lua +++ b/lua/wikis/commons/Widget/FilterButtons.lua @@ -67,7 +67,10 @@ function FilterButtons._loadCategories(category) end local itemToPropertyValues = category.itemToPropertyValues or FnUtil.identity - category.defaultItems = Array.map(Logic.emptyOr(category.defaultItems, category.items), itemToPropertyValues) + category.defaultItems = Array.map( + Logic.emptyOr(category.defaultItems, category.items) --[[ @as string[] ]], + itemToPropertyValues + ) end ---@param category FilterButtonCategory diff --git a/lua/wikis/commons/Widget/FilterButtons/ButtonRow.lua b/lua/wikis/commons/Widget/FilterButtons/ButtonRow.lua index 2f384eabb8d..c6bb881280a 100644 --- a/lua/wikis/commons/Widget/FilterButtons/ButtonRow.lua +++ b/lua/wikis/commons/Widget/FilterButtons/ButtonRow.lua @@ -18,7 +18,7 @@ local WidgetUtil = Lua.import('Module:Widget/Util') ---@class FilterButtonRowParameters ---@field categoryName string ----@field buttons (FilterButton?)[] +---@field buttons FilterButton[] ---@field expandKey string? ---@field featuredByDefault boolean? ---@field hasFeatured boolean?