defmodule LiveBookWeb.Helpers do import Phoenix.LiveView.Helpers @doc """ Renders a component inside the `LiveBook.ModalComponent` component. The rendered modal receives a `:return_to` option to properly update the URL when the modal is closed. """ def live_modal(socket, component, opts) do path = Keyword.fetch!(opts, :return_to) modal_opts = [id: :modal, return_to: path, component: component, opts: opts] live_component(socket, LiveBookWeb.ModalComponent, modal_opts) end @doc """ Determines user platform based on the given *User-Agent* header. """ @spec platform_from_user_agent(Sting.t()) :: :linux | :mac | :windows | :other def platform_from_user_agent(user_agent) when is_binary(user_agent) do cond do linux?(user_agent) -> :linux mac?(user_agent) -> :mac windows?(user_agent) -> :windows true -> :other end end defp linux?(user_agent), do: String.match?(user_agent, ~r/Linux/) defp mac?(user_agent), do: String.match?(user_agent, ~r/Mac OS X/) defp windows?(user_agent), do: String.match?(user_agent, ~r/Windows/) defdelegate ansi_string_to_html(string), to: LiveBookWeb.ANSI end