• Welcome to the Kancolle Wiki!
  • If you have any questions regarding site content, account registration, etc., please visit the KanColle Wiki Discord

Changes

Jump to navigation Jump to search
m
no edit summary
Line 1: Line 1:  
local BaseTable = require("Module:BaseTable")
 
local BaseTable = require("Module:BaseTable")
 +
local Formatting = require('Module:Formatting')
 +
local EnemyShip = require("Module:EnemyShip")
   −
local NodeInfo = {
+
local format = require('Module:StringInterpolation').format
      
+
 
}
+
local NodeInfo = BaseTable({
 +
    _item_class = EnemyShip,
 +
    _header_template = nil,
 +
    _column_cell_templates = {
 +
        node = [[| colspan="${colspan}" rowspan="${rowspan}" style="text-align: center; background-color: ${bg_color};" |${values.node} ${values.time}]],
 +
        formation = [[| style="background-color: ${bg_color}" |${values.formation}]],
 +
        fleet = [[| style="background-color: ${bg_color}" |${values.fleet}]],
 +
        as = [[| style="text-align: center; background-color: ${bg_color}" |${values.as}]],
 +
    },
 +
    _column_bg_colors = {
 +
        node = "transparent",
 +
        formation = "transparent",
 +
        fleet = "transparent",
 +
        as = "transparent",
 +
    },
 +
    _columns = {
 +
        "node",
 +
        "formation",
 +
        "fleet",
 +
        "as",
 +
    },
 +
    _day_battle_color = "yellow",
 +
    _night_battle_color = "purple",
 +
})
 +
 
 +
function NodeInfo:node(row)
 +
    return { values = { node = row.node, time = row.time }, bg_color = self._column_bg_colors.node }
 +
end
 +
 
 +
function NodeInfo:formation(row)
 +
    return { values = { formation = row.formation }, bg_color = self._column_bg_colors.formation }
 +
end
 +
 
 +
function NodeInfo:fleet(row)
 +
    return { values = { formation = row.fleet }, bg_color = self._column_bg_colors.fleet }
 +
end
 +
 
 +
function NodeInfo:as(row)
 +
    return { values = { formation = row.fleet }, bg_color = self._column_bg_colors.as }
 +
end
 +
 
 +
function NodeInfo:process_node(item)
 +
     local split = mw.ustring.find(item, '/')
 +
local node, time
 +
if split then
 +
    node = mw.ustring.sub(item, 1, split - 1)
 +
    time = "(" .. mw.ustring.sub(item, split + 1):gsub("^%l", string.upper) .. ")"
 +
else
 +
    node = item:upper()
 +
    time = ""
 +
end
 +
return node, time
 +
end
 +
 
 +
function NodeInfo:create_items()
 +
    local mode = 1
 +
    local fleet = ""
 +
for index, item_key in ipairs(self._args) do
 +
if item_key == "-" then
 +
    table.insert(self._items, { fleet = fleet })
 +
table.insert(self._items, "break")
 +
fleet = ""
 +
mode = 1
 +
else
 +
--Each item will be just a string, so we need to check for one of the _columns, which will be done by mode
 +
if mode == 1 then
 +
    --First item should always be the node
 +
    --Node format: !node/day|night where the second part is day -or- night; ! indicates a boss node
 +
    local boss = false
 +
    if mw.ustring.sub(item_key, 1, 1) == "!" then
 +
        boss = true
 +
        item_key = mw.ustring.sub(item_key, 2)
 +
    end
 +
   
 +
    local node, time = self:process_node(item_key)
 +
   
 +
    table.insert(self._items, { node = node, time = time, boss = boss })
 +
    mode = 2
 +
    elseif mode == 2 then
 +
        local formation_image = item_key:gsub("%s", "") .. ".jpg"
 +
        table.insert(self._items, { values = { formation = Formatting.format_image{formation_image, caption = item_key} } })
 +
        mode = 3
 +
    else
 +
        --Fleets are of variable size, so we append onto a string until we hit the next node declaration
 +
        local split = mw.ustring.find(item_key, '/')
 +
        local ship_name = mw.ustring.sub(item_key, 1, split - 1)
 +
        local ship_suffix = mw.ustring.sub(item_key, split + 1)
 +
        local ship = EnemyShip(ship_name, ship_suffix)
 +
       
 +
        fleet = fleet .. Formatting.format_image{ship:battle_card(), ship:name()}
 +
            end
 +
end
 +
end
 +
end
 +
 
 +
NodeInfo.create_data_rows = NodeInfo.create_data_rows_merge_vertical
 +
 
 +
return NodeInfo
48

edits

Navigation menu