| Line 3: |
Line 3: |
| | local Ship = require('Module:Ship') | | local Ship = require('Module:Ship') |
| | local Formatting = require('Module:Formatting') | | local Formatting = require('Module:Formatting') |
| − | local format = require('Module:StringInterpolation').format | + | local format = require('Module:Core').format |
| | | | |
| | local NanaminShipInfo = { | | local NanaminShipInfo = { |
| Line 12: |
Line 12: |
| | _row_starter = "|-", | | _row_starter = "|-", |
| | _table_end = [[|}]], | | _table_end = [[|}]], |
| − | _ship_card_template = [[| style="width: 40%;" |<div class="mw-customtoggle-${class}">${ship_card}</div>]], | + | _ship_card_template = [[| style="width: 40%; padding-left: 5%; border-left: 1px solid lightblue;" |<div class="mw-customtoggle-${class}">${ship_card}</div>]], |
| | _level_template = [[| style="width: 10%;" |${level}]], | | _level_template = [[| style="width: 10%;" |${level}]], |
| | _embedded_start = [[| colspan="2" |]], | | _embedded_start = [[| colspan="2" |]], |
| − | _embedded_table = [[{| class="mw-collapsible mw-collapsed" id="mw-customcollapsible-${name}" style="background-color: lightblue;" | + | _embedded_table = [[{| class="mw-collapsible mw-collapsed" id="mw-customcollapsible-${name}" style="width: 100%; text-align: left; padding-left: 10%;" |
| | | <b>Class</b>: ${class} | | | <b>Class</b>: ${class} |
| | |- | | |- |
| Line 31: |
Line 31: |
| | local entry = {} | | local entry = {} |
| | for _, item in ipairs(args) do | | for _, item in ipairs(args) do |
| − | if item == "-" then | + | if item == "-" and #entry > 2 then |
| | local ship = Ship(entry[1], entry[2]) | | local ship = Ship(entry[1], entry[2]) |
| | local types = { | | local types = { |
| Line 61: |
Line 61: |
| | while mw.ustring.find(item, '/') do | | while mw.ustring.find(item, '/') do |
| | local split = mw.ustring.find(item, '/') | | local split = mw.ustring.find(item, '/') |
| − | table.insert(entry, mw.ustring.sub(item, 1, split - 1)) | + | local new_entry = mw.ustring.sub(item, 1, split - 1) |
| | + | if new_entry == "-" then new_entry = "" end |
| | + | table.insert(entry, new_entry) |
| | item = mw.ustring.sub(item, split + 1) | | item = mw.ustring.sub(item, split + 1) |
| | end | | end |
| | + | if item == "-" then item = "" end |
| | table.insert(entry, item) | | table.insert(entry, item) |
| | end | | end |
| Line 70: |
Line 73: |
| | | | |
| | function NanaminShipInfo:embed_table(entry) | | function NanaminShipInfo:embed_table(entry) |
| − | if entry[3] == "" then | + | if entry[3] == "" then entry[3] = "N/A" end |
| − | entry[3] = "N/A"
| + | local name = entry[1]:nick() and entry[1]:nick() or entry[1]:name() |
| − | end
| |
| | table.insert(self._rows, self._embedded_start) | | table.insert(self._rows, self._embedded_start) |
| | table.insert(self._rows, format{self._embedded_table, | | table.insert(self._rows, format{self._embedded_table, |
| − | name = entry[1]:name():gsub(" ", ""), | + | name = name:gsub(" ", ""), |
| | class = entry[1]:class():name(), | | class = entry[1]:class():name(), |
| | extra_levels = entry[3] or "N/A", | | extra_levels = entry[3] or "N/A", |
| Line 82: |
Line 84: |
| | end | | end |
| | | | |
| − | function NanaminShipInfo:build_table(class) | + | function NanaminShipInfo:build_table(class, remove_headers) |
| − | if self._sorted_entries[class] ~= nil then | + | if self._sorted_entries[class] ~= nil or class == "All" then |
| − | table.insert(self._rows, "===" .. class .. "s===") | + | if not remove_headers then |
| | + | table.insert(self._rows, [[<div style="text-align: center;">]]) |
| | + | table.insert(self._rows, "=" .. class .. "s=") |
| | + | table.insert(self._rows, [[</div>]]) |
| | + | end |
| | table.insert(self._rows, self._table_start) | | table.insert(self._rows, self._table_start) |
| | | | |
| − | local entries = self._sorted_entries[class] | + | local entries = {} |
| | + | if class == "All" then |
| | + | for ship_type, entry_table in pairs(self._sorted_entries) do |
| | + | for _, entry in pairs(entry_table) do |
| | + | table.insert(entries, entry) |
| | + | end |
| | + | end |
| | + | else |
| | + | entries = self._sorted_entries[class] |
| | + | end |
| | table.sort(entries, function(a, b) return a[2] < b[2] end) | | table.sort(entries, function(a, b) return a[2] < b[2] end) |
| | local count = 0 | | local count = 0 |
| Line 93: |
Line 108: |
| | count = count + 1 | | count = count + 1 |
| | | | |
| | + | local name = entries[a][1]:nick() and entries[a][1]:nick() or entries[a][1]:name() |
| | + | local image = string.gsub(entries[a][1]:battle_card(), "FastBB", "BC") |
| | table.insert(self._rows, format{self._ship_card_template, | | table.insert(self._rows, format{self._ship_card_template, |
| − | class = entries[a][1]:name():gsub(" ", ""), | + | class = name:gsub(" ", ""), |
| − | ship_card = Formatting:format_image{entries[a][1]:battle_card(), align = "center"}, | + | ship_card = Formatting:format_image{image, align = "left", valign = "center"}, |
| | }) | | }) |
| | table.insert(self._rows, format{self._level_template, | | table.insert(self._rows, format{self._level_template, |
| Line 107: |
Line 124: |
| | table.insert(self._rows, self._row_starter) | | table.insert(self._rows, self._row_starter) |
| | elseif a == 1 then | | elseif a == 1 then |
| | + | table.insert(self._rows, self._row_starter) |
| | self:embed_table(entries[a]) | | self:embed_table(entries[a]) |
| | table.insert(self._rows, self._embedded_start) | | table.insert(self._rows, self._embedded_start) |
| Line 113: |
Line 131: |
| | table.insert(self._rows, self._table_end) | | table.insert(self._rows, self._table_end) |
| | end | | end |
| | + | end |
| | + | |
| | + | function NanaminShipInfo:build_one(class, remove_headers) |
| | + | self:build_table(class, remove_headers) |
| | + | return table.concat(self._rows, "\n") |
| | + | end |
| | + | |
| | + | function NanaminShipInfo:build_all() |
| | + | self:build_table("All", true) |
| | + | return table.concat(self._rows, "\n") |
| | end | | end |
| | | | |
| Line 118: |
Line 146: |
| | self:sort_arguments(args) | | self:sort_arguments(args) |
| | --mw.log(self._sorted_entries["Light Cruiser"]["111"][1][1]) | | --mw.log(self._sorted_entries["Light Cruiser"]["111"][1][1]) |
| | + | table.insert(self._rows, "__NOTOC__") |
| | + | if args["class"] then return self:build_one(args["class"], args["remove_headers"]) end |
| | + | if args["all"] then return self:build_all() end |
| | self:build_table("Battleship") | | self:build_table("Battleship") |
| | self:build_table("Carrier") | | self:build_table("Carrier") |
| | self:build_table("Heavy Cruiser") | | self:build_table("Heavy Cruiser") |
| | self:build_table("Light Cruiser") | | self:build_table("Light Cruiser") |
| | + | self:build_table("Destroyer") |
| | self:build_table("Submarine") | | self:build_table("Submarine") |
| | + | self:build_table("Other") |
| | return table.concat(self._rows, "\n") | | return table.concat(self._rows, "\n") |
| | end | | end |