Increase precision of some formatted durations
This commit is contained in:
		
							parent
							
								
									78e86c7c55
								
							
						
					
					
						commit
						387a38a1c8
					
				| @ -14,7 +14,7 @@ | |||||||
|           <a [routerLink]="['/block' | relativeUrl, diffChange.height]">{{ diffChange.height }}</a> |           <a [routerLink]="['/block' | relativeUrl, diffChange.height]">{{ diffChange.height }}</a> | ||||||
|         </td> |         </td> | ||||||
|         <td class="date text-left"> |         <td class="date text-left"> | ||||||
|           <app-time kind="since" [time]="diffChange.timestamp" [fastRender]="true"></app-time> |           <app-time kind="since" [time]="diffChange.timestamp" [fastRender]="true" [precision]="1"></app-time> | ||||||
|         </td> |         </td> | ||||||
|         <td class="text-right">{{ diffChange.difficultyShorten }}</td> |         <td class="text-right">{{ diffChange.difficultyShorten }}</td> | ||||||
|         <td class="text-right" [style]="diffChange.change >= 0 ? 'color: #42B747' : 'color: #B74242'"> |         <td class="text-right" [style]="diffChange.change >= 0 ? 'color: #42B747' : 'color: #B74242'"> | ||||||
|  | |||||||
| @ -10,7 +10,7 @@ | |||||||
|             <ng-template #blocksPlural let-i i18n="shared.blocks">{{ i }} <span class="shared-block">blocks</span></ng-template> |             <ng-template #blocksPlural let-i i18n="shared.blocks">{{ i }} <span class="shared-block">blocks</span></ng-template> | ||||||
|             <ng-template #blocksSingular let-i i18n="shared.block">{{ i }} <span class="shared-block">block</span></ng-template> |             <ng-template #blocksSingular let-i i18n="shared.block">{{ i }} <span class="shared-block">block</span></ng-template> | ||||||
|           </div> |           </div> | ||||||
|           <div class="symbol"><app-time kind="until" [time]="epochData.estimatedRetargetDate" [fastRender]="true"></app-time></div> |           <div class="symbol"><app-time kind="until" [time]="epochData.estimatedRetargetDate" [fastRender]="true" [precision]="1"></app-time></div> | ||||||
|         </div> |         </div> | ||||||
|         <div class="item"> |         <div class="item"> | ||||||
|           <h5 class="card-title" i18n="difficulty-box.estimate">Estimate</h5> |           <h5 class="card-title" i18n="difficulty-box.estimate">Estimate</h5> | ||||||
| @ -54,7 +54,7 @@ | |||||||
|             <ng-template #blocksPlural let-i i18n="shared.blocks">{{ i }} <span class="shared-block">blocks</span></ng-template> |             <ng-template #blocksPlural let-i i18n="shared.blocks">{{ i }} <span class="shared-block">blocks</span></ng-template> | ||||||
|             <ng-template #blocksSingular let-i i18n="shared.block">{{ i }} <span class="shared-block">block</span></ng-template> |             <ng-template #blocksSingular let-i i18n="shared.block">{{ i }} <span class="shared-block">block</span></ng-template> | ||||||
|           </div> |           </div> | ||||||
|           <div class="symbol"><app-time kind="until" [time]="epochData.timeUntilHalving" [fastRender]="true"></app-time></div> |           <div class="symbol"><app-time kind="until" [time]="epochData.timeUntilHalving" [fastRender]="true" [precision]="1"></app-time></div> | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|     </div> |     </div> | ||||||
|  | |||||||
| @ -68,7 +68,7 @@ | |||||||
|             </div> |             </div> | ||||||
|           </div> |           </div> | ||||||
|           <div class="item"> |           <div class="item"> | ||||||
|             <div class="card-text"><app-time kind="until" [time]="epochData.estimatedRetargetDate" [fastRender]="true"></app-time></div> |             <div class="card-text"><app-time kind="until" [time]="epochData.estimatedRetargetDate" [fastRender]="true" [precision]="1"></app-time></div> | ||||||
|             <div class="symbol"> |             <div class="symbol"> | ||||||
|               {{ epochData.retargetDateString }} |               {{ epochData.retargetDateString }} | ||||||
|             </div> |             </div> | ||||||
|  | |||||||
| @ -10,6 +10,7 @@ import { dates } from '../../shared/i18n/dates'; | |||||||
| export class TimeComponent implements OnInit, OnChanges, OnDestroy { | export class TimeComponent implements OnInit, OnChanges, OnDestroy { | ||||||
|   interval: number; |   interval: number; | ||||||
|   text: string; |   text: string; | ||||||
|  |   units: string[] = ['year', 'month', 'week', 'day', 'hour', 'minute', 'second']; | ||||||
|   intervals = {}; |   intervals = {}; | ||||||
| 
 | 
 | ||||||
|   @Input() time: number; |   @Input() time: number; | ||||||
| @ -18,6 +19,7 @@ export class TimeComponent implements OnInit, OnChanges, OnDestroy { | |||||||
|   @Input() fastRender = false; |   @Input() fastRender = false; | ||||||
|   @Input() fixedRender = false; |   @Input() fixedRender = false; | ||||||
|   @Input() relative = false; |   @Input() relative = false; | ||||||
|  |   @Input() precision: number = 0; | ||||||
|   @Input() fractionDigits: number = 0; |   @Input() fractionDigits: number = 0; | ||||||
| 
 | 
 | ||||||
|   constructor( |   constructor( | ||||||
| @ -82,19 +84,20 @@ export class TimeComponent implements OnInit, OnChanges, OnDestroy { | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     let counter: number; |     let counter: number; | ||||||
|     for (const i in this.intervals) { |     for (const [index, unit] of this.units.entries()) { | ||||||
|       counter = Math.floor(seconds / this.intervals[i]); |       const precisionUnit = this.units[Math.min(this.units.length - 1), index + this.precision]; | ||||||
|  |       counter = Math.floor(seconds / this.intervals[unit]); | ||||||
|       if (counter > 0) { |       if (counter > 0) { | ||||||
|         let rounded = Math.round(seconds / this.intervals[i]); |         let rounded = Math.round(seconds / this.intervals[precisionUnit]); | ||||||
|         if (this.fractionDigits) { |         if (this.fractionDigits) { | ||||||
|           const roundFactor = Math.pow(10,this.fractionDigits); |           const roundFactor = Math.pow(10,this.fractionDigits); | ||||||
|           rounded = Math.round((seconds / this.intervals[i]) * roundFactor) / roundFactor; |           rounded = Math.round((seconds / this.intervals[precisionUnit]) * roundFactor) / roundFactor; | ||||||
|         } |         } | ||||||
|         const dateStrings = dates(rounded); |         const dateStrings = dates(rounded); | ||||||
|         switch (this.kind) { |         switch (this.kind) { | ||||||
|           case 'since': |           case 'since': | ||||||
|             if (rounded === 1) { |             if (rounded === 1) { | ||||||
|               switch (i) { // singular (1 day)
 |               switch (precisionUnit) { // singular (1 day)
 | ||||||
|                 case 'year': return $localize`:@@time-since:${dateStrings.i18nYear}:DATE: ago`; break; |                 case 'year': return $localize`:@@time-since:${dateStrings.i18nYear}:DATE: ago`; break; | ||||||
|                 case 'month': return $localize`:@@time-since:${dateStrings.i18nMonth}:DATE: ago`; break; |                 case 'month': return $localize`:@@time-since:${dateStrings.i18nMonth}:DATE: ago`; break; | ||||||
|                 case 'week': return $localize`:@@time-since:${dateStrings.i18nWeek}:DATE: ago`; break; |                 case 'week': return $localize`:@@time-since:${dateStrings.i18nWeek}:DATE: ago`; break; | ||||||
| @ -104,7 +107,7 @@ export class TimeComponent implements OnInit, OnChanges, OnDestroy { | |||||||
|                 case 'second': return $localize`:@@time-since:${dateStrings.i18nSecond}:DATE: ago`; break; |                 case 'second': return $localize`:@@time-since:${dateStrings.i18nSecond}:DATE: ago`; break; | ||||||
|               } |               } | ||||||
|             } else { |             } else { | ||||||
|               switch (i) { // plural (2 days)
 |               switch (precisionUnit) { // plural (2 days)
 | ||||||
|                 case 'year': return $localize`:@@time-since:${dateStrings.i18nYears}:DATE: ago`; break; |                 case 'year': return $localize`:@@time-since:${dateStrings.i18nYears}:DATE: ago`; break; | ||||||
|                 case 'month': return $localize`:@@time-since:${dateStrings.i18nMonths}:DATE: ago`; break; |                 case 'month': return $localize`:@@time-since:${dateStrings.i18nMonths}:DATE: ago`; break; | ||||||
|                 case 'week': return $localize`:@@time-since:${dateStrings.i18nWeeks}:DATE: ago`; break; |                 case 'week': return $localize`:@@time-since:${dateStrings.i18nWeeks}:DATE: ago`; break; | ||||||
| @ -117,7 +120,7 @@ export class TimeComponent implements OnInit, OnChanges, OnDestroy { | |||||||
|             break; |             break; | ||||||
|           case 'until': |           case 'until': | ||||||
|             if (rounded === 1) { |             if (rounded === 1) { | ||||||
|               switch (i) { // singular (In ~1 day)
 |               switch (precisionUnit) { // singular (In ~1 day)
 | ||||||
|                 case 'year': return $localize`:@@time-until:In ~${dateStrings.i18nYear}:DATE:`; break; |                 case 'year': return $localize`:@@time-until:In ~${dateStrings.i18nYear}:DATE:`; break; | ||||||
|                 case 'month': return $localize`:@@time-until:In ~${dateStrings.i18nMonth}:DATE:`; break; |                 case 'month': return $localize`:@@time-until:In ~${dateStrings.i18nMonth}:DATE:`; break; | ||||||
|                 case 'week': return $localize`:@@time-until:In ~${dateStrings.i18nWeek}:DATE:`; break; |                 case 'week': return $localize`:@@time-until:In ~${dateStrings.i18nWeek}:DATE:`; break; | ||||||
| @ -127,7 +130,7 @@ export class TimeComponent implements OnInit, OnChanges, OnDestroy { | |||||||
|                 case 'second': return $localize`:@@time-until:In ~${dateStrings.i18nSecond}:DATE:`; |                 case 'second': return $localize`:@@time-until:In ~${dateStrings.i18nSecond}:DATE:`; | ||||||
|               } |               } | ||||||
|             } else { |             } else { | ||||||
|               switch (i) { // plural (In ~2 days)
 |               switch (precisionUnit) { // plural (In ~2 days)
 | ||||||
|                 case 'year': return $localize`:@@time-until:In ~${dateStrings.i18nYears}:DATE:`; break; |                 case 'year': return $localize`:@@time-until:In ~${dateStrings.i18nYears}:DATE:`; break; | ||||||
|                 case 'month': return $localize`:@@time-until:In ~${dateStrings.i18nMonths}:DATE:`; break; |                 case 'month': return $localize`:@@time-until:In ~${dateStrings.i18nMonths}:DATE:`; break; | ||||||
|                 case 'week': return $localize`:@@time-until:In ~${dateStrings.i18nWeeks}:DATE:`; break; |                 case 'week': return $localize`:@@time-until:In ~${dateStrings.i18nWeeks}:DATE:`; break; | ||||||
| @ -140,7 +143,7 @@ export class TimeComponent implements OnInit, OnChanges, OnDestroy { | |||||||
|             break; |             break; | ||||||
|           case 'span': |           case 'span': | ||||||
|             if (rounded === 1) { |             if (rounded === 1) { | ||||||
|               switch (i) { // singular (1 day)
 |               switch (precisionUnit) { // singular (1 day)
 | ||||||
|                 case 'year': return $localize`:@@time-span:After ${dateStrings.i18nYear}:DATE:`; break; |                 case 'year': return $localize`:@@time-span:After ${dateStrings.i18nYear}:DATE:`; break; | ||||||
|                 case 'month': return $localize`:@@time-span:After ${dateStrings.i18nMonth}:DATE:`; break; |                 case 'month': return $localize`:@@time-span:After ${dateStrings.i18nMonth}:DATE:`; break; | ||||||
|                 case 'week': return $localize`:@@time-span:After ${dateStrings.i18nWeek}:DATE:`; break; |                 case 'week': return $localize`:@@time-span:After ${dateStrings.i18nWeek}:DATE:`; break; | ||||||
| @ -150,7 +153,7 @@ export class TimeComponent implements OnInit, OnChanges, OnDestroy { | |||||||
|                 case 'second': return $localize`:@@time-span:After ${dateStrings.i18nSecond}:DATE:`; break; |                 case 'second': return $localize`:@@time-span:After ${dateStrings.i18nSecond}:DATE:`; break; | ||||||
|               } |               } | ||||||
|             } else { |             } else { | ||||||
|               switch (i) { // plural (2 days)
 |               switch (precisionUnit) { // plural (2 days)
 | ||||||
|                 case 'year': return $localize`:@@time-span:After ${dateStrings.i18nYears}:DATE:`; break; |                 case 'year': return $localize`:@@time-span:After ${dateStrings.i18nYears}:DATE:`; break; | ||||||
|                 case 'month': return $localize`:@@time-span:After ${dateStrings.i18nMonths}:DATE:`; break; |                 case 'month': return $localize`:@@time-span:After ${dateStrings.i18nMonths}:DATE:`; break; | ||||||
|                 case 'week': return $localize`:@@time-span:After ${dateStrings.i18nWeeks}:DATE:`; break; |                 case 'week': return $localize`:@@time-span:After ${dateStrings.i18nWeeks}:DATE:`; break; | ||||||
| @ -163,7 +166,7 @@ export class TimeComponent implements OnInit, OnChanges, OnDestroy { | |||||||
|             break; |             break; | ||||||
|           default: |           default: | ||||||
|             if (rounded === 1) { |             if (rounded === 1) { | ||||||
|               switch (i) { // singular (1 day)
 |               switch (precisionUnit) { // singular (1 day)
 | ||||||
|                 case 'year': return dateStrings.i18nYear; break; |                 case 'year': return dateStrings.i18nYear; break; | ||||||
|                 case 'month': return dateStrings.i18nMonth; break; |                 case 'month': return dateStrings.i18nMonth; break; | ||||||
|                 case 'week': return dateStrings.i18nWeek; break; |                 case 'week': return dateStrings.i18nWeek; break; | ||||||
| @ -173,7 +176,7 @@ export class TimeComponent implements OnInit, OnChanges, OnDestroy { | |||||||
|                 case 'second': return dateStrings.i18nSecond; break; |                 case 'second': return dateStrings.i18nSecond; break; | ||||||
|               } |               } | ||||||
|             } else { |             } else { | ||||||
|               switch (i) { // plural (2 days)
 |               switch (precisionUnit) { // plural (2 days)
 | ||||||
|                 case 'year': return dateStrings.i18nYears; break; |                 case 'year': return dateStrings.i18nYears; break; | ||||||
|                 case 'month': return dateStrings.i18nMonths; break; |                 case 'month': return dateStrings.i18nMonths; break; | ||||||
|                 case 'week': return dateStrings.i18nWeeks; break; |                 case 'week': return dateStrings.i18nWeeks; break; | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user