Files
modoboa/extensions/webmail/static/js/fdmenu.js
T
Antoine Nguyen 5b1c226ba4 Refactoring
* Extracting JS code from the quarantine plugin to specific javascript file,
* CSS modifications for the webmail
2011-04-13 18:23:19 +02:00

110 lines
3.2 KiB
JavaScript

/*
* Simple dropdown menu plugin used for folders manipulation.
*
*/
var FdMenu = new Class({
Implements: [Options],
options: {
modify_url: "",
delete_url: ""
},
add_entry: function(name, label, pic, url, onclick) {
var item = new Element("li");
var picpath = static_url("pics/" + pic);
this[name] = new Element("a")
.set("html", "<img src='" + picpath + "' /> " + label)
.addEvent("click", onclick.bind(this))
.inject(item);
item.inject(this.list);
},
initialize: function(options) {
this.setOptions(options);
this.container = new Element("div", {"id" : "fdmenu"})
.addClass("fdmenu");
this.list = new Element("ul");
this.add_entry("modbutton", gettext("Edit folder"),
"edit.png", this.options.modify_url, function(evt) {
evt.stop();
SqueezeBox.open(evt.target.get("href"), {
handler: "iframe",
size: {x: 350, y: 400}
});
$(document.body).fireEvent("click");
});
this.add_entry("delbutton", gettext("Delete folder"), "remove.png",
this.options.delete_url, function(evt) {
evt.stop();
$(document.body).fireEvent("click");
if (!confirm(gettext("Delete folder?"))) {
return;
}
new Request.JSON({
url: evt.target.get("href"),
method: "GET",
onSuccess: function(resp) {
if (resp.status == "ok") {
var dfolder = this.current_folder + "/";
if (dfolder == current_anchor.base) {
var pfolder = ((this.current_folder.split(".")).slice(0, -1)).join(".");
if (pfolder == "") {
pfolder = "INBOX";
}
current_anchor.baseurl(pfolder, 1);
}
current_anchor.loading_message = gettext("Folder deleted");
current_anchor.loading_color = "green";
current_anchor.update(1);
} else {
infobox.error(resp.error);
infobox.hide(2);
}
}.bind(this)
}).send();
}
);
this.list.inject(this.container);
this.shown = false;
$(document.body).addEvent("click", function() {
if (this.shown) {
this.hide();
}
}.bind(this));
},
show: function(origin, folder) {
var position = origin.getPosition();
this.container.setStyles({
position: "absolute",
top: position.y + 5,
left: position.x + 5,
display: "block"
});
this.container.inject(document.body);
this.shown = true;
this.current_folder = folder;
this.modbutton.set("href", this.options.modify_url + "?name=" + folder);
this.delbutton.set("href", this.options.delete_url + "?name=" + folder);
},
hide: function() {
this.container.setStyles({
display: "none"
});
this.container = this.container.dispose();
this.shown = false;
},
toggle: function(origin, folder) {
return (!this.shown) ? this.show(origin, folder) : this.hide();
}
});