Module:BuildingList
From Against the Storm Official Wiki
Documentation for this module may be created at Module:BuildingList/doc
---
--- Generates a large table of buildings.
---
--- @module BuildingList
local BuildingList = {}
local WorkshopsData = require("Module:WorkshopsData")
local InstitutionsData = require("Module:InstitutionsData")
local FarmsData = require("Module:FarmsData")
local CampsData = require("Module:CampsData")
--region Private constants
local DEFAULT_SIZE_SMALL = "small"
local ICON_SIZES = {
[DEFAULT_SIZE_SMALL] = mw.getCurrentFrame():expandTemplate{ title = "ImgS" },
["med"] = mw.getCurrentFrame():expandTemplate{ title = "ImgM" },
["large"] = mw.getCurrentFrame():expandTemplate{ title = "ImgL" },
["huge"] = mw.getCurrentFrame():expandTemplate{ title = "ImgH" }
}
local NBSP = " "
--endregion
--region Private methods
---
--- Loops through the data to find matches to the provided category.
---
---@param category string the name of the category
local function loadBuildingList(category)
local buildingList = {}
for i = 1, WorkshopsData.getNumberOfWorkshopsInDatabase() do
local buildingName = WorkshopsData.getWorkshopNameFromDatabase(i)
if not category or category == WorkshopsData.getWorkshopCategory(buildingName) then
table.insert(buildingList, buildingName)
end
end
for i = 1, InstitutionsData.getNumberOfInstitutionsInDatabase() do
local buildingName = InstitutionsData.getInstitutionNameFromDatabase(i)
if not category or category == InstitutionsData.getInstitutionCategory(buildingName) then
table.insert(buildingList, buildingName)
end
end
for i = 1, FarmsData.getNumberOfFarmsInDatabase() do
local buildingName = FarmsData.getFarmNameFromDatabase(i)
if not category or category == FarmsData.getFarmCategory(buildingName) then
table.insert(buildingList, buildingName)
end
end
for i = 1, CampsData.getNumberOfCampsInDatabase() do
local buildingName = CampsData.getCampNameFromDatabase(i)
if not category or category == CampsData.getCampCategory(buildingName) then
table.insert(buildingList, buildingName)
end
end
return buildingList
end
--endregion
--region Public methods
---
--- Renders an icon and the name of a building linked to a wiki page
--- corresponding to the provided building.
---
--- Uses MediaWiki markup to display the name of a wiki page and an icon that
--- has been uploaded to the wiki. Both must be known by the data model,
--- or the template's behavior may be different than expected.
---
--- @param frame table the template's calling context, with parameters
--- @return string wiki markup
function BuildingList.renderList(frame)
-- Extract the template parameter, if any.
local argCategory = frame.args.category
local buildingList = loadBuildingList(argCategory)
return buildingList
end
--endregion
return BuildingList


