am-editor-002/docs/config/toolbar.md

11 KiB

Toolbar configuration

Introduce the toolbar

//vue3 please use @aomao/toolbar-vue
//vue2 please use am-editor-toolbar-vue2
import Toolbar, { ToolbarPlugin, ToolbarComponent } from '@aomao/toolbar';

-Toolbar Toolbar component -ToolbarPlugin provides plugins to the engine -ToolbarComponent provides the card component to the engine

Except for the Toolbar component, the latter two are shortcuts to realize the toolbar card plug-in option when you press / in the editor

Types of

There are now four ways to display the toolbar

-button button -downdrop drop-down box -color color palette -collapse drop-down panel, the drop-down box that appears on the first button of the toolbar, and card-form components are basically placed here

Attributes

The attributes that the Toolbar component needs to pass in:

-An instance of the editor editor, which can be used to automatically invoke the plug-in execution -items plugin display configuration list

Configuration item

items is a two-dimensional array. We can put plugins of the same concept in a group for easy searching. After rendering, each group will be separated by a dividing line

items: [['collapse'], ['bold', 'italic']];

All the display forms of the existing plug-ins have been configured in the Toolbar component, and we can directly pass in the plug-in name to use these configurations. Of course, we can also pass in an object to cover part of the configuration

items: [
	['collapse'],
	[
		{
			name: 'bold',
			icon: 'icon',
			title: 'Prompt text',
		},
		'italic',
	],
];

If the default configuration is found through the name attribute, the type attribute will not be overwritten. If the configured name is not part of the default configuration, it will be processed according to the custom button

Collapse

Usually used to configure the card drop-down box

Need to specify type as collapse

className

Custom style name

icon

Optional

The button icon, which can be a React component, or a string of html in Vue

content

Optional

Button display content, will be displayed together with icon

It can be a React component, or it can be a string of html in Vue. Or a method, and return React component or html string

onSelect

List item selected event, return false, the default command of list item configuration will not be executed

onSelect?: (event: React.MouseEvent, name: string) => void | boolean;

groups

Group display

The groups property can be set to classify cards for different purposes as needed

If title is not filled in, the grouping style will not appear

// Display group information
items: [
	[
		{
			type: 'collapse',
			groups: [
				{
					title: 'File',
					items: ['image-uploader', 'file-uploader'],
				},
			],
		},
	],
];

// or do not display group information

items: [
	[
		{
			type: 'collapse',
			groups: [
				{
					items: ['bold', 'underline'],
				},
			],
		},
	],
];

items

Configure items of collapse

The following cards have been configured by default

'image-uploader',
'codeblock',
'table',
'file-uploader',
'video-uploader',
'math',
'status',

We can specify name as the name of an existing card, and configure other options to override the default configuration.

Of course, we can also specify other names to complete custom item

items: [
	[
		{
			type: 'collapse',
			groups: [
				{
					items: [{ name: 'codeblock', content: 'I am CodeBlock' }],
				},
			],
		},
	],
];

The basic properties are the same as the button properties, which can be viewed in the following part of the article, here are the special properties relative to the button

To query characters, in the toolbar plug-in, we can use / to call up shortcut options in the editor, and search for related cards, so you can specify a combination of related keywords and characters here

description

List item description, can return a React component, or Vue can return html string

prompt

The content that needs to be rendered when the mouse is moved into the list item can return a React component, or Vue can return a html string

The effect is similar to the table card item. After the input is moved in, a table with selected columns and rows will be displayed

onClick

List item click event, return false will not execute the configured default command

onClick?: (event: React.MouseEvent, name: string) => void | boolean;

Button

button configuration properties

Configure in the toolbar items, you need to specify the type as button

items:[
    [
        {
            type:'button',
            name:'test',
            ...
        }
    ]
]

name

Button name

If the button name is the same as the toolbar default configuration item name, then the default configuration will be overwritten, otherwise it will be used as a custom button

icon

Optional

The button icon, which can be a React component, or a string of html in Vue

content

Optional

Button display content, will be displayed together with icon

It can be a React component, or it can be a string of html in Vue. Or a method, and return React component or html string

title

The prompt message displayed when the mouse moves into the button

placement

Set the location of the prompt message

placement?:
    |'right'
    |'top'
    |'left'
    |'bottom'
    |'topLeft'
    |'topRight'
    |'bottomLeft'
    |'bottomRight'
    |'leftTop'
    |'leftBottom'
    |'rightTop'
    |'rightBottom';

hotkey

Whether to display the hot key, or set the information of the hot key

The default is to display the hotkey to the prompt message (title), and use the name information to find the hotkey set by the plug-in

