Skip to content

Commit 37b4ffc

Browse files
committed
refactor: migrate control-flow
1 parent 9af57c9 commit 37b4ffc

File tree

198 files changed

+9975
-8437
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

198 files changed

+9975
-8437
lines changed

src/app/about/about.component.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@
1010
<h1 i18n>About us</h1>
1111
</div>
1212

13-
<ng-template #loading>
13+
@if (html$ | async; as html) {
14+
<div class="card card-body mb-3" [innerHTML]="html"></div>
15+
} @else {
1416
<div class="spinner-border" role="status"><span class="visually-hidden" i18n>Loading…</span></div>
15-
</ng-template>
16-
17-
<div class="card card-body mb-3" [innerHTML]="html" *ngIf="html$ | async as html; else loading"></div>
17+
}
1818

1919
<p>Version: {{ version.release }}</p>

src/app/account/account.component.html

Lines changed: 57 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -6,47 +6,63 @@
66
</ol>
77
</nav>
88

9-
<div class="row" *ngIf="items$ | async as items; else loading">
10-
<div class="col-lg-8 mb-4 order-2" [class.col-lg-12]="items.length === 0">
11-
<router-outlet></router-outlet>
12-
</div>
13-
<div class="col-lg-4 mb-4 order-1" *ngIf="items.length > 0">
14-
<div class="card card-body">
15-
<div class="nav flex-column nav-pills">
16-
<ng-container *ngFor="let item of items">
17-
<a
18-
class="nav-link"
19-
[routerLink]="item.routerLink"
20-
[queryParams]="item.routerLinkParams"
21-
*ngIf="item.routerLink"
22-
[class.active]="item.active"
23-
>
24-
<span
25-
class="badge rounded-pill float-end"
26-
[class.text-bg-secondary]="item.newCount <= 0"
27-
[class.text-bg-danger]="item.newCount > 0"
28-
*ngIf="item.count !== undefined"
29-
>
30-
<span *ngIf="item.count <= 0" i18n="@@count-zero">none</span>
31-
<span *ngIf="item.count > 0 && item.newCount === undefined">{{ item.count }}</span>
32-
<span *ngIf="item.count > 0 && item.newCount !== undefined && item.newCount <= 0">{{ item.count }}</span>
33-
<span *ngIf="item.count > 0 && item.newCount !== undefined && item.newCount > 0"
34-
>{{ item.count - item.newCount }}+{{ item.newCount }}</span
35-
>
36-
</span>
37-
<i class="bi {{ item.icon }}" aria-hidden="true" *ngIf="item.icon"></i>
38-
{{ item.name }}
39-
</a>
40-
<span class="nav-link" *ngIf="!item.routerLink">
41-
<i class="bi {{ item.icon }}" aria-hidden="true" *ngIf="item.icon"></i>
42-
{{ item.name }}
43-
</span>
44-
</ng-container>
45-
</div>
9+
@if (items$ | async; as items) {
10+
<div class="row">
11+
<div class="col-lg-8 mb-4 order-2" [class.col-lg-12]="items.length === 0">
12+
<router-outlet></router-outlet>
4613
</div>
14+
@if (items.length > 0) {
15+
<div class="col-lg-4 mb-4 order-1">
16+
<div class="card card-body">
17+
<div class="nav flex-column nav-pills">
18+
@for (item of items; track item) {
19+
@if (item.routerLink) {
20+
<a
21+
class="nav-link"
22+
[routerLink]="item.routerLink"
23+
[queryParams]="item.routerLinkParams"
24+
[class.active]="item.active"
25+
>
26+
@if (item.count !== undefined) {
27+
<span
28+
class="badge rounded-pill float-end"
29+
[class.text-bg-secondary]="item.newCount <= 0"
30+
[class.text-bg-danger]="item.newCount > 0"
31+
>
32+
@if (item.count <= 0) {
33+
<span i18n="@@count-zero">none</span>
34+
} @else {
35+
@if (item.newCount === undefined) {
36+
<span>{{ item.count }}</span>
37+
} @else {
38+
@if (item.newCount <= 0) {
39+
<span>{{ item.count }}</span>
40+
} @else {
41+
<span>{{ item.count - item.newCount }}+{{ item.newCount }}</span>
42+
}
43+
}
44+
}
45+
</span>
46+
}
47+
@if (item.icon) {
48+
<i class="bi {{ item.icon }}" aria-hidden="true"></i>
49+
}
50+
{{ item.name }}
51+
</a>
52+
} @else {
53+
<span class="nav-link">
54+
@if (item.icon) {
55+
<i class="bi {{ item.icon }}" aria-hidden="true"></i>
56+
}
57+
{{ item.name }}
58+
</span>
59+
}
60+
}
61+
</div>
62+
</div>
63+
</div>
64+
}
4765
</div>
48-
</div>
49-
50-
<ng-template #loading>
66+
} @else {
5167
<div class="spinner-border" role="status"><span class="visually-hidden" i18n>Loading…</span></div>
52-
</ng-template>
68+
}
Lines changed: 38 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,45 @@
11
<div class="page-header">
22
<h1 i18n>My accounts</h1>
33
</div>
4-
<ng-container *ngIf="accounts$ | async as accounts">
5-
<div class="card card-body mb-4" *ngIf="accounts.length > 0 && !disconnectFailed">
6-
<div *ngFor="let account of accounts">
7-
<p>
8-
<button
9-
type="submit"
10-
class="btn btn-sm btn-danger"
11-
i18n-title
12-
title="Remove"
13-
*ngIf="account.can_remove"
14-
style="margin-right: 16px"
15-
(click)="remove(account)"
16-
>
17-
<i class="bi bi-x" aria-hidden="true"></i>
18-
</button>
19-
<i [class]="account.icon" aria-hidden="true"></i>
20-
<a [href]="account.link" *ngIf="account.link" [textContent]="account.name"></a>
21-
<span [textContent]="account.name" *ngIf="!account.link"></span>
22-
</p>
4+
@if (accounts$ | async; as accounts) {
5+
@if (accounts.length > 0 && !disconnectFailed) {
6+
<div class="card card-body mb-4">
7+
@for (account of accounts; track account) {
8+
<div>
9+
<p>
10+
@if (account.can_remove) {
11+
<button
12+
type="submit"
13+
class="btn btn-sm btn-danger"
14+
i18n-title
15+
title="Remove"
16+
style="margin-right: 16px"
17+
(click)="remove(account)"
18+
>
19+
<i class="bi bi-x" aria-hidden="true"></i>
20+
</button>
21+
}
22+
<i [class]="account.icon" aria-hidden="true"></i>
23+
@if (account.link) {
24+
<a [href]="account.link" [textContent]="account.name"></a>
25+
}
26+
@if (!account.link) {
27+
<span [textContent]="account.name"></span>
28+
}
29+
</p>
30+
</div>
31+
}
2332
</div>
24-
</div>
25-
</ng-container>
33+
}
34+
}
2635

