Tagging labels with 1 AJAX request

This commit is contained in:
Alexandre Cloutier
2014-09-02 13:42:04 -04:00
parent 7e26d80c77
commit 3b65eaea0b
3 changed files with 110 additions and 105 deletions
+78 -54
View File
@@ -879,14 +879,28 @@ function openMailbox(mailbox, reload) {
* Called from SOGoDataTable.render()
*/
function messageListCallback(row, data, isNew) {
var currentMessage = Mailer.currentMessages[Mailer.currentMailbox];
var currentMessages = [];
if (!Object.isArray(document.menuTarget)) {
// Menu called from one selection in message list view
currentMessages.push(Mailer.currentMessages[Mailer.currentMailbox]);
}
else {
// Menu called from multiple selection in messages list view
var rows = $(document.menuTarget);
for (var i = 0; i < rows.length; i++) {
var _row = $(rows[i]);
if (_row) {
currentMessages.push(rows[i].substr(4));
}
}
}
row.id = data['rowID'];
row.writeAttribute('labels', (data['labels']?data['labels']:""));
row.className = data['rowClasses'];
row.show(); // make sure the row is visible
// Restore previous selection
if (data['uid'] == currentMessage)
if (currentMessages.indexOf(String(data['uid'])) != -1)
row.addClassName('_selected');
if (data['Thread'])
@@ -2444,40 +2458,47 @@ function onMenuToggleMessageRead(event) {
}
function onMenuLabelNone() {
var messages = [];
var msgUIDs = [];
var url = ApplicationBaseURL + encodeURI(Mailer.currentMailbox);
if (document.menuTarget.tagName == "DIV")
// Menu called from message content view
messages.push(Mailer.currentMessages[Mailer.currentMailbox]);
else if (Object.isArray(document.menuTarget))
if (!Object.isArray(document.menuTarget)) {
if (document.menuTarget.tagName == "DIV")
// Menu called from message content view
msgUIDs.push(Mailer.currentMessages[Mailer.currentMailbox]);
else
// Menu called from one selection in message list view
msgUIDs.push(document.menuTarget.getAttribute("id").substr(4));
}
else {
// Menu called from multiple selection in messages list view
$(document.menuTarget).collect(function(row) {
messages.push(row.substr(4));
});
else
// Menu called from one selection in messages list view
messages.push(document.menuTarget.getAttribute("id").substr(4));
var rows = $(document.menuTarget);
for (var i = 0; i < rows.length; i++) {
var row = $(rows[i]);
if (row) {
msgUIDs.push(rows[i].substr(4));
}
}
}
var url = ApplicationBaseURL + encodeURI(Mailer.currentMailbox) + "/";
messages.each(function(id) {
triggerAjaxRequest(url + id + "/removeAllLabels",
messageFlagCallback,
{ mailbox: Mailer.currentMailbox, msg: id, label: null } );
});
var callbackData = { mailbox: Mailer.currentMailbox, msgUIDs: msgUIDs };
var content = { mailbox: Mailer.currentMailbox, msgUIDs: msgUIDs };
content = Object.toJSON(content);
triggerAjaxRequest(url + "/removeAllLabels", messageFlagCallback, callbackData, content);
}
function onMenuLabelFlag() {
var flag = this.readAttribute("data-name");
var url = ApplicationBaseURL + encodeURI(Mailer.currentMailbox) + "/";
var url = ApplicationBaseURL + encodeURI(Mailer.currentMailbox);
var operation = "add";
var msgUIDs;
var msgUIDs = [];
var msgLabels;
if (!Object.isArray(document.menuTarget)) {
msgUIDs = Mailer.currentMessages[Mailer.currentMailbox];
msgUIDs.push(Mailer.currentMessages[Mailer.currentMailbox]);
if (document.menuTarget.tagName == "DIV")
// Menu called from message content view
msgLabels = $('row_' + msgLabels).getAttribute("labels");
msgLabels = $('row_' + msgUIDs[0]).getAttribute("labels");
else
// Menu called from one selection in messages list view
msgLabels = document.menuTarget.getAttribute("labels");
@@ -2508,10 +2529,42 @@ function onMenuLabelFlag() {
}
}
var callbackData = { mailbox: Mailer.currentMailbox, operation: operation, flag: flag };
var callbackData = { mailbox: Mailer.currentMailbox, operation: operation, flag: flag, msgUIDs: msgUIDs};
var content = {flags: flag.asCSSIdentifier(), msgUIDs: msgUIDs, operation: operation};
content = Object.toJSON(content);
triggerAjaxRequest(url + operation + "Label", messageFlagCallback, callbackData, content);
triggerAjaxRequest(url + "/addOrRemoveLabel", messageFlagCallback, callbackData, content);
}
function messageFlagCallback(http) {
if (http.readyState == 4
&& isHttpStatus204(http.status)) {
var data = http.callbackData;
if (data["mailbox"] == Mailer.currentMailbox) {
var msgUIDs = data["msgUIDs"];
for (var i = 0; i < msgUIDs.length; i++) {
Mailer.dataTable.invalidate(msgUIDs[i]);
var row = $("row_" + msgUIDs[i]);
var operation = data["operation"];
if (operation) {
var labels = row.getAttribute("labels");
var flags = [];
if (labels.length > 0)
flags = labels.split(" ");
if (operation == "add")
flags.push(data["flag"]);
else {
// Remove flag
var flag = data["flag"];
var idx = flags.indexOf(flag);
flags.splice(idx, 1);
}
row.writeAttribute("labels", flags.join(" "));
}
else
row.writeAttribute("labels", "");
}
}
}
}
function onMenuToggleMessageFlag(event) {
@@ -2566,35 +2619,6 @@ function folderRefreshCallback(http) {
}
}
function messageFlagCallback(http) {
if (http.readyState == 4
&& isHttpStatus204(http.status)) {
var data = http.callbackData;
if (data["mailbox"] == Mailer.currentMailbox) {
Mailer.dataTable.invalidate(data["msg"]);
var row = $("row_" + data["msg"]);
var operation = data["label"];
if (operation) {
var labels = row.getAttribute("labels");
var flags = [];
if (labels.length > 0)
flags = labels.split(" ");
if (operation.substr(0, 3) == "add")
flags.push(operation.substr(3));
else {
// Remove flag
var flag = operation.substr(6);
var idx = flags.indexOf(flag);
flags.splice(idx, 1);
}
row.writeAttribute("labels", flags.join(" "));
}
else
row.writeAttribute("labels", "");
}
}
}
function onMessageListMenuPrepareVisibility() {
/* This method attaches the right mailbox-menu to the generic message list
menu. */