Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Add outbox view. [bug 654428]
* Refactor CSS to share between inbox and outbox.
* Factor up linked avatars and usernames to macros.
* Fix PEP8 violation in inbox view.
  • Loading branch information
James Socol committed May 9, 2011
1 parent ff07f67 commit b7035e5
Show file tree
Hide file tree
Showing 6 changed files with 87 additions and 26 deletions.
15 changes: 8 additions & 7 deletions apps/messages/templates/messages/inbox.html
@@ -1,24 +1,25 @@
{% extends "messages/base.html" %}
{% from "messages/includes/macros.html" import avatar_link, name_link %}
{% set title = _('Messages') %}
{% set crumbs = [(None, title)] %}

{% block content %}
<article id="inbox" class="main">
<article id="inbox" class="main message-list">
<h1>{{ title }}</h1>
{% if mymessages %}
{% if msgs %}
<ol>
{% for message in mymessages %}
{% for message in msgs %}
<li class="{% if message.unread %}unread{% endif %} {% if message.replied %}replied{% endif %}">
<span class="avatar">
{% if message.sender -%}
<a href="{{ profile_url(message.sender) }}"><img src="{{ profile_avatar(message.sender) }}"></a>
{{ avatar_link(message.sender) }}
{% else %}
<img src="{{ profile_avatar(message.sender) }}">
{%- endif %}
</span>
<span class="from">
<span class="from user">
{% if message.sender -%}
<a href="{{ profile_url(message.sender) }}">{{ display_name(message.sender) }}</a>
{{ name_link(message.sender) }}
{% else %}
{{ _('System') }}
{%- endif %}
Expand All @@ -31,7 +32,7 @@ <h1>{{ title }}</h1>
{% endfor %}
</ol>
{% else %}
<p>There are no messages here.</p>
<p>{{ _('There are no messages here.') }}</p>
{% endif %}
</article>
{% endblock %}
7 changes: 7 additions & 0 deletions apps/messages/templates/messages/includes/macros.html
@@ -0,0 +1,7 @@
{% macro avatar_link(user) -%}
<a href="{{ profile_url(user) }}"><img src="{{ profile_avatar(user) }}" height="48" width="48"></a>
{%- endmacro %}

{% macro name_link(user, name=None) -%}
<a href="{{ profile_url(user) }}">{% if name %}{{ name }}{% else %}{{ display_name(user) }}{% endif %}</a>
{%- endmacro %}
39 changes: 39 additions & 0 deletions apps/messages/templates/messages/outbox.html
@@ -0,0 +1,39 @@
{% extends "messages/base.html" %}
{% from "messages/includes/macros.html" import avatar_link, name_link %}
{% set title = _('Sent Messages') %}
{% set crumbs = [(url('messages.inbox'), _('Messages')),
(None, title)] %}

{% block content %}
<article id="outbox" class="main message-list">
<h1>{{ title }}</h1>
{% if msgs %}
<ol>
{% for message in msgs %}
<li>
<span class="avatar">
{% if message.recipients > 1 -%}
{{ avatar_link(request.user) }}
{% else %}
{{ avatar_link(message.recipient) }}
{% endif %}
</span>
<span class="to user">
{% if message.recipients > 1 -%}
{{ name_link(request.user, name=_('You')) }}
{% else %}
{{ name_link(message.recipient) }}
{%- endif %}
{{ datetimeformat(message.created) }}
</span>
<a href="{# TODO: url('messages.read_outgoing', message.id) #}">
{{ message.message|truncate(length=200) }}
</a>
</li>
{% endfor %}
</ol>
{% else %}
<p>{{ _('There are no messages here.') }}</p>
{% endif %}
</article>
{% endblock %}
1 change: 1 addition & 0 deletions apps/messages/urls.py
Expand Up @@ -6,4 +6,5 @@
urlpatterns = patterns('',
url(r'^$', views.inbox, name='messages.inbox'),
url(r'^/read/(?P<msgid>\d+)', views.read, name='messages.read'),
url(r'^/sent', views.outbox, name='messages.outbox'),
)
20 changes: 17 additions & 3 deletions apps/messages/views.py
Expand Up @@ -2,16 +2,17 @@
from waffle.decorators import waffle_flag

from access.decorators import login_required
from messages.models import InboxMessage
from messages.models import InboxMessage, OutboxMessage
from sumo.utils import paginate


@waffle_flag('private-messaging')
@login_required
def inbox(request):
messages = InboxMessage.objects.filter(to=request.user).order_by('-created')
user = request.user
messages = InboxMessage.objects.filter(to=user).order_by('-created')
return jingo.render(request, 'messages/inbox.html',
{'mymessages': messages})
{'msgs': messages})


@waffle_flag('private-messaging')
Expand All @@ -23,3 +24,16 @@ def read(request, msgid):
message.save()
return jingo.render(request, 'messages/read.html',
{'message': message, 'was_new': was_new})


@waffle_flag('private-messaging')
@login_required
def outbox(request):
user = request.user
messages = OutboxMessage.objects.filter(sender=user).order_by('-created')
for msg in messages:
msg.recipients = msg.to.count()
if msg.recipients == 1:
msg.recipient = msg.to.all()[0]
return jingo.render(request, 'messages/outbox.html',
{'msgs': messages})
31 changes: 15 additions & 16 deletions media/css/messages.css
@@ -1,61 +1,60 @@
article#inbox ol {
article.message-list ol {
list-style: none;
}

article#inbox li {
article.message-list li {
background-position: 1px center;
background-repeat: no-repeat;
border-top: 1px solid #eeeeee;
border-bottom: 1px solid #eeeeee;
height: 48px;
padding: 3px 3px 3px 15px;
}

article#inbox li > a {
article.message-list li > a {
display: block;
height: 42px;
padding-top: 6px;
}

article#inbox li:first-child {
border-top: none;
article.message-list li:first-child {
border-top: 1px solid #eeeeee;
}

article#inbox li.unread {
article.message-list li.unread {
background-color: #EFF9FF;
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABSSURBVChTY3z/8z8DIcCIrGjyugdw9blBCnA2E5yFrAIoiMyFKkJTAdEJFwQpwqoCWR3COjyup64iZN+iWQqRglqHVR1cEOEmNHXIXJQQx+VBADueHcvXWTPwAAAAAElFTkSuQmCC);
}

article#inbox li.replied {
article.message-list li.replied {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABRSURBVChTY/z//z8DIcCEpqB5xQNMLSiKsKoA6mGEW4dLRW2EAtQkXCogVoMU4VcBVQQ0EL//oNbhV4dwONxeTA0oQYDLPBSTcLkMPcSxqgMA/5QdFJd/yTgAAAAASUVORK5CYII=);
}

article#inbox span.avatar,
article#inbox span.from {
article.message-list span.avatar,
article.message-list span.user {
display: block;
float: left;
}

article#inbox span.avatar {
article.message-list span.avatar {
padding-right: 5px;
width: 48px;
}

article#inbox span.avatar img {
article.message-list span.avatar img {
border: none;
}

article#inbox span.from {
article.message-list span.user {
color: #999;
padding-top: 6px;
text-align: center;
width: 100px;
}

article#inbox span.from a {
article.message-list span.user a {
color: #666;
}

article#inbox span.from time {
article.message-list span.user time {
display: block;
font-size: 80%;
}

0 comments on commit b7035e5

Please sign in to comment.