Files
chess-trainer/lib/chesstrainer_web/components/board/piece_component.ex
T

34 lines
1.4 KiB
Elixir

defmodule ChesstrainerWeb.Board.PieceComponent do
@moduledoc """
Chess pieces component
"""
use Phoenix.Component
attr :piece, :any, required: true
attr :class, :string, default: ""
def piece(assigns) do
assigns = assign(assigns, :path, piece_path(assigns.piece))
~H"""
<%= if @path do %>
<img src={@path} class={@class} />
<% end %>
"""
end
def piece_path({:king, :white, _square}), do: "/images/pieces/white/king.svg"
def piece_path({:queen, :white, _square}), do: "/images/pieces/white/queen.svg"
def piece_path({:rook, :white, _square}), do: "/images/pieces/white/rook.svg"
def piece_path({:bishop, :white, _square}), do: "/images/pieces/white/bishop.svg"
def piece_path({:knight, :white, _square}), do: "/images/pieces/white/knight.svg"
def piece_path({:pawn, :white, _square}), do: "/images/pieces/white/pawn.svg"
def piece_path({:king, :black, _square}), do: "/images/pieces/black/king.svg"
def piece_path({:queen, :black, _square}), do: "/images/pieces/black/queen.svg"
def piece_path({:rook, :black, _square}), do: "/images/pieces/black/rook.svg"
def piece_path({:bishop, :black, _square}), do: "/images/pieces/black/bishop.svg"
def piece_path({:knight, :black, _square}), do: "/images/pieces/black/knight.svg"
def piece_path({:pawn, :black, _square}), do: "/images/pieces/black/pawn.svg"
def piece_path(_), do: nil
end