wip: Global user interface improvment

* The quarantine manager is done
* The webmail is not yet completed
* Cleanup
* More...
This commit is contained in:
Antoine Nguyen
2012-03-27 12:02:46 +02:00
parent 4dae056d87
commit e10bba2d4e
38 changed files with 746 additions and 461 deletions
+22 -15
View File
@@ -26,7 +26,7 @@ class Page(object):
def __init__(self, pageid, id_start, id_stop, items,
items_per_page, has_previous, has_next,
baseurl=None):
self.pageid = pageid
self.number = pageid
self.id_start = id_start
self.id_stop = id_stop
self.items = items
@@ -35,15 +35,15 @@ class Page(object):
self.has_next = has_next
self.baseurl = baseurl
def previous_page(self):
def previous_page_number(self):
if not self.has_previous:
return False
return self.pageid - 1
return self.number - 1
def next_page(self):
def next_page_number(self):
if not self.has_next:
return False
return self.pageid + 1
return self.number + 1
def last_page(self):
lid = self.items / self.items_per_page
@@ -57,7 +57,9 @@ class Paginator(object):
def __init__(self, total, elems_per_page):
self.total = total
self.elems_per_page = elems_per_page
self.baseurl = None
self.num_pages = total / elems_per_page
if total % elems_per_page:
self.num_pages += 1
def _indexes(self, page):
id_start = self.elems_per_page * page + 1
@@ -80,11 +82,12 @@ class Paginator(object):
return None
p = Page(page, id_start, id_stop, self.total,
self.elems_per_page, has_previous, has_next)
if self.baseurl:
p.baseurl = self.baseurl
p.paginator = self
return p
class EmailListing(object):
table_styles = "table-striped table-condensed"
def __init__(self, baseurl=None, folder=None, elems_per_page=40,
navparams={}, **kwargs):
self.folder = folder
@@ -102,15 +105,14 @@ class EmailListing(object):
self.paginator = Paginator(self.mbc.messages_count(folder=self.folder,
order=order),
elems_per_page)
if baseurl:
self.paginator.baseurl = baseurl
self.baseurl = baseurl
@staticmethod
def render_navbar(page):
def render_navbar(page, baseurl=None):
if page is None:
return ""
context = {"page" : page, "MEDIA_URL" : settings.MEDIA_URL}
return render_to_string("common/navbar.html", context)
context = {"page" : page, "MEDIA_URL" : settings.MEDIA_URL, "baseurl" : baseurl}
return render_to_string("common/pagination_bar.html", context)
def fetch(self, request, id_start, id_stop):
table = self.tbltype(request,
@@ -121,7 +123,12 @@ class EmailListing(object):
<form method="POST" id="listingform">
{{ table }}
</form>""")
return tpl.render(Context({"table" : table.render()}))
return tpl.render(
Context(
{"table" : table.render(styles=self.table_styles,
withheader=False)}
)
)
# def render(self, request, pageid=1, **kwargs):
# listing = ""
@@ -153,7 +160,7 @@ class EmailListing(object):
listing = _("This folder contains no message")
else:
listing = self.fetch(request, page.id_start, page.id_stop)
return dict(listing=listing, navbar=self.render_navbar(page))
return dict(listing=listing, navbar=self.render_navbar(page, self.baseurl))
def parse_search_parameters(request):
if request.GET.has_key("pattern"):
+5 -4
View File
@@ -188,16 +188,17 @@ class Table(object):
def __str__(self):
return self.render()
def render(self):
def render(self, styles="table-striped table-bordered", withheader=True):
if len(self.rows):
t = Template("""
<table id="{{ tableid }}" class="table table-striped table-bordered">
{% include "common/table_head.html" %}
<table id="{{ tableid }}" class="table {{ styles }}">
{% if withheader %}{% include "common/table_head.html" %}{% endif %}
{% include "common/table_body.html" %}
</table>
""")
return t.render(RequestContext(self.request, {
"table" : self, "tableid" : self.tableid
"table" : self, "tableid" : self.tableid, "styles" : styles,
"withheader" : withheader
}))
t = Template("""
<div class="info">%s</div>
+13
View File
@@ -3,6 +3,7 @@ import os
from django.conf import settings
from django import template
from django.contrib import messages
from django.template import Template, Context
from django.template.loader import render_to_string
from django.core.urlresolvers import reverse
from django.utils.translation import ugettext as _
@@ -116,3 +117,15 @@ def alert(msg, typ):
<a class="close" data-dismiss="alert">×</a>
%s
</div>""" % (typ, msg)
@register.simple_tag
def render_link(linkdef, mdclass=None):
t = Template("""<a href="{{ link.url }}" name="{{ link.name }}"
{% if link.modal %}data-toggle="ajaxmodal{% if link.autowidth %}-autowidth{% endif %}"{% endif %}
{% if link.modalcb %}modalcb="{{ link.modalcb }}"{% endif %}
class="{{ mdclass }}{% if link.class %} {{ link.class }}{% endif %}"
{% if link.confirm %} onclick="return confirm('{{ link.confirm }}')"{% endif %}>
{% if link.img %}<i class="{{ link.img }}"></i>{% endif %}
{{ link.label }}
</a>""")
return t.render(Context(dict(link=linkdef, mdclass=mdclass)))