• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

worktile / slate-angular / 2241d398-cf7c-4f79-b1b3-923ba1e05d17

11 Jul 2025 07:46AM CUT coverage: 48.44%. Remained the same
2241d398-cf7c-4f79-b1b3-923ba1e05d17

push

circleci

pubuzhixing8
build: release 19.1.0-next.3

364 of 925 branches covered (39.35%)

Branch coverage included in aggregate %.

940 of 1767 relevant lines covered (53.2%)

44.6 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

26.32
/packages/src/plugins/angular-editor.ts
1
import { Editor, Node, Path, Transforms, Element } from 'slate';
2
import { Injector } from '@angular/core';
3
import { SlateError } from '../types/error';
4
import { FAKE_LEFT_BLOCK_CARD_OFFSET, FAKE_RIGHT_BLOCK_CARD_OFFSET } from '../utils/block-card';
5
import { CustomDOMEditor } from './with-dom';
6

7
/**
8
 * An Angular and DOM-specific version of the `Editor` interface.
9
 */
10
export interface AngularEditor extends CustomDOMEditor {
11
    deleteCutData: () => void;
12
    onKeydown: (event: KeyboardEvent) => void;
13
    onClick: (event: MouseEvent) => void;
14
    injector: Injector;
15
    isBlockCard: (node: Node) => boolean;
16
    isExpanded: (node: Element) => boolean;
17
    onError: (errorData: SlateError) => void;
18
    customInsertFragmentData: (data: DataTransfer) => Promise<boolean>;
19
    customInsertTextData: (data: DataTransfer) => Promise<boolean>;
20
}
21

22
export const AngularEditor = {
1✔
23
    ...CustomDOMEditor,
24
    /**
25
     * handle editor error.
26
     */
27

28
    onError(errorData: SlateError) {
29
        if (errorData.nativeError) {
×
30
            throw errorData.nativeError;
×
31
        }
32
    },
33

34
    /**
35
     * onKeydown hook.
36
     */
37
    onKeydown(editor: AngularEditor, data: KeyboardEvent): void {
38
        editor.onKeydown(data);
×
39
    },
40

41
    /**
42
     * onClick hook.
43
     */
44
    onClick(editor: AngularEditor, data: MouseEvent): void {
45
        editor.onClick(data);
×
46
    },
47

48
    deleteCutData(editor: AngularEditor): void {
49
        editor.deleteCutData();
×
50
    },
51

52
    isLeafBlock(editor: AngularEditor, node: Node): boolean {
53
        return Element.isElement(node) && !editor.isInline(node) && Editor.hasInlines(editor, node);
159✔
54
    },
55

56
    /**
57
     * move native selection to card-left or card-right
58
     * @param editor
59
     * @param blockCardNode
60
     * @param options
61
     */
62
    moveBlockCard(
63
        editor: AngularEditor,
64
        blockCardNode: Node,
65
        options: {
66
            direction: 'left' | 'right';
67
        }
68
    ) {
69
        const cursorNode = AngularEditor.getCardCursorNode(editor, blockCardNode, options);
×
70
        const window = AngularEditor.getWindow(editor);
×
71
        const domSelection = window.getSelection();
×
72
        domSelection.setBaseAndExtent(cursorNode, 1, cursorNode, 1);
×
73
    },
74

75
    /**
76
     * move slate selection to card-left or card-right
77
     * @param editor
78
     * @param path
79
     * @param options
80
     */
81
    moveBlockCardCursor(
82
        editor: AngularEditor,
83
        path: Path,
84
        options: {
85
            direction: 'left' | 'right';
86
        }
87
    ) {
88
        const cursor = {
×
89
            path,
90
            offset: options.direction === 'left' ? FAKE_LEFT_BLOCK_CARD_OFFSET : FAKE_RIGHT_BLOCK_CARD_OFFSET
×
91
        };
92
        Transforms.select(editor, { anchor: cursor, focus: cursor });
×
93
    }
94
};
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc