User page redesign

This commit is contained in:
Mouse Reeve 2020-03-16 17:09:45 -07:00
parent c41b53bdbe
commit 7e73bae07d
6 changed files with 136 additions and 64 deletions

View file

@ -0,0 +1,26 @@
{% extends 'layout.html' %}
{% load fr_display %}
{% block content %}
{% include 'user_header.html' with user=user %}
<div class="content-container">
<h2>Followers</h2>
{% for followers in followers %}
<div class="row shrink">
<div>
{% include 'snippets/avatar.html' with user=followers %}
</div>
<div>
{% include 'snippets/username.html' with user=followers show_full=True %}
</div>
<div>
{% include 'snippets/follow_button.html' with user=followers %}
</div>
</div>
{% endfor %}
{% if not followers.count %}
<div>{{ user|username }} has no followers</div>
{% endif %}
</div>
{% endblock %}

View file

@ -0,0 +1,26 @@
{% extends 'layout.html' %}
{% load fr_display %}
{% block content %}
{% include 'user_header.html' %}
<div class="content-container">
<h2>Following</h2>
{% for follower in user.following.all %}
<div class="row shrink">
<div>
{% include 'snippets/avatar.html' with user=follower %}
</div>
<div>
{% include 'snippets/username.html' with user=follower show_full=True %}
</div>
<div>
{% include 'snippets/follow_button.html' with user=follower %}
</div>
</div>
{% endfor %}
{% if not following.count %}
<div>No one is following {{ user|username }}</div>
{% endif %}
</div>
{% endblock %}

View file

@ -7,12 +7,12 @@ Follow request already sent.
<form action="/follow/" method="post">
{% csrf_token %}
<input type="hidden" name="user" value="{{ user.username }}"></input>
<input type="submit" value="Follow"></input>
<button type="submit">Follow</button>
</form>
{% else %}
<form action="/unfollow/" method="post">
{% csrf_token %}
<input type="hidden" name="user" value="{{ user.username }}"></input>
<input type="submit" value="Unfollow"></input>
<button type="submit">Unfollow</button>
</form>
{% endif %}

View file

@ -1,52 +1,7 @@
{% extends 'layout.html' %}
{% load humanize %}
{% block content %}
<div class="content-container user-profile">
<h2>User Profile
{% if is_self %}
<a href="/user-edit/">edit
<span class="icon icon-pencil">
<span class="hidden-text">Edit profile</span>
</span>
</a>
{% endif %}
</h2>
<div class="row">
<div class="pic-container">
{% include 'snippets/avatar.html' with user=user large=True %}
</div>
<div>
<p>{% if user.name %}{{ user.name }}{% else %}{{ user.localname }}{% endif %}</p>
<p>{{ user.username }}</p>
<p>Joined {{ user.created_date | naturaltime }}</p>
</div>
{% if user.summary %}
<blockquote><span class="icon icon-quote-open"></span>{{ user.summary | safe }}</blockquote>
{% endif %}
</div>
{% if not is_self %}
{% include 'snippets/follow_button.html' with user=user %}
{% endif %}
{% if is_self and user.follower_requests.all %}
<div class="follow-requests">
<h2>Follow Requests</h2>
{% for requester in user.follower_requests.all %}
<div class="row shrink">
<p>
{% include 'snippets/username.html' with user=requester show_full=True %}
</p>
{% include 'snippets/follow_request_buttons.html' with user=requester %}
</div>
{% endfor %}
</div>
{% endif %}
</div>
{% include 'user_header.html' with user=user %}
<div class="all-shelves content-container">
{% include 'snippets/covers_shelf.html' with shelves=shelves user=user %}
</div>
@ -58,6 +13,11 @@
{% include 'snippets/status.html' with status=activity %}
</div>
{% endfor %}
{% if not activities %}
<div class="content-container">
<p>No activities yet!</a>
</div>
{% endif %}
</div>
{% endblock %}

View file

@ -0,0 +1,50 @@
{% load humanize %}
{% load fr_display %}
<div class="content-container user-profile">
<h2>User Profile
{% if is_self %}
<a href="/user-edit/">edit
<span class="icon icon-pencil">
<span class="hidden-text">Edit profile</span>
</span>
</a>
{% endif %}
</h2>
<div class="row">
<div class="pic-container">
{% include 'snippets/avatar.html' with user=user large=True %}
</div>
<div>
<p>{% if user.name %}{{ user.name }}{% else %}{{ user.localname }}{% endif %}</p>
<p>{{ user.username }}</p>
<p>Joined {{ user.created_date | naturaltime }}</p>
<p>
<a href="/user/{{ user|username }}/followers">{{ user.followers.count }} follower{{ user.followers.count | pluralize }}</a>,
<a href="/user/{{ user|username }}/following">{{ user.following.count }} following</a></p>
</div>
{% if user.summary %}
<blockquote><span class="icon icon-quote-open"></span>{{ user.summary | safe }}</blockquote>
{% endif %}
</div>
{% if not is_self %}
{% include 'snippets/follow_button.html' with user=user %}
{% endif %}
{% if is_self and user.follower_requests.all %}
<div class="follow-requests">
<h2>Follow Requests</h2>
{% for requester in user.follower_requests.all %}
<div class="row shrink">
<p>
{% include 'snippets/username.html' with user=requester show_full=True %}
</p>
{% include 'snippets/follow_request_buttons.html' with user=requester %}
</div>
{% endfor %}
</div>
{% endif %}
</div>

View file

@ -3,7 +3,6 @@ from django.contrib.auth.decorators import login_required
from django.db.models import Avg, Q
from django.http import HttpResponseBadRequest, HttpResponseNotFound, \
JsonResponse
from django.shortcuts import redirect
from django.template.response import TemplateResponse
from django.views.decorators.csrf import csrf_exempt
@ -120,7 +119,7 @@ def notifications_page(request):
return TemplateResponse(request, 'notifications.html', data)
@csrf_exempt
def user_page(request, username):
def user_page(request, username, subpage=None):
''' profile page for a user '''
try:
user = get_user_from_username(username)
@ -135,19 +134,25 @@ def user_page(request, username):
# TODO: change display with privacy and authentication considerations
shelves = get_user_shelf_preview(user)
activities = models.Status.objects.filter(
user=user,
).order_by(
'-created_date',
).select_subclasses()[:10]
data = {
'user': user,
'shelves': shelves,
'is_self': request.user.id == user.id,
'activities': activities,
}
return TemplateResponse(request, 'user.html', data)
if subpage == 'followers':
data['followers'] = user.followers.all()
return TemplateResponse(request, 'followers.html', data)
elif subpage == 'following':
data['following'] = user.following.all()
return TemplateResponse(request, 'following.html', data)
else:
activities = models.Status.objects.filter(
user=user,
).order_by(
'-created_date',
).select_subclasses().all()[:10]
data['activities'] = activities
return TemplateResponse(request, 'user.html', data)
@csrf_exempt
@ -167,7 +172,7 @@ def followers_page(request, username):
page = request.GET.get('page')
return JsonResponse(activitypub.get_followers(user, page, followers))
return redirect('/user/' + username)
return user_page(request, username, subpage='followers')
@csrf_exempt
@ -187,7 +192,7 @@ def following_page(request, username):
page = request.GET.get('page')
return JsonResponse(activitypub.get_following(user, page, following))
return redirect('/user/' + username)
return user_page(request, username, subpage='following')
@csrf_exempt
@ -386,10 +391,15 @@ def get_user_shelf_preview(user, shelf_proportions=None):
break
if count > shelf_max or count < 0:
count = shelf_max
shelf = models.Shelf.objects.get(
user=user,
identifier=identifier,
)
try:
shelf = models.Shelf.objects.get(
user=user,
identifier=identifier,
)
except models.Shelf.DoesNotExist:
continue
if not shelf.books.count():
continue
books = models.ShelfBook.objects.filter(