diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/ngSanitize/filter/linky.js | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/src/ngSanitize/filter/linky.js b/src/ngSanitize/filter/linky.js index 8cdd3c03..cc0f7aa6 100644 --- a/src/ngSanitize/filter/linky.js +++ b/src/ngSanitize/filter/linky.js @@ -8,6 +8,7 @@ * plain email address links. * * @param {string} text Input text. + * @param {string} target Window (_blank|_self|_parent|_top) or named frame to open links in. * @returns {string} Html-linkified text. * * @usage @@ -24,6 +25,7 @@ 'mailto:us@somewhere.org,\n'+ 'another@somewhere.org,\n'+ 'and one more: ftp://127.0.0.1/.'; + $scope.snippetWithTarget = 'http://angularjs.org/'; } </script> <div ng-controller="Ctrl"> @@ -43,6 +45,15 @@ <div ng-bind-html="snippet | linky"></div> </td> </tr> + <tr id="linky-target"> + <td>linky target</td> + <td> + <pre><div ng-bind-html="snippetWithTarget | linky:'_blank'"><br></div></pre> + </td> + <td> + <div ng-bind-html="snippetWithTarget | linky:'_blank'"></div> + </td> + </tr> <tr id="escaped-html"> <td>no filter</td> <td><pre><div ng-bind="snippet"><br></div></pre></td> @@ -75,6 +86,11 @@ toBe('new <a href="http://link">http://link</a>.'); expect(using('#escaped-html').binding('snippet')).toBe('new http://link.'); }); + + it('should work with the target property', function() { + expect(using('#linky-target').binding("snippetWithTarget | linky:'_blank'")). + toBe('<a target="_blank" href="http://angularjs.org/">http://angularjs.org/</a>'); + }); </doc:scenario> </doc:example> */ @@ -82,7 +98,7 @@ angular.module('ngSanitize').filter('linky', function() { var LINKY_URL_REGEXP = /((ftp|https?):\/\/|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s\.\;\,\(\)\{\}\<\>]/, MAILTO_REGEXP = /^mailto:/; - return function(text) { + return function(text, target) { if (!text) return text; var match; var raw = text; @@ -91,6 +107,10 @@ angular.module('ngSanitize').filter('linky', function() { var writer = htmlSanitizeWriter(html); var url; var i; + var properties = {}; + if (angular.isDefined(target)) { + properties.target = target; + } while ((match = raw.match(LINKY_URL_REGEXP))) { // We can not end in these as they are sometimes found at the end of the sentence url = match[0]; @@ -98,7 +118,8 @@ angular.module('ngSanitize').filter('linky', function() { if (match[2] == match[3]) url = 'mailto:' + url; i = match.index; writer.chars(raw.substr(0, i)); - writer.start('a', {href:url}); + properties.href = url; + writer.start('a', properties); writer.chars(match[0].replace(MAILTO_REGEXP, '')); writer.end('a'); raw = raw.substring(i + match[0].length); |
