| 
									
										
										
										
											2020-09-21 19:41:12 +07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-06 17:07:04 -03:00
										 |  |  | <div class="container-xl dashboard-container"> | 
					
						
							| 
									
										
										
										
											2020-09-22 12:50:12 +07:00
										 |  |  |   <div class="row row-cols-1 row-cols-md-2" *ngIf="{ value: (mempoolInfoData$ | async) } as mempoolInfoData"> | 
					
						
							| 
									
										
										
										
											2022-06-16 09:17:44 +02:00
										 |  |  |     <ng-container *ngIf="(network$ | async) !== 'liquid' && (network$ | async) !== 'liquidtestnet'"> | 
					
						
							|  |  |  |       <div class="col card-wrapper"> | 
					
						
							| 
									
										
										
										
											2021-07-26 16:00:40 -03:00
										 |  |  |         <div class="main-title" i18n="fees-box.transaction-fees">Transaction Fees</div> | 
					
						
							| 
									
										
										
										
											2021-06-06 17:07:04 -03:00
										 |  |  |         <div class="card"> | 
					
						
							| 
									
										
										
										
											2022-06-01 09:46:52 +02:00
										 |  |  |           <div class="card-body less-padding"> | 
					
						
							| 
									
										
										
										
											2020-10-27 02:58:29 +07:00
										 |  |  |             <app-fees-box class="d-block"></app-fees-box> | 
					
						
							|  |  |  |           </div> | 
					
						
							| 
									
										
										
										
											2020-09-21 19:41:12 +07:00
										 |  |  |         </div> | 
					
						
							|  |  |  |       </div> | 
					
						
							| 
									
										
										
										
											2022-06-16 09:17:44 +02:00
										 |  |  |       <div class="col"> | 
					
						
							| 
									
										
										
										
											2022-01-17 13:33:07 +09:00
										 |  |  |         <app-difficulty></app-difficulty> | 
					
						
							| 
									
										
										
										
											2021-08-06 16:38:44 +05:30
										 |  |  |       </div> | 
					
						
							| 
									
										
										
										
											2022-06-16 09:17:44 +02:00
										 |  |  |     </ng-container> | 
					
						
							|  |  |  |     <div class="col"> | 
					
						
							|  |  |  |       <div class="card graph-card"> | 
					
						
							|  |  |  |         <div class="card-body pl-0"> | 
					
						
							|  |  |  |           <div style="padding-left: 1.25rem;"> | 
					
						
							| 
									
										
										
										
											2022-02-18 00:37:37 +04:00
										 |  |  |             <ng-container *ngTemplateOutlet="stateService.network === 'liquid' ? lbtcPegs : mempoolTable; context: { $implicit: mempoolInfoData }"></ng-container> | 
					
						
							|  |  |  |             <hr> | 
					
						
							| 
									
										
										
										
											2020-10-27 02:58:29 +07:00
										 |  |  |           </div> | 
					
						
							| 
									
										
										
										
											2022-06-16 09:17:44 +02:00
										 |  |  |           <ng-template [ngIf]="(network$ | async) !== 'liquid'" [ngIfElse]="liquidPegs"> | 
					
						
							|  |  |  |             <ng-container *ngIf="{ value: (mempoolStats$ | async) } as mempoolStats"> | 
					
						
							|  |  |  |               <div class="mempool-graph"> | 
					
						
							|  |  |  |                 <app-mempool-graph | 
					
						
							|  |  |  |                 [template]="'widget'" | 
					
						
							|  |  |  |                 [data]="mempoolStats.value?.mempool" | 
					
						
							|  |  |  |                 [windowPreferenceOverride]="'2h'" | 
					
						
							|  |  |  |                 ></app-mempool-graph> | 
					
						
							|  |  |  |               </div> | 
					
						
							|  |  |  |             </ng-container> | 
					
						
							|  |  |  |           </ng-template> | 
					
						
							|  |  |  |           <ng-template #liquidPegs> | 
					
						
							|  |  |  |             <app-lbtc-pegs-graph [data]="liquidPegsMonth$ | async"></app-lbtc-pegs-graph> | 
					
						
							|  |  |  |           </ng-template> | 
					
						
							| 
									
										
										
										
											2020-09-26 22:46:26 +07:00
										 |  |  |         </div> | 
					
						
							|  |  |  |       </div> | 
					
						
							| 
									
										
										
										
											2022-06-16 09:17:44 +02:00
										 |  |  |     </div> | 
					
						
							|  |  |  |     <div class="col"> | 
					
						
							|  |  |  |       <div class="card graph-card"> | 
					
						
							|  |  |  |         <div class="card-body"> | 
					
						
							|  |  |  |           <ng-container *ngTemplateOutlet="stateService.network === 'liquid' ? mempoolTable : txPerSecond; context: { $implicit: mempoolInfoData }"></ng-container> | 
					
						
							|  |  |  |           <hr> | 
					
						
							|  |  |  |           <div class="mempool-graph" *ngIf="stateService.network === 'liquid'; else mempoolGraph"> | 
					
						
							|  |  |  |             <table class="table table-borderless table-striped" *ngIf="(featuredAssets$ | async) as featuredAssets else loadingAssetsTable"> | 
					
						
							| 
									
										
										
										
											2020-10-27 02:58:29 +07:00
										 |  |  |               <tbody> | 
					
						
							| 
									
										
										
										
											2022-06-16 09:17:44 +02:00
										 |  |  |                 <tr *ngFor="let group of featuredAssets"> | 
					
						
							|  |  |  |                   <td class="asset-icon"> | 
					
						
							|  |  |  |                     <a [routerLink]="['/assets/asset/' | relativeUrl, group.asset]"> | 
					
						
							|  |  |  |                       <img class="assetIcon" [src]="'/api/v1/asset/' + group.asset + '/icon'"> | 
					
						
							| 
									
										
										
										
											2022-03-17 18:17:22 +01:00
										 |  |  |                     </a> | 
					
						
							|  |  |  |                   </td> | 
					
						
							| 
									
										
										
										
											2022-06-16 09:17:44 +02:00
										 |  |  |                   <td class="asset-title"> | 
					
						
							|  |  |  |                     <a [routerLink]="['/assets/asset/' | relativeUrl, group.asset]">{{ group.name }}</a> | 
					
						
							| 
									
										
										
										
											2020-10-27 02:58:29 +07:00
										 |  |  |                   </td> | 
					
						
							| 
									
										
										
										
											2022-06-16 09:17:44 +02:00
										 |  |  |                   <td class="circulating-amount"><app-asset-circulation [assetId]="group.asset"></app-asset-circulation></td> | 
					
						
							| 
									
										
										
										
											2020-10-27 02:58:29 +07:00
										 |  |  |                 </tr> | 
					
						
							|  |  |  |               </tbody> | 
					
						
							|  |  |  |             </table> | 
					
						
							|  |  |  |           </div> | 
					
						
							| 
									
										
										
										
											2022-06-16 09:17:44 +02:00
										 |  |  |           <ng-template #mempoolGraph> | 
					
						
							|  |  |  |             <div class="mempool-graph" *ngIf="{ value: (mempoolStats$ | async) } as mempoolStats"> | 
					
						
							|  |  |  |               <app-incoming-transactions-graph | 
					
						
							|  |  |  |                 [left]="50" | 
					
						
							|  |  |  |                 [data]="mempoolStats.value?.weightPerSecond" | 
					
						
							|  |  |  |                 [windowPreferenceOverride]="'2h'" | 
					
						
							|  |  |  |                 ></app-incoming-transactions-graph> | 
					
						
							|  |  |  |             </div> | 
					
						
							|  |  |  |           </ng-template> | 
					
						
							| 
									
										
										
										
											2020-09-26 02:11:30 +07:00
										 |  |  |         </div> | 
					
						
							|  |  |  |       </div> | 
					
						
							| 
									
										
										
										
											2022-06-16 09:17:44 +02:00
										 |  |  |     </div> | 
					
						
							|  |  |  |     <div class="col" style="max-height: 410px"> | 
					
						
							| 
									
										
										
										
											2023-07-19 12:09:46 +09:00
										 |  |  |       <div class="card" *ngIf="(network$ | async) !== 'liquid' && (network$ | async) !== 'liquidtestnet'; else latestBlocks"> | 
					
						
							| 
									
										
										
										
											2022-06-16 09:17:44 +02:00
										 |  |  |         <div class="card-body"> | 
					
						
							| 
									
										
										
										
											2023-07-14 11:52:07 +09:00
										 |  |  |           <a class="title-link" href="" [routerLink]="['/rbf' | relativeUrl]"> | 
					
						
							| 
									
										
										
										
											2023-07-14 12:11:14 +09:00
										 |  |  |             <h5 class="card-title d-inline" i18n="dashboard.latest-rbf-replacements">Latest replacements</h5> | 
					
						
							| 
									
										
										
										
											2022-06-16 09:17:44 +02:00
										 |  |  |             <span> </span> | 
					
						
							| 
									
										
										
										
											2023-07-20 16:02:04 +09:00
										 |  |  |             <fa-icon [icon]="['fas', 'external-link-alt']" [fixedWidth]="true" style="vertical-align: text-top; font-size: 13px; color: #4a68b9"></fa-icon> | 
					
						
							| 
									
										
										
										
											2022-06-16 09:17:44 +02:00
										 |  |  |           </a> | 
					
						
							| 
									
										
										
										
											2023-07-14 11:52:07 +09:00
										 |  |  |           <table class="table lastest-replacements-table"> | 
					
						
							| 
									
										
										
										
											2022-06-16 09:17:44 +02:00
										 |  |  |             <thead> | 
					
						
							| 
									
										
										
										
											2023-07-14 11:52:07 +09:00
										 |  |  |               <th class="table-cell-txid" i18n="dashboard.latest-transactions.txid">TXID</th> | 
					
						
							| 
									
										
										
										
											2023-07-14 12:11:14 +09:00
										 |  |  |               <th class="table-cell-old-fee" i18n="dashboard.previous-transaction-fee">Previous fee</th> | 
					
						
							| 
									
										
										
										
											2023-07-14 11:52:07 +09:00
										 |  |  |               <th class="table-cell-new-fee" i18n="dashboard.new-transaction-fee">New fee</th> | 
					
						
							| 
									
										
										
										
											2023-07-14 12:11:14 +09:00
										 |  |  |               <th class="table-cell-badges" i18n="transaction.status|Transaction Status">Status</th> | 
					
						
							| 
									
										
										
										
											2022-06-16 09:17:44 +02:00
										 |  |  |             </thead> | 
					
						
							|  |  |  |             <tbody> | 
					
						
							| 
									
										
										
										
											2023-07-14 11:52:07 +09:00
										 |  |  |               <tr *ngFor="let replacement of replacements$ | async;"> | 
					
						
							|  |  |  |                 <td class="table-cell-txid"> | 
					
						
							|  |  |  |                   <a [routerLink]="['/tx' | relativeUrl, replacement.txid]"> | 
					
						
							|  |  |  |                     <app-truncate [text]="replacement.txid" [lastChars]="5"></app-truncate> | 
					
						
							| 
									
										
										
										
											2022-06-16 09:17:44 +02:00
										 |  |  |                   </a> | 
					
						
							|  |  |  |                 </td> | 
					
						
							| 
									
										
										
										
											2023-07-14 11:52:07 +09:00
										 |  |  |                 <td class="table-cell-old-fee"><app-fee-rate [fee]="replacement.oldFee" [weight]="replacement.oldVsize * 4"></app-fee-rate></td> | 
					
						
							|  |  |  |                 <td class="table-cell-new-fee"><app-fee-rate [fee]="replacement.newFee" [weight]="replacement.newVsize * 4"></app-fee-rate></td> | 
					
						
							|  |  |  |                 <td class="table-cell-badges"> | 
					
						
							|  |  |  |                   <span *ngIf="replacement.mined" class="badge badge-success" i18n="transaction.rbf.mined">Mined</span> | 
					
						
							|  |  |  |                   <span *ngIf="replacement.fullRbf" class="badge badge-info" i18n="transaction.full-rbf">Full RBF</span> | 
					
						
							|  |  |  |                   <span *ngIf="!replacement.fullRbf" class="badge badge-success" i18n="transaction.rbf">RBF</span> | 
					
						
							| 
									
										
										
										
											2022-06-16 09:17:44 +02:00
										 |  |  |                 </td> | 
					
						
							|  |  |  |               </tr> | 
					
						
							|  |  |  |             </tbody> | 
					
						
							|  |  |  |           </table> | 
					
						
							| 
									
										
										
										
											2020-09-26 03:50:32 +07:00
										 |  |  |         </div> | 
					
						
							|  |  |  |       </div> | 
					
						
							| 
									
										
										
										
											2023-07-19 12:09:46 +09:00
										 |  |  |       <ng-template #latestBlocks> | 
					
						
							|  |  |  |         <div class="card"> | 
					
						
							|  |  |  |           <div class="card-body"> | 
					
						
							|  |  |  |             <a class="title-link" href="" [routerLink]="['/blocks' | relativeUrl]"> | 
					
						
							|  |  |  |               <h5 class="card-title d-inline" i18n="dashboard.latest-blocks">Latest blocks</h5> | 
					
						
							|  |  |  |               <span> </span> | 
					
						
							| 
									
										
										
										
											2023-07-20 16:02:04 +09:00
										 |  |  |               <fa-icon [icon]="['fas', 'external-link-alt']" [fixedWidth]="true" style="vertical-align: text-top; font-size: 13px; color: #4a68b9"></fa-icon> | 
					
						
							| 
									
										
										
										
											2023-07-19 12:09:46 +09:00
										 |  |  |             </a> | 
					
						
							|  |  |  |             <table class="table lastest-blocks-table"> | 
					
						
							|  |  |  |               <thead> | 
					
						
							|  |  |  |                 <th class="table-cell-height" i18n="dashboard.latest-blocks.height">Height</th> | 
					
						
							|  |  |  |                 <th *ngIf="!stateService.env.MINING_DASHBOARD" class="table-cell-mined" i18n="dashboard.latest-blocks.mined">Mined</th> | 
					
						
							|  |  |  |                 <th *ngIf="stateService.env.MINING_DASHBOARD" class="table-cell-mined pl-lg-4" i18n="mining.pool-name">Pool</th> | 
					
						
							|  |  |  |                 <th class="table-cell-transaction-count" i18n="dashboard.latest-blocks.transaction-count">TXs</th> | 
					
						
							|  |  |  |                 <th class="table-cell-size" i18n="dashboard.latest-blocks.size">Size</th> | 
					
						
							|  |  |  |               </thead> | 
					
						
							|  |  |  |               <tbody> | 
					
						
							|  |  |  |                 <tr *ngFor="let block of blocks$ | async; let i = index; trackBy: trackByBlock"> | 
					
						
							|  |  |  |                   <td class="table-cell-height" ><a [routerLink]="['/block' | relativeUrl, block.id]" [state]="{ data: { block: block } }">{{ block.height }}</a></td> | 
					
						
							|  |  |  |                   <td *ngIf="!stateService.env.MINING_DASHBOARD" class="table-cell-mined" ><app-time kind="since" [time]="block.timestamp" [fastRender]="true"></app-time></td> | 
					
						
							|  |  |  |                   <td *ngIf="stateService.env.MINING_DASHBOARD" class="table-cell-mined pl-lg-4"> | 
					
						
							|  |  |  |                     <a class="clear-link" [routerLink]="[('/mining/pool/' + block.extras.pool.slug) | relativeUrl]"> | 
					
						
							|  |  |  |                       <img width="22" height="22" src="{{ block.extras.pool['logo'] }}" | 
					
						
							|  |  |  |                         onError="this.src = '/resources/mining-pools/default.svg'"> | 
					
						
							|  |  |  |                       <span class="pool-name">{{ block.extras.pool.name }}</span> | 
					
						
							|  |  |  |                     </a> | 
					
						
							|  |  |  |                   </td> | 
					
						
							|  |  |  |                   <td class="table-cell-transaction-count">{{ block.tx_count | number }}</td> | 
					
						
							|  |  |  |                   <td class="table-cell-size"> | 
					
						
							|  |  |  |                     <div class="progress"> | 
					
						
							|  |  |  |                       <div class="progress-bar progress-mempool {{ network$ | async }}" role="progressbar" [ngStyle]="{'width': (block.weight / stateService.env.BLOCK_WEIGHT_UNITS)*100 + '%' }"> </div> | 
					
						
							|  |  |  |                       <div class="progress-text" [innerHTML]="block.size | bytes: 2"></div> | 
					
						
							|  |  |  |                     </div> | 
					
						
							|  |  |  |                   </td> | 
					
						
							|  |  |  |                 </tr> | 
					
						
							|  |  |  |               </tbody> | 
					
						
							|  |  |  |             </table> | 
					
						
							|  |  |  |           </div> | 
					
						
							|  |  |  |         </div> | 
					
						
							|  |  |  |       </ng-template> | 
					
						
							| 
									
										
										
										
											2020-10-27 16:34:27 +07:00
										 |  |  |     </div> | 
					
						
							| 
									
										
										
										
											2022-06-16 09:17:44 +02:00
										 |  |  |     <div class="col" style="max-height: 410px"> | 
					
						
							|  |  |  |       <div class="card"> | 
					
						
							|  |  |  |         <div class="card-body"> | 
					
						
							|  |  |  |           <h5 class="card-title" i18n="dashboard.latest-transactions">Latest transactions</h5> | 
					
						
							|  |  |  |           <table class="table latest-transactions"> | 
					
						
							|  |  |  |             <thead> | 
					
						
							|  |  |  |               <th class="table-cell-txid" i18n="dashboard.latest-transactions.txid">TXID</th> | 
					
						
							|  |  |  |               <th class="table-cell-satoshis" i18n="dashboard.latest-transactions.amount">Amount</th> | 
					
						
							| 
									
										
										
										
											2023-02-15 16:22:06 +09:00
										 |  |  |               <th class="table-cell-fiat" *ngIf="(network$ | async) === ''">{{ currency }}</th> | 
					
						
							| 
									
										
										
										
											2022-10-13 17:15:17 +04:00
										 |  |  |               <th class="table-cell-fees" i18n="transaction.fee|Transaction fee">Fee</th> | 
					
						
							| 
									
										
										
										
											2022-06-16 09:17:44 +02:00
										 |  |  |             </thead> | 
					
						
							|  |  |  |             <tbody> | 
					
						
							|  |  |  |               <tr *ngFor="let transaction of transactions$ | async; let i = index;"> | 
					
						
							| 
									
										
										
										
											2023-01-05 11:01:46 -06:00
										 |  |  |                 <td class="table-cell-txid"> | 
					
						
							|  |  |  |                   <a [routerLink]="['/tx' | relativeUrl, transaction.txid]"> | 
					
						
							| 
									
										
										
										
											2023-01-13 17:03:02 -06:00
										 |  |  |                     <app-truncate [text]="transaction.txid" [lastChars]="5"></app-truncate> | 
					
						
							| 
									
										
										
										
											2023-01-05 11:01:46 -06:00
										 |  |  |                   </a> | 
					
						
							|  |  |  |                 </td> | 
					
						
							| 
									
										
										
										
											2022-06-16 09:17:44 +02:00
										 |  |  |                 <td class="table-cell-satoshis"><app-amount *ngIf="(network$ | async) !== 'liquid' && (network$ | async) !== 'liquidtestnet'; else liquidAmount" [satoshis]="transaction.value" digitsInfo="1.2-4" [noFiat]="true"></app-amount><ng-template #liquidAmount i18n="shared.confidential">Confidential</ng-template></td> | 
					
						
							|  |  |  |                 <td class="table-cell-fiat" *ngIf="(network$ | async) === ''" ><app-fiat [value]="transaction.value" digitsInfo="1.0-0"></app-fiat></td> | 
					
						
							| 
									
										
										
										
											2023-06-15 15:17:32 -04:00
										 |  |  |                 <td class="table-cell-fees"><app-fee-rate [fee]="transaction.fee" [weight]="transaction.vsize * 4"></app-fee-rate></td> | 
					
						
							| 
									
										
										
										
											2022-06-16 09:17:44 +02:00
										 |  |  |               </tr> | 
					
						
							|  |  |  |             </tbody> | 
					
						
							|  |  |  |           </table> | 
					
						
							|  |  |  |           <div class=""> </div> | 
					
						
							|  |  |  |         </div> | 
					
						
							|  |  |  |       </div> | 
					
						
							|  |  |  |     </div> | 
					
						
							|  |  |  |   </div> | 
					
						
							| 
									
										
										
										
											2020-09-22 12:50:12 +07:00
										 |  |  | </div> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-02-12 00:15:13 +04:00
										 |  |  | <ng-template #loadingAssetsTable> | 
					
						
							|  |  |  |   <table class="table table-borderless table-striped asset-table"> | 
					
						
							|  |  |  |     <tbody> | 
					
						
							| 
									
										
										
										
											2022-02-13 00:46:42 +04:00
										 |  |  |       <tr *ngFor="let i of [1,2,3,4]"> | 
					
						
							| 
									
										
										
										
											2022-02-12 00:15:13 +04:00
										 |  |  |         <td class="asset-icon"> | 
					
						
							|  |  |  |           <div class="skeleton-loader skeleton-loader-transactions"></div> | 
					
						
							|  |  |  |         </td> | 
					
						
							|  |  |  |         <td class="asset-title"> | 
					
						
							|  |  |  |           <div class="skeleton-loader skeleton-loader-transactions"></div> | 
					
						
							| 
									
										
										
										
											2022-02-13 00:46:42 +04:00
										 |  |  |         </td> | 
					
						
							|  |  |  |         <td class="asset-title d-none d-md-table-cell"> | 
					
						
							|  |  |  |           <div class="skeleton-loader skeleton-loader-transactions"></div> | 
					
						
							|  |  |  |         </td> | 
					
						
							|  |  |  |         <td class="asset-title"> | 
					
						
							|  |  |  |           <div class="skeleton-loader skeleton-loader-transactions"></div> | 
					
						
							| 
									
										
										
										
											2022-02-12 00:15:13 +04:00
										 |  |  |         </td> | 
					
						
							|  |  |  |       </tr> | 
					
						
							|  |  |  |     </tbody> | 
					
						
							|  |  |  |   </table> | 
					
						
							|  |  |  | </ng-template> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-26 20:47:08 -03:00
										 |  |  | <ng-template #loadingTransactions> | 
					
						
							|  |  |  |   <div class="skeleton-loader skeleton-loader-transactions"></div> | 
					
						
							|  |  |  | </ng-template> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-22 12:50:12 +07:00
										 |  |  | <ng-template #loading> | 
					
						
							|  |  |  |   <div class="skeleton-loader"></div> | 
					
						
							| 
									
										
										
										
											2020-09-26 02:11:30 +07:00
										 |  |  | </ng-template> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-26 20:47:08 -03:00
										 |  |  | <ng-template #loadingbig> | 
					
						
							|  |  |  |   <span class="skeleton-loader skeleton-loader-big" ></span> | 
					
						
							| 
									
										
										
										
											2021-01-12 16:41:54 +07:00
										 |  |  | </ng-template> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-26 02:11:30 +07:00
										 |  |  | <ng-template #emptyBlock> | 
					
						
							| 
									
										
										
										
											2021-06-06 17:07:04 -03:00
										 |  |  |   <div class="col"> | 
					
						
							| 
									
										
										
										
											2020-09-26 02:11:30 +07:00
										 |  |  | 
 | 
					
						
							|  |  |  |   </div> | 
					
						
							| 
									
										
										
										
											2020-10-11 19:25:38 +09:00
										 |  |  | </ng-template> | 
					
						
							| 
									
										
										
										
											2020-10-27 02:58:29 +07:00
										 |  |  | 
 | 
					
						
							|  |  |  | <ng-template #mempoolTable let-mempoolInfoData> | 
					
						
							| 
									
										
										
										
											2021-05-03 10:11:30 -03:00
										 |  |  |   <div class="mempool-info-data"> | 
					
						
							|  |  |  |     <div class="item"> | 
					
						
							| 
									
										
										
										
											2023-07-19 11:06:28 +09:00
										 |  |  |       <h5 *ngIf="!mempoolInfoData.value || mempoolInfoData.value.memPoolInfo.mempoolminfee === mempoolInfoData.value.memPoolInfo.minrelaytxfee || (stateService.env.BASE_MODULE === 'liquid' && mempoolInfoData.value.memPoolInfo.mempoolminfee === 0.000001) else purgingText" class="card-title" i18n="dashboard.minimum-fee|Minimum mempool fee">Minimum fee</h5> | 
					
						
							| 
									
										
										
										
											2021-05-03 10:11:30 -03:00
										 |  |  |       <ng-template #purgingText><h5 class="card-title" i18n="dashboard.purging|Purgin below fee">Purging</h5></ng-template> | 
					
						
							| 
									
										
										
										
											2021-07-26 20:47:08 -03:00
										 |  |  |       <p class="card-text" *ngIf="(isLoadingWebSocket$ | async) === false && mempoolInfoData.value; else loading"> | 
					
						
							| 
									
										
										
										
											2023-07-19 11:06:28 +09:00
										 |  |  |         <ng-template [ngIf]="mempoolInfoData.value.memPoolInfo.mempoolminfee !== mempoolInfoData.value.memPoolInfo.minrelaytxfee">< </ng-template><app-fee-rate [fee]="mempoolInfoData.value.memPoolInfo.mempoolminfee * 100000"></app-fee-rate> | 
					
						
							| 
									
										
										
										
											2021-05-03 10:11:30 -03:00
										 |  |  |       </p> | 
					
						
							|  |  |  |     </div> | 
					
						
							|  |  |  |     <div class="item"> | 
					
						
							|  |  |  |       <h5 class="card-title" i18n="dashboard.unconfirmed|Unconfirmed count">Unconfirmed</h5> | 
					
						
							| 
									
										
										
										
											2021-07-26 20:47:08 -03:00
										 |  |  |       <p class="card-text" *ngIf="(isLoadingWebSocket$ | async) === false && mempoolInfoData.value; else loading"> | 
					
						
							| 
									
										
										
										
											2021-05-03 10:11:30 -03:00
										 |  |  |         {{ mempoolInfoData.value.memPoolInfo.size | number }} <span i18n="dashboard.txs">TXs</span> | 
					
						
							|  |  |  |       </p> | 
					
						
							|  |  |  |     </div> | 
					
						
							|  |  |  |     <div class="item bar"> | 
					
						
							|  |  |  |       <h5 class="card-title" i18n="dashboard.memory-usage|Memory usage">Memory usage</h5> | 
					
						
							| 
									
										
										
										
											2021-07-26 20:47:08 -03:00
										 |  |  |       <div class="card-text" *ngIf="(isLoadingWebSocket$ | async) === false && mempoolInfoData.value; else loadingbig"> | 
					
						
							| 
									
										
										
										
											2021-05-03 10:11:30 -03:00
										 |  |  |         <div class="progress"> | 
					
						
							|  |  |  |           <div class="progress-bar {{ mempoolInfoData.value.mempoolSizeProgress }}" role="progressbar" [ngStyle]="{'width': (mempoolInfoData.value.memPoolInfo.usage / mempoolInfoData.value.memPoolInfo.maxmempool * 100) + '%' }"> </div> | 
					
						
							| 
									
										
										
										
											2023-09-28 15:48:37 +01:00
										 |  |  |           <div class="progress-text">‎<span [innerHTML]="mempoolInfoData.value.memPoolInfo.usage | bytes : 2 : 'B' : null : false : 3"></span> / <span [innerHTML]="mempoolInfoData.value.memPoolInfo.maxmempool | bytes"></span></div> | 
					
						
							| 
									
										
										
										
											2021-01-15 21:21:53 +07:00
										 |  |  |         </div> | 
					
						
							| 
									
										
										
										
											2021-05-03 10:11:30 -03:00
										 |  |  |       </div> | 
					
						
							|  |  |  |     </div> | 
					
						
							|  |  |  |   </div> | 
					
						
							| 
									
										
										
										
											2020-10-27 02:58:29 +07:00
										 |  |  | </ng-template> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-25 03:13:07 +04:00
										 |  |  | <ng-template #lbtcPegs let-mempoolInfoData> | 
					
						
							|  |  |  |   <div class="mempool-info-data"> | 
					
						
							|  |  |  |     <div class="item"> | 
					
						
							|  |  |  |       <h5 class="card-title" i18n="dashboard.lbtc-pegs-in-circulation">L-BTC in circulation</h5> | 
					
						
							|  |  |  |       <ng-container *ngIf="(liquidPegsMonth$ | async) as liquidPegsMonth; else loadingTransactions"> | 
					
						
							|  |  |  |         <p class="card-text">{{ liquidPegsMonth.series.slice(-1)[0] | number: '1.2-2' }} <span>L-BTC</span></p> | 
					
						
							|  |  |  |       </ng-container> | 
					
						
							|  |  |  |     </div> | 
					
						
							|  |  |  |   </div> | 
					
						
							|  |  |  | </ng-template> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-27 02:58:29 +07:00
										 |  |  | <ng-template #txPerSecond let-mempoolInfoData> | 
					
						
							| 
									
										
											  
											
												Implement i18n support in frontend using Angular + Transifex + NGINX
