Skip to content

Commit

Permalink
Merge pull request #138 from modoboa/feature/sort_messages
Browse files Browse the repository at this point in the history
Added menu entries to sort messages.
  • Loading branch information
tonioo committed Dec 31, 2017
2 parents c824b4f + 8362b23 commit 8c3da5f
Show file tree
Hide file tree
Showing 7 changed files with 75 additions and 20 deletions.
10 changes: 10 additions & 0 deletions modoboa_webmail/constants.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
"""Webmail constants."""

from django.utils.translation import ugettext_lazy as _


SORT_ORDERS = [
("date", _("Date")),
("from", _("Sender")),
("subject", _("Subject")),
]
2 changes: 2 additions & 0 deletions modoboa_webmail/lib/fetch_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,8 @@ def __convert_to_str(self, chunk):

def parse_chunk(self, chunk):
"""Parse chunk."""
if not chunk:
return
chunk = self.__convert_to_str(chunk)
if self.__next_literal_len:
literal = chunk[:self.__next_literal_len]
Expand Down
10 changes: 3 additions & 7 deletions modoboa_webmail/lib/utils.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
"""
Misc. utilities.
"""
"""Misc. utilities."""

from modoboa.lib.web_utils import NavigationParameters


Expand All @@ -24,10 +23,7 @@ def decode_payload(encoding, payload):


class WebmailNavigationParameters(NavigationParameters):

"""
Specific NavigationParameters subclass for the webmail.
"""
"""Specific NavigationParameters subclass for the webmail."""

def __init__(self, request, defmailbox=None):
super(WebmailNavigationParameters, self).__init__(
Expand Down
26 changes: 25 additions & 1 deletion modoboa_webmail/static/modoboa_webmail/js/webmail.js
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,7 @@ Webmail.prototype = {
$.proxy(this.attachments_init, this));
}, this));
$document.on('click', '.addcontact', $.proxy(this.addContact, this));
$document.on('click', '.sort-order', $.proxy(this.sortMessages, this));
},

/**
Expand Down Expand Up @@ -287,7 +288,7 @@ Webmail.prototype = {
* @this Webmail
*/
store_nav_params: function() {
var params = new Array("order", "pattern", "criteria");
var params = new Array("sort_order", "pattern", "criteria");

this.navparams = {};
for (var idx in params) {
Expand Down Expand Up @@ -1476,5 +1477,28 @@ Webmail.prototype = {
}
createContact();
});
},

/**
* Sort message list.
*
*/
sortMessages: function (evt) {
evt.preventDefault();

var $link = get_target(evt, 'a');
var newDirection = '-';
var newOrder = newDirection + $link.attr('href');
var currentOrder = this.navparams['sort_order'];

if (currentOrder) {
var direction = currentOrder.substr(0, 1);
if (currentOrder.substr(1) == newOrder.substr(1)) {
newDirection = (direction === '+') ? '-' : '+';
newOrder = newDirection + newOrder.substr(1);
}
}
this.navobject.setparam('sort_order', newOrder);
this.navobject.update(true);
}
};
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
{% extends "common/buttons_list.html" %}{% load i18n %}
{% extends "common/buttons_list.html" %}

{% load i18n %}

{% block before_menubar %}
<div class="col-xs-5">
Expand Down
34 changes: 26 additions & 8 deletions modoboa_webmail/templatetags/webmail_tags.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
from django.utils.translation import ugettext as _

from ..lib import imapheader, separate_mailbox
from .. import constants

register = template.Library()

Expand Down Expand Up @@ -104,7 +105,7 @@ def compose_menu(selection, backurl, user, **kwargs):


@register.simple_tag
def listmailbox_menu(selection, folder, user):
def listmailbox_menu(selection, folder, user, **kwargs):
"""The menu of the listmailbox action."""
entries = [{
"name": "totrash",
Expand Down Expand Up @@ -144,14 +145,32 @@ def listmailbox_menu(selection, folder, user):
reverse("modoboa_webmail:mail_mark", args=[folder]))
}]
}]
sort_actions = [{
"header": True,
"label": _("Sort by")
}]
current_order = kwargs.get("sort_order")
for order in constants.SORT_ORDERS:
entry = {
"name": "sort_by_{}".format(order[0]),
"label": order[1],
"url": order[0],
"class": "sort-order"
}
if current_order[1:] == order[0]:
css = "fa fa-arrow-{}".format(
"down" if current_order[0] == "-" else "up")
entry.update({"img": css})
sort_actions.append(entry)
entries[2]["menu"] += sort_actions
if folder == user.parameters.get_value("trash_folder"):
entries[0]["class"] += " disabled"
entries[2]["menu"] += [
{"name": "empty",
"label": _("Empty folder"),
"url": u"{0}?name={1}".format(
reverse("modoboa_webmail:trash_empty"), folder)}
]
entries[2]["menu"].insert(4, {
"name": "empty",
"label": _("Empty folder"),
"url": u"{0}?name={1}".format(
reverse("modoboa_webmail:trash_empty"), folder)
})
elif folder == user.parameters.get_value("junk_folder"):
entries[1] = {
"name": "mark_as_not_junk_multi",
Expand All @@ -162,7 +181,6 @@ def listmailbox_menu(selection, folder, user):
}
return render_to_string('modoboa_webmail/main_action_bar.html', {
'selection': selection, 'entries': entries, 'user': user, 'css': "nav",
'STATIC_URL': settings.STATIC_URL
})


Expand Down
9 changes: 6 additions & 3 deletions modoboa_webmail/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -393,9 +393,9 @@ def listmailbox(request, defmailbox="INBOX", update_session=True):
mbc = get_imapconnector(request)
mbc.parse_search_parameters(
navparams.get("criteria"), navparams.get("pattern"))

sort_order = navparams.get("order")
paginator = Paginator(
mbc.messages_count(folder=mbox, order=navparams.get("order")),
mbc.messages_count(folder=mbox, order=sort_order),
request.user.parameters.get_value("messages_per_page")
)
page = paginator.getpage(page_id)
Expand All @@ -418,7 +418,10 @@ def listmailbox(request, defmailbox="INBOX", update_session=True):
length = 0
if previous_page_id is not None:
navparams["page"] = previous_page_id
return {"listing": content, "length": length, "pages": [page_id]}
return {
"listing": content, "length": length, "pages": [page_id],
"menuargs": {"sort_order": sort_order}
}


def render_compose(request, form, posturl, email=None, insert_signature=False):
Expand Down

0 comments on commit 8c3da5f

Please sign in to comment.