diff options
Diffstat (limited to 'client/src/app/shared/shared-instance')
11 files changed, 57 insertions, 67 deletions
diff --git a/client/src/app/shared/shared-instance/feature-boolean.component.html b/client/src/app/shared/shared-instance/feature-boolean.component.html index ccb8a30cc..6de5d2075 100644 --- a/client/src/app/shared/shared-instance/feature-boolean.component.html +++ b/client/src/app/shared/shared-instance/feature-boolean.component.html | |||
@@ -1,3 +1,2 @@ | |||
1 | <span *ngIf="value === true" class="glyphicon glyphicon-ok" i18n-aria-label aria-label="yes"></span> | 1 | <my-global-icon *ngIf="value === true" iconName="tick" i18n-aria-label aria-label="yes"></my-global-icon> |
2 | <span *ngIf="value === false" class="glyphicon glyphicon-remove" i18n-aria-label aria-label="no"></span> | 2 | <my-global-icon *ngIf="value === false" iconName="cross" i18n-aria-label aria-label="no"></my-global-icon> |
3 | |||
diff --git a/client/src/app/shared/shared-instance/feature-boolean.component.scss b/client/src/app/shared/shared-instance/feature-boolean.component.scss index 8683ecc55..29b8c3e02 100644 --- a/client/src/app/shared/shared-instance/feature-boolean.component.scss +++ b/client/src/app/shared/shared-instance/feature-boolean.component.scss | |||
@@ -1,10 +1,10 @@ | |||
1 | @use '_variables' as *; | 1 | @use '_variables' as *; |
2 | @use '_mixins' as *; | 2 | @use '_mixins' as *; |
3 | 3 | ||
4 | .glyphicon-ok { | 4 | my-global-icon[iconName=tick] { |
5 | color: $green; | 5 | color: $green; |
6 | } | 6 | } |
7 | 7 | ||
8 | .glyphicon-remove { | 8 | my-global-icon[iconName=cross] { |
9 | color: $red; | 9 | color: $red; |
10 | } | 10 | } |
diff --git a/client/src/app/shared/shared-instance/instance-about-accordion.component.html b/client/src/app/shared/shared-instance/instance-about-accordion.component.html index 73e511d1c..466d73ca4 100644 --- a/client/src/app/shared/shared-instance/instance-about-accordion.component.html +++ b/client/src/app/shared/shared-instance/instance-about-accordion.component.html | |||
@@ -1,6 +1,6 @@ | |||
1 | <h2 class="instance-name">{{ about?.instance.name }}</h2> | 1 | <h2 *ngIf="displayInstanceName" class="instance-name">{{ about?.instance.name }}</h2> |
2 | 2 | ||
3 | <div class="instance-short-description">{{ about?.instance.shortDescription }}</div> | 3 | <div *ngIf="displayInstanceShortDescription" class="instance-short-description">{{ about?.instance.shortDescription }}</div> |
4 | 4 | ||
5 | <ngb-accordion #accordion="ngbAccordion" [closeOthers]="true"> | 5 | <ngb-accordion #accordion="ngbAccordion" [closeOthers]="true"> |
6 | <ngb-panel *ngIf="panels.features" id="instance-features" i18n-title title="Features found on this instance"> | 6 | <ngb-panel *ngIf="panels.features" id="instance-features" i18n-title title="Features found on this instance"> |
@@ -32,7 +32,7 @@ | |||
32 | </ng-template> | 32 | </ng-template> |
33 | </ngb-panel> | 33 | </ngb-panel> |
34 | 34 | ||
35 | <ngb-panel *ngIf="termsPanel" id="terms" i18n-title title="Terms"> | 35 | <ngb-panel *ngIf="termsPanel" id="terms" [title]="getTermsTitle()"> |
36 | <ng-template ngbPanelContent> | 36 | <ng-template ngbPanelContent> |
37 | <div class="block" [innerHTML]="aboutHtml.terms"></div> | 37 | <div class="block" [innerHTML]="aboutHtml.terms"></div> |
38 | </ng-template> | 38 | </ng-template> |
diff --git a/client/src/app/shared/shared-instance/instance-about-accordion.component.scss b/client/src/app/shared/shared-instance/instance-about-accordion.component.scss index be6099a97..c8e288462 100644 --- a/client/src/app/shared/shared-instance/instance-about-accordion.component.scss +++ b/client/src/app/shared/shared-instance/instance-about-accordion.component.scss | |||
@@ -8,34 +8,9 @@ | |||
8 | .instance-short-description { | 8 | .instance-short-description { |
9 | @include ellipsis-multiline(1rem, 3); | 9 | @include ellipsis-multiline(1rem, 3); |
10 | 10 | ||
11 | margin-top: 20px; | 11 | margin: 25px 0; |
12 | margin-bottom: 20px; | ||
13 | } | 12 | } |
14 | 13 | ||
15 | .block { | 14 | .block { |
16 | font-size: 15px; | ||
17 | margin-bottom: 15px; | 15 | margin-bottom: 15px; |
18 | } | 16 | } |
19 | |||
20 | ngb-accordion ::ng-deep { | ||
21 | .card { | ||
22 | border-color: var(--mainBackgroundColor); | ||
23 | |||
24 | .card-header { | ||
25 | background-color: unset; | ||
26 | padding: 0; | ||
27 | |||
28 | + .collapse.show { | ||
29 | background-color: var(--submenuBackgroundColor); | ||
30 | } | ||
31 | } | ||
32 | } | ||
33 | |||
34 | .btn { | ||
35 | @include peertube-button; | ||
36 | @include grey-button; | ||
37 | |||
38 | border-radius: unset; | ||
39 | width: 100%; | ||
40 | } | ||
41 | } | ||
diff --git a/client/src/app/shared/shared-instance/instance-about-accordion.component.ts b/client/src/app/shared/shared-instance/instance-about-accordion.component.ts index b9f57e2a4..e13703c03 100644 --- a/client/src/app/shared/shared-instance/instance-about-accordion.component.ts +++ b/client/src/app/shared/shared-instance/instance-about-accordion.component.ts | |||
@@ -15,6 +15,9 @@ export class InstanceAboutAccordionComponent implements OnInit { | |||
15 | 15 | ||
16 | @Output() init: EventEmitter<InstanceAboutAccordionComponent> = new EventEmitter<InstanceAboutAccordionComponent>() | 16 | @Output() init: EventEmitter<InstanceAboutAccordionComponent> = new EventEmitter<InstanceAboutAccordionComponent>() |
17 | 17 | ||
18 | @Input() displayInstanceName = true | ||
19 | @Input() displayInstanceShortDescription = true | ||
20 | |||
18 | @Input() pluginScope: PluginClientScope | 21 | @Input() pluginScope: PluginClientScope |
19 | @Input() pluginHook: ClientFilterHookName | 22 | @Input() pluginHook: ClientFilterHookName |
20 | 23 | ||
@@ -66,6 +69,10 @@ export class InstanceAboutAccordionComponent implements OnInit { | |||
66 | return !!(this.aboutHtml?.administrator || this.about?.instance.maintenanceLifetime || this.about?.instance.businessModel) | 69 | return !!(this.aboutHtml?.administrator || this.about?.instance.maintenanceLifetime || this.about?.instance.businessModel) |
67 | } | 70 | } |
68 | 71 | ||
72 | getTermsTitle () { | ||
73 | return $localize`Terms of ${this.about.instance.name}` | ||
74 | } | ||
75 | |||
69 | get moderationPanel () { | 76 | get moderationPanel () { |
70 | return this.panels.moderation && !!this.aboutHtml.moderationInformation | 77 | return this.panels.moderation && !!this.aboutHtml.moderationInformation |
71 | } | 78 | } |
diff --git a/client/src/app/shared/shared-instance/instance-features-table.component.html b/client/src/app/shared/shared-instance/instance-features-table.component.html index 1fdef95ff..761243bfe 100644 --- a/client/src/app/shared/shared-instance/instance-features-table.component.html +++ b/client/src/app/shared/shared-instance/instance-features-table.component.html | |||
@@ -1,6 +1,6 @@ | |||
1 | <div *ngIf="serverConfig" class="feature-table"> | 1 | <div *ngIf="serverConfig" class="feature-table"> |
2 | 2 | ||
3 | <table class="table" *ngIf="serverConfig"> | 3 | <table *ngIf="serverConfig"> |
4 | <caption i18n>Features found on this instance</caption> | 4 | <caption i18n>Features found on this instance</caption> |
5 | <tr> | 5 | <tr> |
6 | <th i18n class="label" scope="row">PeerTube version</th> | 6 | <th i18n class="label" scope="row">PeerTube version</th> |
diff --git a/client/src/app/shared/shared-instance/instance-features-table.component.scss b/client/src/app/shared/shared-instance/instance-features-table.component.scss index 56ca105f4..bfae0c112 100644 --- a/client/src/app/shared/shared-instance/instance-features-table.component.scss +++ b/client/src/app/shared/shared-instance/instance-features-table.component.scss | |||
@@ -4,6 +4,7 @@ | |||
4 | table { | 4 | table { |
5 | font-size: 14px; | 5 | font-size: 14px; |
6 | color: pvar(--mainForegroundColor); | 6 | color: pvar(--mainForegroundColor); |
7 | width: 100%; | ||
7 | 8 | ||
8 | .label, | 9 | .label, |
9 | .sub-label { | 10 | .sub-label { |
@@ -24,13 +25,14 @@ table { | |||
24 | } | 25 | } |
25 | } | 26 | } |
26 | 27 | ||
28 | th, | ||
27 | td { | 29 | td { |
28 | vertical-align: middle; | 30 | padding: 0.75rem; |
31 | border-top: 1px solid #dee2e6; | ||
29 | } | 32 | } |
30 | 33 | ||
31 | caption { | 34 | caption { |
32 | caption-side: top; | 35 | caption-side: top; |
33 | font-size: 15px; | ||
34 | font-weight: $font-semibold; | 36 | font-weight: $font-semibold; |
35 | color: pvar(--mainForegroundColor); | 37 | color: pvar(--mainForegroundColor); |
36 | } | 38 | } |
diff --git a/client/src/app/shared/shared-instance/instance-features-table.component.ts b/client/src/app/shared/shared-instance/instance-features-table.component.ts index 6335de450..e405c5790 100644 --- a/client/src/app/shared/shared-instance/instance-features-table.component.ts +++ b/client/src/app/shared/shared-instance/instance-features-table.component.ts | |||
@@ -1,5 +1,6 @@ | |||
1 | import { Component, OnInit } from '@angular/core' | 1 | import { Component, OnInit } from '@angular/core' |
2 | import { ServerService } from '@app/core' | 2 | import { ServerService } from '@app/core' |
3 | import { prepareIcu } from '@app/helpers' | ||
3 | import { ServerConfig } from '@shared/models' | 4 | import { ServerConfig } from '@shared/models' |
4 | import { PeertubeModalService } from '../shared-main/peertube-modal/peertube-modal.service' | 5 | import { PeertubeModalService } from '../shared-main/peertube-modal/peertube-modal.service' |
5 | 6 | ||
@@ -65,15 +66,20 @@ export class InstanceFeaturesTableComponent implements OnInit { | |||
65 | 66 | ||
66 | private getApproximateTime (seconds: number) { | 67 | private getApproximateTime (seconds: number) { |
67 | const hours = Math.floor(seconds / 3600) | 68 | const hours = Math.floor(seconds / 3600) |
68 | let pluralSuffix = '' | ||
69 | if (hours > 1) pluralSuffix = 's' | ||
70 | if (hours > 0) return `~ ${hours} hour${pluralSuffix}` | ||
71 | 69 | ||
72 | const minutes = Math.floor(seconds % 3600 / 60) | 70 | if (hours !== 0) { |
71 | return prepareIcu($localize`~ {hours, plural, =1 {1 hour} other {{hours} hours}}`)( | ||
72 | { hours }, | ||
73 | $localize`~ ${hours} hours` | ||
74 | ) | ||
75 | } | ||
73 | 76 | ||
74 | if (minutes === 1) return $localize`~ 1 minute` | 77 | const minutes = Math.floor(seconds % 3600 / 60) |
75 | 78 | ||
76 | return $localize`~ ${minutes} minutes` | 79 | return prepareIcu($localize`~ {minutes, plural, =1 {1 minute} other {{minutes} minutes}}`)( |
80 | { minutes }, | ||
81 | $localize`~ ${minutes} minutes` | ||
82 | ) | ||
77 | } | 83 | } |
78 | 84 | ||
79 | private buildQuotaHelpIndication () { | 85 | private buildQuotaHelpIndication () { |
diff --git a/client/src/app/shared/shared-instance/instance-statistics.component.html b/client/src/app/shared/shared-instance/instance-statistics.component.html index 2ca61fd94..68b209990 100644 --- a/client/src/app/shared/shared-instance/instance-statistics.component.html +++ b/client/src/app/shared/shared-instance/instance-statistics.component.html | |||
@@ -10,7 +10,7 @@ | |||
10 | <p class="stat-value">{{ serverStats.totalUsers | number }}</p> | 10 | <p class="stat-value">{{ serverStats.totalUsers | number }}</p> |
11 | <p class="stat-label" i18n>users</p> | 11 | <p class="stat-label" i18n>users</p> |
12 | </div> | 12 | </div> |
13 | <i class="glyphicon glyphicon-user icon-bottom"></i> | 13 | <my-global-icon iconName="user"></my-global-icon> |
14 | </div> | 14 | </div> |
15 | </div> | 15 | </div> |
16 | 16 | ||
@@ -20,7 +20,7 @@ | |||
20 | <p class="stat-value">{{ serverStats.totalLocalVideos | number }}</p> | 20 | <p class="stat-value">{{ serverStats.totalLocalVideos | number }}</p> |
21 | <p class="stat-label" i18n>videos</p> | 21 | <p class="stat-label" i18n>videos</p> |
22 | </div> | 22 | </div> |
23 | <i class="glyphicon glyphicon-facetime-video"></i> | 23 | <my-global-icon iconName="film"></my-global-icon> |
24 | </div> | 24 | </div> |
25 | </div> | 25 | </div> |
26 | 26 | ||
@@ -30,7 +30,7 @@ | |||
30 | <p class="stat-value">{{ serverStats.totalLocalVideoViews | number }}</p> | 30 | <p class="stat-value">{{ serverStats.totalLocalVideoViews | number }}</p> |
31 | <p class="stat-label" i18n>views</p> | 31 | <p class="stat-label" i18n>views</p> |
32 | </div> | 32 | </div> |
33 | <i class="glyphicon glyphicon-eye-open"></i> | 33 | <my-global-icon iconName="eye-open"></my-global-icon> |
34 | </div> | 34 | </div> |
35 | </div> | 35 | </div> |
36 | 36 | ||
@@ -40,7 +40,7 @@ | |||
40 | <p class="stat-value">{{ serverStats.totalLocalVideoComments | number }}</p> | 40 | <p class="stat-value">{{ serverStats.totalLocalVideoComments | number }}</p> |
41 | <p class="stat-label" i18n>comments</p> | 41 | <p class="stat-label" i18n>comments</p> |
42 | </div> | 42 | </div> |
43 | <i class="glyphicon glyphicon-comment"></i> | 43 | <my-global-icon iconName="message-circle"></my-global-icon> |
44 | </div> | 44 | </div> |
45 | </div> | 45 | </div> |
46 | 46 | ||
@@ -50,7 +50,7 @@ | |||
50 | <p class="stat-value">{{ serverStats.totalLocalVideoFilesSize | bytes:1 }}</p> | 50 | <p class="stat-value">{{ serverStats.totalLocalVideoFilesSize | bytes:1 }}</p> |
51 | <p class="stat-label" i18n>hosted video</p> | 51 | <p class="stat-label" i18n>hosted video</p> |
52 | </div> | 52 | </div> |
53 | <i class="glyphicon glyphicon-hdd"></i> | 53 | <my-global-icon iconName="home"></my-global-icon> |
54 | </div> | 54 | </div> |
55 | </div> | 55 | </div> |
56 | </div> | 56 | </div> |
@@ -64,7 +64,7 @@ | |||
64 | <p class="stat-value">{{ serverStats.totalVideos | number }}</p> | 64 | <p class="stat-value">{{ serverStats.totalVideos | number }}</p> |
65 | <p class="stat-label" i18n>videos</p> | 65 | <p class="stat-label" i18n>videos</p> |
66 | </div> | 66 | </div> |
67 | <i class="glyphicon glyphicon-facetime-video"></i> | 67 | <my-global-icon iconName="film"></my-global-icon> |
68 | </div> | 68 | </div> |
69 | </div> | 69 | </div> |
70 | 70 | ||
@@ -74,7 +74,7 @@ | |||
74 | <p class="stat-value">{{ serverStats.totalVideoComments | number }}</p> | 74 | <p class="stat-value">{{ serverStats.totalVideoComments | number }}</p> |
75 | <p class="stat-label" i18n>comments</p> | 75 | <p class="stat-label" i18n>comments</p> |
76 | </div> | 76 | </div> |
77 | <i class="glyphicon glyphicon-comment"></i> | 77 | <my-global-icon iconName="message-circle"></my-global-icon> |
78 | </div> | 78 | </div> |
79 | </div> | 79 | </div> |
80 | 80 | ||
@@ -84,7 +84,7 @@ | |||
84 | <p class="stat-value">{{ serverStats.totalInstanceFollowers | number }}</p> | 84 | <p class="stat-value">{{ serverStats.totalInstanceFollowers | number }}</p> |
85 | <p class="stat-label" i18n>followers</p> | 85 | <p class="stat-label" i18n>followers</p> |
86 | </div> | 86 | </div> |
87 | <i class="glyphicon glyphicon-retweet"></i> | 87 | <my-global-icon iconName="share"></my-global-icon> |
88 | </div> | 88 | </div> |
89 | </div> | 89 | </div> |
90 | 90 | ||
@@ -94,7 +94,7 @@ | |||
94 | <p class="stat-value">{{ serverStats.totalInstanceFollowing | number }}</p> | 94 | <p class="stat-value">{{ serverStats.totalInstanceFollowing | number }}</p> |
95 | <p class="stat-label" i18n>following</p> | 95 | <p class="stat-label" i18n>following</p> |
96 | </div> | 96 | </div> |
97 | <i class="glyphicon glyphicon-retweet"></i> | 97 | <my-global-icon iconName="globe"></my-global-icon> |
98 | </div> | 98 | </div> |
99 | </div> | 99 | </div> |
100 | </div> | 100 | </div> |
diff --git a/client/src/app/shared/shared-instance/instance-statistics.component.scss b/client/src/app/shared/shared-instance/instance-statistics.component.scss index 5286ab03a..e1d489d28 100644 --- a/client/src/app/shared/shared-instance/instance-statistics.component.scss +++ b/client/src/app/shared/shared-instance/instance-statistics.component.scss | |||
@@ -1,3 +1,5 @@ | |||
1 | @use '_variables' as *; | ||
2 | @use '_mixins' as *; | ||
1 | 3 | ||
2 | h3 { | 4 | h3 { |
3 | font-size: 1.25rem; | 5 | font-size: 1.25rem; |
@@ -19,22 +21,19 @@ h3 { | |||
19 | margin: 0; | 21 | margin: 0; |
20 | } | 22 | } |
21 | 23 | ||
22 | .glyphicon { | ||
23 | opacity: 0.12; | ||
24 | position: absolute; | ||
25 | left: 16px; | ||
26 | top: -24px; | ||
27 | |||
28 | &.icon-bottom { | ||
29 | top: 4px; | ||
30 | } | ||
31 | |||
32 | &::before { | ||
33 | font-size: 8em; | ||
34 | } | ||
35 | } | ||
36 | |||
37 | .card-body { | 24 | .card-body { |
38 | z-index: 2; | 25 | z-index: 2; |
39 | } | 26 | } |
40 | } | 27 | } |
28 | |||
29 | my-global-icon { | ||
30 | opacity: 0.12; | ||
31 | position: absolute; | ||
32 | left: 16px; | ||
33 | top: -24px; | ||
34 | width: 110px; | ||
35 | |||
36 | &.icon-bottom { | ||
37 | top: 4px; | ||
38 | } | ||
39 | } | ||
diff --git a/client/src/app/shared/shared-instance/shared-instance.module.ts b/client/src/app/shared/shared-instance/shared-instance.module.ts index 13c681ab8..dfce88e11 100644 --- a/client/src/app/shared/shared-instance/shared-instance.module.ts +++ b/client/src/app/shared/shared-instance/shared-instance.module.ts | |||
@@ -1,6 +1,7 @@ | |||
1 | 1 | ||
2 | import { NgModule } from '@angular/core' | 2 | import { NgModule } from '@angular/core' |
3 | import { NgbAccordionModule } from '@ng-bootstrap/ng-bootstrap' | 3 | import { NgbAccordionModule } from '@ng-bootstrap/ng-bootstrap' |
4 | import { SharedGlobalIconModule } from '../shared-icons' | ||
4 | import { SharedMainModule } from '../shared-main/shared-main.module' | 5 | import { SharedMainModule } from '../shared-main/shared-main.module' |
5 | import { FeatureBooleanComponent } from './feature-boolean.component' | 6 | import { FeatureBooleanComponent } from './feature-boolean.component' |
6 | import { InstanceAboutAccordionComponent } from './instance-about-accordion.component' | 7 | import { InstanceAboutAccordionComponent } from './instance-about-accordion.component' |
@@ -12,6 +13,7 @@ import { InstanceService } from './instance.service' | |||
12 | @NgModule({ | 13 | @NgModule({ |
13 | imports: [ | 14 | imports: [ |
14 | SharedMainModule, | 15 | SharedMainModule, |
16 | SharedGlobalIconModule, | ||
15 | NgbAccordionModule | 17 | NgbAccordionModule |
16 | ], | 18 | ], |
17 | 19 | ||