diff --git a/UI/MailerUI/UIxMailListView.m b/UI/MailerUI/UIxMailListView.m index be2910941..951560ae1 100644 --- a/UI/MailerUI/UIxMailListView.m +++ b/UI/MailerUI/UIxMailListView.m @@ -161,39 +161,36 @@ - (NSString *) messageRowStyleClass { - return [self isMessageDeleted] - ? @"mailer_listcell_deleted" - : @"mailer_listcell_regular"; + NSString *rowClass; + + rowClass = [self isMessageDeleted]? @"mailer_listcell_deleted" : @"mailer_listcell_regular"; + + if (![self isMessageRead]) + rowClass = [rowClass stringByAppendingString: @" mailer_unreadmail"]; + + return rowClass; } - (NSString *) messageSubjectCellStyleClass { NSArray *flags; - NSString *cellClass; + NSString *cellClass = @"messageSubjectColumn "; flags = [[self message] valueForKey:@"flags"]; - if ([flags containsObject: @"seen"]) + if ([flags containsObject: @"answered"]) { - if ([flags containsObject: @"answered"]) - { - if ([flags containsObject: @"$forwarded"]) - cellClass = @"mailer_forwardedrepliedmailsubject"; - else - cellClass = @"mailer_repliedmailsubject"; - } - else if ([flags containsObject: @"$forwarded"]) - cellClass = @"mailer_forwardedmailsubject"; + if ([flags containsObject: @"$forwarded"]) + cellClass = [cellClass stringByAppendingString: @"mailer_forwardedrepliedmailsubject"]; else - cellClass = @"mailer_readmailsubject"; + cellClass = [cellClass stringByAppendingString: @"mailer_repliedmailsubject"]; } + else if ([flags containsObject: @"$forwarded"]) + cellClass = [cellClass stringByAppendingString: @"mailer_forwardedmailsubject"]; else - cellClass = @"mailer_unreadmailsubject"; + cellClass = [cellClass stringByAppendingString: @"mailer_readmailsubject"]; return cellClass; -// return ([self isMessageRead] -// ? @"mailer_readmailsubject" -// : @"mailer_unreadmailsubject"); } - (BOOL) hasMessageAttachment diff --git a/UI/WebServerResources/MailerUI.css b/UI/WebServerResources/MailerUI.css index a5cd1c5af..ead44e6fc 100644 --- a/UI/WebServerResources/MailerUI.css +++ b/UI/WebServerResources/MailerUI.css @@ -243,9 +243,14 @@ TD.mailer_readmailsubject padding-left: 20px !important; } -TD.mailer_unreadmailsubject +TR.mailer_unreadmail TD { - background-image: url(icon-new.png) !important; + font-weight: bold !important; +} + +TR.mailer_unreadmail TD.messageSubjectColumn +{ + background-image: url(icon-new.png); background-repeat: no-repeat !important; background-position: 0px 0px !important; padding-left: 20px !important; diff --git a/UI/WebServerResources/MailerUI.js b/UI/WebServerResources/MailerUI.js index a87b84a81..45e89ab19 100644 --- a/UI/WebServerResources/MailerUI.js +++ b/UI/WebServerResources/MailerUI.js @@ -83,45 +83,36 @@ function onMenuSharing(event) { /* mail list DOM changes */ function markMailInWindow(win, msguid, markread) { - var msgDiv; - - msgDiv = win.$("div_" + msguid); - if (msgDiv) { + var row = win.$("row_" + msguid); + var subjectCell = win.$("div_" + msguid); + if (row && subjectCell) { if (markread) { - msgDiv.removeClassName("mailer_unreadmailsubject"); - msgDiv.addClassName("mailer_readmailsubject"); - msgDiv = win.$("unreaddiv_" + msguid); - if (msgDiv) - { - msgDiv.setAttribute("class", "mailerUnreadIcon"); - msgDiv.setAttribute("id", "readdiv_" + msguid); - msgDiv.setAttribute("src", ResourcesURL + "/icon_read.gif"); - msgDiv.setAttribute("onclick", "mailListMarkMessage(this," - + " 'markMessageUnread', " + msguid - + ", false);" - +" return false;"); - var title = msgDiv.getAttribute("title-markunread"); - if (title) - msgDiv.setAttribute("title", title); - } + row.removeClassName("mailer_unreadmail"); + subjectCell.addClassName("mailer_readmailsubject"); + var img = win.$("unreaddiv_" + msguid); + if (img) { + img.removeClassName("mailerUnreadIcon"); + img.addClassName("mailerReadIcon"); + img.setAttribute("id", "readdiv_" + msguid); + img.setAttribute("src", ResourcesURL + "/icon_read.gif"); + var title = img.getAttribute("title-markunread"); + if (title) + img.setAttribute("title", title); + } } else { - msgDiv.removeClassName('mailer_readmailsubject'); - msgDiv.addClassName('mailer_unreadmailsubject'); - msgDiv = win.$("readdiv_" + msguid); - if (msgDiv) - { - msgDiv.setAttribute("class", "mailerReadIcon"); - msgDiv.setAttribute("id", "unreaddiv_" + msguid); - msgDiv.setAttribute("src", ResourcesURL + "/icon_unread.gif"); - msgDiv.setAttribute("onclick", "mailListMarkMessage(this," - + " 'markMessageRead', " + msguid - + ", true);" - +" return false;"); - var title = msgDiv.getAttribute("title-markread"); - if (title) - msgDiv.setAttribute("title", title); - } + row.addClassName("mailer_unreadmail"); + subjectCell.removeClassName('mailer_readmailsubject'); + var img = win.$("readdiv_" + msguid); + if (img) { + img.removeClassName("mailerReadIcon"); + img.addClassName("mailerUnreadIcon"); + img.setAttribute("id", "unreaddiv_" + msguid); + img.setAttribute("src", ResourcesURL + "/icon_unread.gif"); + var title = img.getAttribute("title-markread"); + if (title) + img.setAttribute("title", title); + } } return true; } @@ -161,25 +152,36 @@ function openMessageWindowsForSelection(action, firstOnly) { } function mailListMarkMessage(event) { - var http = createHTTPClient(); - var url = ApplicationBaseURL + currentMailbox + "/" + msguid + "/" + action; - - if (http) { - // TODO: add parameter to signal that we are only interested in OK - http.open("POST", url, false /* not async */); - http.send(""); - if (http.status != 200) { - // TODO: refresh page? - alert("Message Mark Failed: " + http.statusText); - window.location.reload(); - } - else { - markMailInWindow(window, msguid, markread); - } + var msguid = this.id.split('_')[1]; + var action; + var markread; + if ($(this).hasClassName('mailerUnreadIcon')) { + action = 'markMessageRead'; + markread = true; } else { - window.location.href = url; + action = 'markMessageUnread'; + markread = false; } + var url = ApplicationBaseURL + currentMailbox + "/" + msguid + "/" + action; + + var data = { "window": window, "msguid": msguid, "markread": markread }; + triggerAjaxRequest(url, mailListMarkMessageCallback, data); + + preventDefault(event); + return false; +} + +function mailListMarkMessageCallback(http) { + if (http.readyState == 4) + if (isHttpStatus204(http.status)) { + var data = http.callbackData; + markMailInWindow(data["window"], data["msguid"], data["markread"]); + } + else { + alert("Message Mark Failed (" + http.status + "): " + http.statusText); + window.location.reload(); + } } /* maillist row highlight */ @@ -210,7 +212,7 @@ function deleteSelectedMessages(sender) { var rowIds = messageList.getSelectedRowsId(); for (var i = 0; i < rowIds.length; i++) { - var url, http; + var url; var rowId = rowIds[i].substr(4); var messageId = currentMailbox + "/" + rowId; url = ApplicationBaseURL + messageId + "/trash"; @@ -1054,7 +1056,7 @@ function configureMessageListBodyEvents(table) { Event.observe(cell, "dblclick", onMessageDoubleClick.bindAsEventListener(cell)); else if (j == 4) { var img = cell.childNodesWithTag("img")[0]; - Event.observe(img, "click", mailListMarkMessage); + Event.observe(img, "click", mailListMarkMessage.bindAsEventListener(img)); } } } @@ -1351,7 +1353,7 @@ function onMenuCreateFolder(event) { var name = window.prompt(labels["Name :"], ""); if (name && name.length > 0) { var folderID = document.menuTarget.getAttribute("dataname"); - var urlstr = URLForFolderID(folderID) + "/createFolder?name=" + name; log ("create " + urlstr); + var urlstr = URLForFolderID(folderID) + "/createFolder?name=" + name; triggerAjaxRequest(urlstr, folderOperationCallback); } }