mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-11-12 08:53:56 +01:00
Quarantine plugin refactoring. It is now working like the webmail plugin, ie with an anchor based ajax navigation. What is broken for the moment:
* search functionality, * headers do not appear while displaying a mail. New message system. (see infobox.js)
This commit is contained in:
@@ -248,12 +248,12 @@ class IMAPconnector(object):
|
||||
class ImapListing(EmailListing):
|
||||
tpl = "webmail/index.html"
|
||||
tbltype = WMtable
|
||||
deflocation = "INBOX/"
|
||||
defcallback = "wm_updatelisting"
|
||||
|
||||
def __init__(self, user, password, baseurl=None, **kwargs):
|
||||
def __init__(self, user, password, **kwargs):
|
||||
self.mbc = IMAPconnector(user=user, password=password)
|
||||
EmailListing.__init__(self, **kwargs)
|
||||
if baseurl:
|
||||
self.paginator.baseurl = baseurl
|
||||
EmailListing.__init__(self, **kwargs)
|
||||
|
||||
def getfolders(self):
|
||||
md_folders = [{"name" : "INBOX", "icon" : "overview.png"},
|
||||
|
||||
@@ -10,7 +10,7 @@ from django.core.urlresolvers import reverse
|
||||
from django.conf.urls.defaults import include
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from mailng.admin.models import Mailbox
|
||||
from mailng.lib import events, parameters, _render, _render_error
|
||||
from mailng.lib import events, parameters, _render, _render_error, getctx
|
||||
from imap_listing import *
|
||||
from forms import *
|
||||
from templatetags.webextras import *
|
||||
@@ -51,13 +51,6 @@ def menu(**kwargs):
|
||||
def userlogin(**kwargs):
|
||||
kwargs["request"].session["password"] = kwargs["password"]
|
||||
|
||||
def getctx(status, level=1, **kwargs):
|
||||
callername = sys._getframe(level).f_code.co_name
|
||||
ctx = {"status" : status, "callback" : callername}
|
||||
for kw, v in kwargs.iteritems():
|
||||
ctx[kw] = v
|
||||
return ctx
|
||||
|
||||
@login_required
|
||||
def folder(request, name, updatenav=True):
|
||||
if not name:
|
||||
@@ -76,7 +69,7 @@ def folder(request, name, updatenav=True):
|
||||
order = request.session["navparams"]["order"]
|
||||
|
||||
lst = ImapListing(request.user.username, request.session["password"],
|
||||
name, folder=name, order=order)
|
||||
baseurl=name, folder=name, order=order)
|
||||
page = lst.paginator.getpage(request.session["page"])
|
||||
if page:
|
||||
content = lst.fetch(request, page.id_start, page.id_stop)
|
||||
@@ -94,10 +87,11 @@ def index(request):
|
||||
navp = request.session.has_key("navparams") \
|
||||
and request.session["navparams"] or {}
|
||||
lst = ImapListing(request.user.username, request.session["password"],
|
||||
"INBOX", navparams=navp, folder="INBOX")
|
||||
baseurl="INBOX", navparams=navp, folder="INBOX",
|
||||
empty=True)
|
||||
except Exception as exp:
|
||||
return _render_error(request, {"error" : exp})
|
||||
return lst.render(request, empty=True)
|
||||
return lst.render(request)
|
||||
|
||||
def fetchmail(request, folder, mail_id, all=False):
|
||||
res = IMAPconnector(request).fetch(start=mail_id, folder=folder, all=all)
|
||||
@@ -128,7 +122,7 @@ def getmailcontent(request, folder, mail_id):
|
||||
except KeyError:
|
||||
pageid = "1"
|
||||
folder, imapid = msg["imapid"].split("/")
|
||||
return _render(request, "webmail/viewmail.html", {
|
||||
return _render(request, "common/viewmail.html", {
|
||||
"headers" : email.render_headers(folder, mail_id),
|
||||
"folder" : folder, "imapid" : imapid, "mailbody" : email.body,
|
||||
"pre" : email.pre
|
||||
@@ -270,7 +264,7 @@ def reply(request, folder, mail_id):
|
||||
else:
|
||||
form.fields["subject"].initial = "Re: %s" % email.Subject
|
||||
textheader = "%s %s" % (email.From, _("wrote:"))
|
||||
return render_compose(request, form, reverse(reply, args[folder, mail_id]),
|
||||
return render_compose(request, form, reverse(reply, args=[folder, mail_id]),
|
||||
textheader, body)
|
||||
|
||||
@login_required
|
||||
|
||||
@@ -1,6 +1,20 @@
|
||||
{% extends "common/email_listing.html" %}
|
||||
{% load i18n %}
|
||||
{% block css %}
|
||||
#listing {
|
||||
position: absolute;
|
||||
left: 155px;
|
||||
right: 0px;
|
||||
top: 130px;
|
||||
height: expression(document.body.clientHeight - 35 + "px");
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
html > body #listing {
|
||||
position: fixed;
|
||||
bottom: 35px;
|
||||
}
|
||||
|
||||
#leftcol {
|
||||
float: left;
|
||||
width: 150px;
|
||||
@@ -97,22 +111,9 @@ tr.selected {
|
||||
|
||||
{% endblock %}
|
||||
{% block js %}
|
||||
navparams = new Hash({
|
||||
{% for k, v in navparams.items %}
|
||||
{{ k }} : "{{ v }}",
|
||||
{% endfor %}
|
||||
});
|
||||
wm_updatelisting = function(resp) {
|
||||
updatelisting(resp);
|
||||
|
||||
updatelisting = function(resp) {
|
||||
if ($defined(resp.menu)) {
|
||||
$("menubar").set("html", resp.menu);
|
||||
parse_menubar("menubar");
|
||||
}
|
||||
$("listing").set("html", resp.listing);
|
||||
if ($defined(resp.navbar)) {
|
||||
$("navbar").set("html", resp.navbar);
|
||||
$("navbar").getChildren("a").addEvent("click", navbarcallback);
|
||||
}
|
||||
$$("a[name=compose]").addEvent("click", loadCompose);
|
||||
$$("a[name=empty]").addEvent("click", empty);
|
||||
if (!checkSelection()) {
|
||||
@@ -123,7 +124,7 @@ tr.selected {
|
||||
empty = function(event) {
|
||||
event.stop();
|
||||
new Request.JSON({url : event.target.get("href"), onSuccess : function(resp) {
|
||||
updatelisting(resp);
|
||||
wm_updatelisting(resp);
|
||||
}}).get();
|
||||
}
|
||||
|
||||
@@ -147,17 +148,8 @@ tr.selected {
|
||||
obj.getParent().addClass("selected");
|
||||
}
|
||||
|
||||
{% url extensions.webmail.main.folder as view_url %}
|
||||
viewmail = function(event) {
|
||||
event.stop();
|
||||
if (event.target.parentNode.id) {
|
||||
var url = event.target.parentNode.id + "/";
|
||||
event.target.parentNode.setStyle("background", "#ffffcc");
|
||||
current_anchor.baseurl(url).update();
|
||||
}
|
||||
}
|
||||
register_callback("viewmail", function(resp) {
|
||||
updatelisting(resp, "hidden");
|
||||
wm_updatelisting(resp, "hidden");
|
||||
$$("a[name=back]").addEvent("click", loadFolder);
|
||||
$$("a[name=reply]").addEvent("click", reply);
|
||||
$$("a[name=replyall]").addEvent("click", replyall);
|
||||
@@ -173,7 +165,7 @@ tr.selected {
|
||||
});
|
||||
|
||||
compose_callback = function(resp) {
|
||||
updatelisting(resp);
|
||||
wm_updatelisting(resp);
|
||||
window.addEvent("resize", function(evt) {
|
||||
setDivHeight("id_body", $("mailheader").getSize().y, 0);
|
||||
});
|
||||
@@ -184,7 +176,7 @@ tr.selected {
|
||||
onSuccess: function(resp) {
|
||||
resp = JSON.decode(resp);
|
||||
if (resp.status == "ko") {
|
||||
updatelisting(resp);
|
||||
wm_updatelisting(resp);
|
||||
window.fireEvent("resize");
|
||||
return;
|
||||
}
|
||||
@@ -228,7 +220,7 @@ tr.selected {
|
||||
current_anchor.update();
|
||||
}
|
||||
register_callback("folder", function(resp) {
|
||||
updatelisting(resp);
|
||||
wm_updatelisting(resp);
|
||||
if (navparams.has("order")) {
|
||||
src = navparams.get("order").charAt(0) == "-" ? "down_arrow.png" : "up_arrow.png";
|
||||
th = $$("th[id=" + navparams.get("order").substring(1) + "]");
|
||||
@@ -341,18 +333,10 @@ tr.selected {
|
||||
});
|
||||
});
|
||||
|
||||
navbarcallback = function(event) {
|
||||
event.stop();
|
||||
current_anchor.setparams(navparams);
|
||||
current_anchor.parse_string(event.target.getParent().get("href")).update();
|
||||
}
|
||||
|
||||
foldercallback = function(event) {
|
||||
select(event.target);
|
||||
loadFolder(event, event.target);
|
||||
}
|
||||
|
||||
ajaxListener("INBOX/", updatelisting);
|
||||
$$("a[name=loadfolder]").addEvent("click", foldercallback);
|
||||
{% endblock %}
|
||||
{% block middletitle %}{% trans "Webmail" %}{% endblock %}
|
||||
@@ -374,3 +358,6 @@ tr.selected {
|
||||
</ul>
|
||||
</div>
|
||||
{% endblock %}
|
||||
{% block menu %}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
@@ -1,54 +0,0 @@
|
||||
{% load i18n %}
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head profile="http://www.w3.org/2005/10/profile">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<link rel="stylesheet" type="text/css" href="/static/stylesheets/box.css" />
|
||||
|
||||
<style type="text/css">
|
||||
body {
|
||||
margin: 5px;
|
||||
}
|
||||
#mailcontent {
|
||||
width: 100%;
|
||||
border: 0px transparent none;
|
||||
margin: 0;
|
||||
}
|
||||
table#emailheaders {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
#emailheaders td,
|
||||
#emailheaders th {
|
||||
height: 22px;
|
||||
text-align: left;
|
||||
padding-left: 10px;
|
||||
border: 1px solid #ccc;
|
||||
}
|
||||
#emailheaders td {
|
||||
font-size: 1em;
|
||||
}
|
||||
#emailheaders th {
|
||||
background: #F7F9Fb;
|
||||
}
|
||||
#emailheaders a, #emailheaders a:visited {
|
||||
color: blue;
|
||||
text-decoration: none;
|
||||
}
|
||||
#emailheaders a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
pre {
|
||||
font-size: medium;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div id="table-container">
|
||||
{{ headers }}
|
||||
</div>
|
||||
{% if pre %}<pre>{% endif %}{{ mailbody }}{% if pre %}</pre>{% endif %}
|
||||
</body>
|
||||
</html>
|
||||
@@ -75,6 +75,17 @@ def listing_menu(selection, folder, perms):
|
||||
"url" : reverse(webmail.main.compose),
|
||||
"img" : "/static/pics/edit.png",
|
||||
"label" : _("New message")},
|
||||
{"name" : "actions",
|
||||
"img" : "/static/pics/domains.png",
|
||||
"label" : _("Mark messages"),
|
||||
"class" : "menubardropdown",
|
||||
"menu" : [
|
||||
{"name" : "mark-read",
|
||||
"label" : _("As read")},
|
||||
{"name" : "mark-unread",
|
||||
"label" : _("As unread")}
|
||||
]
|
||||
}
|
||||
]
|
||||
if folder in ["Trash"]:
|
||||
entries += [
|
||||
|
||||
Reference in New Issue
Block a user