Introduce plugin id selectors

This commit is contained in:
Chocobozzz 2021-11-26 17:36:44 +01:00
parent 7137377d09
commit 8afade2607
No known key found for this signature in database
GPG Key ID: 583A612D890159BE
7 changed files with 38 additions and 5 deletions

View File

@ -15,7 +15,7 @@
<div class="wrapper"> <div class="wrapper">
<div class="login-form-and-externals"> <div class="login-form-and-externals">
<form role="form" (ngSubmit)="login()" [formGroup]="form"> <form myPluginSelector pluginSelectorId="login-form" role="form" (ngSubmit)="login()" [formGroup]="form">
<div class="form-group"> <div class="form-group">
<div> <div>
<label i18n for="username">User</label> <label i18n for="username">User</label>

View File

@ -1 +1,2 @@
export * from './plugin-placeholder.component' export * from './plugin-placeholder.component'
export * from './plugin-selector.directive'

View File

@ -0,0 +1,21 @@
import { Directive, ElementRef, Input, OnInit, Renderer2 } from '@angular/core'
import { PluginSelectorId } from '@shared/models'
@Directive({ selector: '[myPluginSelector]' })
export class PluginSelectorDirective implements OnInit {
@Input() pluginSelectorId: PluginSelectorId
constructor (
private renderer: Renderer2,
private hostElement: ElementRef<HTMLElement>
) {
}
ngOnInit () {
const id = this.hostElement.nativeElement.getAttribute('id')
if (id) throw new Error('Cannot set id on element that already has an id')
this.renderer.setAttribute(this.hostElement.nativeElement, 'id', `plugin-selector-${this.pluginSelectorId}`)
}
}

View File

@ -41,7 +41,7 @@ import {
SimpleSearchInputComponent, SimpleSearchInputComponent,
TopMenuDropdownComponent TopMenuDropdownComponent
} from './misc' } from './misc'
import { PluginPlaceholderComponent } from './plugins' import { PluginPlaceholderComponent, PluginSelectorDirective } from './plugins'
import { ActorRedirectGuard } from './router' import { ActorRedirectGuard } from './router'
import { UserHistoryService, UserNotificationsComponent, UserNotificationService, UserQuotaComponent } from './users' import { UserHistoryService, UserNotificationsComponent, UserNotificationService, UserQuotaComponent } from './users'
import { EmbedComponent, RedundancyService, VideoImportService, VideoOwnershipService, VideoService } from './video' import { EmbedComponent, RedundancyService, VideoImportService, VideoOwnershipService, VideoService } from './video'
@ -108,7 +108,8 @@ import { VideoChannelService } from './video-channel'
EmbedComponent, EmbedComponent,
PluginPlaceholderComponent PluginPlaceholderComponent,
PluginSelectorDirective
], ],
exports: [ exports: [
@ -166,7 +167,8 @@ import { VideoChannelService } from './video-channel'
EmbedComponent, EmbedComponent,
PluginPlaceholderComponent PluginPlaceholderComponent,
PluginSelectorDirective
], ],
providers: [ providers: [

View File

@ -1,6 +1,7 @@
export * from './client-hook.model' export * from './client-hook.model'
export * from './plugin-client-scope.type' export * from './plugin-client-scope.type'
export * from './plugin-element-placeholder.type' export * from './plugin-element-placeholder.type'
export * from './plugin-selector-id.type'
export * from './register-client-form-field.model' export * from './register-client-form-field.model'
export * from './register-client-hook.model' export * from './register-client-hook.model'
export * from './register-client-settings-script.model' export * from './register-client-settings-script.model'

View File

@ -0,0 +1 @@
export type PluginSelectorId = 'login-form'

View File

@ -3,7 +3,6 @@
<!-- START doctoc generated TOC please keep comment here to allow auto update --> <!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE --> <!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
- [Concepts](#concepts) - [Concepts](#concepts)
- [Hooks](#hooks) - [Hooks](#hooks)
- [Static files](#static-files) - [Static files](#static-files)
@ -28,6 +27,7 @@
- [Get server config](#get-server-config) - [Get server config](#get-server-config)
- [Add custom fields to video form](#add-custom-fields-to-video-form) - [Add custom fields to video form](#add-custom-fields-to-video-form)
- [Register settings script](#register-settings-script) - [Register settings script](#register-settings-script)
- [Plugin selector on HTML elements](#plugin-selector-on-html-elements)
- [HTML placeholder elements](#html-placeholder-elements) - [HTML placeholder elements](#html-placeholder-elements)
- [Add/remove left menu links](#addremove-left-menu-links) - [Add/remove left menu links](#addremove-left-menu-links)
- [Publishing](#publishing) - [Publishing](#publishing)
@ -759,6 +759,13 @@ async function register ({ registerSettingsScript }) {
}) })
} }
``` ```
#### Plugin selector on HTML elements
PeerTube provides some selectors (using `id` HTML attribute) on important blocks so plugins can easily change their style.
For example `#plugin-selector-login-form` could be used to hide the login form.
See the complete list on https://docs.joinpeertube.org/api-plugins
#### HTML placeholder elements #### HTML placeholder elements