mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-19 05:58:34 +02:00
323 lines
10 KiB
HTML
323 lines
10 KiB
HTML
{% extends "common/email_listing.html" %}
|
|
{% load i18n %}
|
|
{% block css %}
|
|
<link rel="stylesheet" type="text/css" href="/static/css/webmail.css" />
|
|
{% endblock %}
|
|
{% block js %}
|
|
quota_pb = new ProgressBar({
|
|
container: $("quotabox"),
|
|
startPercentage: 0,
|
|
boxID: "box",
|
|
percentageID: "perc",
|
|
displayText: true,
|
|
displayID: "quotatext"
|
|
});
|
|
|
|
wm_updatelisting = function(resp) {
|
|
window.removeEvents("resize");
|
|
updatelisting(resp);
|
|
if ($defined(resp.folders)) {
|
|
$("folders").set("html", resp.folders);
|
|
}
|
|
if ($defined(resp.quota) && resp.quota != "-1") {
|
|
quota_pb.set(resp.quota);
|
|
$("quotabox").setStyle("display", "block");
|
|
$("quotalabel").setStyle("display", "block");
|
|
}
|
|
$$("a[name=loadfolder]").addEvent("click", foldercallback);
|
|
$$("a[name=compose]").addEvent("click", loadCompose);
|
|
}
|
|
|
|
select = function(obj) {
|
|
$$("a[name=loadfolder]").each(function(item) {
|
|
item.getParent().removeClass("selected");
|
|
item.getParent().addClass("droppable");
|
|
});
|
|
obj.getParent().removeClass("droppable");
|
|
obj.getParent().addClass("selected");
|
|
|
|
$$(obj.getParents("ul[class*=hidden]")).each(function(item) {
|
|
item.removeClass("hidden");
|
|
item.addClass("visible");
|
|
$$("li[name=" + item.get("name") + "]").each(function(item) {
|
|
item.setStyle("background", "url('/static/pics/folder-open.png') no-repeat");
|
|
});
|
|
});
|
|
}
|
|
|
|
register_callback("viewmail", function(resp) {
|
|
wm_updatelisting(resp, "hidden");
|
|
$$("a[name=back]").addEvent("click", loadFolder);
|
|
$$("a[name=reply]").addEvent("click", reply);
|
|
$$("a[name=replyall]").addEvent("click", replyall);
|
|
$$("a[name=forward]").addEvent("click", forward);
|
|
$$("a[name=delete]").addEvent("click", function(event) {
|
|
var lnk = event.target;
|
|
|
|
event.stop();
|
|
new Request.JSON({url: lnk.get("href"), onSuccess: function(resp) {
|
|
current_anchor.parse_string(resp.next).update();
|
|
select($$("a[href=" + current_anchor.getbaseurl() + "]"));
|
|
}}).get();
|
|
});
|
|
setDivHeight("mailcontent", 5, 0);
|
|
});
|
|
|
|
compose_callback = function(resp) {
|
|
wm_updatelisting(resp);
|
|
window.addEvent("resize", function(evt) {
|
|
setDivHeight("id_body", $("mailheader").getSize().y, 0);
|
|
});
|
|
$$("a[name=back]").addEvent("click", loadFolder);
|
|
$$("a[name=sendmail]").addEvent("click", function(evt) {
|
|
evt.stop();
|
|
$("composemail").set("send", {
|
|
onSuccess: function(resp) {
|
|
resp = JSON.decode(resp);
|
|
if (resp.status == "ko") {
|
|
wm_updatelisting(resp);
|
|
window.fireEvent("resize");
|
|
if ($defined(resp.error)) {
|
|
infobox.error(resp.error);
|
|
}
|
|
return;
|
|
}
|
|
current_anchor.parse_string(resp.url, true).setparams(navparams);
|
|
current_anchor.update();
|
|
}
|
|
});
|
|
$("composemail").send();
|
|
});
|
|
window.fireEvent("resize");
|
|
}
|
|
|
|
loadCompose = function(event) {
|
|
event.stop();
|
|
current_anchor.baseurl("compose").update();
|
|
}
|
|
register_callback("compose", compose_callback);
|
|
|
|
reply = function(event) {
|
|
event.stop();
|
|
location.hash += event.target.get("href");
|
|
}
|
|
register_callback("reply", compose_callback);
|
|
replyall = function(event) {
|
|
event.stop();
|
|
location.hash += event.target.get("href") + "?all=1";
|
|
}
|
|
register_callback("replyall", compose_callback);
|
|
forward = function(event) {
|
|
event.stop();
|
|
location.hash += event.target.get("href");
|
|
}
|
|
register_callback("forward", compose_callback);
|
|
|
|
var rtimer = null;
|
|
|
|
window.addEvent("pageRefresh", function() {
|
|
$clear(rtimer);
|
|
});
|
|
|
|
refreshFolder = function() {
|
|
var query = current_anchor.serialized.substring(1);
|
|
$clear(rtimer);
|
|
infobox.show('{% trans "Reloading..." %}', {
|
|
profile : "gray",
|
|
spinner : true
|
|
});
|
|
new Request.JSON({url: query, noCache : true, onSuccess: function(resp) {
|
|
callback = ($defined(resp.callback)) ? resp.callback : "default";
|
|
callbacks[callback](resp);
|
|
infobox.info('{% trans "Done" %}');
|
|
infobox.hide(1);
|
|
}}).get();
|
|
}
|
|
|
|
loadFolder = function(event, obj) {
|
|
event.stop();
|
|
if (!$defined(obj)) {
|
|
obj = $(event.target);
|
|
}
|
|
current_anchor.parse_string(gethref(obj), true).setparams(navparams);
|
|
current_anchor.update();
|
|
}
|
|
|
|
register_callback("folder", function(resp) {
|
|
wm_updatelisting(resp);
|
|
rtimer = refreshFolder.periodical({{ refreshrate }});
|
|
select($$("a[href=" + current_anchor.getbaseurl() + "]"));
|
|
$$("li[class*=clickable]").removeEvents();
|
|
$$("li[class*=clickable]").addEvent("click", function(evt) {
|
|
$$("ul[name=" + evt.target.get("name") + "]").each(function(item) {
|
|
if (item.hasClass("hidden")) {
|
|
evt.target.setStyle("background", "url('/static/pics/folder-open.png') no-repeat");
|
|
item.removeClass("hidden").addClass("visible");
|
|
} else {
|
|
evt.target.setStyle("background", "url('/static/pics/subfolders.png') no-repeat");
|
|
item.removeClass("visible").addClass("hidden");
|
|
}
|
|
});
|
|
evt.stop();
|
|
});
|
|
searchbox_init();
|
|
if (navparams.has("order")) {
|
|
src = navparams.get("order").charAt(0) == "-" ? "down_arrow.png" : "up_arrow.png";
|
|
th = $$("th[id=" + navparams.get("order").substring(1) + "]");
|
|
th.getElement("img").set("src", "/static/pics/" + src);
|
|
th.getElement("img").setStyle("display", "block");
|
|
th.addClass("selected");
|
|
}
|
|
var selectedRows = new Array();
|
|
$$("tbody>tr").addEvent("click", function(event) {
|
|
var tr = $(event.target).getParent();
|
|
if (!tr.hasClass("selected")) {
|
|
tr.addClass("selected");
|
|
selectedRows.include(tr);
|
|
tr.setStyle("position", "relative");
|
|
makeRowDraggable(tr);
|
|
} else {
|
|
tr.removeClass("selected");
|
|
selectedRows.erase(tr);
|
|
tr.setStyle("position", "static");
|
|
}
|
|
});
|
|
|
|
makeRowDraggable = function(item) {
|
|
new Drag.Move(item, {
|
|
droppables: ".droppable"
|
|
}).addEvents({
|
|
"start" : function(item) {
|
|
if (!item.hasClass("selected")) {
|
|
selectedRows.each(function(item, index) {
|
|
item.removeClass("selected");
|
|
});
|
|
selectedRows.empty();
|
|
item.addClass("selected");
|
|
selectedRows.include(item);
|
|
}
|
|
var block = new Element("div", {id: "draggeditems"})
|
|
.setStyles({"position" : "absolute",
|
|
"opacity" : 0.8,
|
|
"width" : "200px",
|
|
"padding" : "5px",
|
|
"text-align" : "center",
|
|
"height" : "25px",
|
|
"border" : "1px solid #333",
|
|
"background" : "white",
|
|
"z-index" : 3})
|
|
.setPosition(item.getPosition())
|
|
.inject(document.body);
|
|
block.set("html", "Moving " + selectedRows.length + " messages");
|
|
this.oldelement = this.element;
|
|
this.element = block;
|
|
},
|
|
"enter" : function(item, droppable) {
|
|
droppable.addClass("dragging");
|
|
},
|
|
"leave" : function(item, droppable) {
|
|
droppable.removeClass("dragging");
|
|
},
|
|
"drop" : function(item, droppable, event) {
|
|
item.dispose();
|
|
delete(item);
|
|
if (!droppable) {
|
|
this.element = this.oldelement;
|
|
return;
|
|
}
|
|
droppable.removeClass("dragging");
|
|
dest = gethref(droppable.getFirst("a"));
|
|
msgset = new Array();
|
|
selectedRows.each(function(item, index) {
|
|
msgset.include(item.get("id"));
|
|
});
|
|
{% url extensions.webmail.views.move as moveurl %}
|
|
simple_request("{{ moveurl }}", {msgset : msgset.join(), to : dest});
|
|
}
|
|
});
|
|
};
|
|
|
|
simple_request = function(url, params) {
|
|
infobox.show(gettext("Waiting..."), {
|
|
profile: "gray",
|
|
spinner: true
|
|
});
|
|
new Request.JSON({url : url,
|
|
onSuccess : function(response) {
|
|
get_callback("folder")(response);
|
|
infobox.info(gettext("Done"));
|
|
infobox.hide(1);
|
|
}
|
|
}).get(params);
|
|
}
|
|
|
|
buildmarkrequest = function(evt) {
|
|
evt.stop();
|
|
if (!selectedRows.length) {
|
|
return;
|
|
}
|
|
var ids = new Array();
|
|
selectedRows.each(function(item, index) {
|
|
ids.include(item.get("id"));
|
|
});
|
|
simple_request(evt.target.get("href"), {ids : ids.join()});
|
|
}
|
|
$$("a[name=mark-read]").addEvent("click", buildmarkrequest);
|
|
$$("a[name=mark-unread]").addEvent("click", buildmarkrequest);
|
|
|
|
$$("a[name=fdaction]").addEvent("click", function(evt) {
|
|
simple_request(evt.target.get("href"), {});
|
|
evt.stop();
|
|
});
|
|
|
|
if ($("toggleselect")) {
|
|
$("toggleselect").addEvent("click", function(evt) {
|
|
var checked = evt.target.get("checked");
|
|
if (checked) {
|
|
$$("tbody>tr").each(function(item) {
|
|
item.addClass("selected");
|
|
selectedRows.include(item);
|
|
});
|
|
} else {
|
|
$$("tbody>tr").each(function(item) { item.removeClass("selected"); });
|
|
selectedRows.empty();
|
|
}
|
|
});
|
|
}
|
|
|
|
$$("tbody>tr").addEvent("dblclick", viewmail);
|
|
$$("th[class*=sortable]").addEvent("click", function(evt) {
|
|
var tmp = "?";
|
|
var order = (navparams.has("order")) ? navparams.get("order") : "";
|
|
|
|
if (order == "") {
|
|
order = current_anchor.getparam("order");
|
|
}
|
|
if (order.substring(1) == evt.target.id) {
|
|
var sign = (order.charAt(0) == '+') ? '-' : '+';
|
|
order = sign + evt.target.id;
|
|
} else {
|
|
order = "-" + evt.target.id;
|
|
}
|
|
navparams.set("order", order);
|
|
current_anchor.setparams(navparams).update();
|
|
});
|
|
});
|
|
|
|
foldercallback = function(event) {
|
|
select(event.target);
|
|
loadFolder(event, event.target);
|
|
}
|
|
|
|
{% endblock %}
|
|
{% block middletitle %}{% trans "Webmail" %}{% endblock %}
|
|
{% block leftcol %}
|
|
<div id="folders" class="box">
|
|
</div>
|
|
{% endblock %}
|
|
{% block footer %}
|
|
<div id="quotalabel">{% trans "Mailbox quota" %}</div>
|
|
<div id="quotabox"></div>
|
|
{{ block.super }}
|
|
{% endblock %}
|