From dc0db57b36bb6cd47dfea835a315f61b34ed8e1b Mon Sep 17 00:00:00 2001 From: Misko Hevery Date: Wed, 20 Jan 2010 06:52:50 -0800 Subject: tweek tweeter --- src/Filters.js | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) (limited to 'src') 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'), ''+url+''); - 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(''); + html.push(url); + html.push(''); + 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;}); -- cgit v1.2.3