X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=client%2Fsrc%2Froot-helpers%2Fplugins.ts;h=8c1c858b724c8d4d2b2f92fff02af75e76e067d7;hb=b1ed448e948211a59ab110c9d4c7c2e82819645e;hp=011721761682ee2a388c87a15ed74903967adcd8;hpb=f95628636b6ccdf3eae2449ca718e075b072f678;p=github%2FChocobozzz%2FPeerTube.git diff --git a/client/src/root-helpers/plugins.ts b/client/src/root-helpers/plugins.ts index 011721761..8c1c858b7 100644 --- a/client/src/root-helpers/plugins.ts +++ b/client/src/root-helpers/plugins.ts @@ -1,6 +1,16 @@ -import { getHookType, internalRunHook } from '@shared/core-utils/plugins/hooks' -import { ClientHookName, ClientScript, RegisterClientHookOptions, ServerConfigPlugin, PluginType, clientHookObject } from '../../../shared/models' import { RegisterClientHelpers } from 'src/types/register-client-option.model' +import { getHookType, internalRunHook } from '@shared/core-utils/plugins/hooks' +import { + ClientHookName, + clientHookObject, + ClientScript, + PluginType, + RegisterClientFormFieldOptions, + RegisterClientHookOptions, + RegisterClientSettingsScript, + RegisterClientVideoFieldOptions, + ServerConfigPlugin +} from '../../../shared/models' import { ClientScript as ClientScriptModule } from '../types/client-script.model' import { importModule } from './utils' @@ -18,6 +28,13 @@ type PluginInfo = { isTheme: boolean } +type FormFields = { + video: { + commonOptions: RegisterClientFormFieldOptions + videoFormOptions: RegisterClientVideoFieldOptions + }[] +} + async function runHook (hooks: Hooks, hookName: ClientHookName, result?: T, params?: any) { if (!hooks[hookName]) return result @@ -34,7 +51,14 @@ async function runHook (hooks: Hooks, hookName: ClientHookName, result?: T, p return result } -function loadPlugin (hooks: Hooks, pluginInfo: PluginInfo, peertubeHelpersFactory: (pluginInfo: PluginInfo) => RegisterClientHelpers) { +function loadPlugin (options: { + hooks: Hooks + pluginInfo: PluginInfo + peertubeHelpersFactory: (pluginInfo: PluginInfo) => RegisterClientHelpers + formFields?: FormFields + onSettingsScripts?: (options: RegisterClientSettingsScript) => void +}) { + const { hooks, pluginInfo, peertubeHelpersFactory, formFields, onSettingsScripts } = options const { plugin, clientScript } = pluginInfo const registerHook = (options: RegisterClientHookOptions) => { @@ -54,12 +78,31 @@ function loadPlugin (hooks: Hooks, pluginInfo: PluginInfo, peertubeHelpersFactor }) } + const registerVideoField = (commonOptions: RegisterClientFormFieldOptions, videoFormOptions: RegisterClientVideoFieldOptions) => { + if (!formFields) { + throw new Error('Video field registration is not supported') + } + + formFields.video.push({ + commonOptions, + videoFormOptions + }) + } + + const registerSettingsScript = (options: RegisterClientSettingsScript) => { + if (!onSettingsScripts) { + throw new Error('Registering settings script is not supported') + } + + return onSettingsScripts(options) + } + const peertubeHelpers = peertubeHelpersFactory(pluginInfo) console.log('Loading script %s of plugin %s.', clientScript.script, plugin.name) return importModule(clientScript.script) - .then((script: ClientScriptModule) => script.register({ registerHook, peertubeHelpers })) + .then((script: ClientScriptModule) => script.register({ registerHook, registerVideoField, registerSettingsScript, peertubeHelpers })) .then(() => sortHooksByPriority(hooks)) .catch(err => console.error('Cannot import or register plugin %s.', pluginInfo.plugin.name, err)) } @@ -68,6 +111,7 @@ export { HookStructValue, Hooks, PluginInfo, + FormFields, loadPlugin, runHook }