diff options
| author | Zach Dexter | 2012-10-09 14:04:58 -0400 | 
|---|---|---|
| committer | Igor Minar | 2012-11-24 22:21:50 +0100 | 
| commit | 610927d77b77700c5c61accd503a2af0fa51cfe6 (patch) | |
| tree | 767b59a129c42151d8c92b536ba106dd273a7a84 /src/ngSanitize | |
| parent | 55d15806fb14b1d98b5ca2770bbbb59e11548c62 (diff) | |
| download | angular.js-610927d77b77700c5c61accd503a2af0fa51cfe6.tar.bz2 | |
feat(linky): allow optional 'target' argument
Closes #1443
Diffstat (limited to 'src/ngSanitize')
| -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);  | 
