+
+
<% if speaker.github.present? %>
- <%= link_to "https://www.github.com/#{speaker.github}", target: "_blank", class: "hover:fill-gray-500" do %>
+ <%= link_to "https://www.github.com/#{speaker.github}", target: "_blank", class: "hover:bg-black hover:fill-white bg-white border rounded-full p-2 tooltip tooltip-top", data: {tip: speaker.github} do %>
<%= fab("github") %>
<% end %>
<% end %>
<% if speaker.twitter.present? %>
- <%= link_to "https://www.x.com/#{speaker.twitter}", target: "_blank", class: "hover:fill-gray-500" do %>
+ <%= link_to "https://www.x.com/#{speaker.twitter}", target: "_blank", class: "hover:bg-[#74C0FC] hover:fill-white bg-white border rounded-full p-2 tooltip tooltip-top", data: {tip: speaker.twitter} do %>
<%= fab("twitter") %>
<% end %>
<% end %>
+ <% if speaker.bsky.present? %>
+ <%= link_to "https://bsky.app/profile/#{speaker.bsky}", target: "_blank", class: "hover:bg-[#0085FF] hover:fill-white bg-white border rounded-full p-2 tooltip tooltip-top", data: {tip: speaker.bsky} do %>
+ <%= fab("bluesky") %>
+ <% end %>
+ <% end %>
+
<% if speaker.mastodon.present? %>
- <%= link_to speaker.mastodon, target: "_blank", class: "hover:fill-gray-500" do %>
+ <%= link_to speaker.mastodon, target: "_blank", class: "hover:bg-[#6364FF] hover:fill-white bg-white border rounded-full p-2 tooltip tooltip-top", data: {tip: speaker.mastodon} do %>
<%= fab("mastodon") %>
<% end %>
<% end %>
<% if speaker.linkedin.present? %>
- <%= link_to "https://www.linkedin.com/in/#{speaker.linkedin}", target: "_blank", class: "hover:fill-gray-500" do %>
+ <%= link_to "https://www.linkedin.com/in/#{speaker.linkedin}", target: "_blank", class: "hover:bg-[#0A66C2] hover:fill-white bg-white border rounded-full p-2 tooltip tooltip-top", data: {tip: speaker.linkedin} do %>
<%= fab("linkedin") %>
<% end %>
<% end %>
- <% if speaker.bsky.present? %>
- <%= link_to "https://bsky.app/profile/#{speaker.bsky}", target: "_blank", class: "hover:fill-gray-500" do %>
- <%= fab("bluesky") %>
- <% end %>
- <% end %>
-
<% if speaker.speakerdeck.present? %>
- <%= link_to "https://speakerdeck.com/#{speaker.speakerdeck}", target: "_blank", class: "hover:fill-gray-500" do %>
+ <%= link_to "https://speakerdeck.com/#{speaker.speakerdeck}", target: "_blank", class: "hover:bg-[#009287] hover:fill-white bg-white border rounded-full p-2 tooltip tooltip-top", data: {tip: speaker.speakerdeck} do %>
<%= fab("speaker-deck") %>
<% end %>
<% end %>
-
- <% if speaker.website.present? %>
-
- Website: <%= link_to speaker.website, speaker.valid_website_url, target: "_blank" %>
-
- <% end %>
-
- <% if speaker.bio.present? %>
-
- Bio: <%= speaker.bio %>
-
- <% end %>
diff --git a/app/views/speakers/actions/_admin.html.erb b/app/views/speakers/actions/_admin.html.erb
index d555c0bbb..996d29ed5 100644
--- a/app/views/speakers/actions/_admin.html.erb
+++ b/app/views/speakers/actions/_admin.html.erb
@@ -1,26 +1,28 @@
-
- <%= ui_button url: edit_speaker_path(@speaker),
- kind: :secondary,
- data: {turbo_frame: "modal"},
- outline: true,
- size: :sm do %>
- <%= heroicon :pencil_square %>
- Update speaker page
- <% end %>
+<%= ui_button url: edit_speaker_path(@speaker),
+ kind: :none,
+ data: {turbo_frame: "modal"},
+ size: :sm,
+ class: "w-full" do %>
+ <%= fa :pen, size: :xs %>
+ Update speaker page
+<% end %>
- <% if speaker.github.present? || speaker.bsky.present? %>
- <%= ui_button url: speakers_enhance_path(@speaker), method: :put, kind: :ghost, size: :sm do %>
- Enhance Profile
- <% end %>
+<% if speaker.github.present? || speaker.bsky.present? %>
+ <%= ui_button url: speakers_enhance_path(@speaker), method: :put, kind: :none, size: :sm, class: "w-full", form_class: "w-full" do %>
+ <%= fab :github, size: :xs %>
+ Fetch from GitHub
<% end %>
+<% end %>
- <%= ui_button url: avo.resources_speaker_path(@speaker), target: :_blank, kind: :ghost, size: :sm do %>
- Open in Avo
- <% end %>
+<%= ui_button url: avo.resources_speaker_path(@speaker), target: :_blank, kind: :none, size: :sm, class: "w-full" do %>
+ <%= fa :avocado, size: :xs %>
+
+ Open in Avo
+<% end %>
- <% if Rails.env.development? %>
- <%= ui_button url: speaker_url(@speaker, host: "https://rubyvideo.dev", port: 443), target: :_blank, kind: :ghost, size: :sm do %>
- Show on RubyVideo.dev
- <% end %>
+<% if Rails.env.development? %>
+ <%= ui_button url: speaker_url(@speaker, host: "https://rubyvideo.dev", port: 443), target: :_blank, kind: :none, size: :sm, class: "w-full" do %>
+ <%= fa :browser, size: :xs %>
+ Show on RubyVideo.dev
<% end %>
-
+<% end %>
diff --git a/app/views/speakers/actions/_anonymous.html.erb b/app/views/speakers/actions/_anonymous.html.erb
index 2c00bf858..0f213c7a7 100644
--- a/app/views/speakers/actions/_anonymous.html.erb
+++ b/app/views/speakers/actions/_anonymous.html.erb
@@ -3,13 +3,13 @@
Help us improve the speaker profile by adding a GitHub handle
<% end %>
<% else %>
- <% if !speaker.verified? %>
- <%= ui_button url: edit_speaker_path(speaker), kind: :secondary, outline: true, size: :sm, data: {turbo_frame: "modal"} do %>
- <%= heroicon :pencil_square %>
-
Suggest improvements
- <% end %>
+ <%= ui_button url: edit_speaker_path(speaker), kind: :none, size: :sm, data: {turbo_frame: "modal"} do %>
+ <%= fa :pen, size: :xs %>
+
Suggest improvements
+ <% end %>
-
+ <% if !speaker.verified? %>
+
Are you <%= speaker.name %>?
<%= link_to sign_in_path, class: "link link-neutral font-light", data: {turbo_frame: "modal"} do %>
Claim your profile to manage and edit content.
diff --git a/app/views/speakers/actions/_owner.html.erb b/app/views/speakers/actions/_owner.html.erb
index 3d16a91a8..7d301f007 100644
--- a/app/views/speakers/actions/_owner.html.erb
+++ b/app/views/speakers/actions/_owner.html.erb
@@ -1,5 +1,4 @@
-
-<%= ui_button url: edit_speaker_path(speaker), kind: :secondary, outline: true, size: :sm, data: {turbo_frame: "modal"} do %>
- <%= heroicon :pencil_square %>
+<%= ui_button url: edit_speaker_path(speaker), kind: :none, size: :sm, data: {turbo_frame: "modal"} do %>
+ <%= fa :pen, size: :xs %>
Update my profile
<% end %>
diff --git a/app/views/speakers/actions/_signed_in.html.erb b/app/views/speakers/actions/_signed_in.html.erb
index 9a2df2d33..65a39a0b7 100644
--- a/app/views/speakers/actions/_signed_in.html.erb
+++ b/app/views/speakers/actions/_signed_in.html.erb
@@ -3,8 +3,8 @@
Help us improve the speaker profile by adding a GitHub handle
<% end %>
<% else %>
- <%= ui_button url: edit_speaker_path(speaker), kind: :secondary, outline: true, size: :sm, data: {turbo_frame: "modal"} do %>
- <%= heroicon :pencil_square %>
+ <%= ui_button url: edit_speaker_path(speaker), kind: :none, size: :sm, data: {turbo_frame: "modal"} do %>
+ <%= fa :pen, size: :xs %>
Suggest improvements
<% end %>
<% end %>
diff --git a/app/views/speakers/show.html.erb b/app/views/speakers/show.html.erb
index 25efac5d0..e62b0e6c4 100644
--- a/app/views/speakers/show.html.erb
+++ b/app/views/speakers/show.html.erb
@@ -1,47 +1,35 @@
<%= turbo_refreshes_with method: :morph, scroll: :preserve %>
+<%= turbo_stream_from @speaker %>
-
-
-
-
<%= @speaker.name %>
- <% if @speaker.pronouns.present? && ["dont_specify", "not_specified"].exclude?(@speaker.pronouns_type) %>
- (<%= @speaker.pronouns %>)
- <% end %>
-
+ <%= render partial: "speakers/header", locals: {speaker: @speaker} %>
-
- <%= image_tag @speaker.avatar_url(size: 200),
- class: "rounded-full mt-4",
- height: 200,
- width: 200,
- alt: "GitHub picture profile of #{@speaker.github}",
- loading: :lazy %>
+ <% if @topics.any? %>
+
+ <%= render partial: "topics/badge_list", locals: {topics: @topics, back_to_url: request.fullpath, back_to_title: @speaker.name} %>
+
+ <% end %>
- <% if @speaker.verified? %>
-
Verified
- <% end %>
-
+
- <%= render "speakers/about", speaker: @speaker %>
- <%= render "speakers/actions", speaker: @speaker %>
-
+
+ <% if @speaker.talks.any? %>
+
-
-
- <%= render partial: "talks/card",
- collection: @talks,
- as: :talk,
- locals: {
- favoritable: true,
- user_favorite_talks_ids: @user_favorite_talks_ids,
- watched_talks_ids: user_watched_talks_ids,
- back_to: request.fullpath,
- back_to_title: @speaker.name
- } %>
+
+
+ <%= render partial: "talks/card",
+ collection: @talks,
+ as: :talk,
+ locals: {
+ favoritable: true,
+ user_favorite_talks_ids: @user_favorite_talks_ids,
+ watched_talks_ids: user_watched_talks_ids,
+ back_to: request.fullpath,
+ back_to_title: @speaker.name
+ } %>
+
-
+ <% end %>
-
- <%= turbo_stream_from @speaker %>
diff --git a/app/views/talks/_talk.html.erb b/app/views/talks/_talk.html.erb
index e7feee0e4..c5ba598cf 100644
--- a/app/views/talks/_talk.html.erb
+++ b/app/views/talks/_talk.html.erb
@@ -137,13 +137,7 @@
<% if talk.approved_topics.any? %>
-
- <% talk.approved_topics.each do |topic| %>
- <%= link_to topic_path(topic, back_to: request.fullpath, back_to_title: talk.title) do %>
-
#<%= topic.name.parameterize %>
- <% end %>
- <% end %>
-
+ <%= render partial: "topics/badge_list", locals: {topics: talk.approved_topics, back_to_url: request.fullpath, back_to_title: talk.title} %>
<% end %>
diff --git a/app/views/topics/_badge.html.erb b/app/views/topics/_badge.html.erb
new file mode 100644
index 000000000..44ee8c430
--- /dev/null
+++ b/app/views/topics/_badge.html.erb
@@ -0,0 +1,3 @@
+<%= link_to topic_path(topic, back_to: back_to_url, back_to_title: back_to_title) do %>
+
#<%= topic.name.parameterize %>
+<% end %>
diff --git a/app/views/topics/_badge_list.html.erb b/app/views/topics/_badge_list.html.erb
new file mode 100644
index 000000000..060ca436c
--- /dev/null
+++ b/app/views/topics/_badge_list.html.erb
@@ -0,0 +1,16 @@
+<% limit ||= 8 %>
+<% more_topics = topics.to_a.from(limit) %>
+
+
+ <%= render partial: "topics/badge", collection: topics.first(limit), as: :topic, locals: {back_to_url: back_to_url, back_to_title: back_to_title} %>
+
+ <% more_topics.each do |topic| %>
+
+ <%= render partial: "topics/badge", locals: {topic: topic, back_to_url: back_to_url, back_to_title: back_to_title} %>
+
+ <% end %>
+
+ <% if more_topics.any? %>
+ <%= more_topics.count %> more
+ <% end %>
+
diff --git a/test/system/speakers_test.rb b/test/system/speakers_test.rb
index 715aacd94..7de85ff92 100644
--- a/test/system/speakers_test.rb
+++ b/test/system/speakers_test.rb
@@ -27,7 +27,7 @@ class SpeakersTest < ApplicationSystemTestCase
wait_for_turbo_stream_connected(streamable: @speaker)
@speaker.update(bio: "New bio")
- @speaker.broadcast_about
+ @speaker.broadcast_header
assert_text "New bio"
end
<%= @speaker.name %>
- <% if @speaker.pronouns.present? && ["dont_specify", "not_specified"].exclude?(@speaker.pronouns_type) %> - (<%= @speaker.pronouns %>) - <% end %> -- <%= render "speakers/about", speaker: @speaker %> - <%= render "speakers/actions", speaker: @speaker %> -
<% if talk.approved_topics.any? %> -