Show remote actor profiles
This commit is contained in:
parent
00c51e4ad9
commit
e7c19940b0
|
@ -119,7 +119,7 @@ defmodule ClacksWeb.FrontendController do
|
||||||
|
|
||||||
case User.get_by_username(username) do
|
case User.get_by_username(username) do
|
||||||
nil ->
|
nil ->
|
||||||
put_status(conn, 404)
|
resp(conn, 404, "Not Found")
|
||||||
|
|
||||||
user ->
|
user ->
|
||||||
user = Repo.preload(user, :actor)
|
user = Repo.preload(user, :actor)
|
||||||
|
@ -132,6 +132,22 @@ defmodule ClacksWeb.FrontendController do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def actor(conn, %{"id" => id} = params) do
|
||||||
|
current_user = conn.assigns[:user] |> Repo.preload(:actor)
|
||||||
|
|
||||||
|
case Repo.get(Actor, id) do
|
||||||
|
nil ->
|
||||||
|
resp(conn, 404, "Not Found")
|
||||||
|
|
||||||
|
actor ->
|
||||||
|
render(conn, "profile.html", %{
|
||||||
|
current_user: current_user,
|
||||||
|
actor: actor,
|
||||||
|
statuses: actor_statuses(actor, params, only_public: true)
|
||||||
|
})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def search(conn, %{"q" => q}) when is_binary(q) do
|
def search(conn, %{"q" => q}) when is_binary(q) do
|
||||||
current_user = conn.assigns[:user]
|
current_user = conn.assigns[:user]
|
||||||
|
|
||||||
|
|
|
@ -60,6 +60,7 @@ defmodule ClacksWeb.Router do
|
||||||
post "/post", FrontendController, :post_status
|
post "/post", FrontendController, :post_status
|
||||||
get "/status/:id/reply", FrontendController, :reply
|
get "/status/:id/reply", FrontendController, :reply
|
||||||
get "/search", FrontendController, :search
|
get "/search", FrontendController, :search
|
||||||
|
get "/actors/:id", FrontendController, :actor
|
||||||
end
|
end
|
||||||
|
|
||||||
scope "/", ClacksWeb do
|
scope "/", ClacksWeb do
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<div class="status">
|
<div class="status">
|
||||||
<div class="status-meta">
|
<div class="status-meta">
|
||||||
<h2 class="status-author-nickname">
|
<h2 class="status-author-nickname">
|
||||||
<a href="<%= @author.ap_id %>">
|
<a href="<%= local_actor_link(@author) %>">
|
||||||
<%= @author.data["preferredUsername"] %>
|
<%= @author.data["preferredUsername"] %>
|
||||||
</a>
|
</a>
|
||||||
</h2>
|
</h2>
|
||||||
|
|
|
@ -1,5 +1,13 @@
|
||||||
<h1><%= @actor.data["preferredUsername"] %></h1>
|
<h1><%= @actor.data["preferredUsername"] %></h1>
|
||||||
<h2>@<%= @actor.data["name"] %></h2>
|
<h2>
|
||||||
|
<%= if @actor.local do %>
|
||||||
|
<%= display_username(@actor) %>
|
||||||
|
<% else %>
|
||||||
|
<a href="<%= @actor.ap_id %>">
|
||||||
|
<%= display_username(@actor) %>
|
||||||
|
</a>
|
||||||
|
<% end %>
|
||||||
|
</h2>
|
||||||
<p><%= @actor.data["summary"] %></p>
|
<p><%= @actor.data["summary"] %></p>
|
||||||
|
|
||||||
<%= render "_timeline.html", conn: @conn, statuses_with_authors: Enum.map(@statuses, &({&1, @actor})) %>
|
<%= render "_timeline.html", conn: @conn, statuses_with_authors: Enum.map(@statuses, &({&1, @actor})) %>
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
defmodule ClacksWeb.FrontendView do
|
defmodule ClacksWeb.FrontendView do
|
||||||
use ClacksWeb, :view
|
use ClacksWeb, :view
|
||||||
alias Clacks.{Actor, Activity}
|
alias Clacks.{Actor, Activity}
|
||||||
|
alias ClacksWeb.Router.Helpers, as: Routes
|
||||||
|
alias ClacksWeb.Endpoint
|
||||||
|
|
||||||
@spec display_username(actor :: Actor.t()) :: String.t()
|
@spec display_username(actor :: Actor.t()) :: String.t()
|
||||||
|
|
||||||
|
@ -13,6 +15,13 @@ defmodule ClacksWeb.FrontendView do
|
||||||
"@" <> name <> "@" <> host
|
"@" <> name <> "@" <> host
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def local_actor_link(%Actor{local: true, ap_id: ap_id}), do: ap_id
|
||||||
|
|
||||||
|
def local_actor_link(%Actor{local: false, id: id}),
|
||||||
|
do: Routes.frontend_path(Endpoint, :actor, id)
|
||||||
|
|
||||||
|
@spec display_timestamp(str :: String.t()) :: String.t()
|
||||||
|
|
||||||
def display_timestamp(str) when is_binary(str) do
|
def display_timestamp(str) when is_binary(str) do
|
||||||
display_timestamp(Timex.parse!(str, "{ISO:Extended}"))
|
display_timestamp(Timex.parse!(str, "{ISO:Extended}"))
|
||||||
end
|
end
|
||||||
|
@ -42,6 +51,9 @@ defmodule ClacksWeb.FrontendView do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@spec prev_page_path(conn :: Plug.Conn.t(), [Activity.t() | {Activity.t(), Actor.t()}]) ::
|
||||||
|
String.t()
|
||||||
|
|
||||||
def prev_page_path(conn, activities) do
|
def prev_page_path(conn, activities) do
|
||||||
if Map.has_key?(conn.query_params, "max_id") do
|
if Map.has_key?(conn.query_params, "max_id") do
|
||||||
Phoenix.Controller.current_path(conn, %{
|
Phoenix.Controller.current_path(conn, %{
|
||||||
|
@ -52,6 +64,9 @@ defmodule ClacksWeb.FrontendView do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@spec next_page_path(conn :: Plug.Conn.t(), [Activity.t() | {Activity.t(), Actor.t()}]) ::
|
||||||
|
String.t()
|
||||||
|
|
||||||
def next_page_path(conn, activities) do
|
def next_page_path(conn, activities) do
|
||||||
if length(activities) < 20 do
|
if length(activities) < 20 do
|
||||||
nil
|
nil
|
||||||
|
|
Loading…
Reference in New Issue