diff --git a/ChangeLog b/ChangeLog index 2292cf557..2c3b81d5e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,13 @@ 2008-09-04 Wolfgang Sourdeau + * UI/MailPartViewers/UIxMailPartAlternativeViewer.m + ([UIxMailPartAlternativeViewer -selectPartIndexFromTypes:]): give + precedence on multipart/related parts. + + * UI/MailPartViewers/UIxMailRenderingContext.m + ([UIxMailRenderingContext -viewerForBodyInfo:_info]): add the + mixed viewer as the viewer for "multipart/digest" content. + * UI/MailPartViewers/UIxMailPartTextViewer.m (convertChars): fixed a buffer overflow. Incremented the buffer size to 8192. diff --git a/UI/MailPartViewers/UIxMailPartAlternativeViewer.m b/UI/MailPartViewers/UIxMailPartAlternativeViewer.m index 72ed9b3a0..cf66d6ee9 100644 --- a/UI/MailPartViewers/UIxMailPartAlternativeViewer.m +++ b/UI/MailPartViewers/UIxMailPartAlternativeViewer.m @@ -92,6 +92,8 @@ if ((count = [_types count]) == 0) return NSNotFound; + if ((i = [_types indexOfObject:@"multipart/related"]) != NSNotFound) + return i; if ((i = [_types indexOfObject:@"text/calendar"]) != NSNotFound) return i; if ((i = [_types indexOfObject:@"text/html"]) != NSNotFound) diff --git a/UI/MailPartViewers/UIxMailRenderingContext.m b/UI/MailPartViewers/UIxMailRenderingContext.m index bcc7a26fe..38e3cd218 100644 --- a/UI/MailPartViewers/UIxMailRenderingContext.m +++ b/UI/MailPartViewers/UIxMailRenderingContext.m @@ -208,11 +208,14 @@ static BOOL showNamedTextAttachmentsInline = NO; if ([mt isEqualToString:@"multipart"]) { - if ([st isEqualToString:@"mixed"] || [st isEqualToString:@"related"] || [st isEqualToString: @"appledouble"]) + if ([st isEqualToString: @"mixed"] + || [st isEqualToString: @"digest"] + || [st isEqualToString: @"related"] + || [st isEqualToString: @"appledouble"]) return [self mixedViewer]; - else if ([st isEqualToString:@"signed"]) + else if ([st isEqualToString: @"signed"]) return [self signedViewer]; - else if ([st isEqualToString:@"alternative"]) + else if ([st isEqualToString: @"alternative"]) return [self alternativeViewer]; if ([st isEqualToString:@"report"]) diff --git a/UI/Templates/MailerUI/UIxMailListView.wox b/UI/Templates/MailerUI/UIxMailListView.wox index a0dec12e6..6b32ac391 100644 --- a/UI/Templates/MailerUI/UIxMailListView.wox +++ b/UI/Templates/MailerUI/UIxMailListView.wox @@ -15,12 +15,13 @@ height="14"/> diff --git a/UI/Templates/UIxPageFrame.wox b/UI/Templates/UIxPageFrame.wox index 3beb3e2cb..f6ef14fa0 100644 --- a/UI/Templates/UIxPageFrame.wox +++ b/UI/Templates/UIxPageFrame.wox @@ -118,6 +118,7 @@ + diff --git a/UI/WebServerResources/MailerUI.css b/UI/WebServerResources/MailerUI.css index c679fea57..ff2be8974 100644 --- a/UI/WebServerResources/MailerUI.css +++ b/UI/WebServerResources/MailerUI.css @@ -236,11 +236,6 @@ DIV#folderTreeContent TABLE TD /* mail tableview */ -span.mailer_datefield -{ - white-space: nowrap; -} - TD.mailer_readmailsubject { padding-left: 20px !important; @@ -421,7 +416,8 @@ TD.mailer_fieldvalue a } TR.deleted TD -{ text-decoration: line-through; } +{ display: none; + /* text-decoration: line-through; -- alternative display */ } img.mailer_imagecontent { diff --git a/UI/WebServerResources/MailerUI.js b/UI/WebServerResources/MailerUI.js index 7a9c1e1f6..fa8024918 100644 --- a/UI/WebServerResources/MailerUI.js +++ b/UI/WebServerResources/MailerUI.js @@ -238,15 +238,16 @@ function onDocumentKeydown(event) { function deleteSelectedMessages(sender) { var messageList = $("messageList"); - var rowIds = messageList.getSelectedRowsId(); - - if (rowIds.length > 0) { - for (var i = 0; i < rowIds.length; i++) { + var rows = messageList.down("TBODY").getSelectedNodes(); + + if (rows.length > 0) { + for (var i = 0; i < rows.length; i++) { var url; - var rowId = rowIds[i].substr(4); + var rowId = rows[i].readAttribute("id").substr(4); var messageId = Mailer.currentMailbox + "/" + rowId; url = ApplicationBaseURL + messageId + "/trash"; deleteMessageRequestCount++; + rows[i].addClassName("deleted"); var data = { "id": rowId, "mailbox": Mailer.currentMailbox, "messageId": messageId }; triggerAjaxRequest(url, deleteSelectedMessagesCallback, data); } @@ -268,16 +269,15 @@ function deleteSelectedMessagesCallback(http) { div.update(); Mailer.currentMessages[Mailer.currentMailbox] = null; } - - var row = $("row_" + data["id"]); - var nextRow = row.next("tr"); - if (!nextRow) - nextRow = row.previous("tr"); - // row.addClassName("deleted"); // when we'll offer "mark as deleted" - if (deleteMessageRequestCount == 0) { + var row = $("row_" + data["id"]); + var nextRow = row.next("tr"); + if (!nextRow) + nextRow = row.previous("tr"); + // row.addClassName("deleted"); // when we'll offer "mark as deleted" if (nextRow) { Mailer.currentMessages[Mailer.currentMailbox] = nextRow.getAttribute("id").substr(4); + nextRow.selectElement(); loadMessage(Mailer.currentMessages[Mailer.currentMailbox]); } refreshCurrentFolder(); @@ -539,9 +539,12 @@ function messageListCallback(http) { var tbody = table.tBodies[0]; var tmp = document.createElement('div'); $(tmp).update(http.responseText); - thead.rows[1].parentNode.replaceChild(tmp.firstChild.tHead.rows[1], thead.rows[1]); - addressHeaderCell.replaceChild(tmp.firstChild.tHead.rows[0].cells[3].lastChild, + + var newRows = tmp.firstChild.tHead.rows; + thead.rows[1].parentNode.replaceChild(newRows[1], thead.rows[1]); + addressHeaderCell.replaceChild(newRows[0].cells[3].lastChild, addressHeaderCell.lastChild); + addressHeaderCell.setAttribute("id", newRows[0].cells[3].getAttribute("id")); table.replaceChild(tmp.firstChild.tBodies[0], tbody); } else { @@ -560,9 +563,8 @@ function messageListCallback(http) { row.selectElement(); lastClickedRow = row.rowIndex - $(row).up('table').down('thead').getElementsByTagName('tr').length; var rowPosition = row.rowIndex * row.getHeight(); - if ($(row).up('div').getHeight() > rowPosition) - rowPosition = 0; - div.scrollTop = rowPosition; // scroll to selected message + if (rowPosition > div.getHeight()) + div.scrollTop = rowPosition; // scroll to selected message } else $("messageContent").update(); @@ -1102,6 +1104,8 @@ function onHeaderClick(event) { newSortAttribute = "subject"; else if (headerId == "fromHeader") newSortAttribute = "from"; + else if (headerId == "toHeader") + newSortAttribute = "to"; else if (headerId == "dateHeader") newSortAttribute = "date"; else @@ -1208,8 +1212,7 @@ function configureMessageListEvents(table) { if (table) { table.multiselect = true; // Each body row can load a message - table.observe("mousedown", - onMessageSelectionChange.bindAsEventListener(table)); + table.observe("mousedown", onMessageSelectionChange); // Sortable columns configureSortableTableHeaders(table); } @@ -1232,10 +1235,10 @@ function configureMessageListBodyEvents(table) { row.observe("selectstart", listRowMouseDownHandler); row.observe("contextmenu", onMessageContextMenu); - row.dndTypes = function() { return new Array("mailRow"); }; - row.dndGhost = messageListGhost; - row.dndDataForType = messageListData; - // document.DNDManager.registerSource(row); + //row.dndTypes = function() { return new Array("mailRow"); }; + //row.dndGhost = messageListGhost; + //row.dndDataForType = messageListData; + //document.DNDManager.registerSource(row); for (var j = 0; j < row.cells.length; j++) { var cell = $(row.cells[j]); diff --git a/UI/WebServerResources/generic.js b/UI/WebServerResources/generic.js index 76dbbdf59..933e2229f 100644 --- a/UI/WebServerResources/generic.js +++ b/UI/WebServerResources/generic.js @@ -564,11 +564,13 @@ function onRowClick(event) { if (isMac() && isSafari()) if (event.ctrlKey == 1) isLeftClick = false; // Control-click is equivalent to right-click under Mac OS X + else if (event.metaKey == 1) // Command-click + isLeftClick = true; else isLeftClick = Event.isLeftClick(event); else isLeftClick = Event.isLeftClick(event); - + if (initialSelection.length > 0 && initialSelection.indexOf(node) >= 0 && !isLeftClick) @@ -1435,8 +1437,8 @@ function onBodyClickContextMenu(event) { function configureSortableTableHeaders(table) { var headers = $(table).getElementsByClassName("sortableTableHeader"); for (var i = 0; i < headers.length; i++) { - var header = headers[i]; - $(header).observe("click", onHeaderClick); + var header = $(headers[i]); + header.observe("click", onHeaderClick); } } diff --git a/UI/WebServerResources/tablekit-sogo.js b/UI/WebServerResources/tablekit-sogo.js new file mode 100644 index 000000000..d599ef0b4 --- /dev/null +++ b/UI/WebServerResources/tablekit-sogo.js @@ -0,0 +1,11 @@ +Object.extend(TableKit, { + getHeaderCells : function(table, cell) { + if(!table) { table = $(cell).up('table'); } + var id = table.id; + if(!TableKit.tables[id].dom.head) { + // If there are tHead parts, use the first part, not the last one. + TableKit.tables[id].dom.head = $A((table.tHead && table.tHead.rows.length > 0) ? table.tHead.rows[0].cells : table.rows[0].cells); + } + return TableKit.tables[id].dom.head; + } + });