X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=UI%2FWebServerResources%2FMailerUI.js;h=074a94f944c3167deca28fc5eff81d87ca9d44cf;hb=18e465b1915fec3f2b958e1db0ddab00d883ceab;hp=df32f1d746819e4a7373c0e46daa4961e91a8b81;hpb=929b170849c527c641ae1d3b92b78e0aa364f8a5;p=scalable-opengroupware.org diff --git a/UI/WebServerResources/MailerUI.js b/UI/WebServerResources/MailerUI.js index df32f1d7..074a94f9 100644 --- a/UI/WebServerResources/MailerUI.js +++ b/UI/WebServerResources/MailerUI.js @@ -6,6 +6,7 @@ var currentMessages = new Array(); var maxCachedMessages = 20; var cachedMessages = new Array(); var currentMailbox = null; +var currentMailboxType = ""; var usersRightsWindowHeight = 320; var usersRightsWindowWidth = 400; @@ -18,9 +19,7 @@ function openMessageWindow(msguid, url) { 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; @@ -31,12 +30,14 @@ function openMessageWindow(msguid, url) { } 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) { @@ -45,12 +46,6 @@ 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; @@ -125,40 +120,28 @@ function markMailReadInWindow(win, msguid) { 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; @@ -166,11 +149,11 @@ function openMessageWindowsForSelection(action) { 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? @@ -224,7 +207,7 @@ function ctxFolderAdd(sender) { } function ctxFolderDelete(sender) { - if (!confirm("Delete current folder?").decodeEntities()) + if (!confirm("Delete current folder?")) return false; // TODO: should use a form-POST or AJAX @@ -246,11 +229,11 @@ function uixDeleteSelectedMessages(sender) { /* 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; @@ -258,7 +241,7 @@ function uixDeleteSelectedMessages(sender) { deleteCachedMessage(messageId); if (currentMessages[currentMailbox] == rowId) { var div = $('messageContent'); - div.innerHTML = ""; + div.update(); currentMessages[currentMailbox] = null; } } @@ -287,7 +270,7 @@ function moveMessages(rowIds, folder) { 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(""); @@ -297,7 +280,7 @@ function moveMessages(rowIds, folder) { deleteCachedMessage(messageId); if (currentMessages[currentMailbox] == rowIds[i]) { var div = $('messageContent'); - div.innerHTML = ""; + div.update(); currentMessages[currentMailbox] = null; } } @@ -323,10 +306,10 @@ function onMenuDeleteMessage(event) { 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(); @@ -348,13 +331,13 @@ function onMailboxTreeItemClick(event) { $("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); @@ -378,29 +361,46 @@ function refreshMailbox() { 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(); @@ -418,7 +418,7 @@ function openMailbox(mailbox, reload, idx) { document.messageListAjaxRequest = triggerAjaxRequest(url, messageListCallback, - currentMessages[mailbox]); + currentMessage); var quotasUrl = ApplicationBaseURL + mailbox + "/quotas"; document.quotasAjaxRequest @@ -437,8 +437,11 @@ function messageListCallback(http) { 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); @@ -446,6 +449,7 @@ function messageListCallback(http) { row.select(); } configureMessageListEvents(); + if (sorting["attribute"] && sorting["attribute"].length > 0) { var sortHeader; if (sorting["attribute"] == "subject") @@ -488,7 +492,7 @@ function quotasCallback(http) { 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; } @@ -651,7 +655,7 @@ function loadMessage(idx) { 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(); @@ -675,12 +679,20 @@ function 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); } @@ -696,7 +708,7 @@ function messageCallback(http) { if (http.readyState == 4 && http.status == 200) { document.messageAjaxRequest = null; - div.innerHTML = http.responseText; + div.update(http.responseText); configureLinksInMessage(); if (http.callbackData) { @@ -791,9 +803,7 @@ function onMenuViewMessageSource(event) { 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); @@ -810,10 +820,7 @@ function newContactFromEmail(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 */ @@ -860,7 +867,7 @@ function onHeaderClick(event) { refreshCurrentFolder(); - preventDefault(event); + Event.stop(event); } function refreshCurrentFolder() { @@ -953,8 +960,8 @@ function configureMessageListHeaders(cells) { 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); } } @@ -962,9 +969,10 @@ function configureMessageListEvents() { 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"); @@ -1000,6 +1008,7 @@ function configureDragHandles() { var handle = $("verticalDragHandle"); if (handle) { handle.addInterface(SOGoDragHandlesInterface); + handle.leftMargin = 1; handle.leftBlock=$("leftPanel"); handle.rightBlock=$("rightPanel"); } @@ -1054,9 +1063,7 @@ function openInbox(node) { function initMailer(event) { if (!document.body.hasClassName("popup")) { - configureMessageListEvents(); initDnd(); - currentMailbox = "/" + accounts[0] + "/folderINBOX"; initMailboxTree(); } } @@ -1084,6 +1091,7 @@ function 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]); @@ -1091,7 +1099,7 @@ function initMailboxTree() { } function updateMailboxTreeInPage() { - $("folderTreeContent").innerHTML = mailboxTree; + $("folderTreeContent").update(mailboxTree); var inboxFound = false; var tree = $("mailboxTree"); @@ -1198,14 +1206,17 @@ function updateMailboxMenus() { 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(); } } @@ -1254,7 +1265,7 @@ function buildMailboxes(accountName, encoded) { } 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; @@ -1264,7 +1275,7 @@ function onMenuCreateFolder(event) { 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"); @@ -1274,7 +1285,7 @@ function onMenuRenameFolder(event) { } 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"; @@ -1282,10 +1293,26 @@ function onMenuDeleteFolder(event) { } } +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) { @@ -1293,7 +1320,18 @@ 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() { @@ -1301,16 +1339,18 @@ 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, "-",