Module:ShipCardTable: Difference between revisions

From Corsair Cove Official Wiki
Dorce (talk | contribs)
No edit summary
Dorce (talk | contribs)
No edit summary
 
(10 intermediate revisions by the same user not shown)
Line 3: Line 3:
local ship_card_data = require("Module:ShipCardData")
local ship_card_data = require("Module:ShipCardData")
local objective_order = {
local objective_order = {
     "Chase",
     {
    "Navigate",
        label = "Chase<br/>Navigate<br/>Outrun<br/>Traverse",
     "Outrun",
        key = "Move"
    "Traverse",
    },
     "Board",
     {
    "Demoralise",
        label = "Board<br/>Demoralise",
     "Destroy",
        key = "Kill"
    "Shoot",
    },
     "Defend",
     {
    "Survive",
        label = "Destroy<br/>Shoot",
     "Sneak",
        key = "Shoot"
    "Threaten",
    },
     "Plunder",
     {
        label = "Defend<br/>Endure<br/>Survive",
        key = "Defend"
    },
     {
        label = "Sneak<br/>Ambush",
        key = "Sneak"
    },
     {
        label = "Threaten",
        key = "Threaten"
    },
     {
        label = "Plunder",
        key = "Plunder"
    }
}
}
local function escape_html(text)
    return text
        :gsub('&', '&amp;')
        :gsub('<', '&lt;')
        :gsub('>', '&gt;')
end


local function cards_to_wiki(cards)
local function cards_to_wiki(cards)
Line 25: Line 47:


     local card_1_text =
     local card_1_text =
         'Cost: ' .. tostring(card_1.Cost or 0) ..
         "'''Cost:''' " .. tostring(card_1.Cost or 0) ..
         ', Effect: ' .. (card_1.Effect or '')
         "<br/>'''Effect:''' <br/>''" .. escape_html(card_1.Effect or '') .. "''"


     local card_2_text =
     local card_2_text =
         'Cost: ' .. tostring(card_2.Cost or 0) ..
         "'''Cost:''' " .. tostring(card_2.Cost or 0) ..
         ', Effect: ' .. (card_2.Effect or '')
         "<br/>'''Effect:''' <br/>''" .. escape_html(card_2.Effect or '') .. "''"


    return table.concat({
return table.concat({
        '<table class="wikitable">',
    '<table class="wikitable" style="min-width: 20vw;">',
        '<tr><th>Card 1</th><th>Card 2</th></tr>',
    '<tr><th style="min-width: 10vw;">Card 1</th><th style="min-width: 10vw;">Card 2</th></tr>',
        '<tr><td>' .. card_1_text .. '</td><td>' .. card_2_text .. '</td></tr>',
    '<tr><td style="min-width: 10vw;">' .. card_1_text .. '</td><td style="min-width: 10vw;">' .. card_2_text .. '</td></tr>',
        '</table>'
    '</table>'
    }, '')
}, '')
end
end


function Export.ship_to_wiki(ship_type, cards)
function Export.ship_to_wiki(ship_type, cards)
     local cells = {
     local cells = {
        ship_type or ''
      "'''" .. (ship_type or '') .. "'''"
     }
     }


Line 48: Line 70:


     for _, objective in ipairs(objective_order) do
     for _, objective in ipairs(objective_order) do
         table.insert(cells, cards_to_wiki(cards[objective]))
         table.insert(cells, cards_to_wiki(cards[objective.key]))
     end
     end


Line 55: Line 77:


function Export.wiki_ship_card_table()
function Export.wiki_ship_card_table()
     local rows = {}
     local rows = {}


Line 62: Line 83:
     end
     end


return table.concat({
    local headers = {}
    '{| class="wikitable sortable"',
 
    '! class="unsortable" | Ship Type !! ' .. table.concat(objective_order, ' !! '),
    for _, objective in ipairs(objective_order) do
    '|-',
        table.insert(headers, objective.label)
    table.concat(rows, '\n|-\n'),
    end
    '|}',
 
    ''
    return table.concat({
}, '\n')
        '{| class="wikitable sortable"',
        '! Objective(s) !! class="unsortable" | ' ..
            table.concat(headers, ' !! class="unsortable" | '),
        '|-',
        table.concat(rows, '\n|-\n'),
        '|}',
        ''
    }, '\n')
end
end


return Export
return Export

Latest revision as of 18:48, 18 August 2026

Documentation for this module may be created at Module:ShipCardTable/doc

local Export = {}
local card_data = require("Module:CardData")
local ship_card_data = require("Module:ShipCardData")
local objective_order = {
    {
        label = "Chase<br/>Navigate<br/>Outrun<br/>Traverse",
        key = "Move"
    },
    {
        label = "Board<br/>Demoralise",
        key = "Kill"
    },
    {
        label = "Destroy<br/>Shoot",
        key = "Shoot"
    },
    {
        label = "Defend<br/>Endure<br/>Survive",
        key = "Defend"
    },
    {
        label = "Sneak<br/>Ambush",
        key = "Sneak"
    },
    {
        label = "Threaten",
        key = "Threaten"
    },
    {
        label = "Plunder",
        key = "Plunder"
    }
}

local function escape_html(text)
    return text
        :gsub('&', '&amp;')
        :gsub('<', '&lt;')
        :gsub('>', '&gt;')
end

local function cards_to_wiki(cards)
    cards = cards or {}

    local card_1 = card_data[cards.Card1] or {}
    local card_2 = card_data[cards.Card2] or {}

    local card_1_text =
        "'''Cost:''' " .. tostring(card_1.Cost or 0) ..
        "<br/>'''Effect:''' <br/>''" .. escape_html(card_1.Effect or '') .. "''"

    local card_2_text =
        "'''Cost:''' " .. tostring(card_2.Cost or 0) ..
        "<br/>'''Effect:''' <br/>''" .. escape_html(card_2.Effect or '') .. "''"

	return table.concat({
	    '<table class="wikitable" style="min-width: 20vw;">',
	    '<tr><th style="min-width: 10vw;">Card 1</th><th style="min-width: 10vw;">Card 2</th></tr>',
	    '<tr><td style="min-width: 10vw;">' .. card_1_text .. '</td><td style="min-width: 10vw;">' .. card_2_text .. '</td></tr>',
	    '</table>'
	}, '')
end

function Export.ship_to_wiki(ship_type, cards)
    local cells = {
       "'''" .. (ship_type or '') .. "'''"
    }

    cards = cards or {}

    for _, objective in ipairs(objective_order) do
        table.insert(cells, cards_to_wiki(cards[objective.key]))
    end

    return '| ' .. table.concat(cells, '\n| ')
end

function Export.wiki_ship_card_table()
    local rows = {}

    for ship_type, objective_cards in pairs(ship_card_data) do
        table.insert(rows, Export.ship_to_wiki(ship_type, objective_cards))
    end

    local headers = {}

    for _, objective in ipairs(objective_order) do
        table.insert(headers, objective.label)
    end

    return table.concat({
        '{| class="wikitable sortable"',
        '! Objective(s) !! class="unsortable" | ' ..
            table.concat(headers, ' !! class="unsortable" | '),
        '|-',
        table.concat(rows, '\n|-\n'),
        '|}',
        ''
    }, '\n')
end

return Export