aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorWilliam Pitcock <nenolod@dereferenced.org>2019-03-02 21:12:38 +0000
committerPhil Hagelberg <phil@hagelb.org>2019-11-09 18:06:51 -0800
commit2b5bd5236d793edba54366ec9fed447207a09976 (patch)
tree161e25de0105fb9ac7e450bbff873f2e47d7457a /lib
parent8f08da750aaa8e04c4a940a566ec831a559a4852 (diff)
downloadpleroma-2b5bd5236d793edba54366ec9fed447207a09976.tar.gz
static fe: add user profile rendering
Diffstat (limited to 'lib')
-rw-r--r--lib/pleroma/web/static_fe/activity_representer.ex3
-rw-r--r--lib/pleroma/web/static_fe/static_fe_controller.ex24
-rw-r--r--lib/pleroma/web/static_fe/static_fe_view.ex2
-rw-r--r--lib/pleroma/web/static_fe/user_representer.ex35
-rw-r--r--lib/pleroma/web/templates/layout/static_fe.html.eex4
-rw-r--r--lib/pleroma/web/templates/static_fe/static_fe/notice.html.eex4
-rw-r--r--lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex7
-rw-r--r--lib/pleroma/web/templates/static_fe/static_fe/user_card.html.eex2
8 files changed, 77 insertions, 4 deletions
diff --git a/lib/pleroma/web/static_fe/activity_representer.ex b/lib/pleroma/web/static_fe/activity_representer.ex
index 93f8a8813..9c4315610 100644
--- a/lib/pleroma/web/static_fe/activity_representer.ex
+++ b/lib/pleroma/web/static_fe/activity_representer.ex
@@ -17,6 +17,9 @@ defmodule Pleroma.Web.StaticFE.ActivityRepresenter do
|> set_attachments(object)
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_object(data, %Object{} = object), do: Map.put(data, :object, object)
diff --git a/lib/pleroma/web/static_fe/static_fe_controller.ex b/lib/pleroma/web/static_fe/static_fe_controller.ex
index 7d7cb6ddd..78cd325c8 100644
--- a/lib/pleroma/web/static_fe/static_fe_controller.ex
+++ b/lib/pleroma/web/static_fe/static_fe_controller.ex
@@ -6,6 +6,7 @@ defmodule Pleroma.Web.StaticFE.StaticFEController do
use Pleroma.Web, :controller
alias Pleroma.Web.StaticFE.ActivityRepresenter
+ alias Pleroma.Web.StaticFE.UserRepresenter
require Logger
@@ -15,7 +16,22 @@ defmodule Pleroma.Web.StaticFE.StaticFEController do
|> put_layout(:static_fe)
|> put_status(200)
|> 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
_ ->
conn
@@ -27,6 +43,12 @@ defmodule Pleroma.Web.StaticFE.StaticFEController do
def show(%{path_info: ["notice", notice_id]} = conn, _params),
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
def show(conn, _params) do
conn
diff --git a/lib/pleroma/web/static_fe/static_fe_view.ex b/lib/pleroma/web/static_fe/static_fe_view.ex
index 7f58e1b2d..71e47d2c1 100644
--- a/lib/pleroma/web/static_fe/static_fe_view.ex
+++ b/lib/pleroma/web/static_fe/static_fe_view.ex
@@ -9,6 +9,8 @@ defmodule Pleroma.Web.StaticFE.StaticFEView do
alias Pleroma.Web.MediaProxy
alias Pleroma.Formatter
+ import Phoenix.HTML
+
def emoji_for_user(%User{} = user) do
(user.info.source_data["tag"] || [])
|> Enum.filter(fn %{"type" => t} -> t == "Emoji" end)
diff --git a/lib/pleroma/web/static_fe/user_representer.ex b/lib/pleroma/web/static_fe/user_representer.ex
new file mode 100644
index 000000000..9d2f1eb85
--- /dev/null
+++ b/lib/pleroma/web/static_fe/user_representer.ex
@@ -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
diff --git a/lib/pleroma/web/templates/layout/static_fe.html.eex b/lib/pleroma/web/templates/layout/static_fe.html.eex
index c20958162..40a560460 100644
--- a/lib/pleroma/web/templates/layout/static_fe.html.eex
+++ b/lib/pleroma/web/templates/layout/static_fe.html.eex
@@ -22,6 +22,10 @@
border-radius: 4px;
}
+ .activity {
+ margin-bottom: 1em;
+ }
+
.avatar {
cursor: pointer;
}
diff --git a/lib/pleroma/web/templates/static_fe/static_fe/notice.html.eex b/lib/pleroma/web/templates/static_fe/static_fe/notice.html.eex
index 9957697ad..e8d905d79 100644
--- a/lib/pleroma/web/templates/static_fe/static_fe/notice.html.eex
+++ b/lib/pleroma/web/templates/static_fe/static_fe/notice.html.eex
@@ -1,6 +1,6 @@
<div class="activity">
- <%= render("user_card.html", %{user: @user}) %>
+ <%= render("user_card.html", %{user: @data.user}) %>
<div class="activity-content">
- <div class="e-content"><%= @object.data["content"] %></div>
+ <div class="e-content"><%= raw @data.content %></div>
</div>
</div>
diff --git a/lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex b/lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex
new file mode 100644
index 000000000..9ae4139ed
--- /dev/null
+++ b/lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex
@@ -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>
diff --git a/lib/pleroma/web/templates/static_fe/static_fe/user_card.html.eex b/lib/pleroma/web/templates/static_fe/static_fe/user_card.html.eex
index 8b397c639..c7789f9ac 100644
--- a/lib/pleroma/web/templates/static_fe/static_fe/user_card.html.eex
+++ b/lib/pleroma/web/templates/static_fe/static_fe/user_card.html.eex
@@ -4,7 +4,7 @@
<img src="<%= User.avatar_url(@user) |> MediaProxy.url %>" width="48" height="48" alt="">
</div>
<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>
</a>