diff options
| author | Misko Hevery | 2010-01-20 06:52:50 -0800 |
|---|---|---|
| committer | Misko Hevery | 2010-01-20 06:52:50 -0800 |
| commit | dc0db57b36bb6cd47dfea835a315f61b34ed8e1b (patch) | |
| tree | 0774c46b3f7f6684eb14501e02a5ded69d03b9aa /src | |
| parent | db2031c5a1df205e6db40ca6aba80930375069c0 (diff) | |
| download | angular.js-dc0db57b36bb6cd47dfea835a315f61b34ed8e1b.tar.bz2 | |
tweek tweeter
Diffstat (limited to 'src')
| -rw-r--r-- | src/Filters.js | 27 |
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;}); |
