• Welcome to the Kancolle Wiki!
  • If you have any questions regarding site content, account registration, etc., please visit the KanColle Wiki Discord

Difference between revisions of "Module:EquipmentLink"

From Kancolle Wiki
Jump to navigation Jump to search
 
(33 intermediate revisions by 3 users not shown)
Line 1: Line 1:
 
local getArgs = require("Module:GetArgs")
 
local getArgs = require("Module:GetArgs")
local U = require("Module:Utils")
+
local U = require("Module:Core")
 
local F = require("Module:Formatting")
 
local F = require("Module:Formatting")
 
local Equipment = require("Module:Equipment")
 
local Equipment = require("Module:Equipment")
 
local EquipmentCardKai = require("Module:EquipmentCardKai")
 
local EquipmentCardKai = require("Module:EquipmentCardKai")
 +
local EquipmentGraphicKai = require("Module:EquipmentGraphicKai")
  
 
local EquipmentLink = {}
 
local EquipmentLink = {}
Line 9: Line 10:
 
function EquipmentLink.format(frame, args)
 
function EquipmentLink.format(frame, args)
  
     args = args or getArgs{ frame = frame:getParent() }
+
     args = args
 +
        or U.getTemplateArgs(frame).implicit[1] and U.getTemplateArgs(frame).implicit
 +
        or U.getTemplateArgs(frame).explicit
  
 
     local name = args[1] or "??"
 
     local name = args[1] or "??"
Line 16: Line 19:
 
     local image = args.image
 
     local image = args.image
 
     local icon = args.icon
 
     local icon = args.icon
 +
 +
    local size = args.size or (args[2] and "160px" or "260px")
  
 
     local cards = {}
 
     local cards = {}
 
     for _, arg in ipairs(args) do
 
     for _, arg in ipairs(args) do
         table.insert(cards, EquipmentCardKai:Asset({ arg, size = args.size }))
+
        local equip = arg ~= "-" and Equipment(arg)
 +
         table.insert(
 +
            cards,
 +
            arg == "-" and
 +
            "<br />" or
 +
            equip._is_enemy and
 +
            EquipmentGraphicKai:get{ equip = equip, size = size } or
 +
            EquipmentCardKai:get{ equip = equip, size = size }
 +
        )
 
     end
 
     end
  
     local formatted_link
+
     local formatted_image
 
         = image
 
         = image
         and EquipmentCardKai:Asset({ name, size = image, link = link or name })
+
         and EquipmentCardKai:Asset({ name, size = image == "true" and "50px" or image, link = link or name })
         or F:format_link(link or name, text or name)
+
         or ""
  
 
     local formatted_icon
 
     local formatted_icon
Line 32: Line 45:
 
         and F:format_image{ F:format_equipment_icon(Equipment(name):icon()) }
 
         and F:format_image{ F:format_equipment_icon(Equipment(name):icon()) }
 
         or ""
 
         or ""
 +
       
 +
    local formatted_text
 +
   
 +
    if text then
 +
        if text == "true" then
 +
            formatted_text = F:format_link(link or name, name)
 +
        else
 +
            formatted_text = F:format_link(link or name, text)
 +
        end
 +
    else
 +
        if image then
 +
            formatted_text = ""
 +
        else
 +
            formatted_text = F:format_link(link or name, name)
 +
        end
 +
    end
  
     local tooltip_content = F:class_div("tooltip-contents", nil, #cards > 0 and table.concat(cards, "") or "??")
+
     local tooltip_content = F:class_span("tooltiptext", nil, #cards > 0 and table.concat(cards, "") or "??")
  
     return F:class_span("advanced-tooltip", nil, formatted_icon .. formatted_link .. tooltip_content)
+
     return F:class_span("tooltip", nil, formatted_icon .. formatted_image .. formatted_text .. tooltip_content)
  
 
end
 
end
  
--[[
 
 
U.registerFormatTests(EquipmentLink, {
 
U.registerFormatTests(EquipmentLink, {
 
     { "Prototype 51cm Twin Gun Mount" },
 
     { "Prototype 51cm Twin Gun Mount" },
Line 46: Line 74:
 
     { "Prototype 51cm Twin Gun Mount", image = "50px" },
 
     { "Prototype 51cm Twin Gun Mount", image = "50px" },
 
     { "Prototype 51cm Twin Gun Mount", icon = "x" },
 
     { "Prototype 51cm Twin Gun Mount", icon = "x" },
 +
    { "Prototype 51cm Twin Gun Mount", "Prototype 51cm Twin Gun Mount" },
 
     { },
 
     { },
 
     { icon = "x" },
 
     { icon = "x" },
 
})
 
})
 
-- p.run_format_tests()
 
-- p.run_format_tests()
]]--
 
  
 
return EquipmentLink
 
return EquipmentLink

Latest revision as of 15:15, 30 April 2023

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

local getArgs = require("Module:GetArgs")
local U = require("Module:Core")
local F = require("Module:Formatting")
local Equipment = require("Module:Equipment")
local EquipmentCardKai = require("Module:EquipmentCardKai")
local EquipmentGraphicKai = require("Module:EquipmentGraphicKai")

local EquipmentLink = {}

function EquipmentLink.format(frame, args)

    args = args
        or U.getTemplateArgs(frame).implicit[1] and U.getTemplateArgs(frame).implicit
        or U.getTemplateArgs(frame).explicit

    local name = args[1] or "??"
    local text = args.text
    local link = args.link
    local image = args.image
    local icon = args.icon

    local size = args.size or (args[2] and "160px" or "260px")

    local cards = {}
    for _, arg in ipairs(args) do
        local equip = arg ~= "-" and Equipment(arg)
        table.insert(
            cards,
            arg == "-" and
            "<br />" or
            equip._is_enemy and
            EquipmentGraphicKai:get{ equip = equip, size = size } or
            EquipmentCardKai:get{ equip = equip, size = size }
        )
    end

    local formatted_image
        = image
        and EquipmentCardKai:Asset({ name, size = image == "true" and "50px" or image, link = link or name })
        or ""

    local formatted_icon
        = icon
        -- [[Category:Todo]] again, would be nice to share Equipment object with EquipmentCardKai
        and F:format_image{ F:format_equipment_icon(Equipment(name):icon()) }
        or ""
        
    local formatted_text
    
    if text then
        if text == "true" then
            formatted_text = F:format_link(link or name, name)
        else
            formatted_text = F:format_link(link or name, text)
        end
    else
        if image then
            formatted_text = ""
        else 
            formatted_text = F:format_link(link or name, name)
        end
    end

    local tooltip_content = F:class_span("tooltiptext", nil, #cards > 0 and table.concat(cards, "") or "??")

    return F:class_span("tooltip", nil, formatted_icon .. formatted_image .. formatted_text .. tooltip_content)

end

U.registerFormatTests(EquipmentLink, {
    { "Prototype 51cm Twin Gun Mount" },
    { "Type 4 Passive Sonar", link = "Sonar" },
    { "Prototype 51cm Twin Gun Mount", "P51cm" },
    { "Prototype 51cm Twin Gun Mount", image = "50px" },
    { "Prototype 51cm Twin Gun Mount", icon = "x" },
    { "Prototype 51cm Twin Gun Mount", "Prototype 51cm Twin Gun Mount" },
    { },
    { icon = "x" },
})
-- p.run_format_tests()

return EquipmentLink