}
var Mailer = {
+ currentMailbox: null,
+ currentMailboxType: "",
currentMessages: {},
maxCachedMessages: 20,
cachedMessages: new Array(),
- currentMailbox: null,
- currentMailboxType: ""
+ foldersStateTimer: false
};
var usersRightsWindowHeight = 320;
/* bulk delete of messages */
function deleteSelectedMessages(sender) {
- var messageList = $("messageList");
- var rowIds = messageList.getSelectedRowsId();
-
- if (rowIds.length > 0) {
- for (var i = 0; i < rowIds.length; i++) {
- var url;
- var rowId = rowIds[i].substr(4);
- var messageId = Mailer.currentMailbox + "/" + rowId;
- url = ApplicationBaseURL + messageId + "/trash";
- deleteMessageRequestCount++;
- var data = { "id": rowId, "mailbox": Mailer.currentMailbox, "messageId": messageId };
- triggerAjaxRequest(url, deleteSelectedMessagesCallback, data);
- }
- } else {
- window.alert(labels["Please select a message."]);
- }
-
- return false;
+ var messageList = $("messageList");
+ var rowIds = messageList.getSelectedRowsId();
+
+ if (rowIds.length > 0) {
+ for (var i = 0; i < rowIds.length; i++) {
+ var url;
+ var rowId = rowIds[i].substr(4);
+ var messageId = Mailer.currentMailbox + "/" + rowId;
+ url = ApplicationBaseURL + messageId + "/trash";
+ deleteMessageRequestCount++;
+ var data = { "id": rowId, "mailbox": Mailer.currentMailbox, "messageId": messageId };
+ triggerAjaxRequest(url, deleteSelectedMessagesCallback, data);
+ }
+ }
+ else
+ window.alert(labels["Please select a message."]);
+
+ return false;
}
function deleteSelectedMessagesCallback(http) {
if (isHttpStatus204(http.status)) {
var data = http.callbackData;
deleteCachedMessage(data["messageId"]);
+ deleteMessageRequestCount--;
if (Mailer.currentMailbox == data["mailbox"]) {
-
var div = $('messageContent');
if (Mailer.currentMessages[Mailer.currentMailbox] == data["id"]) {
div.update();
}
var row = $("row_" + data["id"]);
+ var nextRow = row.next("tr");
+ if (!nextRow)
+ nextRow = row.previous("tr");
row.parentNode.removeChild(row);
// row.addClassName("deleted"); // when we'll offer "mark as deleted"
-
- deleteMessageRequestCount--;
- if (deleteMessageRequestCount == 0)
- openMailbox(data["mailbox"], true);
+ if (deleteMessageRequestCount == 0) {
+ if (nextRow) {
+ Mailer.currentMessages[Mailer.currentMailbox] = nextRow.getAttribute("id").substr(4);
+ nextRow.select();
+ loadMessage(Mailer.currentMessages[Mailer.currentMailbox]);
+ }
+ }
}
}
}
new Ajax.Request(url, {
method: 'post',
onFailure: function(transport) {
- if (!isHttpStatus204)
- log("draftDeleteCallback: problem during ajax request: " + transport.status);
+ log("draftDeleteCallback: problem during ajax request: " + transport.status);
}
});
}
}
function onMenuDeleteMessage(event) {
- deleteSelectedMessages();
- preventDefault(event);
+ deleteSelectedMessages();
+ preventDefault(event);
+}
+
+function deleteMessage(url, id, mailbox, messageId) {
+ var data = { "id": id, "mailbox": mailbox, "messageId": messageId };
+ deleteMessageRequestCount++;
+ triggerAjaxRequest(url, deleteSelectedMessagesCallback, data);
+}
+
+function deleteMessageWithDelay(url, id, mailbox, messageId) {
+ /* this is called by UIxMailPopupView with window.opener */
+ setTimeout("deleteMessage('" +
+ url + "', '" +
+ id + "', '" +
+ mailbox + "', '" +
+ messageId + "')",
+ 50);
}
function onPrintCurrentMessage(event) {
function _onMailboxMenuAction(menuEntry, error, actionName) {
var targetMailbox = menuEntry.mailbox.fullName();
+ var messages = new Array();
if (targetMailbox == Mailer.currentMailbox)
window.alert(labels[error]);
else {
- var message;
if (document.menuTarget.tagName == "DIV")
- message = Mailer.currentMessages[Mailer.currentMailbox];
+ // Menu called from message content view
+ messages.push(Mailer.currentMessages[Mailer.currentMailbox]);
+ else if (Object.isArray(document.menuTarget))
+ // Menu called from multiple selection in messages list view
+ messages = $(document.menuTarget).collect(function(row) {
+ return row.getAttribute("id").substr(4);
+ });
else
- message = document.menuTarget.getAttribute("id").substr(4);
-
- var urlstr = (URLForFolderID(Mailer.currentMailbox) + "/" + message
- + "/" + actionName + "?folder=" + targetMailbox);
- triggerAjaxRequest(urlstr, folderRefreshCallback, Mailer.currentMailbox);
+ // Menu called from one selection in messages list view
+ messages.push(document.menuTarget.getAttribute("id").substr(4));
+
+ var url_prefix = URLForFolderID(Mailer.currentMailbox) + "/";
+ messages.each(function(msgid, i) {
+ var url = url_prefix + msgid + "/" + actionName
+ + "?folder=" + targetMailbox;
+ triggerAjaxRequest(url, folderRefreshCallback,
+ ((i == messages.size() - 1)?Mailer.currentMailbox:""));
+ });
}
}
if (mailbox != Mailer.currentMailbox || reload) {
Mailer.currentMailbox = mailbox;
var url = ApplicationBaseURL + encodeURI(mailbox) + "/view?noframe=1";
- var messageContent = $("messageContent");
- messageContent.update();
- lastClickedRow = -1; // from generic.js
-
+
+ if (!reload || idx) {
+ var messageContent = $("messageContent");
+ messageContent.update();
+ lastClickedRow = -1; // from generic.js
+ }
+
var currentMessage;
+
if (!idx) {
currentMessage = Mailer.currentMessages[mailbox];
if (currentMessage) {
- loadMessage(currentMessage);
url += '&pageforuid=' + currentMessage;
+ if (!reload)
+ loadMessage(currentMessage);
}
}
if (http.readyState == 4
&& http.status == 200) {
- document.messageListAjaxRequest = null;
+ document.messageListAjaxRequest = null;
if (table) {
// Update table
if (row) {
row.select();
lastClickedRow = row.rowIndex - $(row).up('table').down('thead').getElementsByTagName('tr').length;
- div.scrollTop = row.rowIndex * row.getHeight(); // scroll to selected message
+ var rowPosition = row.rowIndex * row.getHeight();
+ if ($(row).up('div').getHeight() > rowPosition)
+ rowPosition = 0;
+ div.scrollTop = rowPosition; // scroll to selected message
}
else
$("messageContent").update();
function onMessageContextMenu(event) {
var menu = $('messageListMenu');
- Event.observe(menu, "hideMenu", onMessageContextMenuHide);
- popupMenu(event, "messageListMenu", this);
-
var topNode = $('messageList');
var selectedNodes = topNode.getSelectedRows();
- for (var i = 0; i < selectedNodes.length; i++)
- selectedNodes[i].deselect();
- topNode.menuSelectedRows = selectedNodes;
- topNode.menuSelectedEntry = this;
- this.select();
+
+ Event.observe(menu, "hideMenu", onMessageContextMenuHide);
+
+ if (selectedNodes.length > 1)
+ popupMenu(event, "messagesListMenu", selectedNodes);
+ else
+ popupMenu(event, "messageListMenu", this);
}
function onMessageContextMenuHide(event) {
if (rows.length == 1) {
var idx = rows[0].substr(4);
-
if (Mailer.currentMessages[Mailer.currentMailbox] != idx) {
Mailer.currentMessages[Mailer.currentMailbox] = idx;
loadMessage(idx);
messageDiv)[0];
if (!document.body.hasClassName("popup"))
mailContentDiv.observe("contextmenu", onMessageContentMenu);
+
var anchors = messageDiv.getElementsByTagName('a');
for (var i = 0; i < anchors.length; i++)
if (anchors[i].href.substring(0,7) == "mailto:") {
else
$(anchors[i]).observe("click", onMessageAnchorClick);
+ var images = messageDiv.getElementsByTagName('img');
+ for (var i = 0; i < images.length; i++)
+ $(images[i]).observe("contextmenu", onImageClick);
+
var editDraftButton = $("editDraftButton");
if (editDraftButton)
Event.observe(editDraftButton, "click",
function onMessageContentMenu(event) {
var element = getTarget(event);
- if (element.tagName == 'A' && element.href.substring(0,7) == "mailto:")
+ if ((element.tagName == 'A' && element.href.substring(0,7) == "mailto:")
+ || element.tagName == 'IMG')
// Don't show the default contextual menu; let the click propagate to
// other observers
return true;
preventDefault(event);
}
+function onImageClick(event) {
+ popupMenu(event, 'imageMenu', this);
+ preventDefault(event);
+ return false;
+}
+
function messageCallback(http) {
var div = $('messageContent');
preventDefault(event);
}
+function saveImage(event) {
+ var img = document.menuTarget;
+ var url = img.getAttribute("src");
+ var urlAsAttachment = url.replace(/(\/[^\/]*)$/,"/asAttachment$1");
+
+ window.location.href = urlAsAttachment;
+}
+
/* contacts */
function newContactFromEmail(event) {
var mailto = document.menuTarget.innerHTML;
}
function onHeaderClick(event) {
+ if (TableKit.Resizable._onHandle)
+ return;
+
var headerId = this.getAttribute("id");
var newSortAttribute;
if (headerId == "subjectHeader")
initMailboxTree();
initMessageCheckTimer();
}
-
+
// Default sort options
sorting["attribute"] = "date";
sorting["ascending"] = false;
onFolderMenuClick.bindAsEventListener(nodes[i]));
if (!inboxFound
&& nodes[i].parentNode.getAttribute("datatype") == "inbox") {
+ Mailer.currentMailboxType = "inbox";
openInbox(nodes[i]);
inboxFound = true;
}
menu.appendChild(menuEntry);
var mailbox = accounts[mailAccounts[i]];
var newSubmenuId = generateMenuForMailbox(mailbox,
- key, mailboxActions[key]);
+ key, mailboxActions[key]);
submenuIds.push(newSubmenuId);
}
initMenu(menuDIV, submenuIds);
updateMailboxTreeInPage();
updateMailboxMenus();
checkAjaxRequestsState();
+ getFoldersState();
}
}
}
return account;
}
+function getFoldersState() {
+ if (mailAccounts.length > 0) {
+ var urlstr = ApplicationBaseURL + "foldersState";
+ triggerAjaxRequest(urlstr, getFoldersStateCallback);
+ }
+}
+
+function getFoldersStateCallback(http) {
+ if (http.readyState == 4
+ && http.status == 200) {
+ if (http.responseText.length > 0) {
+ // The response text is a JSOn representation
+ // of the folders that were left opened.
+ var data = http.responseText.evalJSON(true);
+ for (var i = 1; i < mailboxTree.aNodes.length; i++) {
+ if ($(data).indexOf(mailboxTree.aNodes[i].dataname) > 0)
+ // If the folder is found, open it
+ mailboxTree.o(i);
+ }
+ }
+ }
+ mailboxTree.autoSync();
+}
+
+function saveFoldersState() {
+ if (mailAccounts.length > 0) {
+ var foldersState = mailboxTree.getFoldersState();
+ var urlstr = ApplicationBaseURL + "saveFoldersState" + "?expandedFolders=" + foldersState;
+ triggerAjaxRequest(urlstr, saveFoldersStateCallback);
+ }
+}
+
+function saveFoldersStateCallback(http) {
+ if (http.readyState == 4
+ && isHttpStatus204(http.status)) {
+ log ("folders state saved");
+ }
+}
+
function onMenuCreateFolder(event) {
var name = window.prompt(labels["Name :"], "");
if (name && name.length > 0) {
}
function onMenuLabelNone() {
- var rowId = document.menuTarget.getAttribute("id").substr(4);
- var messageId = Mailer.currentMailbox + "/" + rowId;
- var urlstr = ApplicationBaseURL + messageId + "/removeAllLabels";
- triggerAjaxRequest(urlstr, messageFlagCallback,
- { mailbox: Mailer.currentMailbox, msg: rowId, label: null } );
+ var messages = new Array();
+
+ if (document.menuTarget.tagName == "DIV")
+ // Menu called from message content view
+ messages.push(Mailer.currentMessages[Mailer.currentMailbox]);
+ else if (Object.isArray(document.menuTarget))
+ // Menu called from multiple selection in messages list view
+ $(document.menuTarget).collect(function(row) {
+ messages.push(row.getAttribute("id").substr(4));
+ });
+ else
+ // Menu called from one selection in messages list view
+ messages.push(document.menuTarget.getAttribute("id").substr(4));
+
+ var url = ApplicationBaseURL + Mailer.currentMailbox + "/";
+ messages.each(function(id) {
+ triggerAjaxRequest(url + id + "/removeAllLabels",
+ messageFlagCallback,
+ { mailbox: Mailer.currentMailbox, msg: id, label: null } );
+ });
}
function _onMenuLabelFlagX(flag) {
- var flags = document.menuTarget.getAttribute("labels").split(" ");
-
- var rowId = document.menuTarget.getAttribute("id").substr(4);
- var messageId = Mailer.currentMailbox + "/" + rowId;
+ var messages = new Hash();
+
+ if (document.menuTarget.tagName == "DIV")
+ // Menu called from message content view
+ messages.set(Mailer.currentMessages[Mailer.currentMailbox],
+ $('tr#row_' + Mailer.currentMessages[Mailer.currentMailbox]).getAttribute("labels"));
+ else if (Object.isArray(document.menuTarget))
+ // Menu called from multiple selection in messages list view
+ $(document.menuTarget).collect(function(row) {
+ messages.set(row.getAttribute("id").substr(4),
+ row.getAttribute("labels"));
+ });
+ else
+ // Menu called from one selection in messages list view
+ messages.set(document.menuTarget.getAttribute("id").substr(4),
+ document.menuTarget.getAttribute("labels"));
+
+ var url = ApplicationBaseURL + Mailer.currentMailbox + "/";
+ messages.keys().each(function(id) {
+ var flags = messages.get(id).split(" ");
+ var operation = "add";
+
+ if (flags.indexOf("label" + flag) > -1)
+ operation = "remove";
- var operation = "add";
- if (flags.indexOf("label" + flag) > -1)
- operation = "remove";
- var urlstr = (ApplicationBaseURL + messageId
- + "/" + operation + "Label" + flag);
- triggerAjaxRequest(urlstr, messageFlagCallback,
- { mailbox: Mailer.currentMailbox, msg: rowId,
- label: operation + flag } );
+ triggerAjaxRequest(url + id + "/" + operation + "Label" + flag,
+ messageFlagCallback,
+ { mailbox: Mailer.currentMailbox, msg: id,
+ label: operation + flag } );
+ });
}
function onMenuLabelFlag1() {
"mark-menu", "-", null,
onMenuViewMessageSource, null,
null, onMenuDeleteMessage);
+ menus["messagesListMenu"] = new Array(onMenuForwardMessage,
+ "-", "moveMailboxMenu",
+ "copyMailboxMenu", "label-menu",
+ "mark-menu", "-",
+ null, null,
+ onMenuDeleteMessage);
+ menus["imageMenu"] = new Array(saveImage);
menus["messageContentMenu"] = new Array(onMenuReplyToSender,
onMenuReplyToAll,
onMenuForwardMessage,