Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add editor.tools API, to update the tools' user provided config #2579

Open
wants to merge 3 commits into
base: next
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
- `New` — Toolbox now will be opened by '/' in empty Block instead of Tab
- `New` — Block Tunes now will be opened by 'CMD+/' instead of Tab in non-empty block
- `New` — Tab now will navigate through Blocks. In last block Tab will navigate to the next input on page.
- `New` - Adds `editor.tools` API, which can be used to update the tools' config without having to destroy & re-initialize the editor.
- `Fix` — Passing an empty array via initial data or `blocks.render()` won't break the editor
- `Fix` — Layout did not shrink when a large document cleared in Chrome
- `Fix` — Multiple Tooltip elements creation fixed
Expand Down
1 change: 1 addition & 0 deletions src/components/modules/api/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ export default class API extends Module {
selection: this.Editor.SelectionAPI.methods,
styles: this.Editor.StylesAPI.classes,
toolbar: this.Editor.ToolbarAPI.methods,
tools: this.Editor.ToolsAPI.methods,
inlineToolbar: this.Editor.InlineToolbarAPI.methods,
tooltip: this.Editor.TooltipAPI.methods,
i18n: this.Editor.I18nAPI.methods,
Expand Down
37 changes: 37 additions & 0 deletions src/components/modules/api/tools.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import { ToolConfig } from '../../../../types';
import { Tools } from '../../../../types/api';
import * as _ from '../../utils';
import Module from '../../__module';

/**
* @class ToolsAPI
* Provides methods for working with the Tools
*/
export default class ToolsAPI extends Module {
/**
* Available methods
*
* @returns {Tools}
*/
public get methods(): Tools {
return {
updateToolConfig: (toolName: string, config: ToolConfig) => this.updateToolConfig(toolName, config),
};
}

/**
* Update Tool's config
*
* @param toolName Name of the tool
* @param config Tools Config
*/
public updateToolConfig(toolName: string, config: ToolConfig): void {
const tool = this.Editor.Tools.available.get(toolName);

if (tool) {
tool.updateConfig(config);
} else {
_.log(`Incorrect toolName: ${toolName}`);
}
}
}
2 changes: 2 additions & 0 deletions src/components/modules/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import SelectionAPI from './api/selection';
import StylesAPI from './api/styles';
import ToolbarAPI from './api/toolbar';
import TooltipAPI from './api/tooltip';
import ToolsAPI from './api/tools';
import UiAPI from './api/ui';

/** ./toolbar */
Expand Down Expand Up @@ -55,6 +56,7 @@ export default {
StylesAPI,
ToolbarAPI,
TooltipAPI,
ToolsAPI,
UiAPI,

// Toolbar Modules
Expand Down
13 changes: 12 additions & 1 deletion src/components/tools/base.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Tool, ToolConstructable, ToolSettings } from '../../../types/tools';
import { Tool, ToolConfig, ToolConstructable, ToolSettings } from '../../../types/tools';
import { SanitizerConfig } from '../../../types';
import * as _ from '../utils';
import type InlineTool from './inline';
Expand Down Expand Up @@ -216,6 +216,17 @@ export default abstract class BaseTool<Type extends Tool = Tool> {
}
}

/**
* Update tool's current config
*
* @param {ToolConfig} config - Tool's config
*/
public updateConfig(config: ToolConfig): void {
if (this.config) {
this.config[UserSettings.Config] = config;
}
}

/**
* Calls Tool's prepare method
*/
Expand Down
2 changes: 2 additions & 0 deletions src/types-internal/editor-modules.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ import Renderer from '../components/modules/renderer';
import Saver from '../components/modules/saver';
import Tools from '../components/modules/tools';
import UI from '../components/modules/ui';
import ToolsAPI from '../components/modules/api/tools';

export interface EditorModules {
// API Modules
Expand All @@ -55,6 +56,7 @@ export interface EditorModules {
StylesAPI: StylesAPI,
ToolbarAPI: ToolbarAPI,
TooltipAPI: TooltipAPI,
ToolsAPI: ToolsAPI;
UiAPI: UiAPI,

// Toolbar Modules
Expand Down
1 change: 1 addition & 0 deletions types/api/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,4 @@ export * from './block';
export * from './readonly';
export * from './i18n';
export * from './ui';
export * from './tools';
14 changes: 14 additions & 0 deletions types/api/tools.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { ToolConfig } from '../tools';

/**
* Describes Tools API methods
*/
export interface Tools {
/**
* Updates tool's config
*
* @param toolName name of the tool
* @param config config of the tool
*/
updateToolConfig(toolName: string, config: ToolConfig): void
}
3 changes: 3 additions & 0 deletions types/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import {
Styles,
Toolbar,
Tooltip,
Tools,
I18n,
Ui,
} from './api';
Expand Down Expand Up @@ -115,6 +116,7 @@ export interface API {
toolbar: Toolbar;
inlineToolbar: InlineToolbar;
tooltip: Tooltip;
tools: Tools;
i18n: I18n;
readOnly: ReadOnly;
ui: Ui;
Expand All @@ -135,6 +137,7 @@ declare class EditorJS {
public selection: Selection;
public styles: Styles;
public toolbar: Toolbar;
public tools: Tools;
public inlineToolbar: InlineToolbar;
public readOnly: ReadOnly;
constructor(configuration?: EditorConfig|string);
Expand Down