mirror of
https://github.com/BookStackApp/BookStack.git
synced 2025-04-22 16:23:06 +03:00
63 lines
2.2 KiB
TypeScript
63 lines
2.2 KiB
TypeScript
import {$isListNode, ListNode, ListType} from "@lexical/list";
|
|
import {EditorButtonDefinition} from "../../framework/buttons";
|
|
import {EditorUiContext} from "../../framework/core";
|
|
import {
|
|
BaseSelection,
|
|
LexicalNode,
|
|
} from "lexical";
|
|
import listBulletIcon from "@icons/editor/list-bullet.svg";
|
|
import listNumberedIcon from "@icons/editor/list-numbered.svg";
|
|
import listCheckIcon from "@icons/editor/list-check.svg";
|
|
import indentIncreaseIcon from "@icons/editor/indent-increase.svg";
|
|
import indentDecreaseIcon from "@icons/editor/indent-decrease.svg";
|
|
import {
|
|
$selectionContainsNodeType,
|
|
} from "../../../utils/selection";
|
|
import {toggleSelectionAsList} from "../../../utils/formats";
|
|
import {$setInsetForSelection} from "../../../utils/lists";
|
|
|
|
|
|
function buildListButton(label: string, type: ListType, icon: string): EditorButtonDefinition {
|
|
return {
|
|
label,
|
|
icon,
|
|
action(context: EditorUiContext) {
|
|
toggleSelectionAsList(context.editor, type);
|
|
},
|
|
isActive(selection: BaseSelection|null): boolean {
|
|
return $selectionContainsNodeType(selection, (node: LexicalNode | null | undefined): boolean => {
|
|
return $isListNode(node) && (node as ListNode).getListType() === type;
|
|
});
|
|
}
|
|
};
|
|
}
|
|
|
|
export const bulletList: EditorButtonDefinition = buildListButton('Bullet list', 'bullet', listBulletIcon);
|
|
export const numberList: EditorButtonDefinition = buildListButton('Numbered list', 'number', listNumberedIcon);
|
|
export const taskList: EditorButtonDefinition = buildListButton('Task list', 'check', listCheckIcon);
|
|
|
|
export const indentIncrease: EditorButtonDefinition = {
|
|
label: 'Increase indent',
|
|
icon: indentIncreaseIcon,
|
|
action(context: EditorUiContext) {
|
|
context.editor.update(() => {
|
|
$setInsetForSelection(context.editor, 40);
|
|
});
|
|
},
|
|
isActive() {
|
|
return false;
|
|
}
|
|
};
|
|
|
|
export const indentDecrease: EditorButtonDefinition = {
|
|
label: 'Decrease indent',
|
|
icon: indentDecreaseIcon,
|
|
action(context: EditorUiContext) {
|
|
context.editor.update(() => {
|
|
$setInsetForSelection(context.editor, -40);
|
|
});
|
|
},
|
|
isActive() {
|
|
return false;
|
|
}
|
|
}; |