This PR adds basic i18n support into the mempool frontend, together with
a smooth workflow for developers and translators to collaborate:
* Using the existing @angular/localize module, developers add i18n
metadata to any frontend strings their new features or changes modify
* Using the new npm script `i18n-extract-from-source`, developers
extract the i18n data from source code into `src/locale/messages.xlf`
* After pushing the updated `src/locale/messages.xlf` to GitHub, the
Transifex service will update its database from the new source data
* Using the Transifex website UI, translators can work together to
translate all the mempool frontend strings into their native languages
* Using the new npm script `i18n-pull-from-transifex`, developers can
pull in completed translations from Transifex, and commit them into git.
This flow requires an API key from Transifex, which can be obtained at
https://www.transifex.com/user/settings/api/ to be used with the python
script installed by `pip install transifex-client` - after preparing
these, run the npm script which will ask you for the API key the first
time. When downloading is complete, you can test building the frontend,
and if successful, commit the new strings files into git.
This PR implements a new locale selector in the footer of the homepage
dashboard, and includes WIP translations for the following languages:
* Czech (cs)
* German (de)
* Japanese (ja)
* Norwegian (nn)
* Spanish (es)
* Swedish (sv)
* Ukrainian (uk)
* Persian (fa)
* Portugese (pt)
* Turkish (tr)
* Dutch (nl)
* French (fr)
* Chinese (zh)
* Slovenian (sl)
* Korean (ko)
* Polish (pl)
The user-agent's `Accept-Language` header is used to automatically
detect their preferred language, which can be manually overriden by the
pull-down selector, which saves their preference to a cookie, which is
used by nginx to serve the correct HTML bundle to the user.
Remaining tasks include adding i18n metadata for strings in the Bisq and
Liquid frontend code, mouseover hover tooltip strings, hard-coded og
metadata inside HTML templates, and many other places. This will be done
in a separate PR.
When upgrading to add i18n support, mempool instance operators must take
care to install the new nginx.conf and nginx-mempool.conf files, and
tweak for their specific site configuration.
Fixes #81
											
										 
											2020-12-02 04:19:33 +09:00
										 |  |  |   <h5 class="card-title" i18n="dashboard.incoming-transactions">Incoming transactions</h5> | 
					
						
							| 
									
										
										
										
											2021-07-26 20:47:08 -03:00
										 |  |  |   <ng-template [ngIf]="(isLoadingWebSocket$ | async) === false && mempoolInfoData.value" [ngIfElse]="loadingTransactions"> | 
					
						
							| 
									
										
										
										
											2021-01-05 18:57:06 +07:00
										 |  |  |     <span *ngIf="(mempoolLoadingStatus$ | async) !== 100; else inSync"> | 
					
						
							|  |  |  |        <span class="badge badge-pill badge-warning"><ng-container i18n="dashboard.backend-is-synchronizing">Backend is synchronizing</ng-container> ({{ mempoolLoadingStatus$ | async }}%)</span> | 
					
						
							| 
									
										
										
										
											2020-10-27 02:58:29 +07:00
										 |  |  |     </span> | 
					
						
							|  |  |  |     <ng-template #inSync> | 
					
						
							| 
									
										
										
										
											2021-06-06 17:07:04 -03:00
										 |  |  |       <div class="progress inc-tx-progress-bar"> | 
					
						
							| 
									
										
										
										
											2023-03-04 15:19:56 +09:00
										 |  |  |         <div class="progress-bar {{ mempoolInfoData.value.progressColor }}" role="progressbar" [ngStyle]="{'width': mempoolInfoData.value.progressWidth}"> </div> | 
					
						
							| 
									
										
										
										
											2023-06-15 18:56:34 -04:00
										 |  |  |         <div *only-vsize class="progress-text">‎{{ mempoolInfoData.value.vBytesPerSecond | ceil | number }} <ng-container i18n="shared.vbytes-per-second|vB/s">vB/s</ng-container></div> | 
					
						
							|  |  |  |         <div *only-weight class="progress-text">‎{{ mempoolInfoData.value.vBytesPerSecond * 4 | ceil | number }} <ng-container i18n="shared.weight-per-second|WU/s">WU/s</ng-container></div> | 
					
						
							| 
									
										
										
										
											2020-10-27 02:58:29 +07:00
										 |  |  |       </div> | 
					
						
							|  |  |  |     </ng-template> | 
					
						
							|  |  |  |   </ng-template> | 
					
						
							|  |  |  | </ng-template> |