Module:EliteShipsKai

local BaseTable = require('Module:BaseTable') local Formatting = require('Module:Formatting') local MiscIcons = require('Module:MiscIcons') local ResourceIcons = require('Module:ResourceIcons') local Ship = require('Module:Ship') local StatIcons = require('Module:StatIcons')

local format = require('Module:StringOperations').format local split = require('Module:StringOperations').split

local EliteShipsKai = BaseTable({	_header_template = ${remodel} ! style="width: 24px; text-align: center; vertical-align: middle; background-color: lightcoral;" | ${firepower} ! style="width: 24px; text-align: center; vertical-align: middle; background-color: lightskyblue;" | ${torpedo} ! style="width: 24px; text-align: center; vertical-align: middle; background-color: sandybrown;" | ${aa} ! style="width: 24px; text-align: center; vertical-align: middle; background-color: #9C8FEE;" | ${asw} ! style="width: 24px; text-align: center; vertical-align: middle; background-color: aquamarine;" | ${los} ! style="width: 24px; text-align: center; vertical-align: middle; background-color: palegreen;" | ${luck} ! style="width: 24px; text-align: center; vertical-align: middle; background-color: pink;" | ${hp} ! style="width: 24px; text-align: center; vertical-align: middle; background-color: #F2E279;" | ${armor} ! style="width: 24px; text-align: center; vertical-align: middle; background-color: violet;" | ${evasion} ! style="width: 24px; text-align: center; vertical-align: middle; background-color: #72E6E6;" | ${speed} ! style="width: 24px; text-align: center; vertical-align: middle; background-color: silver;" | ${aircraft} ! style="width: 24px; text-align: center; vertical-align: middle; background-color: forestgreen;" | ${fuel} ! style="width: 24px; text-align: center; vertical-align: middle; background-color: darkgoldenrod;" | ${ammo} ! style="text-align:left;" | Notes, _column_cell_templates = { luck = ${values.luck}(${values.luck_max}), id = ${values.value}, notes = ${values.value} , },	_columns = { "id", "name", "class", "remodel", "firepower", "torpedo", "aa", "asw", "los", "luck", "hp", "armor", "evasion", "speed", "aircraft", "fuel", "ammo", "notes", },	_no_remodel_level = "-", --_nickname_template = " Nicknamed ${nickname}", _item_class = Ship, })

function EliteShipsKai:name(ship) local link, text, section = ship:link local value = {Formatting:inline_block(Formatting:format_link(link, text, section))} --local japanese_name = ship:japanese_name --if japanese_name and (text or link) ~= japanese_name then --	table.insert(value, Formatting:inline_block(Formatting:format_stat(japanese_name))) --end --local nickname = ship:nick --if nickname then --	table.insert(value, format{self._nickname_template, nickname = Formatting:inline_block(Formatting:format_stat(nickname))}) --end return {values = {value = table.concat(value, " ")}, bg_color = self._transparent, text_align = self._center_align} end

function EliteShipsKai:id(ship) local back = ship:back return {values = {value = Formatting:format_stat(ship:id)}, bg_color = self._transparent, --Formatting:format_ship_back(back), extra_style = "", --Formatting:extra_style_background_image(back and back > 7, back and back > 6) or "" text_align = self._center_align } end

function EliteShipsKai:class(ship) local class = ship:class if class then local ship_type = ship:type local value = class:short_base_name local show_type if self._reference_types then show_type = not self._reference_types[ship_type] else show_type = ship_type ~= class:base_type end if show_type then value = Formatting:format_stat_with_detail(value, Formatting:format_ship_code(ship_type)) end return {values = {value = value}, bg_color = self._transparent, text_align = self._center_align} else return {values = {value = "??"}, bg_color = self._transparent, text_align = self._center_align} end end

function EliteShipsKai:remodel(ship) local remodel_level = ship:remodel_level return {values = {value = Formatting:format_stat(remodel_level == false and self._no_remodel_level or remodel_level)}, bg_color = self:get_bg_color(self._cell_color.remodel, remodel_level, self._args.remodel_level_operator, self._args.remodel_level_outstanding, self._args.remodel_level_good), text_align = self._center_align} end

function EliteShipsKai:firepower(ship) local firepower_max = ship:firepower_max if firepower_max == false then firepower_max = ship:firepower end return {values = {value = Formatting:format_stat(firepower_max)}, bg_color = self:get_bg_color(self._cell_color.firepower, firepower_max, self._args.firepower_operator, self._args.firepower_outstanding, self._args.firepower_good), text_align = self._center_align} end

function EliteShipsKai:torpedo(ship) local torpedo_max = ship:torpedo_max if torpedo_max == false then torpedo_max = ship:torpedo end return {values = {value = Formatting:format_stat(torpedo_max)}, bg_color = self:get_bg_color(self._cell_color.torpedo, torpedo_max, self._args.torpedo_operator, self._args.torpedo_outstanding, self._args.torpedo_good), text_align = self._center_align} end

function EliteShipsKai:aa(ship) local aa_max = ship:aa_max if aa_max == false then aa_max = ship:aa end return {values = {value = Formatting:format_stat(aa_max)}, bg_color = self:get_bg_color(self._cell_color.aa, aa_max, self._args.aa_operator, self._args.aa_outstanding, self._args.aa_good), text_align = self._center_align} end

