Merge branch 'master' into hunicus/about-video

This commit is contained in:
wiz 2023-03-02 22:17:41 +09:00 committed by GitHub
commit b1e7bbcc3e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 68 additions and 44 deletions

View File

@ -15,7 +15,7 @@
<video style="width: 638px; height: 360px;" src="/resources/mempool-promo.mp4" poster="/resources/mempool-promo.jpg" controls loop playsinline [autoplay]="true" [muted]="true"></video> <video style="width: 638px; height: 360px;" src="/resources/mempool-promo.mp4" poster="/resources/mempool-promo.jpg" controls loop playsinline [autoplay]="true" [muted]="true"></video>
<div class="enterprise-sponsor"> <div class="enterprise-sponsor" id="enterprise-sponsors">
<h3 i18n="about.sponsors.enterprise.withRocket">Enterprise Sponsors 🚀</h3> <h3 i18n="about.sponsors.enterprise.withRocket">Enterprise Sponsors 🚀</h3>
<div class="wrapper"> <div class="wrapper">
<a href="https://spiral.xyz/" target="_blank" title="Spiral"> <a href="https://spiral.xyz/" target="_blank" title="Spiral">
@ -163,7 +163,7 @@
</div> </div>
</div> </div>
<div class="community-sponsor"> <div class="community-sponsor" id="community-sponsors">
<h3 i18n="about.sponsors.withHeart">Community Sponsors ❤️</h3> <h3 i18n="about.sponsors.withHeart">Community Sponsors ❤️</h3>
<div class="wrapper"> <div class="wrapper">
@ -177,7 +177,7 @@
</div> </div>
</div> </div>
<div class="community-integrations-sponsor"> <div class="community-integrations-sponsor" id="community-integrations">
<h3 i18n="about.community-integrations">Community Integrations</h3> <h3 i18n="about.community-integrations">Community Integrations</h3>
<div class="wrapper"> <div class="wrapper">
<a href="https://github.com/getumbrel/umbrel" target="_blank" title="Umbrel"> <a href="https://github.com/getumbrel/umbrel" target="_blank" title="Umbrel">
@ -271,7 +271,7 @@
</div> </div>
</div> </div>
<div class="alliances"> <div class="alliances" id="community-alliances">
<h3 i18n="about.alliances">Community Alliances</h3> <h3 i18n="about.alliances">Community Alliances</h3>
<div class="wrapper"> <div class="wrapper">
<a href="https://liquid.net/" title="Liquid Network"> <a href="https://liquid.net/" title="Liquid Network">
@ -287,7 +287,7 @@
</div> </div>
<ng-container *ngIf="translators$ | async | keyvalue as translators else loadingSponsors"> <ng-container *ngIf="translators$ | async | keyvalue as translators else loadingSponsors">
<div class="project-translators"> <div class="project-translators" id="project-translators">
<h3 i18n="about.translators">Project Translators</h3> <h3 i18n="about.translators">Project Translators</h3>
<div class="wrapper"> <div class="wrapper">
<ng-template ngFor let-translator [ngForOf]="translators"> <ng-template ngFor let-translator [ngForOf]="translators">
@ -301,7 +301,7 @@
</ng-container> </ng-container>
<ng-container *ngIf="allContributors$ | async as contributors else loadingSponsors"> <ng-container *ngIf="allContributors$ | async as contributors else loadingSponsors">
<div class="contributors"> <div class="contributors" id="project-contributors">
<h3 i18n="about.contributors">Project Contributors</h3> <h3 i18n="about.contributors">Project Contributors</h3>
<div class="wrapper"> <div class="wrapper">
<ng-template ngFor let-contributor [ngForOf]="contributors.regular"> <ng-template ngFor let-contributor [ngForOf]="contributors.regular">
@ -313,7 +313,7 @@
</div> </div>
</div> </div>
<div class="maintainers" *ngIf="contributors.core.length"> <div class="maintainers" *ngIf="contributors.core.length" id="project-members">
<h3 i18n="about.project_members">Project Members</h3> <h3 i18n="about.project_members">Project Members</h3>
<div class="wrapper"> <div class="wrapper">
<ng-template ngFor let-contributor [ngForOf]="contributors.core"> <ng-template ngFor let-contributor [ngForOf]="contributors.core">
@ -326,7 +326,7 @@
</div> </div>
</ng-container> </ng-container>
<div class="maintainers"> <div class="maintainers" id="project-maintainers">
<h3 i18n="about.maintainers">Project Maintainers</h3> <h3 i18n="about.maintainers">Project Maintainers</h3>
<div class="wrapper"> <div class="wrapper">
<a href="https://twitter.com/softsimon_" target="_blank" title="softsimon"> <a href="https://twitter.com/softsimon_" target="_blank" title="softsimon">

View File

