Monotone-Parent: 2657547ae0e611fd831e211fb69fd2bd09cea1e4
Monotone-Revision: cb234862194e72608212740a10db0004798a152d Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2007-05-16T21:42:47 Monotone-Branch: ca.inverse.sogomaint-2.0.2
parent
d30e350fa8
commit
fe29404491
|
@ -6,6 +6,8 @@
|
|||
is not found since the range has not changed either. Finally, the
|
||||
first character before the url might also be a tab or a cr, so we
|
||||
match it against the "urlAfterEndingChars" custom NSCharacterSet.
|
||||
([NSString -stringByDetectingURLs]): modified to handle email
|
||||
addresses and add a correct "mailto:" link.
|
||||
|
||||
2007-05-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||||
|
||||
|
|
|
@ -113,12 +113,12 @@ static NSMutableCharacterSet *urlAfterEndingChars = nil;
|
|||
if (!urlNonEndingChars)
|
||||
{
|
||||
urlNonEndingChars = [NSMutableCharacterSet new];
|
||||
[urlNonEndingChars addCharactersInString: @"&=,.:;\t \r\n"];
|
||||
[urlNonEndingChars addCharactersInString: @">&=,.:;\t \r\n"];
|
||||
}
|
||||
if (!urlAfterEndingChars)
|
||||
{
|
||||
urlAfterEndingChars = [NSMutableCharacterSet new];
|
||||
[urlAfterEndingChars addCharactersInString: @"\t \r\n"];
|
||||
[urlAfterEndingChars addCharactersInString: @"&;<\t \r\n"];
|
||||
}
|
||||
|
||||
start = refRange.location;
|
||||
|
@ -142,30 +142,44 @@ static NSMutableCharacterSet *urlAfterEndingChars = nil;
|
|||
return NSMakeRange (start, length);
|
||||
}
|
||||
|
||||
- (NSString *) stringByDetectingURLs
|
||||
- (void) _handleURLs: (NSMutableString *) selfCopy
|
||||
textToMatch: (NSString *) match
|
||||
prefix: (NSString *) prefix
|
||||
{
|
||||
NSMutableString *selfCopy;
|
||||
NSRange httpRange, currentURL, rest;
|
||||
NSString *urlText, *newUrlText;
|
||||
unsigned int length;
|
||||
unsigned int length, matchLength;
|
||||
|
||||
selfCopy = [NSMutableString stringWithString: self];
|
||||
|
||||
httpRange = [selfCopy rangeOfString: @"://"];
|
||||
matchLength = [match length];
|
||||
httpRange = [selfCopy rangeOfString: match];
|
||||
while (httpRange.location != NSNotFound)
|
||||
{
|
||||
currentURL = [selfCopy _rangeOfURLInRange: httpRange];
|
||||
urlText = [selfCopy substringFromRange: currentURL];
|
||||
newUrlText = [NSString stringWithFormat: @"<a href=\"%@\">%@</a>",
|
||||
urlText, urlText];
|
||||
[selfCopy replaceCharactersInRange: currentURL
|
||||
withString: newUrlText];
|
||||
if ([urlText length] > matchLength)
|
||||
{
|
||||
newUrlText = [NSString stringWithFormat: @"<a href=\"%@%@\">%@</a>",
|
||||
prefix, urlText, urlText];
|
||||
[selfCopy replaceCharactersInRange: currentURL
|
||||
withString: newUrlText];
|
||||
rest.location = currentURL.location + [newUrlText length];
|
||||
}
|
||||
else
|
||||
rest.location = currentURL.location + currentURL.length;
|
||||
length = [selfCopy length];
|
||||
rest.location = currentURL.location + [newUrlText length];
|
||||
rest.length = length - rest.location;
|
||||
httpRange = [selfCopy rangeOfString: @"://"
|
||||
httpRange = [selfCopy rangeOfString: match
|
||||
options: 0 range: rest];
|
||||
}
|
||||
}
|
||||
|
||||
- (NSString *) stringByDetectingURLs
|
||||
{
|
||||
NSMutableString *selfCopy;
|
||||
|
||||
selfCopy = [NSMutableString stringWithString: self];
|
||||
[self _handleURLs: selfCopy textToMatch: @"://" prefix: @""];
|
||||
[self _handleURLs: selfCopy textToMatch: @"@" prefix: @"mailto:"];
|
||||
|
||||
return selfCopy;
|
||||
}
|
||||
|
|
|
@ -635,7 +635,18 @@ function configureLinksInMessage() {
|
|||
parentDiv)[0];
|
||||
var anchors = div.getElementsByTagName('a');
|
||||
for (var i = 0; i < anchors.length; i++)
|
||||
anchors[i].addEventListener("click", onMessageAnchorClick, false);
|
||||
if (anchors[i].href.substring(0,7) == "mailto:") {
|
||||
anchors[i].addEventListener("click", onEmailAddressClick, false);
|
||||
anchors[i].addEventListener("contextmenu", onEmailAddressClick,
|
||||
false);
|
||||
}
|
||||
else
|
||||
anchors[i].addEventListener("click", onMessageAnchorClick, false);
|
||||
}
|
||||
|
||||
function onEmailAddressClick(event) {
|
||||
onMenuClick(event, 'addressMenu');
|
||||
event.preventDefault();
|
||||
}
|
||||
|
||||
function onMessageAnchorClick (event) {
|
||||
|
|
Loading…
Reference in New Issue