<%= if @debug_diff and assigns[:old_buffer] do %>
<%= raw(TerminalBridge.buffer_diff_to_html(@old_buffer, @buffer,
theme: @theme,
css_prefix: @css_prefix
)) %>
<% else %>
<%= raw(TerminalBridge.buffer_to_html(@buffer,
theme: @theme,
css_prefix: @css_prefix,
show_cursor: @show_cursor,
cursor_position: @cursor_position,
cursor_style: @cursor_style
)) %>
<% end %>
<%= if @focusable do %>
<% end %>
"""
end
@impl true
def handle_event("terminal_keydown", %{"key" => key} = params, socket) do
event = %{
key: key,
code: Map.get(params, "code"),
alt: Map.get(params, "altKey", false),
ctrl: Map.get(params, "ctrlKey", false),
shift: Map.get(params, "shiftKey", false),
meta: Map.get(params, "metaKey", false)
}
if handler = socket.assigns.on_keypress do
handler.(event)
end
{:noreply, socket}
end
@impl true
def handle_event("terminal_click", %{"x" => x, "y" => y}, socket) do
event = %{x: x, y: y}
if handler = socket.assigns.on_click do
handler.(event)
end
{:noreply, socket}
end
@impl true
def handle_event("terminal_paste", %{"text" => text}, socket) do
event = %{text: text}
if handler = socket.assigns.on_paste do
handler.(event)
end
{:noreply, socket}
end
@impl true
def handle_event("terminal_focus", _params, socket) do
if handler = socket.assigns.on_focus do
handler.()
end
{:noreply, socket}
end
@impl true
def handle_event("terminal_blur", _params, socket) do
if handler = socket.assigns.on_blur do
handler.()
end
{:noreply, socket}
end
end