]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/commitdiff
Plugins can add custom instance infobox
authorChocobozzz <me@florianbigard.com>
Thu, 20 Jan 2022 08:35:06 +0000 (09:35 +0100)
committerChocobozzz <me@florianbigard.com>
Thu, 20 Jan 2022 08:35:06 +0000 (09:35 +0100)
client/src/app/+login/login.component.html
client/src/app/+signup/+register/register.component.html
client/src/app/shared/shared-instance/instance-about-accordion.component.html
client/src/app/shared/shared-instance/instance-about-accordion.component.ts
shared/models/plugins/client/client-hook.model.ts

index 531b06dc9216b4fe0c08a98efbbfb5dc7e987491..dc74354d89de4e1c9634811efca688b0dcf4e472 100644 (file)
       </div>
 
       <div #instanceInformation class="instance-information">
-        <my-instance-about-accordion (init)="onInstanceAboutAccordionInit($event)" [panels]="instanceInformationPanels"></my-instance-about-accordion>
+        <my-instance-about-accordion
+          (init)="onInstanceAboutAccordionInit($event)" [panels]="instanceInformationPanels"
+          pluginScope="login" pluginHook="filter:login.instance-about-plugin-panels.create.result"
+        ></my-instance-about-accordion>
       </div>
     </div>
   </ng-container>
index b51f08a4c0247160a2c2f582bc3c955c9c3ad321..2d0e6e865713b60aa2caccc6cb1089c99a187427 100644 (file)
         <my-custom-stepper linear *ngIf="!signupDone">
           <cdk-step [stepControl]="formStepTerms" i18n-label="Stepper label for the registration page describing terms of service" label="Terms">
             <div class="instance-information">
-              <my-instance-about-accordion (init)="onInstanceAboutAccordionInit($event)" [panels]="instanceInformationPanels"></my-instance-about-accordion>
+              <my-instance-about-accordion
+                (init)="onInstanceAboutAccordionInit($event)" [panels]="instanceInformationPanels"
+                pluginScope="signup" pluginHook="filter:signup.instance-about-plugin-panels.create.result"
+              ></my-instance-about-accordion>
             </div>
 
             <my-register-step-terms
index e91e44656a917bc18d430f13c7caa1687e104a11..73e511d1ce50ebbbb56c62319a180b76f515df2e 100644 (file)
         <div class="block" [innerHTML]="aboutHtml.codeOfConduct"></div>
       </ng-template>
     </ngb-panel>
+
+    <ngb-panel *ngFor="let pluginPanel of pluginPanels" [id]="pluginPanel.id" [title]="pluginPanel.title">
+      <ng-template ngbPanelContent>
+        <div class="block" [innerHTML]="pluginPanel.html"></div>
+      </ng-template>
+    </ngb-panel>
   </ng-container>
 </ngb-accordion>
index 1eb7b49b67ad2bdb48d14e07d5b24a3a2a15e02f..b9f57e2a468fd1c884d3ea05b823c39990ce86d4 100644 (file)
@@ -1,8 +1,9 @@
 import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core'
+import { HooksService, Notifier } from '@app/core'
 import { NgbAccordion } from '@ng-bootstrap/ng-bootstrap'
-import { InstanceService } from './instance.service'
-import { Notifier } from '@app/core'
+import { ClientFilterHookName, PluginClientScope } from '@shared/models/plugins'
 import { About } from '@shared/models/server'
+import { InstanceService } from './instance.service'
 
 @Component({
   selector: 'my-instance-about-accordion',
@@ -11,8 +12,12 @@ import { About } from '@shared/models/server'
 })
 export class InstanceAboutAccordionComponent implements OnInit {
   @ViewChild('accordion', { static: true }) accordion: NgbAccordion
+
   @Output() init: EventEmitter<InstanceAboutAccordionComponent> = new EventEmitter<InstanceAboutAccordionComponent>()
 
+  @Input() pluginScope: PluginClientScope
+  @Input() pluginHook: ClientFilterHookName
+
   @Input() panels = {
     features: true,
     administrators: true,
@@ -29,12 +34,15 @@ export class InstanceAboutAccordionComponent implements OnInit {
     administrator: ''
   }
 
+  pluginPanels: { id: string, title: string, html: string }[] = []
+
   constructor (
     private instanceService: InstanceService,
-    private notifier: Notifier
+    private notifier: Notifier,
+    private hookService: HooksService
   ) { }
 
-  ngOnInit (): void {
+  async ngOnInit () {
     this.instanceService.getAbout()
       .subscribe({
         next: async about => {
@@ -47,6 +55,8 @@ export class InstanceAboutAccordionComponent implements OnInit {
 
         error: err => this.notifier.error(err.message)
       })
+
+    this.pluginPanels = await this.hookService.wrapObject([], this.pluginScope, this.pluginHook)
   }
 
   getAdministratorsPanel () {
index 7dd8bc5076a27293a404d197b736c6b02a2cda45..bb55e92d5247e87219e1fddfc36718c33bc9b15c 100644 (file)
@@ -65,6 +65,9 @@ export const clientFilterHookObject = {
   // Filter upload page alert messages
   'filter:upload.messages.create.result': true,
 
+  'filter:login.instance-about-plugin-panels.create.result': true,
+  'filter:signup.instance-about-plugin-panels.create.result': true,
+
   // Filter videojs options built for PeerTube player
   'filter:internal.player.videojs.options.result': true
 }