mirror of
https://github.com/philomena-dev/philomena.git
synced 2025-04-02 01:35:27 +02:00
Turn user avatar into a link to their profile
This commit is contained in:
parent
6f4709e1e4
commit
34aa6f96fd
7 changed files with 38 additions and 37 deletions
lib/philomena_web
templates
avatar
layout
profile
staff
user_attribution
views
|
@ -1,6 +1,6 @@
|
|||
.profile-top
|
||||
.profile-top__avatar
|
||||
= render PhilomenaWeb.UserAttributionView, "_user_avatar.html", object: %{user: @current_user}, conn: @conn
|
||||
= render PhilomenaWeb.UserAttributionView, "_user_avatar.html", object: %{user: @current_user}, conn: @conn, no_profile_link: true
|
||||
.profile-top__name-and-links
|
||||
div
|
||||
h1 Your avatar
|
||||
|
|
|
@ -73,7 +73,7 @@ header.header
|
|||
|
||||
.dropdown.header__dropdown
|
||||
a.header__link.header__link-user href=~p"/profiles/#{@current_user}"
|
||||
= render PhilomenaWeb.UserAttributionView, "_user_avatar.html", object: %{user: @current_user}, class: "avatar--28px"
|
||||
= render PhilomenaWeb.UserAttributionView, "_user_avatar.html", object: %{user: @current_user}, class: "avatar--28px", no_profile_link: true
|
||||
span.header__link-user__dropdown-arrow.hide-mobile data-click-preventdefault="true"
|
||||
nav.dropdown__content.dropdown__content-right.hide-mobile.js-burger-links
|
||||
a.header__link href=~p"/profiles/#{@current_user}"
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
.profile-top
|
||||
.profile-top__avatar
|
||||
- avatar = render PhilomenaWeb.UserAttributionView, "_user_avatar.html", object: %{user: @user}, class: "avatar--125px"
|
||||
- avatar = render PhilomenaWeb.UserAttributionView, "_user_avatar.html", object: %{user: @user}, class: "avatar--125px", no_profile_link: true
|
||||
= if current?(@user, @conn.assigns.current_user) do
|
||||
= link avatar, to: ~p"/avatar/edit?#{[profile: true]}", title: "Change avatar"
|
||||
- else
|
||||
|
|
|
@ -2,7 +2,7 @@ h1 Staff
|
|||
.block.block--fixed.block--warning
|
||||
h3 Do you wish to submit a report?
|
||||
p
|
||||
strong>
|
||||
strong>
|
||||
' Do
|
||||
em not
|
||||
' PM staff members with your reports. Instead, if you think something breaks
|
||||
|
@ -38,7 +38,7 @@ h1 Staff
|
|||
.staff-block__user-card
|
||||
.staff-block__avatar
|
||||
a.profile-block href=~p"/profiles/#{user}"
|
||||
= render PhilomenaWeb.UserAttributionView, "_user_avatar.html", object: %{user: user}, class: "avatar--125px"
|
||||
= render PhilomenaWeb.UserAttributionView, "_user_avatar.html", object: %{user: user}, class: "avatar--125px", no_profile_link: true
|
||||
p
|
||||
b = user.name
|
||||
.staff-block__info
|
||||
|
|
|
@ -1,4 +1 @@
|
|||
= if !!@object.user and !anonymous?(@object) do
|
||||
= user_avatar(@object, assigns[:class] || "avatar--100px")
|
||||
- else
|
||||
= anonymous_avatar(anonymous_name(@object), assigns[:class] || "avatar--100px")
|
||||
= user_avatar(@object, class: assigns[:class], no_profile_link: assigns[:no_profile_link])
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
= if !!@object.user do
|
||||
= user_avatar(@object, assigns[:class] || "avatar--100px")
|
||||
= user_avatar(@object, class: assigns[:class], no_profile_link: assigns[:no_profile_link])
|
||||
|
|
|
@ -5,18 +5,21 @@ defmodule PhilomenaWeb.UserAttributionView do
|
|||
alias PhilomenaWeb.AvatarGeneratorView
|
||||
|
||||
def anonymous?(object) do
|
||||
Attribution.anonymous?(object)
|
||||
# This function may accept objects that don't have `Attribution` implemented.
|
||||
not is_nil(Attribution.impl_for(object)) and Attribution.anonymous?(object)
|
||||
end
|
||||
|
||||
def anonymous_user?(object), do: is_nil(object.user) or anonymous?(object)
|
||||
|
||||
def name(object) do
|
||||
case is_nil(object.user) or anonymous?(object) do
|
||||
case anonymous_user?(object) do
|
||||
true -> anonymous_name(object)
|
||||
_false -> object.user.name
|
||||
end
|
||||
end
|
||||
|
||||
def avatar_url(object) do
|
||||
case is_nil(object.user) or anonymous?(object) do
|
||||
case anonymous_user?(object) do
|
||||
true -> anonymous_avatar_url(anonymous_name(object))
|
||||
_false -> user_avatar_url(object)
|
||||
end
|
||||
|
@ -40,39 +43,40 @@ defmodule PhilomenaWeb.UserAttributionView do
|
|||
end
|
||||
end
|
||||
|
||||
def anonymous_avatar(name, class \\ "avatar--100px") do
|
||||
class = Enum.join(["image-constrained", class], " ")
|
||||
def user_avatar(object, opts \\ []) do
|
||||
class = Keyword.get(opts, :class) || "avatar--100px"
|
||||
no_profile_link = Keyword.get(opts, :no_profile_link) || false
|
||||
|
||||
content_tag :div, class: class do
|
||||
AvatarGeneratorView.generated_avatar(name)
|
||||
end
|
||||
anon = anonymous_user?(object)
|
||||
|
||||
content =
|
||||
if anon or is_nil(object.user.avatar) do
|
||||
AvatarGeneratorView.generated_avatar(name(object))
|
||||
else
|
||||
img_tag(avatar_url_root() <> "/" <> object.user.avatar)
|
||||
end
|
||||
|
||||
{tag, attrs} =
|
||||
if anon or no_profile_link do
|
||||
{:div, []}
|
||||
else
|
||||
{:a, href: ~p"/profiles/#{object.user}"}
|
||||
end
|
||||
|
||||
attrs = Keyword.put(attrs, :class, "image-constrained #{class}")
|
||||
|
||||
content_tag(tag, content, attrs)
|
||||
end
|
||||
|
||||
def user_avatar(object, class \\ "avatar--100px")
|
||||
|
||||
def user_avatar(%{user: nil} = object, class),
|
||||
do: anonymous_avatar(anonymous_name(object), class)
|
||||
|
||||
def user_avatar(%{user: %{avatar: nil}} = object, class),
|
||||
do: anonymous_avatar(object.user.name, class)
|
||||
|
||||
def user_avatar(%{user: %{avatar: avatar}}, class) do
|
||||
class = Enum.join(["image-constrained", class], " ")
|
||||
|
||||
content_tag :div, class: class do
|
||||
img_tag(avatar_url_root() <> "/" <> avatar)
|
||||
end
|
||||
end
|
||||
|
||||
def user_avatar_url(%{user: %{avatar: nil}} = object) do
|
||||
defp user_avatar_url(%{user: %{avatar: nil}} = object) do
|
||||
anonymous_avatar_url(object.user.name)
|
||||
end
|
||||
|
||||
def user_avatar_url(%{user: %{avatar: avatar}}) do
|
||||
defp user_avatar_url(%{user: %{avatar: avatar}}) do
|
||||
avatar_url_root() <> "/" <> avatar
|
||||
end
|
||||
|
||||
def anonymous_avatar_url(name) do
|
||||
defp anonymous_avatar_url(name) do
|
||||
svg =
|
||||
name
|
||||
|> AvatarGeneratorView.generated_avatar()
|
||||
|
|
Loading…
Add table
Reference in a new issue