See ChangeLog.
Monotone-Parent: e41b77fddf24412874484346ccb32080911c93bc Monotone-Revision: 81d97c694c2b068327505b3735f75782c70eaa6e Monotone-Author: flachapelle@inverse.ca Monotone-Date: 2011-05-03T14:05:08 Monotone-Branch: ca.inverse.sogo
This commit is contained in:
parent
8f2bd77694
commit
647d46368c
10
ChangeLog
10
ChangeLog
|
@ -1,3 +1,13 @@
|
||||||
|
2011-05-03 Francis Lachapelle <flachapelle@inverse.ca>
|
||||||
|
|
||||||
|
* UI/WebServerResources/generic.js (onRowClick): in some cases
|
||||||
|
under ID, the event is trigger on the dragging identifier
|
||||||
|
and must be ignored.
|
||||||
|
|
||||||
|
* UI/WebServerResources/MailerUI.js (deleteSelectedMessages): we no
|
||||||
|
longer wait for the callback before invalidating the caches.
|
||||||
|
(mailListToggleMessagesRead): idem.
|
||||||
|
|
||||||
2011-04-28 Ludovic Marcotte <lmarcotte@inverse.ca>
|
2011-04-28 Ludovic Marcotte <lmarcotte@inverse.ca>
|
||||||
|
|
||||||
* SoObjects/SOGo/SQLSource.{h,m}: Added resources support,
|
* SoObjects/SOGo/SQLSource.{h,m}: Added resources support,
|
||||||
|
|
|
@ -203,7 +203,8 @@ function openMessageWindowsForSelection(action, firstOnly) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Triggered when clicking on the read/unread dot of a message row */
|
/* Triggered when clicking on the read/unread dot of a message row or
|
||||||
|
* through the contextual menu. */
|
||||||
function mailListToggleMessagesRead(row) {
|
function mailListToggleMessagesRead(row) {
|
||||||
var selectedRowsId = [];
|
var selectedRowsId = [];
|
||||||
if (row) {
|
if (row) {
|
||||||
|
@ -233,6 +234,9 @@ function mailListToggleMessagesRead(row) {
|
||||||
var msguid = selectedRowsId[i].split('_')[1];
|
var msguid = selectedRowsId[i].split('_')[1];
|
||||||
markMailInWindow(window, msguid, markread);
|
markMailInWindow(window, msguid, markread);
|
||||||
|
|
||||||
|
// Assume ajax request will succeed and invalidate data cache now.
|
||||||
|
Mailer.dataTable.invalidate(msguid, true);
|
||||||
|
|
||||||
var url = ApplicationBaseURL + encodeURI(Mailer.currentMailbox) + "/"
|
var url = ApplicationBaseURL + encodeURI(Mailer.currentMailbox) + "/"
|
||||||
+ msguid + "/" + action;
|
+ msguid + "/" + action;
|
||||||
|
|
||||||
|
@ -242,6 +246,7 @@ function mailListToggleMessagesRead(row) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
function mailListMarkMessage(event) {
|
function mailListMarkMessage(event) {
|
||||||
mailListToggleMessagesRead();
|
mailListToggleMessagesRead();
|
||||||
|
|
||||||
|
@ -249,15 +254,11 @@ function mailListMarkMessage(event) {
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
function mailListMarkMessageCallback(http) {
|
function mailListMarkMessageCallback(http) {
|
||||||
var data = http.callbackData;
|
var data = http.callbackData;
|
||||||
if (isHttpStatus204(http.status)
|
if (!isHttpStatus204(http.status)) {
|
||||||
|| http.status == 304) { // In some cases, Safari returns a 304 even
|
|
||||||
// though SOGo returns a 204!
|
|
||||||
Mailer.dataTable.invalidate(data["msguid"], true);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
log("Message Mark Failed (" + http.status + "): " + http.statusText);
|
log("Message Mark Failed (" + http.status + "): " + http.statusText);
|
||||||
Mailer.dataTable.invalidate(data["msguid"], false);
|
Mailer.dataTable.invalidate(data["msguid"], false);
|
||||||
}
|
}
|
||||||
|
@ -393,6 +394,7 @@ function deleteSelectedMessages(sender) {
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
var messageList = $("messageListBody").down("TBODY");
|
var messageList = $("messageListBody").down("TBODY");
|
||||||
|
var messageContent = $("messageContent");
|
||||||
var rowIds = messageList.getSelectedNodesId();
|
var rowIds = messageList.getSelectedNodesId();
|
||||||
var uids = new Array(); // message IDs
|
var uids = new Array(); // message IDs
|
||||||
var paths = new Array(); // row IDs
|
var paths = new Array(); // row IDs
|
||||||
|
@ -418,6 +420,44 @@ function deleteSelectedMessages(sender) {
|
||||||
uids.push(uid);
|
uids.push(uid);
|
||||||
paths.push(path);
|
paths.push(path);
|
||||||
deleteMessageRequestCount++;
|
deleteMessageRequestCount++;
|
||||||
|
|
||||||
|
deleteCachedMessage(path);
|
||||||
|
if (Mailer.currentMessages[Mailer.currentMailbox] == uid) {
|
||||||
|
messageContent.innerHTML = '';
|
||||||
|
Mailer.currentMessages[Mailer.currentMailbox] = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i+1 == rowIds.length) {
|
||||||
|
// Select next message
|
||||||
|
var row = $("row_" + uid);
|
||||||
|
var nextRow = false;
|
||||||
|
if (row) {
|
||||||
|
nextRow = row.next("tr");
|
||||||
|
if (!nextRow.id.startsWith('row_'))
|
||||||
|
nextRow = row.previous("tr");
|
||||||
|
// row.addClassName("deleted"); // when we'll offer "mark as deleted"
|
||||||
|
if (nextRow.id.startsWith('row_')) {
|
||||||
|
Mailer.currentMessages[Mailer.currentMailbox] = nextRow.id.substr(4);
|
||||||
|
nextRow.selectElement();
|
||||||
|
if (loadMessage(Mailer.currentMessages[Mailer.currentMailbox]))
|
||||||
|
Mailer.dataTable.invalidate(Mailer.currentMessages[Mailer.currentMailbox], true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
messageContent.innerHTML = '';
|
||||||
|
}
|
||||||
|
Mailer.dataTable.remove(uid);
|
||||||
|
if (nextRow) {
|
||||||
|
// from generic.js
|
||||||
|
lastClickedRow = nextRow.rowIndex;
|
||||||
|
lastClickedRowId = nextRow.id;
|
||||||
|
}
|
||||||
|
Mailer.dataTable.refresh();
|
||||||
|
deleteCachedMailboxByType("trash");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Mailer.dataTable.remove(uid);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
updateMessageListCounter(0 - rowIds.length, true);
|
updateMessageListCounter(0 - rowIds.length, true);
|
||||||
if (unseenCount < 0) {
|
if (unseenCount < 0) {
|
||||||
|
@ -441,49 +481,9 @@ function deleteSelectedMessages(sender) {
|
||||||
function deleteSelectedMessagesCallback(http) {
|
function deleteSelectedMessagesCallback(http) {
|
||||||
if (isHttpStatus204(http.status)) {
|
if (isHttpStatus204(http.status)) {
|
||||||
var data = http.callbackData;
|
var data = http.callbackData;
|
||||||
for (var i = 0; i < data["path"].length; i++) {
|
|
||||||
deleteCachedMessage(data["path"][i]);
|
|
||||||
deleteMessageRequestCount--;
|
|
||||||
if (Mailer.currentMailbox == data["mailbox"]) {
|
|
||||||
var div = $('messageContent');
|
|
||||||
if (Mailer.currentMessages[Mailer.currentMailbox] == data["id"][i]) {
|
|
||||||
div.innerHTML = '';
|
|
||||||
Mailer.currentMessages[Mailer.currentMailbox] = null;
|
|
||||||
}
|
|
||||||
if (deleteMessageRequestCount == 0) {
|
|
||||||
// Select next message
|
|
||||||
var row = $("row_" + data["id"][i]);
|
|
||||||
var nextRow = false;
|
|
||||||
if (row) {
|
|
||||||
nextRow = row.next("tr");
|
|
||||||
if (!nextRow.id.startsWith('row_'))
|
|
||||||
nextRow = row.previous("tr");
|
|
||||||
// row.addClassName("deleted"); // when we'll offer "mark as deleted"
|
|
||||||
if (nextRow.id.startsWith('row_')) {
|
|
||||||
Mailer.currentMessages[Mailer.currentMailbox] = nextRow.id.substr(4);
|
|
||||||
nextRow.selectElement();
|
|
||||||
if (loadMessage(Mailer.currentMessages[Mailer.currentMailbox]))
|
|
||||||
Mailer.dataTable.invalidate(Mailer.currentMessages[Mailer.currentMailbox], true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
div.innerHTML = '';
|
|
||||||
}
|
|
||||||
Mailer.dataTable.remove(data["id"][i]);
|
|
||||||
if (nextRow) {
|
|
||||||
// from generic.js
|
|
||||||
lastClickedRow = nextRow.rowIndex;
|
|
||||||
lastClickedRowId = nextRow.id;
|
|
||||||
}
|
|
||||||
Mailer.dataTable.refresh();
|
|
||||||
deleteCachedMailboxByType("trash");
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
Mailer.dataTable.remove(data["id"][i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (data["refreshUnseenCount"])
|
if (data["refreshUnseenCount"])
|
||||||
|
// TODO : the unseen count should be returned when calling the batchDelete remote action,
|
||||||
|
// in order to avoid this extra AJAX call.
|
||||||
getUnseenCountForFolder(data["mailbox"]);
|
getUnseenCountForFolder(data["mailbox"]);
|
||||||
}
|
}
|
||||||
else if (!http.callbackData["withoutTrash"]) {
|
else if (!http.callbackData["withoutTrash"]) {
|
||||||
|
@ -493,7 +493,9 @@ function deleteSelectedMessagesCallback(http) {
|
||||||
function() { refreshCurrentFolder(); disposeDialog(); });
|
function() { refreshCurrentFolder(); disposeDialog(); });
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
log ("deleteSelectedMessagesCallback: problem during ajax request " + http.status + " : " + http.responseText);
|
var html = new Element('div').update(http.responseText);
|
||||||
|
log ("Messages deletion failed (" + http.status + ") : " + html.down('p').innerHTML);
|
||||||
|
showAlertDialog(_("Operation failed"));
|
||||||
refreshCurrentFolder();
|
refreshCurrentFolder();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1155,7 +1157,9 @@ function loadMessage(msguid) {
|
||||||
div.innerHTML = '';
|
div.innerHTML = '';
|
||||||
document.messageAjaxRequest = triggerAjaxRequest(url,
|
document.messageAjaxRequest = triggerAjaxRequest(url,
|
||||||
loadMessageCallback,
|
loadMessageCallback,
|
||||||
{ 'msguid': msguid, 'seenStateHasChanged': seenStateHasChanged });
|
{ 'mailbox': Mailer.currentMailbox,
|
||||||
|
'msguid': msguid,
|
||||||
|
'seenStateHasChanged': seenStateHasChanged });
|
||||||
// Warning: We assume the user can set the read/unread flag of the message.
|
// Warning: We assume the user can set the read/unread flag of the message.
|
||||||
markMailInWindow(window, msguid, true);
|
markMailInWindow(window, msguid, true);
|
||||||
}
|
}
|
||||||
|
@ -1562,20 +1566,24 @@ function loadMessageCallback(http) {
|
||||||
var div = $('messageContent');
|
var div = $('messageContent');
|
||||||
|
|
||||||
if (http.status == 200) {
|
if (http.status == 200) {
|
||||||
|
if (http.callbackData) {
|
||||||
document.messageAjaxRequest = null;
|
document.messageAjaxRequest = null;
|
||||||
|
var msguid = http.callbackData.msguid;
|
||||||
|
var mailbox = http.callbackData.mailbox;
|
||||||
|
if (Mailer.currentMailbox == mailbox &&
|
||||||
|
Mailer.currentMessages[Mailer.currentMailbox] == msguid) {
|
||||||
div.innerHTML = http.responseText;
|
div.innerHTML = http.responseText;
|
||||||
configureLinksInMessage();
|
configureLinksInMessage();
|
||||||
resizeMailContent();
|
resizeMailContent();
|
||||||
configureLoadImagesButton();
|
configureLoadImagesButton();
|
||||||
configureSignatureFlagImage();
|
configureSignatureFlagImage();
|
||||||
handleReturnReceipt();
|
handleReturnReceipt();
|
||||||
if (http.callbackData) {
|
|
||||||
var cachedMessage = new Array();
|
|
||||||
var msguid = http.callbackData.msguid;
|
|
||||||
// Warning: If the user can't set the read/unread flag, it won't
|
// Warning: If the user can't set the read/unread flag, it won't
|
||||||
// be reflected in the view unless we force the refresh.
|
// be reflected in the view unless we force the refresh.
|
||||||
if (http.callbackData.seenStateHasChanged)
|
if (http.callbackData.seenStateHasChanged)
|
||||||
Mailer.dataTable.invalidate(msguid, true);
|
Mailer.dataTable.invalidate(msguid, true);
|
||||||
|
}
|
||||||
|
var cachedMessage = new Array();
|
||||||
cachedMessage['idx'] = Mailer.currentMailbox + '/' + msguid;
|
cachedMessage['idx'] = Mailer.currentMailbox + '/' + msguid;
|
||||||
cachedMessage['time'] = (new Date()).getTime();
|
cachedMessage['time'] = (new Date()).getTime();
|
||||||
cachedMessage['text'] = http.responseText;
|
cachedMessage['text'] = http.responseText;
|
||||||
|
|
|
@ -577,6 +577,9 @@ function onRowClick(event, target) {
|
||||||
// No parent; stop here
|
// No parent; stop here
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
// Not a list; stop here
|
||||||
|
return true;
|
||||||
|
|
||||||
var initialSelection = $(node.parentNode).getSelectedNodesId();
|
var initialSelection = $(node.parentNode).getSelectedNodesId();
|
||||||
if (initialSelection && initialSelection.length > 0
|
if (initialSelection && initialSelection.length > 0
|
||||||
|
@ -1885,7 +1888,7 @@ function showPromptDialog(title, label, callback, defaultValue) {
|
||||||
_("OK"),
|
_("OK"),
|
||||||
callback.bind(input)));
|
callback.bind(input)));
|
||||||
fields.appendChild(createButton(null,
|
fields.appendChild(createButton(null,
|
||||||
"Cancel",
|
_("Cancel"),
|
||||||
disposeDialog));
|
disposeDialog));
|
||||||
dialog = createDialog(null,
|
dialog = createDialog(null,
|
||||||
title,
|
title,
|
||||||
|
|
Loading…
Reference in a new issue