From ea95e98c8f5bdf938f84b8420dd1c828c0349f21 Mon Sep 17 00:00:00 2001 From: Artur Arseniev Date: Fri, 6 Jan 2023 14:19:51 +0400 Subject: [PATCH] Refactor PluginManager --- src/plugin_manager/config/config.js | 3 -- src/plugin_manager/index.js | 57 ----------------------------- src/plugin_manager/index.ts | 56 ++++++++++++++++++++++++++++ 3 files changed, 56 insertions(+), 60 deletions(-) delete mode 100644 src/plugin_manager/config/config.js delete mode 100644 src/plugin_manager/index.js create mode 100644 src/plugin_manager/index.ts diff --git a/src/plugin_manager/config/config.js b/src/plugin_manager/config/config.js deleted file mode 100644 index 4ed8f62dd..000000000 --- a/src/plugin_manager/config/config.js +++ /dev/null @@ -1,3 +0,0 @@ -export default { - plugins: [], -}; diff --git a/src/plugin_manager/index.js b/src/plugin_manager/index.js deleted file mode 100644 index b3883be09..000000000 --- a/src/plugin_manager/index.js +++ /dev/null @@ -1,57 +0,0 @@ -import defaults from './config/config'; - -export default config => { - var c = config || {}; - - // Set default options - for (var name in defaults) { - if (!(name in c)) c[name] = defaults[name]; - } - - var plugins = {}; - - return { - /** - * Add new plugin. Plugins could not be overwritten - * @param {string} id Plugin ID - * @param {Function} plugin Function which contains all plugin logic - * @return {Function} The plugin function - * @example - * PluginManager.add('some-plugin', function(editor){ - * editor.Commands.add('new-command', { - * run: function(editor, senderBtn){ - * console.log('Executed new-command'); - * } - * }) - * }); - */ - add(id, plugin) { - if (plugins[id]) { - return plugins[id]; - } - - plugins[id] = plugin; - return plugin; - }, - - /** - * Returns plugin by ID - * @param {string} id Plugin ID - * @return {Function|undefined} Plugin - * @example - * var plugin = PluginManager.get('some-plugin'); - * plugin(editor); - */ - get(id) { - return plugins[id]; - }, - - /** - * Returns object with all plugins - * @return {Object} - */ - getAll() { - return plugins; - }, - }; -}; diff --git a/src/plugin_manager/index.ts b/src/plugin_manager/index.ts new file mode 100644 index 000000000..f506405bc --- /dev/null +++ b/src/plugin_manager/index.ts @@ -0,0 +1,56 @@ +import Editor from '../editor'; + +type PluginOptions = Record; + +export type Plugin = (editor: Editor, config: T) => void; + +export default class PluginManager { + plugins: Record = {}; + + /** + * Add new plugin. Plugins could not be overwritten + * @param {string} id Plugin ID + * @param {Function} plugin Function which contains all plugin logic + * @return {Function} The plugin function + * @deprecated Don't use named plugins, create plugins as simple functions. More about [Plugins](https://grapesjs.com/docs/modules/Plugins.html) + * @example + * PluginManager.add('some-plugin', function(editor) { + * editor.Commands.add('new-command', { + * run: function(editor, senderBtn){ + * console.log('Executed new-command'); + * } + * }) + * }); + */ + add(id: string, plugin: Plugin) { + const plg = this.get(id); + + if (plg) { + return plg; + } + + // @ts-ignore + this.plugins[id] = plugin; + + return plugin; + } + + /** + * Returns plugin by ID + * @param {string} id Plugin ID + * @return {Function|undefined} Plugin + * @example + * var plugin = PluginManager.get('some-plugin'); + * plugin(editor); + */ + get(id: string): Plugin | undefined { + return this.plugins[id]; + } + + /** + * Returns object with all plugins + */ + getAll() { + return this.plugins; + } +}