aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMisko Hevery2010-01-20 06:52:50 -0800
committerMisko Hevery2010-01-20 06:52:50 -0800
commitdc0db57b36bb6cd47dfea835a315f61b34ed8e1b (patch)
tree0774c46b3f7f6684eb14501e02a5ded69d03b9aa /src
parentdb2031c5a1df205e6db40ca6aba80930375069c0 (diff)
downloadangular.js-dc0db57b36bb6cd47dfea835a315f61b34ed8e1b.tar.bz2
tweek tweeter
Diffstat (limited to 'src')
-rw-r--r--src/Filters.js27
1 files changed, 16 insertions, 11 deletions
diff --git a/src/Filters.js b/src/Filters.js
index 833d5630..a0bedaaf 100644
--- a/src/Filters.js
+++ b/src/Filters.js
@@ -296,20 +296,25 @@ foreach({
},
'linky': function(text){
+ if (!text) return text;
function regExpEscape(text) {
return text.replace(/([\/\.\*\+\?\|\(\)\[\]\{\}\\])/g, '\\$1');
}
- var URL = /(ftp|http|https):\/\/([^\(\)|\s]+)/gm;
- var html = text;
- var dups = {};
- foreach(text.match(URL)||[], function(url){
- url = url.replace(/\.$/, '');
- if (!dups[url]) {
- html = html.replace(new RegExp(regExpEscape(url), 'gm'), '<a href="'+url+'">'+url+'</a>');
- dups[url] = true;
- }
- });
- return new angularFilter.Meta({text:text, html:html});
+ var URL = /(ftp|http|https|mailto):\/\/([^\(\)|\s]+)/;
+ var match;
+ var raw = text;
+ var html = [];
+ while (match=raw.match(URL)) {
+ var url = match[0].replace(/[\.\;\,\(\)\{\}\<\>]$/,'');
+ var i = raw.indexOf(url);
+ html.push(escapeHtml(raw.substr(0, i)));
+ html.push('<a href="' + url + '">');
+ html.push(url);
+ html.push('</a>');
+ raw = raw.substring(i + url.length);
+ }
+ html.push(escapeHtml(raw));
+ return new angularFilter.Meta({text:text, html:html.join('')});
}
}, function(v,k){angularFilter[k] = v;});