@ -50,6 +50,7 @@
.maintainers { .maintainers {
margin-top: 68px; margin-top: 68px;
margin-bottom: 68px; margin-bottom: 68px;
scroll-margin: 30px;
} }
.maintainers { .maintainers {
@ -121,6 +122,7 @@
.project-translators, .project-translators,
.community-integrations-sponsor, .community-integrations-sponsor,
.maintainers { .maintainers {
scroll-margin: 30px;
.wrapper { .wrapper {
display: inline-block; display: inline-block;
a { a {

View File

@ -5,9 +5,10 @@ import { StateService } from '../../services/state.service';
import { Observable } from 'rxjs'; import { Observable } from 'rxjs';
import { ApiService } from '../../services/api.service'; import { ApiService } from '../../services/api.service';
import { IBackendInfo } from '../../interfaces/websocket.interface'; import { IBackendInfo } from '../../interfaces/websocket.interface';
import { Router } from '@angular/router'; import { Router, ActivatedRoute } from '@angular/router';
import { map } from 'rxjs/operators'; import { map, tap } from 'rxjs/operators';
import { ITranslators } from '../../interfaces/node-api.interface'; import { ITranslators } from '../../interfaces/node-api.interface';
import { DOCUMENT } from '@angular/common';
@Component({ @Component({
selector: 'app-about', selector: 'app-about',
@ -31,7 +32,9 @@ export class AboutComponent implements OnInit {
public stateService: StateService, public stateService: StateService,
private apiService: ApiService, private apiService: ApiService,
private router: Router, private router: Router,
private route: ActivatedRoute,
@Inject(LOCALE_ID) public locale: string, @Inject(LOCALE_ID) public locale: string,
@Inject(DOCUMENT) private document: Document,
) { } ) { }
ngOnInit() { ngOnInit() {
@ -39,17 +42,21 @@ export class AboutComponent implements OnInit {
this.seoService.setTitle($localize`:@@004b222ff9ef9dd4771b777950ca1d0e4cd4348a:About`); this.seoService.setTitle($localize`:@@004b222ff9ef9dd4771b777950ca1d0e4cd4348a:About`);
this.websocketService.want(['blocks']); this.websocketService.want(['blocks']);
this.sponsors$ = this.apiService.getDonation$(); this.sponsors$ = this.apiService.getDonation$()
.pipe(
tap(() => this.goToAnchor())
);
this.translators$ = this.apiService.getTranslators$() this.translators$ = this.apiService.getTranslators$()
.pipe( .pipe(
map((translators) => { map((translators) => {
for (const t in translators) { for (const t in translators) {
if (translators[t] === '') { if (translators[t] === '') {
delete translators[t] delete translators[t];
} }
} }
return translators; return translators;
}) }),
tap(() => this.goToAnchor())
); );
this.allContributors$ = this.apiService.getContributor$().pipe( this.allContributors$ = this.apiService.getContributor$().pipe(
map((contributors) => { map((contributors) => {
@ -57,9 +64,24 @@ export class AboutComponent implements OnInit {
regular: contributors.filter((user) => !user.core_constributor), regular: contributors.filter((user) => !user.core_constributor),
core: contributors.filter((user) => user.core_constributor), core: contributors.filter((user) => user.core_constributor),
}; };
}) }),
tap(() => this.goToAnchor())
); );
} }
ngAfterViewInit() {
this.goToAnchor();
}
goToAnchor() {
setTimeout(() => {
if (this.route.snapshot.fragment) {
if (this.document.getElementById(this.route.snapshot.fragment)) {
this.document.getElementById(this.route.snapshot.fragment).scrollIntoView({behavior: 'smooth'});
}
}
}, 1);
}
sponsor(): void { sponsor(): void {
if (this.officialMempoolSpace && this.stateService.env.BASE_MODULE === 'mempool') { if (this.officialMempoolSpace && this.stateService.env.BASE_MODULE === 'mempool') {

View File

@ -39,7 +39,7 @@
<div class="doc-content"> <div class="doc-content">
<p class="doc-welcome-note">Below is a reference for the {{ network.val === '' ? 'Bitcoin' : network.val.charAt(0).toUpperCase() + network.val.slice(1) }} <ng-container i18n="api-docs.title">REST API service</ng-container>.</p> <p class="doc-welcome-note">Below is a reference for the {{ network.val === '' ? 'Bitcoin' : network.val.charAt(0).toUpperCase() + network.val.slice(1) }} <ng-container i18n="api-docs.title">REST API service</ng-container>.</p>
<p class="doc-welcome-note api-note" *ngIf="officialMempoolInstance">Note that we enforce rate limits. If you exceed these limits, you will get a polite error encouraging you to run your own Mempool instance. If you repeatedly exceed the limits, you may be banned from accessing the service altogether.</p> <p class="doc-welcome-note api-note" *ngIf="officialMempoolInstance">Note that we enforce rate limits. If you exceed these limits, you will get an HTTP 429 error. If you repeatedly exceed the limits, you may be banned from accessing the service altogether. Consider an <a [routerLink]="['/enterprise']">enterprise sponsorship</a> if you need higher API limits.</p>
<div class="doc-item-container" *ngFor="let item of restDocs"> <div class="doc-item-container" *ngFor="let item of restDocs">
<h3 *ngIf="( item.type === 'category' ) && ( item.showConditions.indexOf(network.val) > -1 )">{{ item.title }}</h3> <h3 *ngIf="( item.type === 'category' ) && ( item.showConditions.indexOf(network.val) > -1 )">{{ item.title }}</h3>

View File

@ -161,28 +161,7 @@ export class NodesNetworksChartComponent implements OnInit {
{ {
zlevel: 1, zlevel: 1,
yAxisIndex: 0, yAxisIndex: 0,
name: $localize`Reachable on Clearnet Only`, name: $localize`Clearnet and Darknet`,
showSymbol: false,
symbol: 'none',
data: data.clearnet_nodes,
type: 'line',
lineStyle: {
width: 2,
},
areaStyle: {
opacity: 0.5,
},
stack: 'Total',
color: new graphic.LinearGradient(0, 0.75, 0, 1, [
{ offset: 0, color: '#FFB300' },
{ offset: 1, color: '#FFB300AA' },
]),
smooth: false,
},
{
zlevel: 1,
yAxisIndex: 0,
name: $localize`Reachable on Clearnet and Darknet`,
showSymbol: false, showSymbol: false,
symbol: 'none', symbol: 'none',
data: data.clearnet_tor_nodes, data: data.clearnet_tor_nodes,
@ -203,7 +182,28 @@ export class NodesNetworksChartComponent implements OnInit {
{ {
zlevel: 1, zlevel: 1,
yAxisIndex: 0, yAxisIndex: 0,
name: $localize`Reachable on Darknet Only`, name: $localize`Clearnet (IPv4, IPv6)`,
showSymbol: false,
symbol: 'none',
data: data.clearnet_nodes,
type: 'line',
lineStyle: {
width: 2,
},
areaStyle: {
opacity: 0.5,
},
stack: 'Total',
color: new graphic.LinearGradient(0, 0.75, 0, 1, [
{ offset: 0, color: '#FFB300' },
{ offset: 1, color: '#FFB300AA' },
]),
smooth: false,
},
{
zlevel: 1,
yAxisIndex: 0,
name: $localize`Darknet Only (Tor, I2P, cjdns)`,
showSymbol: false, showSymbol: false,
symbol: 'none', symbol: 'none',
data: data.tor_nodes, data: data.tor_nodes,
@ -284,7 +284,7 @@ export class NodesNetworksChartComponent implements OnInit {
padding: 10, padding: 10,
data: [ data: [
{ {
name: $localize`Reachable on Darknet Only`, name: $localize`Darknet Only (Tor, I2P, cjdns)`,
inactiveColor: 'rgb(110, 112, 121)', inactiveColor: 'rgb(110, 112, 121)',
textStyle: { textStyle: {
color: 'white', color: 'white',
@ -292,7 +292,7 @@ export class NodesNetworksChartComponent implements OnInit {
icon: 'roundRect', icon: 'roundRect',
}, },
{ {
name: $localize`Reachable on Clearnet and Darknet`, name: $localize`Clearnet (IPv4, IPv6)`,
inactiveColor: 'rgb(110, 112, 121)', inactiveColor: 'rgb(110, 112, 121)',
textStyle: { textStyle: {
color: 'white', color: 'white',
@ -300,7 +300,7 @@ export class NodesNetworksChartComponent implements OnInit {
icon: 'roundRect', icon: 'roundRect',
}, },
{ {
name: $localize`Reachable on Clearnet Only`, name: $localize`Clearnet and Darknet`,
inactiveColor: 'rgb(110, 112, 121)', inactiveColor: 'rgb(110, 112, 121)',
textStyle: { textStyle: {
color: 'white', color: 'white',
@ -317,9 +317,9 @@ export class NodesNetworksChartComponent implements OnInit {
}, },
], ],
selected: this.widget ? undefined : JSON.parse(this.storageService.getValue('nodes_networks_legend')) ?? { selected: this.widget ? undefined : JSON.parse(this.storageService.getValue('nodes_networks_legend')) ?? {
'$localize`Reachable on Darknet Only`': true, '$localize`Darknet Only (Tor, I2P, cjdns)`': true,
'$localize`Reachable on Clearnet Only`': true, '$localize`Clearnet (IPv4, IPv6)`': true,
'$localize`Reachable on Clearnet and Darknet`': true, '$localize`Clearnet and Darknet`': true,
'$localize`:@@e5d8bb389c702588877f039d72178f219453a72d:Unknown`': true, '$localize`:@@e5d8bb389c702588877f039d72178f219453a72d:Unknown`': true,
} }
}, },