fix(pipes): remove bidi control chars (#10870)
Fix inconsistent results in Edge vs. other browsers. Closes #10080.
This commit is contained in:
		
							parent
							
								
									2f41b5c8a0
								
							
						
					
					
						commit
						91980382e8
					
				| @ -97,6 +97,9 @@ export function main() { | ||||
|           expect(pipe.transform(date, 'mediumTime')).toEqual('9:03:01 AM'); | ||||
|           expect(pipe.transform(date, 'shortTime')).toEqual('9:03 AM'); | ||||
|         }); | ||||
| 
 | ||||
|         it('should remove bidi control characters', | ||||
|            () => { expect(pipe.transform(date, 'MM/dd/yyyy').length).toEqual(10); }); | ||||
|       }); | ||||
|     } | ||||
|   }); | ||||
|  | ||||
| @ -140,11 +140,15 @@ function hourExtracter(inner: (date: Date, locale: string) => string): ( | ||||
|   }; | ||||
| } | ||||
| 
 | ||||
| function intlDateFormat(date: Date, locale: string, options: Intl.DateTimeFormatOptions): string { | ||||
|   return new Intl.DateTimeFormat(locale, options).format(date).replace(/[\u200e\u200f]/g, ''); | ||||
| } | ||||
| 
 | ||||
| function timeZoneGetter(timezone: string): (date: Date, locale: string) => string { | ||||
|   // To workaround `Intl` API restriction for single timezone let format with 24 hours
 | ||||
|   const format = {hour: '2-digit', hour12: false, timeZoneName: timezone}; | ||||
|   const options = {hour: '2-digit', hour12: false, timeZoneName: timezone}; | ||||
|   return function(date: Date, locale: string): string { | ||||
|     const result = new Intl.DateTimeFormat(locale, format).format(date); | ||||
|     const result = intlDateFormat(date, locale, options); | ||||
|     // Then extract first 3 letters that related to hours
 | ||||
|     return result ? result.substring(3) : ''; | ||||
|   }; | ||||
| @ -177,9 +181,7 @@ function combine(options: Intl.DateTimeFormatOptions[]): Intl.DateTimeFormatOpti | ||||
| 
 | ||||
| function datePartGetterFactory(ret: Intl.DateTimeFormatOptions): (date: Date, locale: string) => | ||||
|     string { | ||||
|   return function(date: Date, locale: string): string { | ||||
|     return new Intl.DateTimeFormat(locale, ret).format(date); | ||||
|   }; | ||||
|   return (date: Date, locale: string): string => intlDateFormat(date, locale, ret); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user