diff --git a/ChangeLog b/ChangeLog index ed1b6bd60..7f082141e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2007-05-15 Wolfgang Sourdeau + * UI/MailPartViewers/UIxMailPartTextViewer.m + ([UIxMailPartTextViewer -flatContentAsString]): use the new + "stringByDetectingURLs" method to offer clickable urls. + * SoObjects/SOGo/NSString+Utilities.m ([NSString -stringByDetectingURLs]): this new method replaces passive URLS with active ones for HTML resolution of the text. diff --git a/UI/MailPartViewers/UIxMailPartTextViewer.m b/UI/MailPartViewers/UIxMailPartTextViewer.m index f37364b57..ae25992ef 100644 --- a/UI/MailPartViewers/UIxMailPartTextViewer.m +++ b/UI/MailPartViewers/UIxMailPartTextViewer.m @@ -28,6 +28,8 @@ TODO: add contained link detection. */ +#import + #import "common.h" #import "UIxMailPartTextViewer.h" @@ -36,14 +38,18 @@ - (NSString *) flatContentAsString { - NSString *content; + NSMutableString *content; + NSString *superContent, *urlText, *newUrlText; + NSRange httpRange, rest, currentURL; + unsigned int length; - content = [[super flatContentAsString] stringByEscapingHTMLString]; - content = [content stringByReplacingString: @"\r\n" - withString: @"
"]; + content = [NSMutableString string]; + superContent = [[super flatContentAsString] stringByEscapingHTMLString]; + [content appendString: [superContent stringByDetectingURLs]]; + [content replaceString: @"\r\n" withString: @"
"]; + [content replaceString: @"\n" withString: @"
"]; - return [content stringByReplacingString: @"\n" - withString: @"
"]; + return content; } @end /* UIxMailPartTextViewer */ diff --git a/UI/WebServerResources/MailerUI.js b/UI/WebServerResources/MailerUI.js index 5d1bb5544..d2861de97 100644 --- a/UI/WebServerResources/MailerUI.js +++ b/UI/WebServerResources/MailerUI.js @@ -607,13 +607,13 @@ function onMessageSelectionChange() { } function loadMessage(idx) { - var cachedMessage = getCachedMessage(idx); - if (document.messageAjaxRequest) { document.messageAjaxRequest.aborted = true; document.messageAjaxRequest.abort(); } + var cachedMessage = getCachedMessage(idx); + if (cachedMessage == null) { var url = (ApplicationBaseURL + currentMailbox + "/" + idx + "/view?noframe=1"); @@ -625,9 +625,21 @@ function loadMessage(idx) { div.innerHTML = cachedMessage['text']; cachedMessage['time'] = (new Date()).getTime(); document.messageAjaxRequest = null; + configureLinksInMessageDIV(div); } } +function configureLinksInMessageDIV(div) { + var anchors = div.getElementsByTagName('a'); + for (var i = 0; i < anchors.length; i++) + anchors[i].addEventListener("click", onMessageAnchorClick, false); +} + +function onMessageAnchorClick (event) { + window.open(this.href); + event.preventDefault(); +} + function messageCallback(http) { var div = $('messageContent'); @@ -635,7 +647,8 @@ function messageCallback(http) { && http.status == 200) { document.messageAjaxRequest = null; div.innerHTML = http.responseText; - + configureLinksInMessageDIV(div); + if (http.callbackData) { var cachedMessage = new Array(); cachedMessage['idx'] = currentMailbox + '/' + http.callbackData;