Packages
livebook
0.15.0
0.19.8
0.19.7
0.19.6
0.19.5
0.19.4
0.19.3
0.19.2
0.19.1
0.19.0
0.18.6
0.18.5
0.18.4
0.18.3
0.18.2
0.18.1
0.18.0
0.17.3
0.17.2
0.17.1
0.17.0
0.16.4
0.16.3
0.16.2
0.16.1
0.16.0
0.15.5
0.15.4
0.15.3
0.15.2
0.15.1
0.15.0
0.14.7
0.14.6
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.14.0-rc.1
0.14.0-rc.0
0.13.3
0.13.2
0.13.1
0.13.0
0.12.1
0.12.0
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.0
0.9.3
0.9.2
0.9.1
0.9.0
0.8.2
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.6.3
0.6.2
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.1
0.4.0
0.3.2
0.3.1
0.3.0
0.2.3
0.2.2
0.2.1
0.2.0
0.1.2
0.1.1
0.1.0
Automate code & data workflows with interactive notebooks
Current section
Files
Jump to
Current section
Files
lib/livebook_web/helpers/html_helpers.ex
defmodule LivebookWeb.HTMLHelpers do
use Phoenix.Component
use LivebookWeb, :verified_routes
@doc """
Returns path to specific process dialog within LiveDashboard.
"""
@spec live_dashboard_process_path(pid) :: String.t()
def live_dashboard_process_path(pid) do
pid_str = Phoenix.LiveDashboard.PageBuilder.encode_pid(pid)
~p"/dashboard/#{node()}/processes?info=#{pid_str}"
end
@doc """
Returns path to specific node within LiveDashboard.
"""
@spec live_dashboard_node_path(String.t()) :: String.t()
def live_dashboard_node_path(node) do
~p"/dashboard/#{node}/home"
end
@doc """
Converts human-readable strings to strings which can be used
as HTML element IDs (compatible with HTML5)
At the same time duplicate IDs are enumerated to avoid duplicates
"""
@spec names_to_html_ids(list(String.t())) :: list(String.t())
def names_to_html_ids(names) do
names
|> Enum.map(&name_to_html_id/1)
|> Enum.map_reduce(%{}, fn html_id, counts ->
counts = Map.update(counts, html_id, 1, &(&1 + 1))
case counts[html_id] do
1 -> {html_id, counts}
count -> {"#{html_id}-#{count}", counts}
end
end)
|> elem(0)
end
defp name_to_html_id(name) do
name
|> String.downcase()
|> String.replace(~r/[^\s\w]/u, "")
|> String.trim()
|> String.replace(~r/\s+/u, "-")
|> case do
"" -> Base.url_encode64(name, padding: false)
id -> id
end
end
@doc """
Returns the text in singular or plural depending on the quantity
## Examples
iex> LivebookWeb.HTMLHelpers.pluralize(1, "notebook is not persisted", "notebooks are not persisted")
"1 notebook is not persisted"
iex> LivebookWeb.HTMLHelpers.pluralize(3, "notebook is not persisted", "notebooks are not persisted")
"3 notebooks are not persisted"
"""
@spec pluralize(non_neg_integer(), String.t(), String.t()) :: String.t()
def pluralize(1, singular, _plural), do: "1 #{singular}"
def pluralize(count, _singular, plural), do: "#{count} #{plural}"
@doc """
Formats the given UTC datetime relatively to present.
"""
@spec format_datetime_relatively(DateTime.t() | NaiveDateTime.t()) :: String.t()
def format_datetime_relatively(%DateTime{time_zone: "Etc/UTC"} = date) do
date |> DateTime.to_naive() |> Livebook.Utils.Time.time_ago_in_words()
end
def format_datetime_relatively(%NaiveDateTime{} = date) do
Livebook.Utils.Time.time_ago_in_words(date)
end
@doc """
Returns a list of human readable messages for all upload and upload
entry errors.
"""
@spec upload_error_messages(Phoenix.LiveView.UploadConfig.t()) :: list(String.t())
def upload_error_messages(upload) do
errors = upload_errors(upload) ++ Enum.flat_map(upload.entries, &upload_errors(upload, &1))
Enum.map(errors, &upload_error_to_string/1)
end
@doc """
Converts an upload or entry error to string.
"""
@spec upload_error_to_string(term()) :: String.t()
def upload_error_to_string(:too_large), do: "Too large"
def upload_error_to_string(:too_many_files), do: "You have selected too many files"
def upload_error_to_string(:not_accepted), do: "You have selected an unacceptable file type"
def upload_error_to_string({:writer_failure, message}) when is_binary(message) do
Livebook.Utils.upcase_first(message)
end
end