diff --git a/config/config.exs b/config/config.exs index cd6eb52a7..7a6286caf 100644 --- a/config/config.exs +++ b/config/config.exs @@ -5,9 +5,7 @@ config :livebook, LivebookWeb.Endpoint, url: [host: "localhost"], secret_key_base: "9hHHeOiAA8wrivUfuS//jQMurHxoMYUtF788BQMx2KO7mYUE8rVrGGG09djBNQq7", pubsub_server: Livebook.PubSub, - live_view: [signing_salt: "mAPgPEM4"], - # We are always in debug mode since we are executing code anyway - debug_errors: true + live_view: [signing_salt: "mAPgPEM4"] # Configures Elixir's Logger config :logger, :console, diff --git a/config/dev.exs b/config/dev.exs index 77e2fea86..2dfb834e8 100644 --- a/config/dev.exs +++ b/config/dev.exs @@ -10,6 +10,7 @@ config :livebook, LivebookWeb.Endpoint, # Change to `ip: {0, 0, 0, 0}` to allow access from other machines. http: [ip: {127, 0, 0, 1}, port: 4000], code_reloader: true, + debug_errors: true, check_origin: false, watchers: [ node: [ diff --git a/lib/livebook_web/live/home_live.ex b/lib/livebook_web/live/home_live.ex index d72014dae..21511af1a 100644 --- a/lib/livebook_web/live/home_live.ex +++ b/lib/livebook_web/live/home_live.ex @@ -17,13 +17,6 @@ defmodule LivebookWeb.HomeLive do @impl true def render(assigns) do ~L""" - <%= if @live_action == :delete_session do %> - <%= live_modal @socket, LivebookWeb.DeleteSessionComponent, - id: :delete_session_modal, - return_to: Routes.home_path(@socket, :page), - session_summary: @session_summary %> - <% end %> -
<%= live_patch to: Routes.home_path(@socket, :page) do %> @@ -92,7 +85,7 @@ defmodule LivebookWeb.HomeLive do
<% else %> - <%= live_component @socket, LivebookWeb.SessionsComponent, + <%= live_component @socket, LivebookWeb.SessionLive.SessionsComponent, id: "sessions_list", session_summaries: @session_summaries %> <% end %> @@ -100,6 +93,13 @@ defmodule LivebookWeb.HomeLive do + + <%= if @live_action == :delete_session do %> + <%= live_modal @socket, LivebookWeb.SessionLive.DeleteSessionComponent, + id: :delete_session_modal, + return_to: Routes.home_path(@socket, :page), + session_summary: @session_summary %> + <% end %> """ end diff --git a/lib/livebook_web/live/delete_session_component.ex b/lib/livebook_web/live/home_live/delete_session_component.ex similarity index 94% rename from lib/livebook_web/live/delete_session_component.ex rename to lib/livebook_web/live/home_live/delete_session_component.ex index 53ce09ab8..3134614c1 100644 --- a/lib/livebook_web/live/delete_session_component.ex +++ b/lib/livebook_web/live/home_live/delete_session_component.ex @@ -1,4 +1,4 @@ -defmodule LivebookWeb.DeleteSessionComponent do +defmodule LivebookWeb.SessionLive.DeleteSessionComponent do use LivebookWeb, :live_component alias Livebook.SessionSupervisor diff --git a/lib/livebook_web/live/sessions_component.ex b/lib/livebook_web/live/home_live/sessions_component.ex similarity index 96% rename from lib/livebook_web/live/sessions_component.ex rename to lib/livebook_web/live/home_live/sessions_component.ex index 47c29cc8d..adf81c39f 100644 --- a/lib/livebook_web/live/sessions_component.ex +++ b/lib/livebook_web/live/home_live/sessions_component.ex @@ -1,4 +1,4 @@ -defmodule LivebookWeb.SessionsComponent do +defmodule LivebookWeb.SessionLive.SessionsComponent do use LivebookWeb, :live_component @impl true diff --git a/lib/livebook_web/live/session_live.ex b/lib/livebook_web/live/session_live.ex index 7d5d1f81c..4d6d1b8ef 100644 --- a/lib/livebook_web/live/session_live.ex +++ b/lib/livebook_web/live/session_live.ex @@ -47,30 +47,6 @@ defmodule LivebookWeb.SessionLive do @impl true def render(assigns) do ~L""" - <%= if @live_action == :settings do %> - <%= live_modal @socket, LivebookWeb.SessionLive.SettingsComponent, - id: :settings_modal, - return_to: Routes.session_path(@socket, :page, @session_id), - tab: @tab, - session_id: @session_id, - data_view: @data_view %> - <% end %> - - <%= if @live_action == :shortcuts do %> - <%= live_modal @socket, LivebookWeb.SessionLive.ShortcutsComponent, - id: :shortcuts_modal, - platform: @platform, - return_to: Routes.session_path(@socket, :page, @session_id) %> - <% end %> - - <%= if @live_action == :cell_settings do %> - <%= live_modal @socket, LivebookWeb.SessionLive.CellSettingsComponent, - id: :cell_settings_modal, - session_id: @session_id, - cell: @cell, - return_to: Routes.session_path(@socket, :page, @session_id) %> - <% end %> -
<% end %> <%= for {section_view, index} <- Enum.with_index(@data_view.section_views) do %> - <%= live_component @socket, LivebookWeb.SectionComponent, + <%= live_component @socket, LivebookWeb.SessionLive.SectionComponent, id: section_view.id, index: index, session_id: @session_id, @@ -157,6 +133,30 @@ defmodule LivebookWeb.SessionLive do data_view: @data_view %>
+ + <%= if @live_action == :settings do %> + <%= live_modal @socket, LivebookWeb.SessionLive.SettingsComponent, + id: :settings_modal, + return_to: Routes.session_path(@socket, :page, @session_id), + tab: @tab, + session_id: @session_id, + data_view: @data_view %> + <% end %> + + <%= if @live_action == :shortcuts do %> + <%= live_modal @socket, LivebookWeb.SessionLive.ShortcutsComponent, + id: :shortcuts_modal, + platform: @platform, + return_to: Routes.session_path(@socket, :page, @session_id) %> + <% end %> + + <%= if @live_action == :cell_settings do %> + <%= live_modal @socket, LivebookWeb.SessionLive.CellSettingsComponent, + id: :cell_settings_modal, + session_id: @session_id, + cell: @cell, + return_to: Routes.session_path(@socket, :page, @session_id) %> + <% end %> """ end diff --git a/lib/livebook_web/live/cell_component.ex b/lib/livebook_web/live/session_live/cell_component.ex similarity index 99% rename from lib/livebook_web/live/cell_component.ex rename to lib/livebook_web/live/session_live/cell_component.ex index 073c44fdb..432ab1f42 100644 --- a/lib/livebook_web/live/cell_component.ex +++ b/lib/livebook_web/live/session_live/cell_component.ex @@ -1,4 +1,4 @@ -defmodule LivebookWeb.CellComponent do +defmodule LivebookWeb.SessionLive.CellComponent do use LivebookWeb, :live_component def render(assigns) do diff --git a/lib/livebook_web/live/insert_buttons_component.ex b/lib/livebook_web/live/session_live/insert_buttons_component.ex similarity index 94% rename from lib/livebook_web/live/insert_buttons_component.ex rename to lib/livebook_web/live/session_live/insert_buttons_component.ex index 8234f38de..ec3f2e125 100644 --- a/lib/livebook_web/live/insert_buttons_component.ex +++ b/lib/livebook_web/live/session_live/insert_buttons_component.ex @@ -1,4 +1,4 @@ -defmodule LivebookWeb.InsertButtonsComponent do +defmodule LivebookWeb.SessionLive.InsertButtonsComponent do use LivebookWeb, :live_component def render(assigns) do diff --git a/lib/livebook_web/live/section_component.ex b/lib/livebook_web/live/session_live/section_component.ex similarity index 87% rename from lib/livebook_web/live/section_component.ex rename to lib/livebook_web/live/session_live/section_component.ex index 4a70750af..e774e9616 100644 --- a/lib/livebook_web/live/section_component.ex +++ b/lib/livebook_web/live/session_live/section_component.ex @@ -1,4 +1,4 @@ -defmodule LivebookWeb.SectionComponent do +defmodule LivebookWeb.SessionLive.SectionComponent do use LivebookWeb, :live_component def render(assigns) do @@ -27,18 +27,18 @@ defmodule LivebookWeb.SectionComponent do
<%= for {cell_view, index} <- Enum.with_index(@section_view.cell_views) do %> - <%= live_component @socket, LivebookWeb.InsertButtonsComponent, + <%= live_component @socket, LivebookWeb.SessionLive.InsertButtonsComponent, id: "#{@section_view.id}:#{index}", persistent: false, section_id: @section_view.id, insert_cell_index: index, insert_section_index: nil %> - <%= live_component @socket, LivebookWeb.CellComponent, + <%= live_component @socket, LivebookWeb.SessionLive.CellComponent, id: cell_view.id, session_id: @session_id, cell_view: cell_view %> <% end %> - <%= live_component @socket, LivebookWeb.InsertButtonsComponent, + <%= live_component @socket, LivebookWeb.SessionLive.InsertButtonsComponent, id: "#{@section_view.id}:last", persistent: @section_view.cell_views == [], section_id: @section_view.id, diff --git a/lib/livebook_web/templates/error/404.html.eex b/lib/livebook_web/templates/error/404.html.eex new file mode 100644 index 000000000..114a8e116 --- /dev/null +++ b/lib/livebook_web/templates/error/404.html.eex @@ -0,0 +1,22 @@ + + + + + + + <%= live_title_tag "Livebook" %> + "/> + + +
+
+ + livebook + +
+ No Numbats here! +
+
+
+ + diff --git a/lib/livebook_web/templates/error/500.html.eex b/lib/livebook_web/templates/error/500.html.eex new file mode 100644 index 000000000..70825812b --- /dev/null +++ b/lib/livebook_web/templates/error/500.html.eex @@ -0,0 +1,25 @@ + + + + + + + <%= live_title_tag "Livebook" %> + "/> + + +
+
+ + livebook + +
+ Something went wrong. +
+
+ Check out the console for logs for more information. +
+
+
+ + diff --git a/lib/livebook_web/views/error_view.ex b/lib/livebook_web/views/error_view.ex new file mode 100644 index 000000000..787bed1d5 --- /dev/null +++ b/lib/livebook_web/views/error_view.ex @@ -0,0 +1,7 @@ +defmodule LivebookWeb.ErrorView do + use LivebookWeb, :view + + def template_not_found(_template, assigns) do + render("500.html", assigns) + end +end