From 851a509a65f1f4760fb5ebbe4700a47c4570cd26 Mon Sep 17 00:00:00 2001 From: hjpalpha Date: Wed, 19 Aug 2026 11:45:26 +0200 Subject: [PATCH 1/6] feat: prep some stuff for lighthouse forms multiselect --- lua/wikis/commons/Array.lua | 13 +++++++++++++ lua/wikis/commons/MatchTable.lua | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/lua/wikis/commons/Array.lua b/lua/wikis/commons/Array.lua index b91664e7d32..8e43d50e20d 100644 --- a/lua/wikis/commons/Array.lua +++ b/lua/wikis/commons/Array.lua @@ -5,6 +5,7 @@ -- Please see https://github.com/Liquipedia/Lua-Modules to contribute -- +local Json = require('Module:Json') local Logic = require('Module:Logic') local Set = require('Module:Set') local String = require('Module:StringUtils') @@ -791,4 +792,16 @@ function Array.interleave(elements, x) return ret end +---@param inputString string? +---@return string[] +---@nodiscard +function Array.parseMultiSelect(inputString) + local parsed = Json.parseIfTable(inputString) or Array.parseCommaSeparatedString(inputString) + + -- validate it actually is an array + assert(Array.isArray(parsed), '"inputString" could not be parsed to an array') + + return parsed +end + return Array diff --git a/lua/wikis/commons/MatchTable.lua b/lua/wikis/commons/MatchTable.lua index d2154d8bc21..1b2deb5857f 100644 --- a/lua/wikis/commons/MatchTable.lua +++ b/lua/wikis/commons/MatchTable.lua @@ -404,7 +404,7 @@ function MatchTable:buildAdditionalConditions() local getOrCondition = function(lpdbKey, input) if Logic.isEmpty(input) then return end - conditions:add(ConditionUtil.anyOf(ColumnName(lpdbKey), Array.parseCommaSeparatedString(input))) + conditions:add(ConditionUtil.anyOf(ColumnName(lpdbKey), Array.parseMultiSelect(input))) end getOrCondition('liquipediatier', args.tier) From 4d6079071e1f1db65730574e3d249df6bc6c45c2 Mon Sep 17 00:00:00 2001 From: hjpalpha Date: Wed, 19 Aug 2026 17:44:26 +0200 Subject: [PATCH 2/6] ResultsTable too --- lua/wikis/commons/ResultsTable/Base.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/wikis/commons/ResultsTable/Base.lua b/lua/wikis/commons/ResultsTable/Base.lua index bf39e4c5008..1ef4074b3ab 100644 --- a/lua/wikis/commons/ResultsTable/Base.lua +++ b/lua/wikis/commons/ResultsTable/Base.lua @@ -255,7 +255,7 @@ function BaseResultsTable:buildBaseConditions() if args.tier then conditions:add( - ConditionUtil.anyOf(ColumnName('liquipediatier'), Array.parseCommaSeparatedString(args.tier)) + ConditionUtil.anyOf(ColumnName('liquipediatier'), Array.parseMultiSelect(args.tier)) ) end From 23c1e7bc6ab0d720f8e84d1004b1c65819bbb5b6 Mon Sep 17 00:00:00 2001 From: hjpalpha Date: Wed, 19 Aug 2026 17:50:42 +0200 Subject: [PATCH 3/6] add test cases --- lua/spec/array_spec.lua | 13 +++++++++++++ lua/wikis/commons/Array.lua | 5 +++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/lua/spec/array_spec.lua b/lua/spec/array_spec.lua index dd1a18f2a6e..340217f4e48 100644 --- a/lua/spec/array_spec.lua +++ b/lua/spec/array_spec.lua @@ -322,6 +322,19 @@ describe('array', function() end) end) + describe('ParseMultiSelect', function() + it('check', function() + local a = {'test1', 'test2', 'test3'} + assert.are_same(a, Array.parseMultiSelect('test1, test2,test3')) + assert.are_same(a, Array.parseMultiSelect('test1 - test2-test3', '-')) + assert.are_same(a, Array.parseMultiSelect('{"1":"test1","2":"test2","3":"test3"}')) + assert.are_same(a, Array.parseMultiSelect('{"test1","test2","test3"}')) + assert.error(function () + return Array.parseMultiSelect('{"a":"test1","b":"test2","c":"test3"}') + end) + end) + end) + describe('Interleave', function () it('works', function() assert.are_same({'a', ' ', 'b', ' ', 'c'}, Array.interleave({'a', 'b', 'c'}, ' ')) diff --git a/lua/wikis/commons/Array.lua b/lua/wikis/commons/Array.lua index 8e43d50e20d..4bc5d041b14 100644 --- a/lua/wikis/commons/Array.lua +++ b/lua/wikis/commons/Array.lua @@ -793,10 +793,11 @@ function Array.interleave(elements, x) end ---@param inputString string? +---@param sep string? ---@return string[] ---@nodiscard -function Array.parseMultiSelect(inputString) - local parsed = Json.parseIfTable(inputString) or Array.parseCommaSeparatedString(inputString) +function Array.parseMultiSelect(inputString, sep) + local parsed = Json.parseIfTable(inputString) or Array.parseCommaSeparatedString(inputString, sep) -- validate it actually is an array assert(Array.isArray(parsed), '"inputString" could not be parsed to an array') From ddab0cc12a1708242d2590ef5f78751c97f81635 Mon Sep 17 00:00:00 2001 From: hjpalpha Date: Wed, 19 Aug 2026 17:54:20 +0200 Subject: [PATCH 4/6] remove this one test case as it falsly throws (json parse test implementation apparently different from live) --- lua/spec/array_spec.lua | 1 - 1 file changed, 1 deletion(-) diff --git a/lua/spec/array_spec.lua b/lua/spec/array_spec.lua index 340217f4e48..3cf4b45de9e 100644 --- a/lua/spec/array_spec.lua +++ b/lua/spec/array_spec.lua @@ -327,7 +327,6 @@ describe('array', function() local a = {'test1', 'test2', 'test3'} assert.are_same(a, Array.parseMultiSelect('test1, test2,test3')) assert.are_same(a, Array.parseMultiSelect('test1 - test2-test3', '-')) - assert.are_same(a, Array.parseMultiSelect('{"1":"test1","2":"test2","3":"test3"}')) assert.are_same(a, Array.parseMultiSelect('{"test1","test2","test3"}')) assert.error(function () return Array.parseMultiSelect('{"a":"test1","b":"test2","c":"test3"}') From 332e6fe8a7ed66b1e4ffd273a483b3e2eaa03f9b Mon Sep 17 00:00:00 2001 From: hjpalpha Date: Wed, 19 Aug 2026 17:58:06 +0200 Subject: [PATCH 5/6] typo --- lua/spec/array_spec.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/spec/array_spec.lua b/lua/spec/array_spec.lua index 3cf4b45de9e..5bccdb5546d 100644 --- a/lua/spec/array_spec.lua +++ b/lua/spec/array_spec.lua @@ -327,7 +327,7 @@ describe('array', function() local a = {'test1', 'test2', 'test3'} assert.are_same(a, Array.parseMultiSelect('test1, test2,test3')) assert.are_same(a, Array.parseMultiSelect('test1 - test2-test3', '-')) - assert.are_same(a, Array.parseMultiSelect('{"test1","test2","test3"}')) + assert.are_same(a, Array.parseMultiSelect('["test1", "test2", "test3"]')) assert.error(function () return Array.parseMultiSelect('{"a":"test1","b":"test2","c":"test3"}') end) From 610c96386cff504fab38d98451e03ffc9dc61e82 Mon Sep 17 00:00:00 2001 From: hjpalpha Date: Thu, 20 Aug 2026 09:12:21 +0200 Subject: [PATCH 6/6] as per review --- lua/wikis/commons/Array.lua | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lua/wikis/commons/Array.lua b/lua/wikis/commons/Array.lua index 4bc5d041b14..00618a55b3b 100644 --- a/lua/wikis/commons/Array.lua +++ b/lua/wikis/commons/Array.lua @@ -797,7 +797,11 @@ end ---@return string[] ---@nodiscard function Array.parseMultiSelect(inputString, sep) - local parsed = Json.parseIfTable(inputString) or Array.parseCommaSeparatedString(inputString, sep) + local parsed = Json.parseIfTable(inputString) + + if not parsed then + return Array.parseCommaSeparatedString(inputString, sep) + end -- validate it actually is an array assert(Array.isArray(parsed), '"inputString" could not be parsed to an array')