From 1436d62041543af47f53d44624d7f8f2f5aa89e4 Mon Sep 17 00:00:00 2001 From: ElectricalBoy <15651807+ElectricalBoy@users.noreply.github.com> Date: Wed, 17 Jun 2026 09:59:17 +0900 Subject: [PATCH 1/4] change load order --- lua/wikis/commons/Widget/Factory.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lua/wikis/commons/Widget/Factory.lua b/lua/wikis/commons/Widget/Factory.lua index dc2946fc8ce..5ab4874b296 100644 --- a/lua/wikis/commons/Widget/Factory.lua +++ b/lua/wikis/commons/Widget/Factory.lua @@ -15,10 +15,10 @@ local WidgetFactory = {} ---@param args {widget: string, children: Renderable|Renderable[], [any]:any} ---@return Widget function WidgetFactory.fromTemplate(args) + local widgetClass = Table.extract(args, 'widget') + local WidgetClass = Lua.import('Module:Widget/' .. widgetClass) local copiedArgs = Table.copy(args) - local widgetClass = Table.extract(copiedArgs, 'widget') copiedArgs.children = type(copiedArgs.children) == 'table' and copiedArgs.children or {copiedArgs.children} - local WidgetClass = Lua.import('Module:Widget/' .. widgetClass) return WidgetClass(copiedArgs) end From 4a6407e476fa770a56901138e506d381bf9498a7 Mon Sep 17 00:00:00 2001 From: ElectricalBoy <15651807+ElectricalBoy@users.noreply.github.com> Date: Wed, 17 Jun 2026 10:00:49 +0900 Subject: [PATCH 2/4] do input integrity check earlier --- lua/wikis/commons/Widget/Factory.lua | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lua/wikis/commons/Widget/Factory.lua b/lua/wikis/commons/Widget/Factory.lua index 5ab4874b296..bde1fac57dd 100644 --- a/lua/wikis/commons/Widget/Factory.lua +++ b/lua/wikis/commons/Widget/Factory.lua @@ -8,6 +8,7 @@ local Lua = require('Module:Lua') local Class = Lua.import('Module:Class') +local String = Lua.import('Module:StringUtils') local Table = Lua.import('Module:Table') local WidgetFactory = {} @@ -16,6 +17,7 @@ local WidgetFactory = {} ---@return Widget function WidgetFactory.fromTemplate(args) local widgetClass = Table.extract(args, 'widget') + assert(String.isNotEmpty(widgetClass), 'WidgetFactory: widget must be specified') local WidgetClass = Lua.import('Module:Widget/' .. widgetClass) local copiedArgs = Table.copy(args) copiedArgs.children = type(copiedArgs.children) == 'table' and copiedArgs.children or {copiedArgs.children} From 11176d18833b0124b02517eb0bf6ed64c11af385 Mon Sep 17 00:00:00 2001 From: ElectricalBoy <15651807+ElectricalBoy@users.noreply.github.com> Date: Wed, 17 Jun 2026 10:04:05 +0900 Subject: [PATCH 3/4] coerce numeric types --- lua/wikis/commons/Widget/Factory.lua | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lua/wikis/commons/Widget/Factory.lua b/lua/wikis/commons/Widget/Factory.lua index bde1fac57dd..e056e8e5e1d 100644 --- a/lua/wikis/commons/Widget/Factory.lua +++ b/lua/wikis/commons/Widget/Factory.lua @@ -19,8 +19,12 @@ function WidgetFactory.fromTemplate(args) local widgetClass = Table.extract(args, 'widget') assert(String.isNotEmpty(widgetClass), 'WidgetFactory: widget must be specified') local WidgetClass = Lua.import('Module:Widget/' .. widgetClass) - local copiedArgs = Table.copy(args) - copiedArgs.children = type(copiedArgs.children) == 'table' and copiedArgs.children or {copiedArgs.children} + local copiedArgs = Table.mapValues(args, function (arg) + if type(arg) == 'table' then + return arg + end + return tonumber(arg) or arg + end) return WidgetClass(copiedArgs) end From cf28a32097dada85dec7567b19a426a251dc11e9 Mon Sep 17 00:00:00 2001 From: ElectricalBoy <15651807+ElectricalBoy@users.noreply.github.com> Date: Wed, 17 Jun 2026 10:05:00 +0900 Subject: [PATCH 4/4] update type annotation --- lua/wikis/commons/Widget/Factory.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lua/wikis/commons/Widget/Factory.lua b/lua/wikis/commons/Widget/Factory.lua index e056e8e5e1d..8785ba4f83d 100644 --- a/lua/wikis/commons/Widget/Factory.lua +++ b/lua/wikis/commons/Widget/Factory.lua @@ -13,8 +13,8 @@ local Table = Lua.import('Module:Table') local WidgetFactory = {} ----@param args {widget: string, children: Renderable|Renderable[], [any]:any} ----@return Widget +---@param args {widget: string, [any]: any} +---@return Widget|VNode function WidgetFactory.fromTemplate(args) local widgetClass = Table.extract(args, 'widget') assert(String.isNotEmpty(widgetClass), 'WidgetFactory: widget must be specified')