Add categories and languages to about page
authorChocobozzz <me@florianbigard.com>
Tue, 27 Aug 2019 08:18:49 +0000 (10:18 +0200)
committerChocobozzz <chocobozzz@cpy.re>
Thu, 5 Sep 2019 08:17:02 +0000 (10:17 +0200)
client/src/app/+about/about-instance/about-instance.component.html
client/src/app/+about/about-instance/about-instance.component.scss
client/src/app/+about/about-instance/about-instance.component.ts

index 0fd3626b708bfb1c4a3c3b08ecd90b1f9b8143b1..c6247c4aeef371ee534905d6979dc2585e417cee 100644 (file)
@@ -8,9 +8,25 @@
     </div>
 
     <div class="short-description">
-      <div>{{ shortDescription }}</div>
+      <div class="block short-description">{{ shortDescription }}</div>
 
-      <div *ngIf="isNSFW" class="dedicated-to-nsfw">This instance is dedicated to sensitive/NSFW content.</div>
+      <div *ngIf="isNSFW" class="block dedicated-to-nsfw">This instance is dedicated to sensitive/NSFW content.</div>
+
+      <div class="block">
+        <div class="section-title" *ngIf="languages.length !== 0">Main instance languages</div>
+
+        <ul>
+          <li *ngFor="let language of languages">{{ language }}</li>
+        </ul>
+      </div>
+
+      <div class="block">
+        <div class="section-title" *ngIf="categories.length !== 0">Main instance categories</div>
+
+        <ul>
+          <li *ngFor="let category of categories">{{ category }}</li>
+        </ul>
+      </div>
     </div>
 
     <div class="middle-title" *ngIf="html.administrator || maintenanceLifetime || businessModel">
     </div>
 
     <div class="block administrator" *ngIf="html.administrator">
-      <div i18n class="section-title">Instance administrators</div>
+      <div i18n class="section-title">Who are we?</div>
 
       <div [innerHTML]="html.administrator"></div>
     </div>
 
     <div class="block maintenance-lifetime" *ngIf="maintenanceLifetime">
-      <div i18n class="section-title">Maintenance lifetime</div>
+      <div i18n class="section-title">How long do we plan to maintain this instance?</div>
 
       <p>{{ maintenanceLifetime }}</p>
     </div>
 
     <div class="block business-model" *ngIf="businessModel">
-      <div i18n class="section-title">Business model</div>
+      <div i18n class="section-title">How will we pay this instance?</div>
 
       <p>{{ businessModel }}</p>
     </div>
index 0585ad5f3bd399aecaeeaf0e0419e2557faafca4..d71cfffc638741f66dde17b357b10aaacc724ea8 100644 (file)
@@ -36,6 +36,7 @@
 
 .block {
   margin-bottom: 30px;
+  font-size: 15px;
 }
 
 .short-description .dedicated-to-nsfw {
index b85a6be948bbbb8f1d8af8734bdd87c5a9a64455..0af1dca9cc9710675a9e124f0886acfe8b8e5174 100644 (file)
@@ -4,6 +4,9 @@ import { I18n } from '@ngx-translate/i18n-polyfill'
 import { ContactAdminModalComponent } from '@app/+about/about-instance/contact-admin-modal.component'
 import { InstanceService } from '@app/shared/instance/instance.service'
 import { MarkdownService } from '@app/shared/renderer'
+import { forkJoin } from 'rxjs'
+import { first } from 'rxjs/operators'
+import { peertubeTranslate } from '@shared/models'
 
 @Component({
   selector: 'my-about-instance',
@@ -27,7 +30,7 @@ export class AboutInstanceComponent implements OnInit {
   businessModel = ''
 
   languages: string[] = []
-  categories: number[] = []
+  categories: string[] = []
 
   constructor (
     private notifier: Notifier,
@@ -50,28 +53,45 @@ export class AboutInstanceComponent implements OnInit {
   }
 
   ngOnInit () {
-    this.instanceService.getAbout()
-      .subscribe(
-        async res => {
-          this.shortDescription = res.instance.shortDescription
-
-          this.maintenanceLifetime = res.instance.maintenanceLifetime
-          this.businessModel = res.instance.businessModel
-
-          for (const key of [ 'description', 'terms', 'codeOfConduct', 'moderationInformation', 'administrator' ]) {
-            this.html[key] = await this.markdownService.textMarkdownToHTML(res.instance[key])
-          }
-
-          this.languages = res.instance.languages
-          this.categories = res.instance.categories
-        },
-
-        () => this.notifier.error(this.i18n('Cannot get about information from server'))
-      )
+    forkJoin([
+      this.instanceService.getAbout(),
+      this.serverService.localeObservable.pipe(first()),
+      this.serverService.videoLanguagesLoaded.pipe(first()),
+      this.serverService.videoCategoriesLoaded.pipe(first())
+    ]).subscribe(
+      async ([ res, translations ]) => {
+        this.shortDescription = res.instance.shortDescription
+
+        this.maintenanceLifetime = res.instance.maintenanceLifetime
+        this.businessModel = res.instance.businessModel
+
+        for (const key of [ 'description', 'terms', 'codeOfConduct', 'moderationInformation', 'administrator' ]) {
+          this.html[ key ] = await this.markdownService.textMarkdownToHTML(res.instance[ key ])
+        }
+
+        const languagesArray = this.serverService.getVideoLanguages()
+        const categoriesArray = this.serverService.getVideoCategories()
+
+        this.languages = res.instance.languages
+                            .map(l => {
+                              const languageObj = languagesArray.find(la => la.id === l)
+
+                              return peertubeTranslate(languageObj.label, translations)
+                            })
+
+        this.categories = res.instance.categories
+                             .map(c => {
+                               const categoryObj = categoriesArray.find(ca => ca.id === c)
+
+                               return peertubeTranslate(categoryObj.label, translations)
+                             })
+      },
+
+      () => this.notifier.error(this.i18n('Cannot get about information from server'))
+    )
   }
 
   openContactModal () {
     return this.contactAdminModal.show()
   }
-
 }