var maxCachedMessages = 20;
var cachedMessages = new Array();
var currentMailbox = null;
+var currentMailboxType = "";
var usersRightsWindowHeight = 320;
var usersRightsWindowWidth = 400;
wId += "SOGo_msg_" + msguid;
markMailReadInWindow(window, msguid);
}
- var msgWin = window.open(url, wId,
- "width=680,height=520,resizable=1,scrollbars=1,toolbar=0,"
- + "location=0,directories=0,status=0,menubar=0,copyhistory=0");
+ var msgWin = openMailComposeWindow(url, wId);
if (msguid) {
msgWin.messageId = msguid;
msgWin.messageURL = ApplicationBaseURL + currentMailbox + "/" + msguid;
}
function onMessageDoubleClick(event) {
- resetSelection(window);
- var msguid = this.parentNode.id.substr(4);
-
- return openMessageWindow(msguid,
- ApplicationBaseURL + currentMailbox + "/"
- + msguid + "/popupview");
+ var action;
+
+ if (currentMailboxType == "draft")
+ action = "edit";
+ else
+ action = "popupview";
+
+ return openMessageWindowsForSelection(action, true);
}
function toggleMailSelect(sender) {
row.className = sender.checked ? "tableview_selected" : "tableview";
}
-function clearSearch(sender) {
- var searchField = window.$("search");
- if (searchField) searchField.value="";
- return true;
-}
-
function openAddressbook(sender) {
var urlstr;
return markMailInWindow(win, msguid, true);
}
-/* main window */
-
-function reopenToRemoveLocationBar() {
- // we cannot really use this, see below at the close comment
- if (window.locationbar && window.locationbar.visible) {
- newwin = window.open(window.location.href, "SOGo",
- "width=800,height=600,resizable=1,scrollbars=1," +
- "toolbar=0,location=0,directories=0,status=0," +
- "menubar=0,copyhistory=0");
- if (newwin) {
- window.close(); // this does only work for windows opened by scripts!
- newwin.focus();
- return true;
- }
- return false;
- }
- return true;
-}
-
/* mail list reply */
-function openMessageWindowsForSelection(action) {
+function openMessageWindowsForSelection(action, firstOnly) {
if (document.body.hasClassName("popup"))
win = openMessageWindow(window.messageId,
- window.messageURL + "/" + action /* url */);
+ window.messageURL + "/" + action);
else {
var messageList = $("messageList");
var rows = messageList.getSelectedRowsId();
- var idset = "";
- for (var i = 0; i < rows.length; i++)
- win = openMessageWindow(rows[i].substr(4) /* msguid */,
- ApplicationBaseURL + currentMailbox
- + "/" + rows[i].substr(4)
- + "/" + action /* url */);
+ if (rows.length > 0) {
+ if (firstOnly)
+ openMessageWindow(rows[0].substr(4),
+ ApplicationBaseURL + currentMailbox
+ + "/" + rows[0].substr(4)
+ + "/" + action);
+ else
+ for (var i = 0; i < rows.length; i++)
+ openMessageWindow(rows[i].substr(4),
+ ApplicationBaseURL + currentMailbox
+ + "/" + rows[i].substr(4)
+ + "/" + action);
+ }
}
return false;
function mailListMarkMessage(event) {
var http = createHTTPClient();
- var url = ApplicationBaseURL + currentMailbox + "/" + action + "?uid=" + msguid;
+ var url = ApplicationBaseURL + currentMailbox + "/" + msguid + "/" + action;
if (http) {
// TODO: add parameter to signal that we are only interested in OK
- http.open("POST", url + "&jsonly=1", false /* not async */);
+ http.open("POST", url, false /* not async */);
http.send("");
if (http.status != 200) {
// TODO: refresh page?
}
function ctxFolderDelete(sender) {
- if (!confirm("Delete current folder?").decodeEntities())
+ if (!confirm("Delete current folder?"))
return false;
// TODO: should use a form-POST or AJAX
/* send AJAX request (synchronously) */
var messageId = currentMailbox + "/" + rowId;
- url = ApplicationBaseURL + messageId + "/trash?jsonly=1";
+ url = ApplicationBaseURL + messageId + "/trash";
http = createHTTPClient();
- http.open("GET", url, false /* not async */);
+ http.open("POST", url, false /* not async */);
http.send("");
- if (http.status != 200) { /* request failed */
+ if (!isHttpStatus204(http.status)) { /* request failed */
failCount++;
http = null;
continue;
deleteCachedMessage(messageId);
if (currentMessages[currentMailbox] == rowId) {
var div = $('messageContent');
- div.innerHTML = "";
+ div.update();
currentMessages[currentMailbox] = null;
}
}
var messageId = currentMailbox + "/" + rowIds[i];
url = (ApplicationBaseURL + messageId
- + "/move?jsonly=1&tofolder=" + folder);
+ + "/move?tofolder=" + folder);
http = createHTTPClient();
http.open("GET", url, false /* not async */);
http.send("");
deleteCachedMessage(messageId);
if (currentMessages[currentMailbox] == rowIds[i]) {
var div = $('messageContent');
- div.innerHTML = "";
+ div.update();
currentMessages[currentMailbox] = null;
}
}
function onPrintCurrentMessage(event) {
var rowIds = $("messageList").getSelectedRowsId();
if (rowIds.length == 0) {
- window.alert(labels["Please select a message to print."].decodeEntities());
+ window.alert(labels["Please select a message to print."]);
}
else if (rowIds.length > 1) {
- window.alert(labels["Please select only one message to print."].decodeEntities());
+ window.alert(labels["Please select only one message to print."]);
}
else
window.print();
$("searchValue").value = "";
initCriteria();
- var datatype = this.parentNode.getAttribute("datatype");
- if (datatype == "account" || datatype == "additional") {
+ currentMailboxType = this.parentNode.getAttribute("datatype");
+ if (currentMailboxType == "account" || currentMailboxType == "additional") {
currentMailbox = mailbox;
- $("messageContent").innerHTML = "";
+ $("messageContent").update();
var body = $("messageList").tBodies[0];
- for (var i = body.rows.length - 1; i > 0; i--)
- body.deleteRow(i);
+ for (var i = body.rows.length; i > 0; i--)
+ body.deleteRow(i-1);
}
else
openMailbox(mailbox);
return false;
}
+function onComposeMessage() {
+ var topWindow = getTopWindow();
+ if (topWindow)
+ topWindow.composeNewMessage();
+
+ return false;
+}
+
+function composeNewMessage() {
+ var account = currentMailbox.split("/")[1];
+ var url = ApplicationBaseURL + "/" + account + "/compose";
+ openMailComposeWindow(url);
+}
+
function openMailbox(mailbox, reload, idx) {
if (mailbox != currentMailbox || reload) {
currentMailbox = mailbox;
var url = ApplicationBaseURL + mailbox + "/view?noframe=1";
var messageContent = $("messageContent");
- messageContent.innerHTML = '';
-
- if (currentMessages[mailbox]) {
- loadMessage(currentMessages[mailbox]);
- url += '&pageforuid=' + currentMessages[mailbox];
+ messageContent.update();
+
+ var currentMessage;
+ if (!idx) {
+ currentMessage = currentMessages[mailbox];
+ if (currentMessage) {
+ loadMessage(currentMessage);
+ url += '&pageforuid=' + currentMessage;
+ }
}
var searchValue = search["value"];
if (searchValue && searchValue.length > 0)
url += ("&search=" + search["criteria"]
- + "&value=" + searchValue);
+ + "&value=" + escape(searchValue));
var sortAttribute = sorting["attribute"];
if (sortAttribute && sortAttribute.length > 0)
url += ("&sort=" + sorting["attribute"]
+ "&asc=" + sorting["ascending"]);
if (idx)
url += "&idx=" + idx;
-
if (document.messageListAjaxRequest) {
document.messageListAjaxRequest.aborted = true;
document.messageListAjaxRequest.abort();
document.messageListAjaxRequest
= triggerAjaxRequest(url, messageListCallback,
- currentMessages[mailbox]);
+ currentMessage);
var quotasUrl = ApplicationBaseURL + mailbox + "/quotas";
document.quotasAjaxRequest
if (http.readyState == 4
&& http.status == 200) {
- document.messageListAjaxRequest = null;
- div.innerHTML = http.responseText;
+ document.messageListAjaxRequest = null;
+ div.update(http.responseText);
+
+ TableKit.Resizable.init($('messageList'));
+
var selected = http.callbackData;
if (selected) {
var row = $("row_" + selected);
row.select();
}
configureMessageListEvents();
+
if (sorting["attribute"] && sorting["attribute"].length > 0) {
var sortHeader;
if (sorting["attribute"] == "subject")
var used = mbQuotas["usedSpace"];
var max = mbQuotas["maxQuota"];
var percents = (Math.round(used * 10000 / max) / 100);
- var format = labels["quotasFormat"].decodeEntities();
+ var format = labels["quotasFormat"];
var text = format.formatted(used, max, percents);
window.status = text;
}
markMailInWindow(window, idx, true);
} else {
var div = $('messageContent');
- div.innerHTML = cachedMessage['text'];
+ div.update(cachedMessage['text']);
cachedMessage['time'] = (new Date()).getTime();
document.messageAjaxRequest = null;
configureLinksInMessage();
else
Event.observe(anchors[i], "click",
onMessageAnchorClick);
+
+ var editDraftButton = $("editDraftButton");
+ if (editDraftButton)
+ Event.observe(editDraftButton, "click", onMessageEditDraft);
}
function onMessageContentMenu(event) {
popupMenu(event, 'messageContentMenu', this);
}
+function onMessageEditDraft(event) {
+ return openMessageWindowsForSelection("edit", true);
+}
+
function onEmailAddressClick(event) {
popupMenu(event, 'addressMenu', this);
}
if (http.readyState == 4
&& http.status == 200) {
document.messageAjaxRequest = null;
- div.innerHTML = http.responseText;
+ div.update(http.responseText);
configureLinksInMessage();
if (http.callbackData) {
if (rows.length > 0) {
var url = (ApplicationBaseURL + currentMailbox + "/"
+ rows[0].substr(4) + "/viewsource");
- window.open(url, "",
- "width=680,height=520,resizable=1,scrollbars=1,toolbar=0,"
- + "location=0,directories=0,status=0,menubar=0,copyhistory=0");
+ openMailComposeWindow(url);
}
preventDefault(event);
var url = UserFolderURL + "Contacts/new?contactEmail=" + email;
if (c_name)
url += "&contactFN=" + c_name;
- w = window.open(url, null,
- "width=546,height=490,resizable=1,scrollbars=1,toolbar=0,"
- + "location=0,directories=0,status=0,menubar=0,copyhistory=0");
- w.focus();
+ openContactWindow(url);
}
return false; /* stop following the link */
refreshCurrentFolder();
- preventDefault(event);
+ Event.stop(event);
}
function refreshCurrentFolder() {
for (var i = 0; i < cells.length; i++) {
var currentCell = $(cells[i]);
Event.observe(currentCell, "click",
- onHeaderClick.bindAsEventListener(currentCell));
- Event.observe(currentCell, "mousedown", listRowMouseDownHandler);
+ onHeaderClick.bindAsEventListener(currentCell));
+ //Event.observe(currentCell, "mousedown", listRowMouseDownHandler);
}
}
var messageList = $("messageList");
if (messageList) {
Event.observe(messageList, "mousedown",
- onMessageSelectionChange.bindAsEventListener(messageList));
+ onMessageSelectionChange.bindAsEventListener(messageList));
configureMessageListHeaders(messageList.tHead.rows[0].cells);
+
var cell = messageList.tHead.rows[1].cells[0];
if ($(cell).hasClassName("tbtv_navcell")) {
var anchors = $(cell).childNodesWithTag("a");
var handle = $("verticalDragHandle");
if (handle) {
handle.addInterface(SOGoDragHandlesInterface);
+ handle.leftMargin = 1;
handle.leftBlock=$("leftPanel");
handle.rightBlock=$("rightPanel");
}
function initMailer(event) {
if (!document.body.hasClassName("popup")) {
- configureMessageListEvents();
initDnd();
- currentMailbox = "/" + accounts[0] + "/folderINBOX";
initMailboxTree();
}
}
mailboxTree.add(0, -1, '');
mailboxTree.pendingRequests = mailAccounts.length;
+ activeAjaxRequests += mailAccounts.length;
for (var i = 0; i < mailAccounts.length; i++) {
var url = ApplicationBaseURL + "/" + mailAccounts[i] + "/mailboxes";
triggerAjaxRequest(url, onLoadMailboxesCallback, mailAccounts[i]);
}
function updateMailboxTreeInPage() {
- $("folderTreeContent").innerHTML = mailboxTree;
+ $("folderTreeContent").update(mailboxTree);
var inboxFound = false;
var tree = $("mailboxTree");
function onLoadMailboxesCallback(http) {
if (http.readyState == 4
&& http.status == 200) {
+ checkAjaxRequestsState();
var newAccount = buildMailboxes(http.callbackData,
http.responseText);
accounts[http.callbackData] = newAccount;
mailboxTree.addMailAccount(newAccount);
mailboxTree.pendingRequests--;
+ activeAjaxRequests--;
if (!mailboxTree.pendingRequests) {
updateMailboxTreeInPage();
updateMailboxMenus();
+ checkAjaxRequestsState();
}
}
}
function onMenuCreateFolder(event) {
- var name = window.prompt(labels["Name :"].decodeEntities(), "");
+ var name = window.prompt(labels["Name :"], "");
if (name && name.length > 0) {
var folderID = document.menuTarget.getAttribute("dataname");
var urlstr = URLForFolderID(folderID) + "/createFolder?name=" + name;
function onMenuRenameFolder(event) {
var name = window.prompt(labels["Enter the new name of your folder :"]
- .decodeEntities(),
+ ,
"");
if (name && name.length > 0) {
var folderID = document.menuTarget.getAttribute("dataname");
}
function onMenuDeleteFolder(event) {
- var answer = window.confirm(labels["Do you really want to move this folder into the trash ?"].decodeEntities());
+ var answer = window.confirm(labels["Do you really want to move this folder into the trash ?"]);
if (answer) {
var folderID = document.menuTarget.getAttribute("dataname");
var urlstr = URLForFolderID(folderID) + "/deleteFolder";
}
}
+function onMenuExpungeFolder(event) {
+ var folderID = document.menuTarget.getAttribute("dataname");
+ var urlstr = URLForFolderID(folderID) + "/expunge";
+
+ triggerAjaxRequest(urlstr, folderRefreshCallback, folderID);
+}
+
function onMenuEmptyTrash(event) {
var folderID = document.menuTarget.getAttribute("dataname");
var urlstr = URLForFolderID(folderID) + "/emptyTrash";
- triggerAjaxRequest(urlstr, folderOperationCallback);
+ triggerAjaxRequest(urlstr, folderRefreshCallback, folderID);
+
+ if (folderID == currentMailbox) {
+ var div = $('messageContent');
+ for (var i = div.childNodes.length - 1; i > -1; i--)
+ div.removeChild(div.childNodes[i]);
+ }
+ var msgID = currentMessages[folderID];
+ if (msgID)
+ deleteCachedMessage(folderID + "/" + msgID);
}
function folderOperationCallback(http) {
&& http.status == 204)
initMailboxTree();
else
- window.alert(labels["Operation failed"].decodeEntities());
+ window.alert(labels["Operation failed"]);
+}
+
+function folderRefreshCallback(http) {
+ if (http.readyState == 4
+ && http.status == 204) {
+ var oldMailbox = http.callbackData;
+ if (oldMailbox == currentMailbox)
+ refreshCurrentFolder();
+ }
+ else
+ window.alert(labels["Operation failed"]);
}
function getMenus() {
menus["accountIconMenu"] = new Array(null, null, onMenuCreateFolder, null,
null, null);
menus["inboxIconMenu"] = new Array(null, null, null, "-", null,
- onMenuCreateFolder, null, "-", null,
+ onMenuCreateFolder, onMenuExpungeFolder,
+ "-", null,
onMenuSharing);
menus["trashIconMenu"] = new Array(null, null, null, "-", null,
- onMenuCreateFolder, null,
+ onMenuCreateFolder, onMenuExpungeFolder,
onMenuEmptyTrash, "-", null,
onMenuSharing);
menus["mailboxIconMenu"] = new Array(null, null, null, "-", null,
onMenuCreateFolder,
onMenuRenameFolder,
- null, onMenuDeleteFolder, "-", null,
+ onMenuExpungeFolder,
+ onMenuDeleteFolder, "-", null,
onMenuSharing);
menus["addressMenu"] = new Array(newContactFromEmail, newEmailTo, null);
menus["messageListMenu"] = new Array(onMenuOpenMessage, "-",