"""
end
defp render_cell_anchor_link(assigns) do
~L"""
<%= remix_icon("link", class: "text-xl") %>
"""
end
# The whole page has to load and then hooks are mounded.
# There may be a tiny delay before the markdown is rendered
# or editors are mounted, so show neat placeholders immediately.
defp render_markdown_content_placeholder(empty: true) do
assigns = %{}
~L"""
"""
end
defp render_markdown_content_placeholder(empty: false) do
assigns = %{}
~L"""
"""
end
defp render_editor_content_placeholder(empty: true) do
assigns = %{}
~L"""
"""
end
defp render_editor_content_placeholder(empty: false) do
assigns = %{}
~L"""
"""
end
defp render_outputs(assigns, socket) do
~L"""
<%= for {output, index} <- @cell_view.outputs |> Enum.reverse() |> Enum.with_index(), output != :ignored do %>
"""
end
defp render_output(_socket, text, id) when is_binary(text) do
text
# Captured output usually has a trailing newline that we can ignore,
# because each line is itself an HTML block anyway.
|> String.replace_suffix("\n", "")
|> render_virtualized_output(id, follow: true)
end
defp render_output(_socket, {:text, text}, id) do
render_virtualized_output(text, id)
end
defp render_output(_socket, {:vega_lite_static, spec}, id) do
live_component(LivebookWeb.Output.VegaLiteStaticComponent, id: id, spec: spec)
end
defp render_output(socket, {:vega_lite_dynamic, pid}, id) do
live_render(socket, LivebookWeb.Output.VegaLiteDynamicLive,
id: id,
session: %{"id" => id, "pid" => pid}
)
end
defp render_output(_socket, {:error, formatted}, _id) do
render_error_message_output(formatted)
end
defp render_output(_socket, output, _id) do
render_error_message_output("""
Unknown output format: #{inspect(output)}. If you're using Kino,
you may want to update Kino and Livebook to the latest version.
""")
end
defp render_virtualized_output(text, id, opts \\ []) do
follow = Keyword.get(opts, :follow, false)
lines = ansi_to_html_lines(text)
assigns = %{lines: lines, id: id, follow: follow}
~L"""
<%= for line <- @lines do %>
<%= line %>
<% end %>
"""
end
defp render_error_message_output(message) do
assigns = %{message: message}
~L"""
<%= @message %>
"""
end
defp render_cell_status(validity_status, evaluation_status, changed)
defp render_cell_status(_, :evaluating, changed) do
render_status_indicator("Evaluating", "bg-blue-500", "bg-blue-400", changed)
end
defp render_cell_status(_, :queued, _) do
render_status_indicator("Queued", "bg-gray-500", "bg-gray-400", false)
end
defp render_cell_status(:evaluated, _, changed) do
render_status_indicator("Evaluated", "bg-green-400", nil, changed)
end
defp render_cell_status(:stale, _, changed) do
render_status_indicator("Stale", "bg-yellow-200", nil, changed)
end
defp render_cell_status(:aborted, _, _) do
render_status_indicator("Aborted", "bg-red-400", nil, false)
end
defp render_cell_status(_, _, _), do: nil
defp render_status_indicator(text, circle_class, animated_circle_class, show_changed) do
assigns = %{
text: text,
circle_class: circle_class,
animated_circle_class: animated_circle_class,
show_changed: show_changed
}
~L"""