Documentation for this module may be created at Module:NanaminFleet/doc
local BaseTable = require('Module:BaseTable')
local Ship = require('Module:Ship')
local ShipCardKai = require('Module:ShipCardKai')
local Equipment = require('Module:Equipment')
local Formatting = require('Module:Formatting')
local format = require('Module:StringInterpolation').format
local NanaminFleet = BaseTable({
_item_class = Ship,
_equip_class = Equipment,
_equip_bg = "whitesmoke",
_header_template = nil,
_column_cell_templates = {
ship = [[| rowspan="4" style="background: transparent;" |${values.ship_card}]],
equips = [[| style="background: whitesmoke; width: 15px;" |${values.equip_icon}
| style="background: whitesmoke; width: 175px; font-size: 5px; text-align: center;" |${values.equip_link}]],
ship2 = [[| rowspan="4" style="background: transparent;" |${values.ship_card}]],
equips2 = [[| style="background: whitesmoke; width: 15px;" |${values.equip_icon}
| style="background: whitesmoke; width: 175px; font-size: 5px; text-align: center;" |${values.equip_link}]]
},
_columns = {
"ship",
"equips",
"ship2",
"equips2"
},
_blank = "Empty_ship_slot.png",
_default_size = "120x165px"
})
function NanaminFleet:create_table_prep()
self._size = self._args.image_size or self._default_size
end
function NanaminFleet:ship(row)
local value
if row[1] == nil or row[1] == "break" then
return false
elseif row[1] == false then
value = Formatting:format_image{self._blank, size = self._size}
else
value = ShipCardKai:card{ship = row[1], size = self._size, link = row[1]:link(), caption = row[1]:name()}
end
return {values = {ship_card = value}, bg_color = self._transparent, text_align = self._center_align}
end
function NanaminFleet:ship2(row)
row = {row[3], row[4]}
return self:ship(row)
end
function NanaminFleet:equips(row)
local value, icon
if row[2] == false then
value = "- Unequipped -"
icon = ""
else
value = Formatting:format_link(row[2]:link())
icon = Formatting:format_image{Formatting:format_equipment_icon(row[2]:icon())}
end
return {values = {equip_link = value, equip_icon = icon}, bg_color = self._equip_bg, text_align = self._center_align}
end
function NanaminFleet:equips2(row)
row = {row[3], row[4]}
return self:equips(row)
end
function NanaminFleet:process_item_key(item_key)
local split = mw.ustring.find(item_key, '/')
if split == nil then
return item_key
else
ship_name = mw.ustring.sub(item_key, 1, split - 1)
ship_suffix = mw.ustring.sub(item_key, split + 1, -1)
if ship_suffix == "Regular" then
ship_suffix = nil
end
return ship_name, ship_suffix
end
end
function NanaminFleet:create_items()
local row1, row2, row3, row4 = {}, {}, {}, {}
for index, item_key in ipairs(self._args) do
local item
if item_key == "-" then
item = false
else
if mw.ustring.find(item_key, '/') then
item = self._item_class(self:process_item_key(item_key))
else
item = self._equip_class(self:process_item_key(item_key))
end
end
local row_number = {1, 1, 2, 3, 4, 1, 1, 2, 3, 4}
if row_number[index % 10] == 1 then
table.insert(row1, item)
elseif row_number[index % 10] == 2 then
table.insert(row2, "break")
table.insert(row2, item)
elseif row_number[index % 10] == 3 then
table.insert(row3, "break")
table.insert(row3, item)
else
table.insert(row4, "break")
table.insert(row4, item)
end
if index % 10 == 0 then
table.insert(self._items, row1)
table.insert(self._items, row2)
table.insert(self._items, row3)
table.insert(self._items, row4)
row1, row2, row3, row4 = {}, {}, {}, {}
end
end
end
function NanaminFleet:create_data_rows()
for _, item in ipairs(self._items) do
local row_values = {}
for _, column in ipairs(self._columns) do
local value = self[column](self, item)
if value then
row_values[column] = value
row_values[column].rowspan = item.class ~= nil and 4 or 1
row_values[column].colspan = 1
end
end
table.insert(self._data_rows, row_values)
end
end
return NanaminFleet