hotkey?: boolean | string;

autoExecute

When the button is clicked, whether to automatically execute the plug-in command, it is enabled by default

command

Plug-in command or parameter

If this parameter is configured and the autoExecute property is enabled, when the button is clicked, this configuration is called to execute the plug-in command

If name is configured, execute the plugin corresponding to name, otherwise execute the plugin corresponding to name specified by button

If there is a configuration of args or command as a pure array, it will be passed as a parameter to the command to execute the plugin

command?: {name: string; args: Array<any>} | Array<any>;

className

Configure the style name for the button

onClick

Mouse click event

If it returns false, the plugin command will not be executed automatically

onClick?: (event: React.MouseEvent) => void | boolean;

onMouseDown

Mouse button press event

onMouseDown?: (event: React.MouseEvent) => void;

onMouseEnter

Mouse in button event

onMouseEnter?: (event: React.MouseEvent) => void;

onMouseLeave

Mouse off button event

onMouseLeave?: (event: React.MouseEvent) => void;

onActive

The custom button is activated and selected, and the plug-in engine.command.queryState method is called by default

onActive?: () => boolean;

onDisabled

The custom button is disabled, and the plugin engine.command.queryEnabled is called by default

onDisabled?: () => boolean;

Dropdown

dropdown configuration properties

Configure in the toolbar items, you need to specify type as dropdown

items:[
    [
        {
            type:'dropdown',
            name:'test',
            items: [
                {
                    key:'item1',
                    content:'item1'
                }
            ]
            ...
        }
    ]
]

items

Drop-down list items, similar to buttons

items:[{
    key: string;
    icon?: React.ReactNode;
    content?: React.ReactNode | (() => React.ReactNode);
    hotkey?: boolean | string;
    isDefault?: boolean;
    title?: string;
    placement?:
        |'right'
        |'top'
        |'left'
        |'bottom'
        |'topLeft'
        |'topRight'
        |'bottomLeft'
        |'bottomRight'
        |'leftTop'
        |'leftBottom'
        |'rightTop'
        |'rightBottom';
    className?: string;
    disabled?: boolean;
    command?: {name: string; args: Array<any>} | Array<any>;
    autoExecute?: boolean;
}]

name

Drop-down list name

If the name is the same as the toolbar default configuration item name, then the default existing configuration will be overwritten, otherwise it will be used as a custom drop-down list

icon

Optional

The button icon, which can be a React component, or a string of html in Vue

content

Optional

Button display content, will be displayed together with icon

It can be a React component, or it can be a string of html in Vue. Or a method, and return React component or html string

title

The prompt message displayed when the mouse moves into the button

values

The selected value in the drop-down list is obtained by engine.command.queryState by default. If there is a configuration of onActive, the value will be obtained from the custom onActive

values?: string | Array<string>;

single

Single selection or multiple selection

single?: boolean;

className

Drop-down list style

direction

Arrangement direction vertical | horizontal

direction?:'vertical' |'horizontal';

onSelect

List item selection event, return false will not automatically execute the command configured for the selected item

onSelect?: (event: React.MouseEvent, key: string) => void | boolean;

hasArrow

Whether to show the drop-down arrow

hasArrow?: boolean;

hasDot

Whether to display the check effect after the selected value

hasDot?: boolean;

renderContent

Custom render the content displayed after the drop-down list is selected, the default is the icon or content configured by the drop-down list

Can return React components or Vue can return html strings

renderContent?: (item: DropdownListItem) => React.ReactNode;

onActive

The custom button is activated and selected, and the plug-in engine.command.queryState method is called by default

onActive?: () => boolean;

onDisabled

The custom button is disabled, and the plugin engine.command.queryEnabled is called by default

onDisabled?: () => boolean;

Default configuration of all plugins

[
	['collapse'],
	['undo', 'redo', 'paintformat', 'removeformat'],
	['heading', 'fontfamily', 'fontsize'],
	['bold', 'italic', 'strikethrough', 'underline', 'moremark'],
	['fontcolor', 'backcolor'],
	['alignment'],
	['unorderedlist', 'orderedlist', 'tasklist', 'indent', 'line-height'],
	['link', 'quote', 'hr'],
];

These default configuration details can be found here:

React: https://github.com/yanmao-cc/am-editor/blob/master/packages/toolbar/src/config/toolbar/index.tsx

Vue3: https://github.com/yanmao-cc/am-editor/blob/master/packages/toolbar-vue/src/config/index.ts

Vue2: https://github.com/zb201307/am-editor-vue2/blob/main/packages/toolbar/src/config/index.ts