• 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
Add optional row hook for generating row attributes. It is called after all column hooks. Also improved documentation around BaseTable:create_data_rows_merge_vertical().
Line 128: Line 128:  
row_values[column].rowspan = 1
 
row_values[column].rowspan = 1
 
row_values[column].colspan = 1
 
row_values[column].colspan = 1
 +
end
 +
--check if a row function is defined
 +
if self.row then
 +
--get row attributes
 +
row_values._row = self:row(item)
 
end
 
end
 
end
 
end
Line 136: Line 141:  
BaseTable.create_data_rows = BaseTable.create_data_rows_plain
 
BaseTable.create_data_rows = BaseTable.create_data_rows_plain
    +
--create the data rows, merging cells vertically between rows if they contain the same data values.
 
function BaseTable:create_data_rows_merge_vertical()
 
function BaseTable:create_data_rows_merge_vertical()
 
for index, item in ipairs(self._items) do
 
for index, item in ipairs(self._items) do
Line 147: Line 153:  
end
 
end
 
if index > 1 then
 
if index > 1 then
 +
--This row is not the first row, we have to look at previous rows to determine if we need to merge vertically adjacent cells.
 
for _, column in ipairs(self._columns) do
 
for _, column in ipairs(self._columns) do
 +
--Look on a column basis
 
for i=index-1,1,-1 do
 
for i=index-1,1,-1 do
 +
--Starting at the previous row and going to the first row.
 
local previous_row = self._data_rows[i]
 
local previous_row = self._data_rows[i]
local previous_row_type = type(previous_row) ~= "string"
+
local previous_row_is_data = type(previous_row) ~= "string"
local previous_cell = previous_row_type and previous_row[column] or false
+
local previous_cell = previous_row_is_data and previous_row[column] or false
 
if previous_cell then
 
if previous_cell then
 +
--The previous row has a cell in the column to compare with
 
if self.compare_values(row_values[column].values, previous_cell.values) then
 
if self.compare_values(row_values[column].values, previous_cell.values) then
 +
--The cell values in the column are identical, extend the previous cell's rowspan
 +
--and clear the cell value in the current row to merge them
 
previous_cell.rowspan = previous_cell.rowspan + 1
 
previous_cell.rowspan = previous_cell.rowspan + 1
 
row_values[column] = nil
 
row_values[column] = nil
 
else
 
else
 +
--Values don't match, set rowspan and colspan to 1 to start a new cell.
 
row_values[column].rowspan = 1
 
row_values[column].rowspan = 1
 
row_values[column].colspan = 1
 
row_values[column].colspan = 1
 
end
 
end
 +
--We've found the previous row that has a cell in the column, no need to look further.
 
break
 
break
elseif not previous_row_type then
+
elseif not previous_row_is_data then
 +
--Previous row is not data, so we set rowspan and colspan to one to start a new cell.
 
row_values[column].rowspan = 1
 
row_values[column].rowspan = 1
 
row_values[column].colspan = 1
 
row_values[column].colspan = 1
Line 169: Line 184:  
end
 
end
 
else
 
else
 +
--This row is the first row, we have no previous rows to look at, so set rowspan and colspan for all cells to 1 to start new cells.
 
for _, column in ipairs(self._columns) do
 
for _, column in ipairs(self._columns) do
 
row_values[column].rowspan = 1
 
row_values[column].rowspan = 1
 
row_values[column].colspan = 1
 
row_values[column].colspan = 1
 
end
 
end
 +
end
 +
--check if a row function is defined
 +
if self.row then
 +
--get row attributes
 +
row_values._row = self:row(item)
 
end
 
end
 
end
 
end
Anonymous user

Navigation menu