Changes

no edit summary
Line 7: Line 7:  
local NodeInfo = BaseTable({
 
local NodeInfo = BaseTable({
 
     _item_class = EnemyShip,
 
     _item_class = EnemyShip,
     _header_template = nil,
+
     _header_template = [[!Node
 +
    !Formation
 +
    !Fleet
 +
    !AS]],
 
     _column_cell_templates = {
 
     _column_cell_templates = {
 
         node = [[| colspan="${colspan}" rowspan="${rowspan}" style="text-align: center; background-color: ${bg_color};" |${values.node} ${values.time}]],
 
         node = [[| colspan="${colspan}" rowspan="${rowspan}" style="text-align: center; background-color: ${bg_color};" |${values.node} ${values.time}]],
Line 39: Line 42:     
function NodeInfo:fleet(row)
 
function NodeInfo:fleet(row)
     return { values = { formation = row.fleet }, bg_color = self._column_bg_colors.fleet }
+
     return { values = { fleet = row.fleet }, bg_color = self._column_bg_colors.fleet }
 
end
 
end
    
function NodeInfo:as(row)
 
function NodeInfo:as(row)
     return { values = { formation = row.fleet }, bg_color = self._column_bg_colors.as }
+
     return { values = { as = row.as }, bg_color = self._column_bg_colors.as }
 
end
 
end
   Line 57: Line 60:  
end
 
end
 
return node, time
 
return node, time
 +
end
 +
 +
function NodeInfo:insert_item(node, time, boss, formation, fleet, as, item_key)
 +
    table.insert(self._items, {
 +
        node = node,
 +
        time = time,
 +
boss = boss,
 +
formation = Formatting:format_image{formation, caption = item_key, align = "center", valign = "center"},
 +
fleet = fleet,
 +
as = as,
 +
})
 
end
 
end
    
function NodeInfo:create_items()
 
function NodeInfo:create_items()
 
     local mode = 1
 
     local mode = 1
     local fleet = ""
+
     local node, time, boss, formation_image, fleet, as_rating = nil, nil, false, nil, "", 0
 
for index, item_key in ipairs(self._args) do
 
for index, item_key in ipairs(self._args) do
 
if item_key == "-" then
 
if item_key == "-" then
    table.insert(self._items, { fleet = fleet })
+
    self:insert_item(node, time, boss, formation_image, fleet, as_rating, item_key)
 
table.insert(self._items, "break")
 
table.insert(self._items, "break")
fleet = ""
+
 +
node, time, boss, formation_image, fleet, as_rating = nil, nil, false, nil, "", 0
 
mode = 1
 
mode = 1
 
else
 
else
Line 73: Line 88:  
    --First item should always be the node
 
    --First item should always be the node
 
    --Node format: !node/day|night where the second part is day -or- night; ! indicates a boss 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
 
    if mw.ustring.sub(item_key, 1, 1) == "!" then
 
        boss = true
 
        boss = true
Line 79: Line 93:  
    end
 
    end
 
     
 
     
    local node, time = self:process_node(item_key)
+
    node, time = self:process_node(item_key)
   
  −
    table.insert(self._items, { node = node, time = time, boss = boss })
   
    mode = 2
 
    mode = 2
 
    elseif mode == 2 then
 
    elseif mode == 2 then
        local formation_image = item_key:gsub("%s", "") .. ".jpg"
+
        formation_image = item_key:gsub("%s", "") .. ".jpg"
        table.insert(self._items, { values = { formation = Formatting.format_image{formation_image, caption = item_key} } })
   
        mode = 3
 
        mode = 3
 
    else
 
    else
Line 94: Line 105:  
        local ship = EnemyShip(ship_name, ship_suffix)
 
        local ship = EnemyShip(ship_name, ship_suffix)
 
         
 
         
        fleet = fleet .. Formatting.format_image{ship:battle_card(), ship:name()}
+
        if fleet ~= "" then
 +
            fleet = fleet .. " " -- Actually matters
 +
        end
 +
        fleet = fleet .. Formatting:format_image{ship:battle_card(), ship:name()}
 +
       
 +
        if ship:as_rating() then
 +
            as_rating = as_rating + ship:as_rating()
 +
        end
 
             end
 
             end
 
end
 
end
 +
    end
 +
    self:insert_item(node, time, boss, formation_image, fleet, as_rating, item_key)
 +
end
 +
 +
function NodeInfo:create_data_rows()
 +
    for index, item in ipairs(self._items) do
 +
local row_values
 +
if type(item) == "string" then
 +
row_values = item
 +
else
 +
row_values = {}
 +
for _, column in ipairs(self._columns) do
 +
row_values[column] = self[column](self, item)
 +
end
 +
if index > 1 then
 +
    for _, column in ipairs(self._columns) do
 +
    for i = index - 1, 1, -1 do
 +
        if column == "node" then
 +
    local previous_cell = self._data_rows[i][column]
 +
    if previous_cell then
 +
        if row_values[column].values.node == previous_cell.values.node then
 +
        previous_cell.rowspan = previous_cell.rowspan + 1
 +
        row_values[column] = nil
 +
        else
 +
        row_values[column].rowspan = 1
 +
        row_values[column].colspan = 1
 +
        end
 +
        break
 +
        end
 +
    end
 +
            end
 +
        end
 +
    else
 +
for _, column in ipairs(self._columns) do
 +
    row_values[column].rowspan = 1
 +
    row_values[column].colspan = 1
 +
end
 +
end
 +
end
 +
table.insert(self._data_rows, row_values)
 
end
 
end
 
end
 
end
  −
NodeInfo.create_data_rows = NodeInfo.create_data_rows_merge_vertical
      
return NodeInfo
 
return NodeInfo
48

edits