Skip to content

Commit 5a19714

Browse files
committed
Display term version in a tooltip
1 parent 22bc9d6 commit 5a19714

File tree

6 files changed

+41
-21
lines changed

6 files changed

+41
-21
lines changed

assets/css/_recording_show.scss

+4
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,10 @@
7474
margin-right: 0.5em;
7575
}
7676
}
77+
78+
.help-tooltip {
79+
cursor: help;
80+
}
7781
}
7882
}
7983

lib/asciinema_web/controllers/medium_html.ex

+15-10
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
defmodule AsciinemaWeb.MediumHTML do
22
use AsciinemaWeb, :html
33

4-
def metadata(medium) do
5-
items = [os_info(medium), term_info(medium), shell_info(medium)]
4+
embed_templates "medium_html/*"
65

7-
case Enum.filter(items, & &1) do
8-
[] -> nil
9-
items -> Enum.join(items, " ◆ ")
10-
end
6+
defp segments(medium) do
7+
[os(medium), term(medium), shell(medium)]
8+
|> Enum.filter(& &1)
9+
|> Enum.intersperse(" ◆ ")
1110
end
1211

13-
defp os_info(medium) do
12+
defp os(medium) do
1413
os_from_user_agent(medium.user_agent) || os_from_uname(medium)
1514
end
1615

@@ -68,13 +67,19 @@ defmodule AsciinemaWeb.MediumHTML do
6867
end
6968
end
7069

71-
defp shell_info(medium) do
70+
defp shell(medium) do
7271
if medium.shell do
7372
Path.basename("#{medium.shell}")
7473
end
7574
end
7675

77-
defp term_info(medium) do
78-
medium.term_type
76+
defp term(medium) do
77+
case medium.term_version do
78+
nil ->
79+
medium.term_type
80+
81+
version ->
82+
{medium.term_type, version}
83+
end
7984
end
8085
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<span :for={item <- segments(@attrs)}>
2+
<%= if is_tuple(item) do %>
3+
<span title={elem(item, 1)} class="help-tooltip">{elem(item, 0)}</span>
4+
<% else %>
5+
{item}
6+
<% end %>
7+
</span>

lib/asciinema_web/controllers/recording_html.ex

+4-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ defmodule AsciinemaWeb.RecordingHTML do
1616
defdelegate font_family_options, to: MediaView
1717
defdelegate username(user), to: UserHTML
1818
defdelegate title(asciicast), to: Recordings
19-
defdelegate metadata(asciicast), to: MediumHTML
19+
defdelegate env_info(asciicast), to: MediumHTML
2020

2121
def player_src(asciicast), do: ~p"/a/#{asciicast}" <> ".#{filename_ext(asciicast)}"
2222

@@ -109,6 +109,9 @@ defmodule AsciinemaWeb.RecordingHTML do
109109
end
110110
end
111111

112+
defp env_info_attrs(asciicast),
113+
do: Map.take(asciicast, [:user_agent, :term_type, :term_version, :shell, :uname])
114+
112115
defp truncate(text, length) do
113116
if String.length(text) > length do
114117
String.slice(text, 0, length - 3) <> "..."

lib/asciinema_web/controllers/recording_html/show.html.heex

+2-6
Original file line numberDiff line numberDiff line change
@@ -113,12 +113,8 @@
113113
<div class="row">
114114
<div class="col-md-12 col-xs-12">
115115
<div class="status-line">
116-
<span
117-
:if={m = metadata(@asciicast)}
118-
class="status-line-item"
119-
title="Terminal environment"
120-
>
121-
<.terminal_solid_icon /> {m}
116+
<span class="status-line-item">
117+
<.terminal_solid_icon /> <.env_info attrs={env_info_attrs(@asciicast)} />
122118
</span>
123119

124120
<span class="status-line-item" title="Total views">

lib/asciinema_web/live/stream_status_live.ex

+9-4
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ defmodule AsciinemaWeb.StreamStatusLive do
44
alias AsciinemaWeb.MediumHTML
55
use AsciinemaWeb, :live_view
66

7+
defdelegate env_info(stream), to: MediumHTML
8+
79
@info_timeout 1_000
810
@duration_update_interval 60_000
911

@@ -23,8 +25,8 @@ defmodule AsciinemaWeb.StreamStatusLive do
2325
<% end %>
2426
</span>
2527
26-
<span :if={@metadata} class="status-line-item" title="Terminal environment">
27-
<.terminal_solid_icon /> {@metadata}
28+
<span class="status-line-item">
29+
<.terminal_solid_icon /> <.env_info attrs={@env_info_attrs} />
2830
</span>
2931
3032
<span class="status-line-item">
@@ -62,7 +64,7 @@ defmodule AsciinemaWeb.StreamStatusLive do
6264
started_at: stream.last_started_at,
6365
duration: nil,
6466
viewer_count: stream.current_viewer_count,
65-
metadata: MediumHTML.metadata(stream)
67+
env_info_attrs: env_info_attrs(stream)
6668
)
6769
|> update_duration()
6870

@@ -96,7 +98,7 @@ defmodule AsciinemaWeb.StreamStatusLive do
9698
end
9799

98100
def handle_info(%StreamServer.Update{event: :metadata, data: stream}, socket) do
99-
{:noreply, assign(socket, metadata: MediumHTML.metadata(stream))}
101+
{:noreply, assign(socket, :env_info_attrs, env_info_attrs(stream))}
100102
end
101103

102104
def handle_info(%ViewerTracker.Update{viewer_count: c}, socket) do
@@ -107,6 +109,9 @@ defmodule AsciinemaWeb.StreamStatusLive do
107109
{:noreply, update_duration(socket)}
108110
end
109111

112+
defp env_info_attrs(stream),
113+
do: Map.take(stream, [:user_agent, :term_type, :term_version, :shell])
114+
110115
defp update_duration(socket) do
111116
socket = assign(socket, :duration, format_duration(socket.assigns.started_at))
112117

0 commit comments

Comments
 (0)