diff --git a/lua/wikis/commons/Map.lua b/lua/wikis/commons/Map.lua index b03a8beb9fe..f9ba812ed16 100644 --- a/lua/wikis/commons/Map.lua +++ b/lua/wikis/commons/Map.lua @@ -10,6 +10,7 @@ local Lua = require('Module:Lua') local Array = Lua.import('Module:Array') local DateExt = Lua.import('Module:Date/Ext') local Logic = Lua.import('Module:Logic') +local Page = Lua.import('Module:Page') local Table = Lua.import('Module:Table') local Condition = Lua.import('Module:Condition') @@ -73,7 +74,7 @@ function Map.getMapByPageName(pageName) ---@cast pageName -nil return Map.queryMaps{ - additionalConditions = ConditionNode(ColumnName('pagename'), Comparator.eq, pageName:gsub(' ', '_')), + additionalConditions = ConditionNode(ColumnName('pagename'), Comparator.eq, Page.pageifyLink(pageName)), limit = 1, order = 'date desc' }[1] diff --git a/lua/wikis/commons/Widget/GeneralCollapsible/Default.lua b/lua/wikis/commons/Widget/GeneralCollapsible/Default.lua index 46fc71fa9ed..8a20e8e1ac3 100644 --- a/lua/wikis/commons/Widget/GeneralCollapsible/Default.lua +++ b/lua/wikis/commons/Widget/GeneralCollapsible/Default.lua @@ -25,6 +25,7 @@ function DefaultCollapsible:render() local props = self.props return Div{ attributes = props.attributes, + css = props.css, classes = Array.extend({}, 'general-collapsible', props.shouldCollapse and 'collapsed' or nil, diff --git a/lua/wikis/commons/Widget/MapPool.lua b/lua/wikis/commons/Widget/MapPool.lua new file mode 100644 index 00000000000..c2a0c1e31d6 --- /dev/null +++ b/lua/wikis/commons/Widget/MapPool.lua @@ -0,0 +1,103 @@ +--- +-- @Liquipedia +-- page=Module:Widget/MapPool +-- +-- 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 Logic = Lua.import('Module:Logic') +local Map = Lua.import('Module:Map') +local MapModes = Lua.import('Module:MapModes') + +local GeneralCollapsible = Lua.import('Module:Widget/GeneralCollapsible/Default') +local HtmlWidgets = Lua.import('Module:Widget/Html/All') +local Div = HtmlWidgets.Div +local Link = Lua.import('Module:Widget/Basic/Link') +local Widget = Lua.import('Module:Widget') +local WidgetUtil = Lua.import('Module:Widget/Util') + +---@class MapPool: Widget +---@operator call(table?): MapPool +local MapPool = Class.new(Widget) + +---@return Widget +function MapPool:render() + return Div{children = GeneralCollapsible{ + title = 'Map Pool', + classes = {'wiki-backgroundcolor-light'}, + css = { + display = 'flex', + ['flex-direction'] = 'column', + padding = '0.5rem', + ['border-radius'] = '0.5rem', + }, + shouldCollapse = true, + children = { + Div{ + css = { + display = 'flex', + ['flex-wrap'] = 'wrap', + gap = '0.5rem', + ['padding-top'] = '0.5rem', + }, + children = Array.mapIndexes(function (index) + local mode = self.props['mode' .. index] + if Logic.isEmpty(mode) then + return + end + return self:_renderMapsInMode(mode, Array.parseCommaSeparatedString(self.props['map' .. index])) + end) + } + } + }} +end + +---@private +---@param mode string +---@param mapInput string[] +---@return Widget +function MapPool:_renderMapsInMode(mode, mapInput) + return HtmlWidgets.Table{ + classes = {'wikitable', 'wikitable-striped'}, + css = { + ['border-radius'] = '0.5rem', + overflow = 'hidden', + flex = '1 0 18%', + ['white-space'] = 'nowrap' + }, + children = WidgetUtil.collect( + HtmlWidgets.Tr{children = HtmlWidgets.Th{ + css = { + height = '2.5rem', + padding = '0.2em 0.5rem' + }, + children = { + MapModes.get{mode = mode}, + ' ', + Link{link = mode} + } + }}, + Array.map(mapInput, function (mapPage) + local map = Map.getMapByPageName(mapPage) or {} + return HtmlWidgets.Tr{children = HtmlWidgets.Td{ + css = { + ['text-align'] = 'center', + padding = '0.2em 0.5rem' + }, + children = { + Link{ + link = map.pageName or mapPage, + children = map.displayName or mapPage + } + } + }} + end) + ) + } +end + +return MapPool