Custom Toggle menu items
A toggle menu item triggers its onAction when clicked. It also has a concept of state. This means it can be toggled on and off. A toggle menu item gives the user visual feedback for its state through a checkmark that appears to the right of the menu item’s text when it is on.
Options
| Name | Value | Requirement | Description |
|---|---|---|---|
text |
string |
optional |
Text to display. |
icon |
string |
optional |
Name of the icon to be displayed. Must correspond to an icon: in the icon pack, in a custom icon pack, or added using the |
value |
string |
optional |
A value to associate with the menu item. |
active |
boolean |
optional |
default: |
enabled |
boolean |
optional |
default: |
onSetup |
|
optional |
default: |
onAction |
|
required |
Function invoked when the menu item is clicked. |
context |
string |
optional |
default: |
API
| Name | Value | Description |
|---|---|---|
isActive |
|
Checks if the menu item is active. |
setActive |
|
Sets the menu item’s active state. |
isEnabled |
|
Checks if the menu item is enabled. |
setEnabled |
|
Sets the menu item’s enabled state. |
Example: creating a toggle menu item
// Menu items are recreated when the menu is closed and opened, so we need
// a variable to store the toggle menu item state.
let toggleState = false;
tinymce.init({
selector: 'textarea',
menu: {
custom: { title: 'Custom Menu', items: 'undo redo toggleitem' }
},
menubar: 'file edit custom',
setup: (editor) => {
editor.ui.registry.addToggleMenuItem('toggleitem', {
text: 'My toggle menu item',
icon: 'home',
onAction: () => {
toggleState = !toggleState;
alert('Toggle menu item clicked');
},
onSetup: (api) => {
api.setActive(toggleState);
return () => {};
}
});
}
});
Using onSetup
onSetup accepts a function that receives the component’s API. This function should return a callback that returns nothing after being passed the component’s API. This occurs because onSetup runs whenever the component is rendered, and the callback returned by onSetup is executed when the component is destroyed. The function returned from onSetup is essentially an onTeardown handler, and can be used to unbind events and callbacks.
To clarify, in code onSetup may look like this:
onSetup: (api) => {
// Runs when the component is created
// Configure the component or bind event listeners
return (api) => {
// Runs when the component is destroyed
// Unbind event listeners or clean up resources
};
};
To bind a callback function to an editor event use +editor.off(eventName, callback)`]. To unbind an event listener use `xref:apis/tinymce.editor.adoc#off[`+editor.off(eventName, callback). Any event listeners should be unbound in the teardown callback. The only editor event which does not need to be unbound is `init e.g. editor.on('init', callback).
|