diff options
Diffstat (limited to 'js/vendor/angular-ui/modules/filters/format')
-rw-r--r-- | js/vendor/angular-ui/modules/filters/format/format.js | 34 | ||||
-rw-r--r-- | js/vendor/angular-ui/modules/filters/format/test/formatSpec.js | 21 |
2 files changed, 55 insertions, 0 deletions
diff --git a/js/vendor/angular-ui/modules/filters/format/format.js b/js/vendor/angular-ui/modules/filters/format/format.js new file mode 100644 index 000000000..cedd3fb84 --- /dev/null +++ b/js/vendor/angular-ui/modules/filters/format/format.js @@ -0,0 +1,34 @@ + +/** + * A replacement utility for internationalization very similar to sprintf. + * + * @param replace {mixed} The tokens to replace depends on type + * string: all instances of $0 will be replaced + * array: each instance of $0, $1, $2 etc. will be placed with each array item in corresponding order + * object: all attributes will be iterated through, with :key being replaced with its corresponding value + * @return string + * + * @example: 'Hello :name, how are you :day'.format({ name:'John', day:'Today' }) + * @example: 'Records $0 to $1 out of $2 total'.format(['10', '20', '3000']) + * @example: '$0 agrees to all mentions $0 makes in the event that $0 hits a tree while $0 is driving drunk'.format('Bob') + */ +angular.module('ui.filters').filter('format', function(){ + return function(value, replace) { + if (!value) { + return value; + } + var target = value.toString(), token; + if (replace === undefined) { + return target; + } + if (!angular.isArray(replace) && !angular.isObject(replace)) { + return target.split('$0').join(replace); + } + token = angular.isArray(replace) && '$' || ':'; + + angular.forEach(replace, function(value, key){ + target = target.split(token+key).join(value); + }); + return target; + }; +}); diff --git a/js/vendor/angular-ui/modules/filters/format/test/formatSpec.js b/js/vendor/angular-ui/modules/filters/format/test/formatSpec.js new file mode 100644 index 000000000..5d83fdb63 --- /dev/null +++ b/js/vendor/angular-ui/modules/filters/format/test/formatSpec.js @@ -0,0 +1,21 @@ +describe('format', function() { + var formatFilter; + + beforeEach(module('ui.filters')); + beforeEach(inject(function($filter) { + formatFilter = $filter('format'); + })); + + it('should replace all instances of $0 if string token is passed', function() { + expect(formatFilter('First $0, then $0, finally $0', 'bob')).toEqual('First bob, then bob, finally bob'); + }); + it('should replace all instances of $n based on order of token array', function() { + expect(formatFilter('First is $0, then $1, finally $2', ['bob','frank','dianne'])).toEqual('First is bob, then frank, finally dianne'); + }); + it('should replace all instances :tokens based on keys of token object', function() { + expect(formatFilter('First is :first, next is :second, finally there is :third', {first:'bob',second:'frank',third:'dianne'})).toEqual('First is bob, next is frank, finally there is dianne'); + }); + it('should do nothing if tokens are undefined', function() { + expect(formatFilter('Hello There')).toEqual('Hello There'); + }); +});
\ No newline at end of file |