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 |