From a23fa94ca8b5f30b91835f9b2002c52ed970143a Mon Sep 17 00:00:00 2001 From: Brandon Date: Fri, 16 Dec 2016 16:24:26 -0700 Subject: [PATCH] fix(common): capitalize first letter of all words in TitleCasePipe (#13511) --- .../common/src/pipes/case_conversion_pipes.ts | 13 ++++++++++++- .../common/test/pipes/case_conversion_pipes_spec.ts | 8 ++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/modules/@angular/common/src/pipes/case_conversion_pipes.ts b/modules/@angular/common/src/pipes/case_conversion_pipes.ts index 2b2965a5d8..42a226c733 100644 --- a/modules/@angular/common/src/pipes/case_conversion_pipes.ts +++ b/modules/@angular/common/src/pipes/case_conversion_pipes.ts @@ -27,6 +27,17 @@ export class LowerCasePipe implements PipeTransform { } } + +/** + * Helper method to transform a single word to titlecase. + * + * @stable + */ +function titleCaseWord(word: string) { + if (!word) return word; + return word[0].toUpperCase() + word.substr(1).toLowerCase(); +} + /** * Transforms text to titlecase. * @@ -40,7 +51,7 @@ export class TitleCasePipe implements PipeTransform { throw new InvalidPipeArgumentError(TitleCasePipe, value); } - return value[0].toUpperCase() + value.substr(1).toLowerCase(); + return value.split(/\b/g).map(word => titleCaseWord(word)).join(''); } } diff --git a/modules/@angular/common/test/pipes/case_conversion_pipes_spec.ts b/modules/@angular/common/test/pipes/case_conversion_pipes_spec.ts index 6fe87b6f04..808b3f4a78 100644 --- a/modules/@angular/common/test/pipes/case_conversion_pipes_spec.ts +++ b/modules/@angular/common/test/pipes/case_conversion_pipes_spec.ts @@ -32,6 +32,14 @@ export function main() { it('should return titlecase', () => { expect(pipe.transform('foo')).toEqual('Foo'); }); + it('should return titlecase for subsequent words', + () => { expect(pipe.transform('one TWO Three fouR')).toEqual('One Two Three Four'); }); + + it('should support empty strings', () => { expect(pipe.transform('')).toEqual(''); }); + + it('should persist whitespace', + () => { expect(pipe.transform('one two')).toEqual('One Two'); }); + it('should titlecase when there is a new value', () => { expect(pipe.transform('bar')).toEqual('Bar'); expect(pipe.transform('foo')).toEqual('Foo');