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