Misc. updates.

see #204
This commit is contained in:
Antoine Nguyen
2012-04-03 12:56:06 +02:00
parent 975b40e7d8
commit 9db910254d
10 changed files with 87 additions and 64 deletions
+4 -1
View File
@@ -122,7 +122,10 @@ def get_static_content(target):
function arform_cb() {
$('#id_untildate').datepicker();
$(".submit").one('click', function(e) {
simple_ajax_form_post(e, arform_cb);
simple_ajax_form_post(e, {
error_cb: arform_cb,
formid: "arform"
});
});
}
</script>
+2 -1
View File
@@ -18,7 +18,8 @@ def autoreply(request, tplname="common/generic_modal_form.html"):
title=_("Auto-reply message"),
action=reverse(autoreply),
formid="arform",
submit_label=_("Update")
action_label=_("Update"),
action_classes="submit"
)
mb = Mailbox.objects.get(user=request.user.id)
try:
+1
View File
@@ -10,6 +10,7 @@ class ComposeMailForm(forms.Form):
origmsgid = forms.CharField(label="", widget=forms.HiddenInput(), required=False)
class FolderForm(forms.Form):
oldname = forms.CharField(label="", widget=forms.HiddenInput(), required=False)
name = forms.CharField()
class AttachmentForm(forms.Form):
+2 -2
View File
@@ -11,7 +11,7 @@ from imapclient.response_parser import parse_fetch_response
from modoboa.lib import parameters
from modoboa.lib.connections import *
from modoboa.lib.webutils import static_url
from exceptions import ImapError
from exceptions import ImapError, WebmailError
from fetch_parser import *
#imaplib.Debug = 4
@@ -347,7 +347,7 @@ class IMAPconnector(object):
@capability('LIST-EXTENDED', '_listfolders_simple')
def _listfolders(self, topmailbox='', md_mailboxes=[]):
pattern = ("%s.%%" % topmailbox.encode("imap4-utf-7")) if len(topmailbox) else "%"
resp = self._cmd("LSUB", "", pattern, "RETURN", "(CHILDREN)")
resp = self._cmd("LIST", "", pattern, "RETURN", "(CHILDREN)")
result = []
for mb in resp:
flags, delimiter, name, childinfo = \
@@ -1,12 +1,8 @@
{% load i18n %}
{% load webextras %}
<ul class="nav nav-list">
{% if titlebar %}
<li class="nav-header">
<a href="{% url modoboa.extensions.webmail.views.newfolder %}">
<i class="icon-plus"></i>
{% trans "Folders" %}
</a>
{% endif %}
{% print_folders folders selected withunseen withmenu %}
</ul>
{% load i18n webextras %}
<div id="mboxes_container">
<ul class="nav nav-list">
<li class="nav-header">{% trans "Folders" %}</li>
{% print_folders folders selected withunseen %}
</ul>
</div>
<div id="mboxactions">{% mboxes_menu %}</div>
+37 -8
View File
@@ -74,7 +74,8 @@ def compose_menu(selection, backurl, user):
def listmailbox_menu(selection, folder, user):
entries = [
{"name" : "compose",
"url" : "compose",
"url" : "compose",
"img" : "icon-edit",
"label" : _("New message"),
"class" : "btn"},
{"name" : "mark",
@@ -118,7 +119,11 @@ def listmailbox_menu(selection, folder, user):
))
@register.simple_tag
def print_folders(folders, selected=None, withunseen=False, withmenu=False):
def print_folders(folders, selected=None, withunseen=False, selectonly=False):
"""Display a tree of mailboxes and sub-mailboxes
"""
result = ""
for fd in folders:
@@ -136,22 +141,46 @@ def print_folders(folders, selected=None, withunseen=False, withmenu=False):
ul_state = "hidden"
div_state = "collapsed"
result += "<div class='clickbox %s'></div>" % div_state
# if withmenu:
# result += "<img src='%spics/go-down.png' class='footer' />" \
# % settings.MEDIA_URL
cssclass = "block"
if withunseen and fd.has_key("unseen"):
label += " (%d)" % fd["unseen"]
cssclass += " unseen"
iclass = fd["class"] if fd.has_key("class") else "icon-folder-close"
result += """<a href='%s' class='%s' name='loadfolder'>
result += """<a href='%s' class='%s' name='%s'>
<i class="%s"></i>
%s
</a>
""" % (fd.has_key("path") and fd["path"] or fd["name"], cssclass, iclass, label)
""" % (fd.has_key("path") and fd["path"] or fd["name"], cssclass,
'selectfolder' if selectonly else 'loadfolder', iclass, label)
if fd.has_key("sub") and len(fd["sub"]):
result += "<ul name='%s' class='%s'>" % (fd["path"], ul_state) \
+ print_folders(fd["sub"], selected, withunseen, withmenu) + "</ul>\n"
+ print_folders(fd["sub"], selected, withunseen, selectonly) + "</ul>\n"
result += "</li>\n"
return result
@register.simple_tag
def mboxes_menu():
entries = [
{"name" : "newmbox",
"url" : reverse(webmail.views.newfolder),
"img" : "icon-plus",
"label" : "",
"modal" : True,
"modalcb" : "webmail.mboxform_cb",
"class" : "btn btn-mini"},
{"name" : "editmbox",
"url" : reverse(webmail.views.editfolder),
"img" : "icon-edit",
"label" : "",
"class" : "btn btn-mini"},
{"name" : "removembox",
"url" : reverse(webmail.views.delfolder),
"img" : "icon-remove",
"label" : "",
"class" : "btn btn-mini"}
]
return render_to_string('common/buttons_list.html', dict(
entries=entries, css="nav"
))
+28 -26
View File
@@ -1,4 +1,4 @@
# -*- coding: utf-8 -*-
# coding: utf-8
import time
import sys
from django.http import HttpResponse, Http404, HttpResponseRedirect
@@ -64,7 +64,6 @@ def __render_common_components(request, folder_name, lst=None, content=None, men
"titlebar" : True,
"selected" : request.session["folder"],
"folders" : mbc.getfolders(request.user),
"withmenu" : True,
"withunseen" : True
}),
"menu" : menu,
@@ -229,20 +228,22 @@ def separate_folder(fullname, sep="."):
@login_required
@needs_mailbox()
def newfolder(request, tplname="webmail/folder.html"):
def newfolder(request, tplname="webmail/folder2.html"):
mbc = IMAPconnector(user=request.user.username,
password=request.session["password"])
ctx = {"title" : _("Create a new folder"),
"fname" : "newfolder",
"submit_label" : _("Create"),
"withmenu" : False,
"withunseen" : False}
"formid" : "mboxform",
"action" : reverse(newfolder),
"action_label" : _("Create"),
"action_classes" : "submit",
"withunseen" : False,
"selectonly" : True}
ctx["folders"] = mbc.getfolders(request.user)
if request.method == "POST":
form = FolderForm(request.POST)
if form.is_valid():
pf = request.POST.has_key("parent_folder") \
and request.POST["parent_folder"] or None
pf = request.POST.get("parent_folder", None)
mbc.create_folder(form.cleaned_data["name"], pf)
return ajax_response(request, ajaxnav=True, respmsg=_("Folder created"))
@@ -256,14 +257,16 @@ def newfolder(request, tplname="webmail/folder.html"):
@login_required
@needs_mailbox()
def editfolder(request, tplname="webmail/folder.html"):
def editfolder(request, tplname="webmail/folder2.html"):
mbc = IMAPconnector(user=request.user.username,
password=request.session["password"])
ctx = {"title" : _("Edit folder"),
"fname" : "editfolder",
"submit_label" : _("Update"),
"withmenu" : False,
"withunseen" : False}
ctx = {"title" : _("Edit mailbox"),
"formid" : "mboxform",
"action" : reverse(editfolder),
"action_label" : _("Update"),
"action_classes" : "submit",
"withunseen" : False,
"selectonly" : True}
ctx["folders"] = mbc.getfolders(request.user)
if request.method == "POST":
form = FolderForm(request.POST)
@@ -285,12 +288,12 @@ def editfolder(request, tplname="webmail/folder.html"):
ctx["form"] = form
return ajax_response(request, status="ko", template=tplname, **ctx)
if not request.GET.has_key("name") or request.GET["name"] == "":
return
name = request.GET["name"]
ctx["oldname"] = name
name, parent = separate_folder(name)
name = request.GET.get("name", None)
if name is None:
raise WebmailError(_("Invalid request"))
shortname, parent = separate_folder(name)
ctx["form"] = FolderForm()
ctx["form"].fields["oldname"].initial = shortname
ctx["form"].fields["name"].initial = name
ctx["selected"] = parent
return _render(request, tplname, ctx)
@@ -298,16 +301,17 @@ def editfolder(request, tplname="webmail/folder.html"):
@login_required
@needs_mailbox()
def delfolder(request):
if not request.GET.has_key("name") or request.GET["name"] == "":
return
name = request.GET.get("name", None)
if name is None:
raise WebmailError(_("Bad request"))
mbc = IMAPconnector(user=request.user.username,
password=request.session["password"])
mbc.delete_folder(request.GET["name"])
mbc.delete_folder(name)
return ajax_response(request)
@login_required
@needs_mailbox()
def attachments(request, tplname="webmail/attachments2.html"):
def attachments(request, tplname="webmail/attachments.html"):
if request.method == "POST":
csuploader = AttachmentUploadHandler()
request.upload_handlers.insert(0, csuploader)
@@ -383,10 +387,8 @@ def render_mboxes_list(request, imapc):
"""
curmbox = request.session.get("mbox", "INBOX")
return _render_to_string(request, "webmail/folders.html", {
"titlebar" : True,
"selected" : curmbox,
"folders" : imapc.getfolders(request.user),
"withmenu" : True,
"withunseen" : True
})
+1 -2
View File
@@ -126,6 +126,5 @@ def render_link(linkdef, mdclass=None):
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>""")
{{ link.label }}</a>""")
return t.render(Context(dict(link=linkdef, mdclass=mdclass)))
+3 -11
View File
@@ -35,18 +35,10 @@ def _render_error(request, errortpl="error", user_context={}):
context_instance=template.RequestContext(request))
def render_actions(actions):
t = template.Template("""
{% for a in actions %}
<a href="{{ a.url }}" name="{{ a.name }}"
{% if a.modal %}data-toggle="ajaxmodal"{% endif %}
{% if a.modalcb %}modalcb="{{ a.modalcb }}"{% endif %}
{% if a.confirm %}onclick="return confirm('{{ a.confirm }}')"{% endif %}>
<i class="{{ a.img }}" title="{{ a.title }}"></i></a>
{% endfor %}
t = template.Template("""{% load libextras %}
{% for a in actions %}{% render_link a %}{% endfor %}
""")
return t.render(template.Context({
"actions" : actions
}))
return t.render(template.Context(dict(actions=actions)))
def _ctx_ok(url):
return {"status" : "ok", "url" : url}
+1 -1
View File
@@ -18,7 +18,7 @@ body {
margin-bottom: 0;
}
#pagination_bar {
.navbar-text {
color: #999999 !important;
}