Skip to content

Instantly share code, notes, and snippets.

@dcsg
Created April 24, 2012 10:31
Show Gist options
  • Select an option

  • Save dcsg/2478654 to your computer and use it in GitHub Desktop.

Select an option

Save dcsg/2478654 to your computer and use it in GitHub Desktop.
Truncate Filter for AngularJS v1.0
// add the filter to your application module
angular.module('yourAppName', ['filters']);
/**
* Truncate Filter
* @Param string
* @Param int, default = 10
* @Param string, default = "..."
* @return string
*/
angular.module('filters', []).
filter('truncate', function () {
return function (text, length, end) {
if (isNaN(length))
length = 10;
if (end === undefined)
end = "...";
if (text.length <= length || text.length - end.length <= length) {
return text;
}
else {
return String(text).substring(0, length-end.length) + end;
}
};
});
/**
* Example - see the jsfiddle: http://jsfiddle.net/tUyyx/
*
* var myText = "This is an example.";
*
* {{myText|truncate}}
* {{myText|truncate:5}}
* {{myText|truncate:25:" ->"}}
*
* Output
* "This is..."
* "Th..."
* "This is an e ->"
*
*/
@mattrjensen

Copy link
Copy Markdown

It'd probably be worth adding in these two lines to the function too:

    if (text == null || text.length == 0)
        return null;

Cheers
Matt

@jfreal

jfreal commented Jun 11, 2013

Copy link
Copy Markdown

Thanks for this.

@turbohappy

Copy link
Copy Markdown

Excellent, thanks.

@scottywakefield

Copy link
Copy Markdown

Brilliant!

I also added a check for strings as I might be passing numeric as well. I just used angular.isString(text):

if (!angular.isString(text))
  return text;

@isRuslan

Copy link
Copy Markdown

You could probably use:

length = length || 10;
end = end || '...';

instead of:

if (isNaN(length))
  length = 10;

if (end === undefined)
  end = "...";

@mohsen1

mohsen1 commented Jul 29, 2014

Copy link
Copy Markdown

Use unicode character() for ellipsis instead of dot-dot-dot(...). This helps accessibility. VoiceOver will not read "dot dot dot" and handles it better.

@SilviaIenciu

Copy link
Copy Markdown

Thanks for your work. Did you also licensed this?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment