Fire Emblem Heroes Wiki
Register
Advertisement
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Documentation for this module may be created at Module:MapList/doc
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|%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(('[[File:%s_%s.png|x63px|link=%s]]<br/>[[%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}
Advertisement