mirror of
https://github.com/livebook-dev/livebook.git
synced 2025-10-10 21:46:46 +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
|
end
|
||||||
|
|
||||||
def handle_event("insert_cell_below", params, socket) do
|
def handle_event("insert_cell_below", params, socket) do
|
||||||
{type, attrs} = cell_type_and_attrs_from_params(params, socket)
|
{:noreply, insert_cell_below(socket, params)}
|
||||||
|
|
||||||
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}
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def handle_event("insert_code_block_below", params, socket) do
|
def handle_event("insert_code_block_below", params, socket) do
|
||||||
|
@ -1034,11 +1023,11 @@ defmodule LivebookWeb.SessionLive do
|
||||||
end
|
end
|
||||||
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
|
when language in ["elixir", "erlang"] do
|
||||||
language = String.to_atom(language)
|
language = String.to_atom(language)
|
||||||
Session.set_notebook_attributes(socket.assigns.session.pid, %{default_language: language})
|
Session.set_notebook_attributes(socket.assigns.session.pid, %{default_language: language})
|
||||||
{:noreply, socket}
|
{:noreply, insert_cell_below(socket, params)}
|
||||||
end
|
end
|
||||||
|
|
||||||
def handle_event("delete_cell", %{"cell_id" => cell_id}, socket) do
|
def handle_event("delete_cell", %{"cell_id" => cell_id}, socket) do
|
||||||
|
@ -1497,7 +1486,7 @@ defmodule LivebookWeb.SessionLive do
|
||||||
"url" => url
|
"url" => url
|
||||||
}
|
}
|
||||||
|
|
||||||
handle_event("insert_cell_below", params, socket)
|
{:noreply, insert_cell_below(socket, params)}
|
||||||
end
|
end
|
||||||
|
|
||||||
def handle_info({:push_patch, to}, socket) do
|
def handle_info({:push_patch, to}, socket) do
|
||||||
|
@ -1894,12 +1883,28 @@ defmodule LivebookWeb.SessionLive do
|
||||||
String.upcase(head) <> tail
|
String.upcase(head) <> tail
|
||||||
end
|
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),
|
with {:ok, section, index} <-
|
||||||
do: {:code, %{language: socket.private.data.notebook.default_language}}
|
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 = """
|
source = """
|
||||||
<!-- Learn more at https://mermaid-js.github.io/mermaid -->
|
<!-- Learn more at https://mermaid-js.github.io/mermaid -->
|
||||||
|
|
||||||
|
@ -1915,7 +1920,7 @@ defmodule LivebookWeb.SessionLive do
|
||||||
{:markdown, %{source: source}}
|
{:markdown, %{source: source}}
|
||||||
end
|
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 = ""
|
source = ""
|
||||||
|
|
||||||
{:markdown, %{source: source}}
|
{:markdown, %{source: source}}
|
||||||
|
|
|
@ -23,9 +23,9 @@ defmodule LivebookWeb.SessionLive.InsertButtonsComponent do
|
||||||
class="pr-2"
|
class="pr-2"
|
||||||
phx-click="insert_cell_below"
|
phx-click="insert_cell_below"
|
||||||
phx-value-type="code"
|
phx-value-type="code"
|
||||||
|
phx-value-language={@default_language}
|
||||||
phx-value-section_id={@section_id}
|
phx-value-section_id={@section_id}
|
||||||
phx-value-cell_id={@cell_id}
|
phx-value-cell_id={@cell_id}
|
||||||
phx-value-language="elixir"
|
|
||||||
>
|
>
|
||||||
+ <%= @default_language |> Atom.to_string() |> String.capitalize() %>
|
+ <%= @default_language |> Atom.to_string() |> String.capitalize() %>
|
||||||
</div>
|
</div>
|
||||||
|
@ -35,13 +35,27 @@ defmodule LivebookWeb.SessionLive.InsertButtonsComponent do
|
||||||
</button>
|
</button>
|
||||||
</:toggle>
|
</:toggle>
|
||||||
<.menu_item>
|
<.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} />
|
<.cell_icon cell_type={:code} language={:elixir} />
|
||||||
<span>Elixir</span>
|
<span>Elixir</span>
|
||||||
</button>
|
</button>
|
||||||
</.menu_item>
|
</.menu_item>
|
||||||
<.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} />
|
<.cell_icon cell_type={:code} language={:erlang} />
|
||||||
<span>Erlang</span>
|
<span>Erlang</span>
|
||||||
</button>
|
</button>
|
||||||
|
|
Loading…
Add table
Reference in a new issue