3.7 KiB
layout | title | title_nav | description | keywords |
---|---|---|---|---|
default | Context menu | Context menu | Context menu overview | contextmenu context menu contextmenuapi |
The context menu is a configurable component that appears when the user right clicks in the editable area. By default it does not disable the operating system's native context menu, if there are no items to display at the cursor position the native context menu will be shown.
The context menu supports both individual menu items and dynamic context menu sections.
Live example
{% include codepen.html id="context-menu" %}
Options
#{% include configuration/contextmenu.md %}
#{% include configuration/contextmenu_never_use_native.md %}
Registering context menu sections
The structure of context menu sections is a simple query system indexed by name. We strongly recommend using the name of the plugin as the context menu name for ease of configuration.
In the menu shown to the user, sections are delineated by separators. Sections can return an empty array of menu items to indicate that section has no applicable items to the current context and should not be shown.
type ContextMenuApi = {
update: (element: Element) => string | Array<ContextMenuContents>
}
editor.ui.registry.addContextMenu(name: string, feature: ContextMenuApi);
Every time the user opens the context menu, the selected element is passed to the update function which must return either a space separated string or an array of items to display. The types of the items returned are as follows:
type ContextMenuContents = string | ContextMenuItem | SeparatorMenuItemApi | ContextSubMenu
type ContextMenuItem = {
type?: 'item';
text: string;
icon?: string;
onAction: () => void;
}
type ContextSubMenu = {
type: 'submenu';
text: string;
icon?: string;
getSubmenuItems: () => string | Array<ContextMenuContents>;
}
type SeparatorMenuItemApi = {
type: 'separator'
}
The most common type to use is string
, which references an existing registered menu item.
ContextMenuItem
, ContextSubMenu
and SeparatorMenuItemApi
types are intended for use by plugins with completely dynamic menu requirements, where registering each menu item is not necessary. For example, the spellchecker shows a list of suggestions specific to the selected word.
When creating a dynamic menu, the structure type
properties are used in order to support untyped API usage:
- type
item
(default) is a regular menu item, and must have anonAction
method. - type
submenu
must havegetSubmenuItems
, and if it has anonAction
property it is ignored. - type
separator
ignores all other properties.
Defining a context menu section
This example shows how the image plugin dynamically adds the standard image menu section to the context menu. The image context menu section is empty unless the selected element is an image.
{% include codepen.html id="contextmenu-section" height="600" tab="js" %}