import {
$createNodeSelection,
$createParagraphNode, $getRoot, $getSelection, $insertNodes,
- $isParagraphNode, $setSelection,
+ $isParagraphNode, $isTextNode, $setSelection,
BaseSelection, ElementNode, FORMAT_TEXT_COMMAND,
LexicalNode,
REDO_COMMAND, TextFormatType,
export const superscript: EditorButtonDefinition = buildFormatButton('Superscript', 'superscript');
export const subscript: EditorButtonDefinition = buildFormatButton('Subscript', 'subscript');
export const code: EditorButtonDefinition = buildFormatButton('Inline Code', 'code');
-// Todo - Clear formatting
+export const clearFormating: EditorButtonDefinition = {
+ label: 'Clear formatting',
+ action(context: EditorUiContext) {
+ context.editor.update(() => {
+ const selection = $getSelection();
+ for (const node of selection?.getNodes() || []) {
+ if ($isTextNode(node)) {
+ node.setFormat(0);
+ }
+ }
+ });
+ },
+ isActive() {
+ return false;
+ }
+};
export const link: EditorButtonDefinition = {
import {EditorButton, FormatPreviewButton} from "./framework/buttons";
import {
- blockquote, bold, code,
+ blockquote, bold, clearFormating, code,
dangerCallout, details,
h2, h3, h4, h5, image,
infoCallout, italic, link, paragraph,
export function getMainEditorFullToolbar(): EditorContainerUiElement {
return new EditorSimpleClassContainer('editor-toolbar-main', [
+ // History state
new EditorButton(undo),
new EditorButton(redo),
+ // Block formats
new EditorFormatMenu([
new FormatPreviewButton(el('h2'), h2),
new FormatPreviewButton(el('h3'), h3),
new FormatPreviewButton(el('p', {class: 'callout danger'}), dangerCallout),
]),
+ // Inline formats
new EditorButton(bold),
new EditorButton(italic),
new EditorButton(underline),
new EditorButton(superscript),
new EditorButton(subscript),
new EditorButton(code),
+ new EditorButton(clearFormating),
+ // Insert types
new EditorButton(link),
new EditorButton(image),
new EditorButton(details),
+ // Meta elements
new EditorButton(source),
]);
}
\ No newline at end of file