Module:ListOfSortable

Revision as of 20:08, 6 September 2022 by Memetails (talk | contribs)

Documentation for this module may be created at Module:ListOfSortable/doc

---
-- Automates generation of sortable table by designated class by looking at all ships within Module:Data/Ship
--
-- TODO: Get stats from Module:Data/Ship instead of relying on Module:ELiteShipsKai to retrieve from Module:Data/Ships/<ShipName>
-- TODO: Automate coloring without Module:EliteShipsKai

local U = require('Module:Core')

local template = {
	footer = "}}",
	header = [[{{EliteShipsKaiSortable]],
	item = [=[|%s]=],
}

local function generateTable(shipClass, remodelSuffix, notes, coloring, ...)
	local shipClass = shipClass or frame.args[1] or "??"
	local success, data = U.loadData("Data/Ship")
	if not success then return "No data for ships: " .. shipClass end
	
	local result = { string.format(template.header) }
	
	local suffix = {}
	local index = 1
	for k, v in pairs(remodelSuffix) do
		suffix[index] = v
		index = index + 1
	end
	
	for k, v in pairs(data) do
		if v.type == shipClass and v.remodellv ~= '' then
			local name = v.name[3]
			local success = 0
			for k, v in pairs(remodelSuffix) do
				if success == 0 then
					name,success = name:gsub("." .. v, "/" .. v)
				end
			end
			if success == 0 then
				name,success = name:gsub(".Kai", "/Kai")
			end
			table.insert(result, string.format(template.item, name))
		end
	end
	
	for k, v in pairs(notes) do
		table.insert(result, string.format(template.item, v))
	end
	
	for k, v in pairs(coloring) do
		table.insert(result, string.format(template.item, v))
	end

	table.insert(result, template.footer)
	return table.concat(result, "\n")
end

local function render(frame)
	local shipClass = U.split(frame.args[1], ',')
	local remodelSuffix = U.split(frame.args[2], ',')
	local notes = U.split(frame.args[3], ',')
	local coloring = U.split(frame.args[4], ',')
	
	return generateTable(shipClass, remodelSuffix, notes, coloring)
	end

local function test()
	mw.log(generateTable("Destroyer", {"B Kai", "D Kai", "Mk.II", "Zwei"},
		{"Mikazuki/Kai_notes = Can equip [[Daihatsu Landing Craft|Daihatsu]]",
			"Mutsuki/Kai Ni_notes = 2nd remodel. Can equip [[Daihatsu Landing Craft|Daihatsu]]",
			"Kisaragi/Kai Ni_notes = 2nd remodel. Can equip [[Daihatsu Landing Craft|Daihatsu]]",
			"Satsuki/Kai Ni_notes = 2nd remodel. Can equip [[Daihatsu Landing Craft|Daihatsu]] & [[Special Type 2 Amphibious Landing Craft|Type 2 Landing Craft]]",
			"Fumizuki/Kai Ni_notes = 2nd remodel. Can equip [[Daihatsu Landing Craft|Daihatsu]] & [[Special Type 2 Amphibious Landing Craft|Type 2 Landing Craft]]"},
		{"remodel_level_good = 20",
			"remodel_level_outstanding = 15",
			"remodel_level_operator = <",
			"firepower_good = 56",
			"firepower_outstanding = 61",
			"torpedo_good = 83",
			"torpedo_outstanding = 89",
			"night_battle = true",
			"night_battle_good = 140",
			"night_battle_outstanding = 150",
			"aa_good = 64",
			"aa_outstanding = 74",
			"asw_good = 67",
			"asw_outstanding = 73",
			"los_good = 42",
			"los_outstanding = 49",
			"hp_good = 34",
			"hp_outstanding = 36",
			"armor_good = 50",
			"armor_outstanding = 58",
			"evasion_good = 92",
			"evasion_outstanding = 98",
			"aircraft_good = 1",
			"aircraft_outstanding = 1",
			"aircraft_slot_good = 1",
			"luck_good = 19",
			"luck_outstanding = 30",
			"luck_max_good = 80",
			"fuel_operator=<",
			"ammo_good = 20",
			"ammo_outstanding = 20",
			"ammo_operator = <",
			"reference_type = 2"}))
end

return { render = render, test = test }

-- TEST: p.test()