- Enabling the Slash Menu
- Configuring the Slash Menu Items
- Customizing the Popup Width and Height
- Adding Custom Slash Menu Items
Contact Support
Slash Menu in EJ2 JavaScript Rich text editor control
14 Oct 20249 minutes to read
The Slash Menu in the Rich Text Editor provides users with an efficient way to apply formatting, insert elements, and execute custom commands by simply typing the “/” character. This feature enhances the user experience by offering quick access to common editing actions within the editor.
Enabling the Slash Menu
To use the Slash Menu feature, inject Slash Menu module using the RichTextEditor.Inject(SlashMenu).
To enable the Slash Menu, set the enable
property within slashMenuSettings
to true
. By default, this feature is disabled. Once enabled, the Slash Menu will appear when the user types the “/” character in the editor.
Configuring the Slash Menu Items
The slashMenuSettings property allows customization of the items
displayed in the Slash Menu. By defining the items
property, a list of available commands can be provided for users to choose from when they type a slash (/) in the Rich Text Editor.
This list can include various formatting options such as paragraph and heading levels. Here’s an code snippet of configuring the Slash Menu items:
slashMenuSettings: {
enable: true,
items: ['Paragraph', 'Heading 1', 'Heading 2', 'Heading 3']
}
Customizing the Popup Width and Height
The size of the Slash Menu popup can be customized using the popupWidth
and popupHeight
properties within slashMenuSettings. Adjusting these values allows for control over the dimensions of the menu.
Below is an code snippet showing how to customize both the width and height of the popup:
slashMenuSettings: {
enable: true,
items: ['Paragraph', 'Heading 1', 'Heading 2', 'Heading 3'],
popupHeight: 300,
popupWidth: 250
}
Adding Custom Slash Menu Items
Custom items can be added by defining the items property inside slashMenuSettings. This property accepts either a string of predefined items or an array of objects representing custom menu items.
Each custom item object can include the following properties:
Property | Description |
---|---|
text | The label of the menu item. |
command | The action to be executed when the item is clicked. |
type | Groups related items in the Slash Menu. |
iconCss | Specifies the CSS class for the item’s icon. |
description | Provides a short description for the item. |
The following code demonstrates how to set up the Custom Slash Menu item in the Rich Text Editor to insert meeting notes and signature:
var meetingNotes = '<p><strong>Meeting Notes</strong></p><table class="e-rte-table" style="width: 100%; min-width: 0px; height: 150px;"> <tbody> <tr style="height: 20%;"> <td style="width: 50%;"><strong>Attendees</strong></td> <td style="width: 50%;" class=""><br></td> </tr> <tr style="height: 20%;"> <td style="width: 50%;"><strong>Date & Time</strong></td> <td style="width: 50%;"><br></td> </tr> <tr style="height: 20%;"> <td style="width: 50%;"><strong>Agenda</strong></td> <td style="width: 50%;"><br></td> </tr> <tr style="height: 20%;"> <td style="width: 50%;"><strong>Discussed Items</strong></td> <td style="width: 50%;"><br></td> </tr> <tr style="height: 20%;"> <td style="width: 50%;"><strong>Action Items</strong></td> <td style="width: 50%;"><br></td> </tr> </tbody> </table>';
var signature = '<p><br></p><p>Warm regards,</p><p>John Doe<br>Event Coordinator<br>ABC Company</p>';
var formatRTE = new ej.richtexteditor.RichTextEditor({
toolbarSettings: {
items: ['Bold', 'Italic', 'Underline', 'StrikeThrough', 'SuperScript', 'SubScript', '|',
'FontName', 'FontSize', 'FontColor', 'BackgroundColor', '|',
'LowerCase', 'UpperCase', '|',
'Formats', 'Alignments', 'Blockquote', '|', 'NumberFormatList', 'BulletFormatList', '|',
'Outdent', 'Indent', '|', 'CreateLink', 'Image', 'Video', 'Audio', 'CreateTable', '|', 'FormatPainter', 'ClearFormat',
'|', 'EmojiPicker', '|',
'SourceCode', '|', 'Undo', 'Redo']
},
slashMenuSettings: {
enable: true,
items: ['Paragraph', 'Heading 1', 'Heading 2', 'Heading 3', 'Heading 4', 'OrderedList', 'UnorderedList',
'CodeBlock', 'Blockquote', 'Link', 'Image','Video', 'Audio', 'Table', 'Emojipicker',
{
text: 'Meeting notes',
description: 'Insert a meeting note template.',
iconCss: 'e-icons e-description',
type: 'Custom',
command: 'MeetingNotes'
},
{
text: 'Signature',
description: 'Insert a signature template.',
iconCss: 'e-icons e-signature',
type: 'Custom',
command: 'Signature'
}
]
},
slashMenuItemSelect: function(args) {
if (args.itemData.command === 'MeetingNotes') {
formatRTE.executeCommand('insertHTML', meetingNotes, {undo: true});
}
if (args.itemData.command === 'Signature') {
formatRTE.executeCommand('insertHTML', signature, {undo: true});
}
},
placeholder: 'Type "/" and choose format',
});
formatRTE.appendTo('#slashMenuEditor');
<!DOCTYPE html><html lang="en"><head>
<title>Essential JS 2 Rich Text Editor</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Typescript UI Controls">
<meta name="author" content="Syncfusion">
<link href="index.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/29.1.33/ej2-base/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/29.1.33/ej2-richtexteditor/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/29.1.33/ej2-inputs/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/29.1.33/ej2-lists/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/29.1.33/ej2-navigations/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/29.1.33/ej2-popups/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/29.1.33/ej2-buttons/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/29.1.33/ej2-splitbuttons/styles/material.css" rel="stylesheet">
<script src="https://cdn.syncfusion.com/ej2/29.1.33/dist/ej2.min.js" type="text/javascript"></script>
<script src="https://cdn.syncfusion.com/ej2/syncfusion-helper.js" type ="text/javascript"></script>
</head>
<body>
<div class="control-section e-rte-emoticon-tbar-section">
<div class="sample-container">
<div class="default-section" id="mentionFormatIntegration">
<div id="slashMenuEditor"></div>
</div>
</div>
</div>
<script>
var ele = document.getElementById('container');
if(ele) {
ele.style.visibility = "visible";
}
</script>
<script src="index.js" type="text/javascript"></script>
</body></html>