27-
<div class="card card-body" *ngIf="disconnectFailed">
28-
<app-markdown
29-
i18n-markdown
30-
markdown="Не удалось удалить учетную запись.
36+
@if (disconnectFailed) {
37+
<div class="card card-body">
38+
<app-markdown
39+
i18n-markdown
40+
markdown="Не удалось удалить учетную запись.
3141
3242
Такое бывает, если привязанная учётная запись является единственным способом авторизации, т.е. не задан e-mail или другие учётный записи."
33-
></app-markdown>
34-
</div>
43+
></app-markdown>
44+
</div>
45+
}

src/app/account/contacts/contacts.component.html

Lines changed: 30 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2,35 +2,36 @@
22
<h1 i18n>Contacts</h1>
33
</div>
44
<div class="row">
5-
<div class="col-md-6 mb-2" *ngFor="let contact of items">
6-
<div class="d-flex justify-content-start">
7-
<div class="align-self-start me-3">
8-
<a
9-
[routerLink]="['/users', contact.user.identity ? contact.user.identity : 'user' + contact.user.id]"
10-
*ngIf="!contact.user.deleted"
11-
class="photo"
12-
>
13-
<img alt="" [src]="contact.user.avatar.src" *ngIf="contact.user.avatar" class="rounded" loading="lazy" />
14-
<img
15-
alt=""
16-
[src]="contact.user.gravatar"
17-
*ngIf="contact.user.gravatar && !contact.user.avatar"
18-
class="rounded"
19-
loading="lazy"
20-
/>
21-
</a>
22-
</div>
23-
<div class="flex-grow-1">
24-
<button class="btn-close float-end" (click)="deleteContact(contact.user.id)"></button>
25-
<h4>
26-
<app-user [user]="contact.user"></app-user>
27-
</h4>
28-
<p
29-
*ngIf="contact.user.lastOnline"
30-
[textContent]="contact.user.lastOnline.toDate() | timeAgo"
31-
[ngbTooltip]="contact.user.lastOnline.toDate() | date: 'medium'"
32-
></p>
5+
@for (contact of items; track contact) {
6+
<div class="col-md-6 mb-2">
7+
<div class="d-flex justify-content-start">
8+
<div class="align-self-start me-3">
9+
@if (!contact.user.deleted) {
10+
<a
11+
[routerLink]="['/users', contact.user.identity ? contact.user.identity : 'user' + contact.user.id]"
12+
class="photo"
13+
>
14+
@if (contact.user.avatar) {
15+
<img alt="" [src]="contact.user.avatar.src" class="rounded" loading="lazy" />
16+
} @else if (contact.user.gravatar) {
17+
<img alt="" [src]="contact.user.gravatar" class="rounded" loading="lazy" />
18+
}
19+
</a>
20+
}
21+
</div>
22+
<div class="flex-grow-1">
23+
<button class="btn-close float-end" (click)="deleteContact(contact.user.id)"></button>
24+
<h4>
25+
<app-user [user]="contact.user"></app-user>
26+
</h4>
27+
@if (contact.user.lastOnline) {
28+
<p
29+
[textContent]="contact.user.lastOnline.toDate() | timeAgo"
30+
[ngbTooltip]="contact.user.lastOnline.toDate() | date: 'medium'"
31+
></p>
32+
}
33+
</div>
3334
</div>
3435
</div>
35-
</div>
36+
}
3637
</div>

