static fe: add user profile rendering
This commit is contained in:
parent
8f08da750a
commit
2b5bd5236d
@ -17,6 +17,9 @@ def prepare_activity(%User{} = user, %Object{} = object) do
|
|||||||
|> set_attachments(object)
|
|> set_attachments(object)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def prepare_activity(%User{} = user, %Activity{} = activity), do:
|
||||||
|
prepare_activity(user, Object.normalize(activity.data["object"]))
|
||||||
|
|
||||||
defp set_user(data, %User{} = user), do: Map.put(data, :user, user)
|
defp set_user(data, %User{} = user), do: Map.put(data, :user, user)
|
||||||
|
|
||||||
defp set_object(data, %Object{} = object), do: Map.put(data, :object, object)
|
defp set_object(data, %Object{} = object), do: Map.put(data, :object, object)
|
||||||
|
@ -6,6 +6,7 @@ defmodule Pleroma.Web.StaticFE.StaticFEController do
|
|||||||
use Pleroma.Web, :controller
|
use Pleroma.Web, :controller
|
||||||
|
|
||||||
alias Pleroma.Web.StaticFE.ActivityRepresenter
|
alias Pleroma.Web.StaticFE.ActivityRepresenter
|
||||||
|
alias Pleroma.Web.StaticFE.UserRepresenter
|
||||||
|
|
||||||
require Logger
|
require Logger
|
||||||
|
|
||||||
@ -15,7 +16,22 @@ def show_notice(conn, %{"notice_id" => notice_id}) do
|
|||||||
|> put_layout(:static_fe)
|
|> put_layout(:static_fe)
|
||||||
|> put_status(200)
|
|> put_status(200)
|
||||||
|> put_view(Pleroma.Web.StaticFE.StaticFEView)
|
|> put_view(Pleroma.Web.StaticFE.StaticFEView)
|
||||||
|> render("notice.html", data)
|
|> render("notice.html", %{data: data})
|
||||||
|
else
|
||||||
|
_ ->
|
||||||
|
conn
|
||||||
|
|> put_status(404)
|
||||||
|
|> text("Not found")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def show_user(conn, %{"username_or_id" => username_or_id}) do
|
||||||
|
with {:ok, data} <- UserRepresenter.represent(username_or_id) do
|
||||||
|
conn
|
||||||
|
|> put_layout(:static_fe)
|
||||||
|
|> put_status(200)
|
||||||
|
|> put_view(Pleroma.Web.StaticFE.StaticFEView)
|
||||||
|
|> render("profile.html", %{data: data})
|
||||||
else
|
else
|
||||||
_ ->
|
_ ->
|
||||||
conn
|
conn
|
||||||
@ -27,6 +43,12 @@ def show_notice(conn, %{"notice_id" => notice_id}) do
|
|||||||
def show(%{path_info: ["notice", notice_id]} = conn, _params),
|
def show(%{path_info: ["notice", notice_id]} = conn, _params),
|
||||||
do: show_notice(conn, %{"notice_id" => notice_id})
|
do: show_notice(conn, %{"notice_id" => notice_id})
|
||||||
|
|
||||||
|
def show(%{path_info: ["users", user_id]} = conn, _params),
|
||||||
|
do: show_user(conn, %{"username_or_id" => user_id})
|
||||||
|
|
||||||
|
def show(%{path_info: [user_id]} = conn, _params),
|
||||||
|
do: show_user(conn, %{"username_or_id" => user_id})
|
||||||
|
|
||||||
# Fallback for unhandled types
|
# Fallback for unhandled types
|
||||||
def show(conn, _params) do
|
def show(conn, _params) do
|
||||||
conn
|
conn
|
||||||
|
@ -9,6 +9,8 @@ defmodule Pleroma.Web.StaticFE.StaticFEView do
|
|||||||
alias Pleroma.Web.MediaProxy
|
alias Pleroma.Web.MediaProxy
|
||||||
alias Pleroma.Formatter
|
alias Pleroma.Formatter
|
||||||
|
|
||||||
|
import Phoenix.HTML
|
||||||
|
|
||||||
def emoji_for_user(%User{} = user) do
|
def emoji_for_user(%User{} = user) do
|
||||||
(user.info.source_data["tag"] || [])
|
(user.info.source_data["tag"] || [])
|
||||||
|> Enum.filter(fn %{"type" => t} -> t == "Emoji" end)
|
|> Enum.filter(fn %{"type" => t} -> t == "Emoji" end)
|
||||||
|
35
lib/pleroma/web/static_fe/user_representer.ex
Normal file
35
lib/pleroma/web/static_fe/user_representer.ex
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
# Pleroma: A lightweight social networking server
|
||||||
|
# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
|
||||||
|
# SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
|
defmodule Pleroma.Web.StaticFE.UserRepresenter do
|
||||||
|
alias Pleroma.User
|
||||||
|
alias Pleroma.Web.ActivityPub.ActivityPub
|
||||||
|
alias Pleroma.Web.StaticFE.ActivityRepresenter
|
||||||
|
|
||||||
|
def prepare_user(%User{} = user) do
|
||||||
|
%{}
|
||||||
|
|> set_user(user)
|
||||||
|
|> set_timeline(user)
|
||||||
|
end
|
||||||
|
|
||||||
|
defp set_user(data, %User{} = user), do: Map.put(data, :user, user)
|
||||||
|
|
||||||
|
defp set_timeline(data, %User{} = user) do
|
||||||
|
activities =
|
||||||
|
ActivityPub.fetch_user_activities(user, nil, %{})
|
||||||
|
|> Enum.map(fn activity -> ActivityRepresenter.prepare_activity(user, activity) end)
|
||||||
|
|
||||||
|
Map.put(data, :timeline, activities)
|
||||||
|
end
|
||||||
|
|
||||||
|
def represent(username_or_id) do
|
||||||
|
with %User{} = user <- User.get_cached_by_nickname_or_id(username_or_id),
|
||||||
|
data <- prepare_user(user) do
|
||||||
|
{:ok, data}
|
||||||
|
else
|
||||||
|
e ->
|
||||||
|
{:error, e}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -22,6 +22,10 @@
|
|||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.activity {
|
||||||
|
margin-bottom: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
.avatar {
|
.avatar {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<div class="activity">
|
<div class="activity">
|
||||||
<%= render("user_card.html", %{user: @user}) %>
|
<%= render("user_card.html", %{user: @data.user}) %>
|
||||||
<div class="activity-content">
|
<div class="activity-content">
|
||||||
<div class="e-content"><%= @object.data["content"] %></div>
|
<div class="e-content"><%= raw @data.content %></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -0,0 +1,7 @@
|
|||||||
|
<h1><%= raw (@data.user.name |> Formatter.emojify(emoji_for_user(@data.user))) %></h1>
|
||||||
|
<p><%= raw @data.user.bio %></p>
|
||||||
|
<div class="activity-stream">
|
||||||
|
<%= for activity <- @data.timeline do %>
|
||||||
|
<%= render("notice.html", %{data: activity}) %>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
@ -4,7 +4,7 @@
|
|||||||
<img src="<%= User.avatar_url(@user) |> MediaProxy.url %>" width="48" height="48" alt="">
|
<img src="<%= User.avatar_url(@user) |> MediaProxy.url %>" width="48" height="48" alt="">
|
||||||
</div>
|
</div>
|
||||||
<span class="display-name">
|
<span class="display-name">
|
||||||
<bdi><%= @user.name |> Formatter.emojify(emoji_for_user(@user)) %></bdi>
|
<bdi><%= raw (@user.name |> Formatter.emojify(emoji_for_user(@user))) %></bdi>
|
||||||
<span class="nickname"><%= @user.nickname %></span>
|
<span class="nickname"><%= @user.nickname %></span>
|
||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
|
Loading…
Reference in New Issue
Block a user