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, 'mediumTime')).toEqual('9:03:01 AM'); | ||||||
|           expect(pipe.transform(date, 'shortTime')).toEqual('9:03 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 { | function timeZoneGetter(timezone: string): (date: Date, locale: string) => string { | ||||||
|   // To workaround `Intl` API restriction for single timezone let format with 24 hours
 |   // 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 { |   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
 |     // Then extract first 3 letters that related to hours
 | ||||||
|     return result ? result.substring(3) : ''; |     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) => | function datePartGetterFactory(ret: Intl.DateTimeFormatOptions): (date: Date, locale: string) => | ||||||
|     string { |     string { | ||||||
|   return function(date: Date, locale: string): string { |   return (date: Date, locale: string): string => intlDateFormat(date, locale, ret); | ||||||
|     return new Intl.DateTimeFormat(locale, ret).format(date); |  | ||||||
|   }; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user