src/app/account/delete/delete.component.html

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,9 @@ <h1 i18n>Account delete</h1>
2424
[(ngModel)]="form.password_old"
2525
[class.is-invalid]="invalidParams && invalidParams.password_old"
2626
/>
27-
<p
28-
*ngFor="let message of invalidParams | invalidParams: 'password_old'"
29-
[textContent]="message"
30-
class="invalid-feedback"
31-
></p>
27+
@for (message of invalidParams | invalidParams: 'password_old'; track message) {
28+
<p [textContent]="message" class="invalid-feedback"></p>
29+
}
3230
</div>
3331
</div>
3432
<div class="row">

src/app/account/email/email.component.html

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,11 @@ <h1 i18n>My e-mail</h1>
44
<div class="card card-body">
55
<p>
66
<ng-container i18n>Your current e-mail address:</ng-container>
7-
<a [href]="email" [textContent]="email" *ngIf="email$ | async as email; else noemail"></a>
8-
<ng-template #noemail><span i18n>none</span></ng-template>
7+
@if (email$ | async; as email) {
8+
<a [href]="email" [textContent]="email"></a>
9+
} @else {
10+
<span i18n>none</span>
11+
}
912
(<a [href]="changeEmailUrl" i18n>Change</a>)
1013
</p>
1114
</div>
Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
1-
<ng-template #loading>
2-
<div class="spinner-border" role="status"><span class="visually-hidden" i18n>Loading…</span></div>
3-
</ng-template>
4-
51
<div class="page-header">
62
<h1 i18n>Unmoderated</h1>
73
</div>
8-
<ng-container *ngIf="data$ | async as data; else loading">
4+
@if (data$ | async; as data) {
95
<div class="row">
10-
<div class="col-12 cols-sm-6 col-md-6 col-lg-4" *ngFor="let picture of data.pictures">
11-
<app-thumbnail [picture]="picture" [route]="['/picture', picture.identity]"></app-thumbnail>
12-
</div>
6+
@for (picture of data.pictures; track picture) {
7+
<div class="col-12 cols-sm-6 col-md-6 col-lg-4">
8+
<app-thumbnail [picture]="picture" [route]="['/picture', picture.identity]"></app-thumbnail>
9+
</div>
10+
}
1311
</div>
14-
<app-paginator [data]="data.paginator" *ngIf="data.paginator"></app-paginator>
15-
</ng-container>
12+
@if (data.paginator) {
13+
<app-paginator [data]="data.paginator"></app-paginator>
14+
}
15+
} @else {
16+
<div class="spinner-border" role="status"><span class="visually-hidden" i18n>Loading…</span></div>
17+
}

0 commit comments

Comments
 (0)