mirror of
https://github.com/livebook-dev/livebook.git
synced 2025-10-06 19:46:00 +08:00
Insert code cell when changing default language (#2031)
This commit is contained in:
parent
9eb76c8600
commit
16723b98f0
2 changed files with 42 additions and 23 deletions
|
@ -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 = ""
|
||||
|
||||
{:markdown, %{source: source}}
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Add table
Reference in a new issue