function EliteShipsKai:asw(ship) local asw_max = ship:asw_max if asw_max == false then asw_max = ship:asw end return {values = {value = Formatting:format_stat(asw_max)}, bg_color = self:get_bg_color(self._cell_color.asw, asw_max, self._args.asw_operator, self._args.asw_outstanding, self._args.asw_good), text_align = self._center_align} end

function EliteShipsKai:los(ship) local los_max = ship:los_max if los_max == false then los_max = ship:los end return {values = {value = Formatting:format_stat(los_max)}, bg_color = self:get_bg_color(self._cell_color.los, los_max, self._args.los_operator, self._args.los_outstanding, self._args.los_good), text_align = self._center_align} end

function EliteShipsKai:luck(ship) local luck = ship:luck local luck_max = ship:luck_max return {values = {luck = Formatting:format_stat(luck), luck_max = self:get_emphasis(luck_max, Formatting:format_stat(luck_max), self._args.luck_max_operator, self._args.luck_max_good)}, bg_color = self:get_bg_color(self._cell_color.luck, luck, self._args.luck_operator, self._args.luck_outstanding, self._args.luck_good), text_align = self._center_align} end

function EliteShipsKai:hp(ship) local hp = ship:hp return {values = {value = Formatting:format_stat(hp)}, bg_color = self:get_bg_color(self._cell_color.hp, hp, self._args.hp_operator, self._args.hp_outstanding, self._args.hp_good), text_align = self._center_align} end

function EliteShipsKai:armor(ship) local armor_max = ship:armor_max if armor_max == false then armor_max = ship:armor end return {values = {value = Formatting:format_stat(armor_max)}, bg_color = self:get_bg_color(self._cell_color.armor, armor_max, self._args.armor_operator, self._args.armor_outstanding, self._args.armor_good), text_align = self._center_align} end

function EliteShipsKai:evasion(ship) local evasion_max = ship:evasion_max if evasion_max == false then evasion_max = ship:evasion end return {values = {value = Formatting:format_stat(evasion_max)}, bg_color = self:get_bg_color(self._cell_color.evasion, evasion_max, self._args.evasion_operator, self._args.evasion_outstanding, self._args.evasion_good), text_align = self._center_align} end

function EliteShipsKai:speed(ship) local speed = ship:speed return {values = {value = Formatting:format_speed(speed)}, bg_color = self:get_bg_color(self._cell_color.speed, speed, self._args.speed_operator, self._args.speed_outstanding, self._args.speed_good), text_align = self._center_align} end

function EliteShipsKai:aircraft(ship) local aircraft = ship:total_space local slots = {} if aircraft and aircraft > 0 then for i = 1, ship:slots do			local size = ship:slot_space(i) table.insert(slots, self:get_emphasis(size, Formatting:format_stat(size), self._args.aircraft_slot_operator, self._args.aircraft_slot_good)) end end return {values = {value = Formatting:format_detailed_aircraft(aircraft, slots)}, bg_color = self:get_bg_color(self._cell_color.aircraft, aircraft, self._args.aircraft_operator, self._args.aircraft_outstanding, self._args.aircraft_good), text_align = self._center_align} end

function EliteShipsKai:fuel(ship) local fuel = ship:fuel return {values = {value = Formatting:format_stat(fuel)}, bg_color = self:get_bg_color(self._cell_color.fuel, fuel, self._args.fuel_operator, self._args.fuel_outstanding, self._args.fuel_good), text_align = self._center_align} end

function EliteShipsKai:ammo(ship) local ammo = ship:ammo return {values = {value = Formatting:format_stat(ammo)}, bg_color = self:get_bg_color(self._cell_color.ammo, ammo, self._args.ammo_operator, self._args.ammo_outstanding, self._args.ammo_good), text_align = self._center_align} end

function EliteShipsKai:notes(ship) local note = self._notes[ship] if note then local bg_color if note.highlight == "outstanding" then bg_color = self._outstanding_stat_color elseif note.highlight == "good" then bg_color = self._good_stat_color else bg_color = self._transparent end return {values = {value = note.note or ""}, bg_color = bg_color} end return {values = {value = ""}, bg_color = self._transparent} end

function EliteShipsKai:process_item_key(item_key) local split = mw.ustring.find(item_key, '/') local ship_base_name, ship_suffix if split == nil then ship_base_name = item_key else ship_base_name = mw.ustring.sub(item_key, 1, split - 1) ship_suffix = mw.ustring.sub(item_key, split + 1, -1) end return ship_base_name, ship_suffix end

EliteShipsKai.create_data_rows = EliteShipsKai.create_data_rows_merge_vertical

function EliteShipsKai:create_table_prep if self._args.reference_type then self._reference_types = {} for _, reference_type in ipairs(split(self._args.reference_type, ',%s*')) do			self._reference_types[tonumber(reference_type)] = true end end end

function EliteShipsKai:create_header local header_icons = { remodel = MiscIcons.remodel, firepower = StatIcons.firepower, torpedo = StatIcons.torpedo, aa = StatIcons.aa, asw = StatIcons.asw, los = StatIcons.los, luck = StatIcons.luck, hp = StatIcons.hp, armor = StatIcons.armor, evasion = StatIcons.evasion, speed = StatIcons.speed, aircraft = StatIcons.aircraft, fuel = ResourceIcons.fuel, ammo = ResourceIcons.ammo, }	for key, value in pairs(header_icons) do		header_icons[key] = Formatting:format_image{value, caption = Formatting:format_stat_name(key)} end self._header = format(self._header_template, header_icons) end

return EliteShipsKai