Insert code cell when changing default language (#2031)

This commit is contained in:
Jonatan Kłosko 2023-07-03 15:59:23 +02:00 committed by GitHub
parent 9eb76c8600
commit 16723b98f0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 42 additions and 23 deletions

View file

@ -937,18 +937,7 @@ defmodule LivebookWeb.SessionLive do
end
def handle_event("insert_cell_below", params, socket) do
{type, attrs} = cell_type_and_attrs_from_params(params, socket)
with {:ok, section, index} <-
section_with_next_index(
socket.private.data.notebook,
params["section_id"],
params["cell_id"]
) do
Session.insert_cell(socket.assigns.session.pid, section.id, index, type, attrs)
end
{:noreply, socket}
{:noreply, insert_cell_below(socket, params)}
end
def handle_event("insert_code_block_below", params, socket) do
@ -1034,11 +1023,11 @@ defmodule LivebookWeb.SessionLive do
end
end
def handle_event("set_default_language", %{"language" => language}, socket)
def handle_event("set_default_language", %{"language" => language} = params, socket)
when language in ["elixir", "erlang"] do
language = String.to_atom(language)
Session.set_notebook_attributes(socket.assigns.session.pid, %{default_language: language})
{:noreply, socket}
{:noreply, insert_cell_below(socket, params)}
end
def handle_event("delete_cell", %{"cell_id" => cell_id}, socket) do
@ -1497,7 +1486,7 @@ defmodule LivebookWeb.SessionLive do
"url" => url
}
handle_event("insert_cell_below", params, socket)
{:noreply, insert_cell_below(socket, params)}
end
def handle_info({:push_patch, to}, socket) do
@ -1894,12 +1883,28 @@ defmodule LivebookWeb.SessionLive do
String.upcase(head) <> tail
end
defp cell_type_and_attrs_from_params(%{"type" => "markdown"}, _socket), do: {:markdown, %{}}
defp insert_cell_below(socket, params) do
{type, attrs} = cell_type_and_attrs_from_params(params)
defp cell_type_and_attrs_from_params(%{"type" => "code"}, socket),
do: {:code, %{language: socket.private.data.notebook.default_language}}
with {:ok, section, index} <-
section_with_next_index(
socket.private.data.notebook,
params["section_id"],
params["cell_id"]
) do
Session.insert_cell(socket.assigns.session.pid, section.id, index, type, attrs)
end
defp cell_type_and_attrs_from_params(%{"type" => "diagram"}, _socket) do
socket
end
defp cell_type_and_attrs_from_params(%{"type" => "markdown"}), do: {:markdown, %{}}
defp cell_type_and_attrs_from_params(%{"type" => "code", "language" => language})
when language in ["elixir", "erlang"],
do: {:code, %{language: String.to_atom(language)}}
defp cell_type_and_attrs_from_params(%{"type" => "diagram"}) do
source = """
<!-- Learn more at https://mermaid-js.github.io/mermaid -->
@ -1915,7 +1920,7 @@ defmodule LivebookWeb.SessionLive do
{:markdown, %{source: source}}
end
defp cell_type_and_attrs_from_params(%{"type" => "image", "url" => url}, _socket) do
defp cell_type_and_attrs_from_params(%{"type" => "image", "url" => url}) do
source = "![](#{url})"
{:markdown, %{source: source}}

View file

@ -23,9 +23,9 @@ defmodule LivebookWeb.SessionLive.InsertButtonsComponent do
class="pr-2"
phx-click="insert_cell_below"
phx-value-type="code"
phx-value-language={@default_language}
phx-value-section_id={@section_id}
phx-value-cell_id={@cell_id}
phx-value-language="elixir"
>
+ <%= @default_language |> Atom.to_string() |> String.capitalize() %>
</div>
@ -35,13 +35,27 @@ defmodule LivebookWeb.SessionLive.InsertButtonsComponent do
</button>
</:toggle>
<.menu_item>
<button role="menuitem" phx-click="set_default_language" phx-value-language="elixir">
<button
role="menuitem"
phx-click="set_default_language"
phx-value-type="code"
phx-value-language="elixir"
phx-value-section_id={@section_id}
phx-value-cell_id={@cell_id}
>
<.cell_icon cell_type={:code} language={:elixir} />
<span>Elixir</span>
</button>
</.menu_item>
<.menu_item>
<button role="menuitem" phx-click="set_default_language" phx-value-language="erlang">
<button
role="menuitem"
phx-click="set_default_language"
phx-value-type="code"
phx-value-language="erlang"
phx-value-section_id={@section_id}
phx-value-cell_id={@cell_id}
>
<.cell_icon cell_type={:code} language={:erlang} />
<span>Erlang</span>
</button>