Module:MapList

local cargo = mw.ext.cargo local escq = require 'Module:EscQ'.main1 local toboolean = require 'Module:Bool'.toboolean local mf = require 'Module:MF'.main1 local List = require 'Module:ListUtil' local Hash = require 'Module:HashUtil'

local byGroup = function (args) local group = args[1] local isDerived = toboolean(args.derived)

local unitList = cargo.query(		isDerived and 'Maps=M,DerivedMaps=DM,MapUnits=MU,Units=U' or 'Maps=M,MapUnits=MU,Units=U',		"M.Map=map,M._pageName=mpage,M.MapName=mname,M.HasReward=rewards,U._pageName=upage,U.Name=uname,IF(U.Properties__full LIKE '%generic%','1','')=isGeneric", {			join = isDerived and 'M._pageName=DM._pageName,DM.BaseMap=MU._pageName,MU.Unit=U.WikiName' or 'M._pageName=MU._pageName,MU.Unit=U.WikiName',			where = ("M.MapGroup='%s' AND U.WikiName IS NOT NULL"):format(escq(group)),			groupBy = 'MU._pageName,MU.Unit',			orderBy = 'MU.Slot,uname',			limit = 2000,		}) local unitsByMap = List.group_by(unitList, function (v) return v.mpage end)

local tbl = mw.html.create('table'):addClass('wikitable'):addClass('default'):addClass('unsortable') :css('text-align', 'center'):css('width', '90%')

local row = tbl:tag('tr') row:tag('th'):css('width', '20%'):wikitext('Map name') row:tag('th'):css('width', '10%'):wikitext('Rewards') row:tag('th'):css('width', '60%'):wikitext('Units')

for mpage, vs in Hash.sorted_pairs(unitsByMap, function (vs1, vs2) return vs1[1].map < vs2[1].map end) do		row = tbl:tag('tr') row:tag('td'):wikitext(('%s'):format(mpage, vs[1].mname)) row:tag('td'):css('text-align', 'left'):wikitext(vs[1].rewards) local cell = row:tag('td') for _, v in ipairs(vs) do			cell:tag('div'):css('display', 'inline-block'):css('width', '70px'):css('vertical-align', 'top'):css('word-wrap', 'break-word') :wikitext((' %s%s'):format( mf(v.upage), v.isGeneric ~=  and 'Mini_Unit_Idle' or 'Face_FC', v.upage, v.upage, v.uname ~= v.upage and ('|' .. v.uname) or )) end end

return tostring(tbl) end

return require 'Module:MakeMWModule'.makeMWModule {byGroup = byGroup}