Merge branch 'master' into knorrium/fix_liquid_tests
This commit is contained in:
		
						commit
						844a86f997
					
				@ -44,7 +44,7 @@ export class AcceleratorDashboardComponent implements OnInit {
 | 
				
			|||||||
    @Inject(PLATFORM_ID) private platformId: Object,
 | 
					    @Inject(PLATFORM_ID) private platformId: Object,
 | 
				
			||||||
  ) {
 | 
					  ) {
 | 
				
			||||||
    this.webGlEnabled = this.stateService.isBrowser && detectWebGL();
 | 
					    this.webGlEnabled = this.stateService.isBrowser && detectWebGL();
 | 
				
			||||||
    this.seoService.setTitle($localize`:@@a681a4e2011bb28157689dbaa387de0dd0aa0c11:Accelerator Dashboard`);
 | 
					    this.seoService.setTitle($localize`:@@6b867dc61c6a92f3229f1950f9f2d414790cce95:Accelerator Dashboard`);
 | 
				
			||||||
    this.ogService.setManualOgImage('accelerator.jpg');
 | 
					    this.ogService.setManualOgImage('accelerator.jpg');
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -69,7 +69,7 @@ export class AddressPreviewComponent implements OnInit, OnDestroy {
 | 
				
			|||||||
            this.addressString = this.addressString.toLowerCase();
 | 
					            this.addressString = this.addressString.toLowerCase();
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
          this.seoService.setTitle($localize`:@@address.component.browser-title:Address: ${this.addressString}:INTERPOLATION:`);
 | 
					          this.seoService.setTitle($localize`:@@address.component.browser-title:Address: ${this.addressString}:INTERPOLATION:`);
 | 
				
			||||||
          this.seoService.setDescription($localize`:@@meta.description.bitcoin.address:See mempool transactions, confirmed transactions, balance, and more for ${this.stateService.network==='liquid'||this.stateService.network==='liquidtestnet'?'Liquid':'Bitcoin'} ${seoDescriptionNetwork(this.stateService.network)} address ${this.addressString}:INTERPOLATION:.`);
 | 
					          this.seoService.setDescription($localize`:@@meta.description.bitcoin.address:See mempool transactions, confirmed transactions, balance, and more for ${this.stateService.network==='liquid'||this.stateService.network==='liquidtestnet'?'Liquid':'Bitcoin'}${seoDescriptionNetwork(this.stateService.network)} address ${this.addressString}:INTERPOLATION:.`);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          return (this.addressString.match(/04[a-fA-F0-9]{128}|(02|03)[a-fA-F0-9]{64}/)
 | 
					          return (this.addressString.match(/04[a-fA-F0-9]{128}|(02|03)[a-fA-F0-9]{64}/)
 | 
				
			||||||
              ? this.electrsApiService.getPubKeyAddress$(this.addressString)
 | 
					              ? this.electrsApiService.getPubKeyAddress$(this.addressString)
 | 
				
			||||||
 | 
				
			|||||||
@ -105,6 +105,7 @@ export class AssetComponent implements OnInit, OnDestroy {
 | 
				
			|||||||
          if (!this.assetContract) {
 | 
					          if (!this.assetContract) {
 | 
				
			||||||
            this.assetContract = [null, '?', 'Unknown', 0];
 | 
					            this.assetContract = [null, '?', 'Unknown', 0];
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
 | 
					          this.seoService.setDescription($localize`:@@meta.description.liquid.asset:Browse an overview of the Liquid asset ${this.assetContract[2]}:INTERPOLATION: (${this.assetContract[1]}:INTERPOLATION:): see issued amount, burned amount, circulating amount, related transactions, and more.`);
 | 
				
			||||||
          this.blindedIssuance = this.asset.chain_stats.has_blinded_issuances || this.asset.mempool_stats.has_blinded_issuances;
 | 
					          this.blindedIssuance = this.asset.chain_stats.has_blinded_issuances || this.asset.mempool_stats.has_blinded_issuances;
 | 
				
			||||||
          this.isNativeAsset = asset.asset_id === this.nativeAssetId;
 | 
					          this.isNativeAsset = asset.asset_id === this.nativeAssetId;
 | 
				
			||||||
          this.updateChainStats();
 | 
					          this.updateChainStats();
 | 
				
			||||||
 | 
				
			|||||||
@ -395,7 +395,7 @@ export class BlockComponent implements OnInit, OnDestroy {
 | 
				
			|||||||
          for (const txid of blockAudit.addedTxs) {
 | 
					          for (const txid of blockAudit.addedTxs) {
 | 
				
			||||||
            isAdded[txid] = true;
 | 
					            isAdded[txid] = true;
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
          for (const txid of blockAudit.prioritizedTxs) {
 | 
					          for (const txid of blockAudit.prioritizedTxs || []) {
 | 
				
			||||||
            isPrioritized[txid] = true;
 | 
					            isPrioritized[txid] = true;
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
          for (const txid of blockAudit.missingTxs) {
 | 
					          for (const txid of blockAudit.missingTxs) {
 | 
				
			||||||
 | 
				
			|||||||
@ -64,6 +64,15 @@ export class BlocksList implements OnInit {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    if (!this.widget) {
 | 
					    if (!this.widget) {
 | 
				
			||||||
      this.websocketService.want(['blocks']);
 | 
					      this.websocketService.want(['blocks']);
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					      this.seoService.setTitle($localize`:@@meta.title.blocks-list:Blocks`);
 | 
				
			||||||
 | 
					      this.ogService.setManualOgImage('recent-blocks.jpg');
 | 
				
			||||||
 | 
					      if( this.stateService.network==='liquid'||this.stateService.network==='liquidtestnet' ) {
 | 
				
			||||||
 | 
					        this.seoService.setDescription($localize`:@@meta.description.liquid.blocks:See the most recent Liquid${seoDescriptionNetwork(this.stateService.network)} blocks along with basic stats such as block height, block size, and more.`);
 | 
				
			||||||
 | 
					      } else {
 | 
				
			||||||
 | 
					        this.seoService.setDescription($localize`:@@meta.description.bitcoin.blocks:See the most recent Bitcoin${seoDescriptionNetwork(this.stateService.network)} blocks along with basic stats such as block height, block reward, block size, and more.`);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      this.blocksCountInitializedSubscription = combineLatest([this.blocksCountInitialized$, this.route.queryParams]).pipe(
 | 
					      this.blocksCountInitializedSubscription = combineLatest([this.blocksCountInitialized$, this.route.queryParams]).pipe(
 | 
				
			||||||
        filter(([blocksCountInitialized, _]) => blocksCountInitialized),
 | 
					        filter(([blocksCountInitialized, _]) => blocksCountInitialized),
 | 
				
			||||||
        tap(([_, params]) => {
 | 
					        tap(([_, params]) => {
 | 
				
			||||||
@ -97,17 +106,6 @@ export class BlocksList implements OnInit {
 | 
				
			|||||||
    this.skeletonLines = this.widget === true ? [...Array(6).keys()] : [...Array(15).keys()];
 | 
					    this.skeletonLines = this.widget === true ? [...Array(6).keys()] : [...Array(15).keys()];
 | 
				
			||||||
    this.paginationMaxSize = window.matchMedia('(max-width: 670px)').matches ? 3 : 5;
 | 
					    this.paginationMaxSize = window.matchMedia('(max-width: 670px)').matches ? 3 : 5;
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    if (!this.widget) {
 | 
					 | 
				
			||||||
      this.seoService.setTitle($localize`:@@m8a7b4bd44c0ac71b2e72de0398b303257f7d2f54:Blocks`);
 | 
					 | 
				
			||||||
      this.ogService.setManualOgImage('recent-blocks.jpg');
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    if( this.stateService.network==='liquid'||this.stateService.network==='liquidtestnet' ) {
 | 
					 | 
				
			||||||
      this.seoService.setDescription($localize`:@@meta.description.liquid.blocks:See the most recent Liquid${seoDescriptionNetwork(this.stateService.network)} blocks along with basic stats such as block height, block size, and more.`);
 | 
					 | 
				
			||||||
    } else {
 | 
					 | 
				
			||||||
      this.seoService.setDescription($localize`:@@meta.description.bitcoin.blocks:See the most recent Bitcoin${seoDescriptionNetwork(this.stateService.network)} blocks along with basic stats such as block height, block reward, block size, and more.`);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    this.blocks$ = combineLatest([
 | 
					    this.blocks$ = combineLatest([
 | 
				
			||||||
      this.fromHeightSubject.pipe(
 | 
					      this.fromHeightSubject.pipe(
 | 
				
			||||||
        filter(fromBlockHeight => fromBlockHeight !== this.lastBlockHeightFetched),
 | 
					        filter(fromBlockHeight => fromBlockHeight !== this.lastBlockHeightFetched),
 | 
				
			||||||
 | 
				
			|||||||
@ -72,6 +72,7 @@ export class HashrateChartPoolsComponent implements OnInit {
 | 
				
			|||||||
    let firstRun = true;
 | 
					    let firstRun = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    this.seoService.setTitle($localize`:@@mining.pools-historical-dominance:Pools Historical Dominance`);
 | 
					    this.seoService.setTitle($localize`:@@mining.pools-historical-dominance:Pools Historical Dominance`);
 | 
				
			||||||
 | 
					    this.seoService.setDescription($localize`:@@meta.descriptions.bitcoin.graphs.hashrate-pools:See Bitcoin mining pool dominance visualized over time: see how top mining pools' share of total hashrate has fluctuated over time.`);
 | 
				
			||||||
    this.miningWindowPreference = this.miningService.getDefaultTimespan('6m');
 | 
					    this.miningWindowPreference = this.miningService.getDefaultTimespan('6m');
 | 
				
			||||||
    this.radioGroupForm = this.formBuilder.group({ dateSpan: this.miningWindowPreference });
 | 
					    this.radioGroupForm = this.formBuilder.group({ dateSpan: this.miningWindowPreference });
 | 
				
			||||||
    this.radioGroupForm.controls.dateSpan.setValue(this.miningWindowPreference);
 | 
					    this.radioGroupForm.controls.dateSpan.setValue(this.miningWindowPreference);
 | 
				
			||||||
 | 
				
			|||||||
@ -57,10 +57,10 @@
 | 
				
			|||||||
          <span class="badge badge-pill badge-warning beta" i18n="beta">beta</span>
 | 
					          <span class="badge badge-pill badge-warning beta" i18n="beta">beta</span>
 | 
				
			||||||
        </a>
 | 
					        </a>
 | 
				
			||||||
      </li>
 | 
					      </li>
 | 
				
			||||||
      <li class="nav-item" routerLinkActive="active" [routerLinkActiveOptions]="{exact: true}" id="btn-pools" *ngIf="stateService.env.MINING_DASHBOARD">
 | 
					      <li class="nav-item" routerLinkActive="active" [routerLinkActiveOptions]="{exact: true}" id="btn-mining" *ngIf="stateService.env.MINING_DASHBOARD">
 | 
				
			||||||
        <a class="nav-link" [routerLink]="['/mining' | relativeUrl]" (click)="collapse()"><fa-icon [icon]="['fas', 'hammer']" [fixedWidth]="true" i18n-title="mining.mining-dashboard" title="Mining Dashboard"></fa-icon></a>
 | 
					        <a class="nav-link" [routerLink]="['/mining' | relativeUrl]" (click)="collapse()"><fa-icon [icon]="['fas', 'hammer']" [fixedWidth]="true" i18n-title="mining.mining-dashboard" title="Mining Dashboard"></fa-icon></a>
 | 
				
			||||||
      </li>
 | 
					      </li>
 | 
				
			||||||
      <li class="nav-item" routerLinkActive="active" [routerLinkActiveOptions]="{exact: true}" id="btn-pools" *ngIf="stateService.env.LIGHTNING">
 | 
					      <li class="nav-item" routerLinkActive="active" [routerLinkActiveOptions]="{exact: true}" id="btn-lightning" *ngIf="stateService.env.LIGHTNING">
 | 
				
			||||||
        <a class="nav-link" [routerLink]="['/lightning' | relativeUrl]" (click)="collapse()"><fa-icon [icon]="['fas', 'bolt']" [fixedWidth]="true" i18n-title="master-page.lightning" title="Lightning Explorer"></fa-icon>
 | 
					        <a class="nav-link" [routerLink]="['/lightning' | relativeUrl]" (click)="collapse()"><fa-icon [icon]="['fas', 'bolt']" [fixedWidth]="true" i18n-title="master-page.lightning" title="Lightning Explorer"></fa-icon>
 | 
				
			||||||
        </a>
 | 
					        </a>
 | 
				
			||||||
      </li>
 | 
					      </li>
 | 
				
			||||||
 | 
				
			|||||||
@ -20,15 +20,14 @@ export class MiningDashboardComponent implements OnInit, AfterViewInit {
 | 
				
			|||||||
    private websocketService: WebsocketService,
 | 
					    private websocketService: WebsocketService,
 | 
				
			||||||
    private stateService: StateService,
 | 
					    private stateService: StateService,
 | 
				
			||||||
    private router: Router
 | 
					    private router: Router
 | 
				
			||||||
  ) {
 | 
					  ) { }
 | 
				
			||||||
    this.seoService.setTitle($localize`:@@a681a4e2011bb28157689dbaa387de0dd0aa0c11:Mining Dashboard`);
 | 
					 | 
				
			||||||
    this.seoService.setDescription($localize`:@@meta.description.mining.dashboard:Get real-time Bitcoin mining stats like hashrate, difficulty adjustment, block rewards, pool dominance, and more.`);
 | 
					 | 
				
			||||||
    this.ogService.setManualOgImage('mining.jpg');
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ngOnInit(): void {
 | 
					  ngOnInit(): void {
 | 
				
			||||||
    this.onResize();
 | 
					    this.onResize();
 | 
				
			||||||
    this.websocketService.want(['blocks', 'mempool-blocks', 'stats']);
 | 
					    this.websocketService.want(['blocks', 'mempool-blocks', 'stats']);
 | 
				
			||||||
 | 
					    this.seoService.setTitle($localize`:@@a681a4e2011bb28157689dbaa387de0dd0aa0c11:Mining Dashboard`);
 | 
				
			||||||
 | 
					    this.seoService.setDescription($localize`:@@meta.description.mining.dashboard:Get real-time Bitcoin mining stats like hashrate, difficulty adjustment, block rewards, pool dominance, and more.`);
 | 
				
			||||||
 | 
					    this.ogService.setManualOgImage('mining.jpg');
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ngAfterViewInit(): void {
 | 
					  ngAfterViewInit(): void {
 | 
				
			||||||
 | 
				
			|||||||
@ -211,23 +211,23 @@ export class TimeComponent implements OnInit, OnChanges, OnDestroy {
 | 
				
			|||||||
      case 'before':
 | 
					      case 'before':
 | 
				
			||||||
      if (number === 1) {
 | 
					      if (number === 1) {
 | 
				
			||||||
        switch (unit) { // singular (1 day)
 | 
					        switch (unit) { // singular (1 day)
 | 
				
			||||||
          case 'year': return $localize`:@@time-span:${dateStrings.i18nYear}:DATE: before`; break;
 | 
					          case 'year': return $localize`:@@time-before:${dateStrings.i18nYear}:DATE: before`; break;
 | 
				
			||||||
          case 'month': return $localize`:@@time-span:${dateStrings.i18nMonth}:DATE: before`; break;
 | 
					          case 'month': return $localize`:@@time-before:${dateStrings.i18nMonth}:DATE: before`; break;
 | 
				
			||||||
          case 'week': return $localize`:@@time-span:${dateStrings.i18nWeek}:DATE: before`; break;
 | 
					          case 'week': return $localize`:@@time-before:${dateStrings.i18nWeek}:DATE: before`; break;
 | 
				
			||||||
          case 'day': return $localize`:@@time-span:${dateStrings.i18nDay}:DATE: before`; break;
 | 
					          case 'day': return $localize`:@@time-before:${dateStrings.i18nDay}:DATE: before`; break;
 | 
				
			||||||
          case 'hour': return $localize`:@@time-span:${dateStrings.i18nHour}:DATE: before`; break;
 | 
					          case 'hour': return $localize`:@@time-before:${dateStrings.i18nHour}:DATE: before`; break;
 | 
				
			||||||
          case 'minute': return $localize`:@@time-span:${dateStrings.i18nMinute}:DATE: before`; break;
 | 
					          case 'minute': return $localize`:@@time-before:${dateStrings.i18nMinute}:DATE: before`; break;
 | 
				
			||||||
          case 'second': return $localize`:@@time-span:${dateStrings.i18nSecond}:DATE: before`; break;
 | 
					          case 'second': return $localize`:@@time-before:${dateStrings.i18nSecond}:DATE: before`; break;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      } else {
 | 
					      } else {
 | 
				
			||||||
        switch (unit) { // plural (2 days)
 | 
					        switch (unit) { // plural (2 days)
 | 
				
			||||||
          case 'year': return $localize`:@@time-span:${dateStrings.i18nYears}:DATE: before`; break;
 | 
					          case 'year': return $localize`:@@time-before:${dateStrings.i18nYears}:DATE: before`; break;
 | 
				
			||||||
          case 'month': return $localize`:@@time-span:${dateStrings.i18nMonths}:DATE: before`; break;
 | 
					          case 'month': return $localize`:@@time-before:${dateStrings.i18nMonths}:DATE: before`; break;
 | 
				
			||||||
          case 'week': return $localize`:@@time-span:${dateStrings.i18nWeeks}:DATE: before`; break;
 | 
					          case 'week': return $localize`:@@time-before:${dateStrings.i18nWeeks}:DATE: before`; break;
 | 
				
			||||||
          case 'day': return $localize`:@@time-span:${dateStrings.i18nDays}:DATE: before`; break;
 | 
					          case 'day': return $localize`:@@time-before:${dateStrings.i18nDays}:DATE: before`; break;
 | 
				
			||||||
          case 'hour': return $localize`:@@time-span:${dateStrings.i18nHours}:DATE: before`; break;
 | 
					          case 'hour': return $localize`:@@time-before:${dateStrings.i18nHours}:DATE: before`; break;
 | 
				
			||||||
          case 'minute': return $localize`:@@time-span:${dateStrings.i18nMinutes}:DATE: before`; break;
 | 
					          case 'minute': return $localize`:@@time-before:${dateStrings.i18nMinutes}:DATE: before`; break;
 | 
				
			||||||
          case 'second': return $localize`:@@time-span:${dateStrings.i18nSeconds}:DATE: before`; break;
 | 
					          case 'second': return $localize`:@@time-before:${dateStrings.i18nSeconds}:DATE: before`; break;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      break;
 | 
					      break;
 | 
				
			||||||
 | 
				
			|||||||
@ -51,6 +51,7 @@ export class NodesPerISPChartComponent implements OnInit {
 | 
				
			|||||||
  ngOnInit(): void {
 | 
					  ngOnInit(): void {
 | 
				
			||||||
    if (!this.widget) {
 | 
					    if (!this.widget) {
 | 
				
			||||||
      this.seoService.setTitle($localize`:@@8573a1576789bd2c4faeaed23037c4917812c6cf:Lightning Nodes Per ISP`);
 | 
					      this.seoService.setTitle($localize`:@@8573a1576789bd2c4faeaed23037c4917812c6cf:Lightning Nodes Per ISP`);
 | 
				
			||||||
 | 
					      this.seoService.setDescription($localize`:@@meta.description.lightning.nodes-per-isp:Browse the top 100 ISPs hosting Lightning nodes along with stats like total number of nodes per ISP, aggregate BTC capacity per ISP, and more`);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    this.nodesPerAsObservable$ = combineLatest([
 | 
					    this.nodesPerAsObservable$ = combineLatest([
 | 
				
			||||||
 | 
				
			|||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user