decap-cms-widget-markdown 2.16.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +820 -0
- package/LICENSE +22 -0
- package/README.md +9 -0
- package/dist/decap-cms-widget-markdown.js +9 -0
- package/dist/decap-cms-widget-markdown.js.LICENSE.txt +37 -0
- package/dist/decap-cms-widget-markdown.js.map +1 -0
- package/dist/esm/MarkdownControl/RawEditor.js +106 -0
- package/dist/esm/MarkdownControl/Toolbar.js +216 -0
- package/dist/esm/MarkdownControl/ToolbarButton.js +43 -0
- package/dist/esm/MarkdownControl/VisualEditor.js +268 -0
- package/dist/esm/MarkdownControl/components/Shortcode.js +78 -0
- package/dist/esm/MarkdownControl/components/VoidBlock.js +55 -0
- package/dist/esm/MarkdownControl/index.js +129 -0
- package/dist/esm/MarkdownControl/plugins/BreakToDefaultBlock.js +34 -0
- package/dist/esm/MarkdownControl/plugins/CloseBlock.js +36 -0
- package/dist/esm/MarkdownControl/plugins/CommandsAndQueries.js +188 -0
- package/dist/esm/MarkdownControl/plugins/ForceInsert.js +49 -0
- package/dist/esm/MarkdownControl/plugins/Hotkey.js +35 -0
- package/dist/esm/MarkdownControl/plugins/LineBreak.js +21 -0
- package/dist/esm/MarkdownControl/plugins/Link.js +56 -0
- package/dist/esm/MarkdownControl/plugins/blocks/defaultEmptyBlock.js +16 -0
- package/dist/esm/MarkdownControl/plugins/blocks/events/keyDown.js +47 -0
- package/dist/esm/MarkdownControl/plugins/blocks/events/keyDownBackspace.js +26 -0
- package/dist/esm/MarkdownControl/plugins/blocks/events/keyDownEnter.js +28 -0
- package/dist/esm/MarkdownControl/plugins/blocks/events/toggleBlock.js +46 -0
- package/dist/esm/MarkdownControl/plugins/blocks/locations/areCurrentAndPreviousBlocksOfType.js +20 -0
- package/dist/esm/MarkdownControl/plugins/blocks/locations/getListTypeAtCursor.js +16 -0
- package/dist/esm/MarkdownControl/plugins/blocks/locations/isCursorAtEndOfParagraph.js +19 -0
- package/dist/esm/MarkdownControl/plugins/blocks/locations/isCursorAtStartOfBlockType.js +19 -0
- package/dist/esm/MarkdownControl/plugins/blocks/locations/isCursorAtStartOfNonEmptyHeading.js +20 -0
- package/dist/esm/MarkdownControl/plugins/blocks/locations/isCursorInBlockType.js +20 -0
- package/dist/esm/MarkdownControl/plugins/blocks/locations/isCursorInNonDefaultBlock.js +20 -0
- package/dist/esm/MarkdownControl/plugins/blocks/transforms/splitIntoParagraph.js +23 -0
- package/dist/esm/MarkdownControl/plugins/blocks/transforms/unwrapIfCursorAtStart.js +36 -0
- package/dist/esm/MarkdownControl/plugins/blocks/transforms/wrapListItemsInBlock.js +27 -0
- package/dist/esm/MarkdownControl/plugins/blocks/withBlocks.js +19 -0
- package/dist/esm/MarkdownControl/plugins/inlines/events/keyDown.js +39 -0
- package/dist/esm/MarkdownControl/plugins/inlines/events/keyDownShiftEnter.js +27 -0
- package/dist/esm/MarkdownControl/plugins/inlines/events/toggleLink.js +24 -0
- package/dist/esm/MarkdownControl/plugins/inlines/events/toggleMark.js +18 -0
- package/dist/esm/MarkdownControl/plugins/inlines/locations/isMarkActive.js +17 -0
- package/dist/esm/MarkdownControl/plugins/inlines/selectors/getActiveLink.js +15 -0
- package/dist/esm/MarkdownControl/plugins/inlines/transforms/unwrapLink.js +14 -0
- package/dist/esm/MarkdownControl/plugins/inlines/transforms/wrapLink.js +45 -0
- package/dist/esm/MarkdownControl/plugins/inlines/withInlines.js +23 -0
- package/dist/esm/MarkdownControl/plugins/lists/events/keyDown.js +38 -0
- package/dist/esm/MarkdownControl/plugins/lists/events/keyDownBackspace.js +29 -0
- package/dist/esm/MarkdownControl/plugins/lists/events/keyDownEnter.js +44 -0
- package/dist/esm/MarkdownControl/plugins/lists/events/keyDownShiftTab.js +32 -0
- package/dist/esm/MarkdownControl/plugins/lists/events/keyDownTab.js +57 -0
- package/dist/esm/MarkdownControl/plugins/lists/events/toggleListType.js +29 -0
- package/dist/esm/MarkdownControl/plugins/lists/locations/isCursorAtListItemStart.js +18 -0
- package/dist/esm/MarkdownControl/plugins/lists/locations/isCursorAtNoninitialParagraphStart.js +17 -0
- package/dist/esm/MarkdownControl/plugins/lists/locations/isCursorInItemContainingNestedList.js +14 -0
- package/dist/esm/MarkdownControl/plugins/lists/locations/isCursorInListItem.js +20 -0
- package/dist/esm/MarkdownControl/plugins/lists/locations/isSelectionWithinNoninitialListItem.js +18 -0
- package/dist/esm/MarkdownControl/plugins/lists/selectors/getListContainedInListItem.js +18 -0
- package/dist/esm/MarkdownControl/plugins/lists/selectors/getLowestAncestorList.js +15 -0
- package/dist/esm/MarkdownControl/plugins/lists/selectors/getLowestAncestorQuote.js +15 -0
- package/dist/esm/MarkdownControl/plugins/lists/transforms/changeListType.js +24 -0
- package/dist/esm/MarkdownControl/plugins/lists/transforms/convertParagraphToListItem.js +27 -0
- package/dist/esm/MarkdownControl/plugins/lists/transforms/liftFirstMatchedParent.js +20 -0
- package/dist/esm/MarkdownControl/plugins/lists/transforms/liftListItem.js +37 -0
- package/dist/esm/MarkdownControl/plugins/lists/transforms/mergeWithPreviousListItem.js +19 -0
- package/dist/esm/MarkdownControl/plugins/lists/transforms/moveListToListItem.js +18 -0
- package/dist/esm/MarkdownControl/plugins/lists/transforms/splitListItem.js +37 -0
- package/dist/esm/MarkdownControl/plugins/lists/transforms/splitToNestedList.js +37 -0
- package/dist/esm/MarkdownControl/plugins/lists/transforms/unwrapFirstMatchedParent.js +14 -0
- package/dist/esm/MarkdownControl/plugins/lists/transforms/unwrapSelectionFromList.js +25 -0
- package/dist/esm/MarkdownControl/plugins/lists/transforms/wrapFirstMatchedParent.js +14 -0
- package/dist/esm/MarkdownControl/plugins/lists/transforms/wrapSelectionInList.js +27 -0
- package/dist/esm/MarkdownControl/plugins/lists/withLists.js +67 -0
- package/dist/esm/MarkdownControl/plugins/matchers/lowestMatchedAncestor.js +13 -0
- package/dist/esm/MarkdownControl/plugins/matchers/matchLink.js +14 -0
- package/dist/esm/MarkdownControl/plugins/matchers/matchedAncestors.js +15 -0
- package/dist/esm/MarkdownControl/plugins/shortcodes/insertShortcode.js +35 -0
- package/dist/esm/MarkdownControl/plugins/shortcodes/locations/isCursorInEmptyParagraph.js +20 -0
- package/dist/esm/MarkdownControl/plugins/shortcodes/withShortcodes.js +30 -0
- package/dist/esm/MarkdownControl/plugins/util.js +18 -0
- package/dist/esm/MarkdownControl/renderers.js +326 -0
- package/dist/esm/MarkdownPreview.js +47 -0
- package/dist/esm/index.js +31 -0
- package/dist/esm/regexHelper.js +151 -0
- package/dist/esm/schema.js +35 -0
- package/dist/esm/serializers/index.js +233 -0
- package/dist/esm/serializers/rehypePaperEmoji.js +24 -0
- package/dist/esm/serializers/remarkAllowHtmlEntities.js +55 -0
- package/dist/esm/serializers/remarkAssertParents.js +89 -0
- package/dist/esm/serializers/remarkEscapeMarkdownEntities.js +271 -0
- package/dist/esm/serializers/remarkImagesToText.js +41 -0
- package/dist/esm/serializers/remarkPaddedLinks.js +127 -0
- package/dist/esm/serializers/remarkRehypeShortcodes.js +93 -0
- package/dist/esm/serializers/remarkShortcodes.js +123 -0
- package/dist/esm/serializers/remarkSlate.js +518 -0
- package/dist/esm/serializers/remarkSquashReferences.js +88 -0
- package/dist/esm/serializers/remarkStripTrailingBreaks.js +61 -0
- package/dist/esm/serializers/remarkWrapHtml.js +24 -0
- package/dist/esm/serializers/slateRemark.js +512 -0
- package/dist/esm/styles.js +18 -0
- package/dist/esm/types.js +10 -0
- package/package.json +64 -0
- package/src/MarkdownControl/RawEditor.js +100 -0
- package/src/MarkdownControl/Toolbar.js +278 -0
- package/src/MarkdownControl/ToolbarButton.js +48 -0
- package/src/MarkdownControl/VisualEditor.js +293 -0
- package/src/MarkdownControl/__tests__/VisualEditor.spec.js +56 -0
- package/src/MarkdownControl/__tests__/__snapshots__/parser.spec.js.snap +543 -0
- package/src/MarkdownControl/__tests__/parser.spec.js +668 -0
- package/src/MarkdownControl/components/Shortcode.js +74 -0
- package/src/MarkdownControl/components/VoidBlock.js +58 -0
- package/src/MarkdownControl/index.js +125 -0
- package/src/MarkdownControl/plugins/BreakToDefaultBlock.js +23 -0
- package/src/MarkdownControl/plugins/CloseBlock.js +25 -0
- package/src/MarkdownControl/plugins/CommandsAndQueries.js +156 -0
- package/src/MarkdownControl/plugins/ForceInsert.js +38 -0
- package/src/MarkdownControl/plugins/Hotkey.js +29 -0
- package/src/MarkdownControl/plugins/LineBreak.js +15 -0
- package/src/MarkdownControl/plugins/Link.js +40 -0
- package/src/MarkdownControl/plugins/blocks/defaultEmptyBlock.js +8 -0
- package/src/MarkdownControl/plugins/blocks/events/keyDown.js +47 -0
- package/src/MarkdownControl/plugins/blocks/events/keyDownBackspace.js +27 -0
- package/src/MarkdownControl/plugins/blocks/events/keyDownEnter.js +26 -0
- package/src/MarkdownControl/plugins/blocks/events/toggleBlock.js +39 -0
- package/src/MarkdownControl/plugins/blocks/locations/areCurrentAndPreviousBlocksOfType.js +15 -0
- package/src/MarkdownControl/plugins/blocks/locations/getListTypeAtCursor.js +11 -0
- package/src/MarkdownControl/plugins/blocks/locations/isCursorAtEndOfParagraph.js +14 -0
- package/src/MarkdownControl/plugins/blocks/locations/isCursorAtStartOfBlockType.js +14 -0
- package/src/MarkdownControl/plugins/blocks/locations/isCursorAtStartOfNonEmptyHeading.js +22 -0
- package/src/MarkdownControl/plugins/blocks/locations/isCursorInBlockType.js +27 -0
- package/src/MarkdownControl/plugins/blocks/locations/isCursorInNonDefaultBlock.js +17 -0
- package/src/MarkdownControl/plugins/blocks/transforms/splitIntoParagraph.js +13 -0
- package/src/MarkdownControl/plugins/blocks/transforms/unwrapIfCursorAtStart.js +30 -0
- package/src/MarkdownControl/plugins/blocks/transforms/wrapListItemsInBlock.js +11 -0
- package/src/MarkdownControl/plugins/blocks/withBlocks.js +15 -0
- package/src/MarkdownControl/plugins/inlines/events/keyDown.js +38 -0
- package/src/MarkdownControl/plugins/inlines/events/keyDownShiftEnter.js +28 -0
- package/src/MarkdownControl/plugins/inlines/events/toggleLink.js +17 -0
- package/src/MarkdownControl/plugins/inlines/events/toggleMark.js +13 -0
- package/src/MarkdownControl/plugins/inlines/locations/isMarkActive.js +11 -0
- package/src/MarkdownControl/plugins/inlines/selectors/getActiveLink.js +10 -0
- package/src/MarkdownControl/plugins/inlines/transforms/unwrapLink.js +9 -0
- package/src/MarkdownControl/plugins/inlines/transforms/wrapLink.js +30 -0
- package/src/MarkdownControl/plugins/inlines/withInlines.js +20 -0
- package/src/MarkdownControl/plugins/lists/events/keyDown.js +34 -0
- package/src/MarkdownControl/plugins/lists/events/keyDownBackspace.js +31 -0
- package/src/MarkdownControl/plugins/lists/events/keyDownEnter.js +39 -0
- package/src/MarkdownControl/plugins/lists/events/keyDownShiftTab.js +27 -0
- package/src/MarkdownControl/plugins/lists/events/keyDownTab.js +55 -0
- package/src/MarkdownControl/plugins/lists/events/toggleListType.js +23 -0
- package/src/MarkdownControl/plugins/lists/locations/isCursorAtListItemStart.js +13 -0
- package/src/MarkdownControl/plugins/lists/locations/isCursorAtNoninitialParagraphStart.js +11 -0
- package/src/MarkdownControl/plugins/lists/locations/isCursorInItemContainingNestedList.js +9 -0
- package/src/MarkdownControl/plugins/lists/locations/isCursorInListItem.js +21 -0
- package/src/MarkdownControl/plugins/lists/locations/isSelectionWithinNoninitialListItem.js +14 -0
- package/src/MarkdownControl/plugins/lists/selectors/getListContainedInListItem.js +12 -0
- package/src/MarkdownControl/plugins/lists/selectors/getLowestAncestorList.js +11 -0
- package/src/MarkdownControl/plugins/lists/selectors/getLowestAncestorQuote.js +11 -0
- package/src/MarkdownControl/plugins/lists/transforms/changeListType.js +16 -0
- package/src/MarkdownControl/plugins/lists/transforms/convertParagraphToListItem.js +19 -0
- package/src/MarkdownControl/plugins/lists/transforms/liftFirstMatchedParent.js +11 -0
- package/src/MarkdownControl/plugins/lists/transforms/liftListItem.js +30 -0
- package/src/MarkdownControl/plugins/lists/transforms/mergeWithPreviousListItem.js +13 -0
- package/src/MarkdownControl/plugins/lists/transforms/moveListToListItem.js +13 -0
- package/src/MarkdownControl/plugins/lists/transforms/splitListItem.js +33 -0
- package/src/MarkdownControl/plugins/lists/transforms/splitToNestedList.js +33 -0
- package/src/MarkdownControl/plugins/lists/transforms/unwrapFirstMatchedParent.js +9 -0
- package/src/MarkdownControl/plugins/lists/transforms/unwrapSelectionFromList.js +14 -0
- package/src/MarkdownControl/plugins/lists/transforms/wrapFirstMatchedParent.js +9 -0
- package/src/MarkdownControl/plugins/lists/transforms/wrapSelectionInList.js +17 -0
- package/src/MarkdownControl/plugins/lists/withLists.js +66 -0
- package/src/MarkdownControl/plugins/matchers/lowestMatchedAncestor.js +6 -0
- package/src/MarkdownControl/plugins/matchers/matchLink.js +9 -0
- package/src/MarkdownControl/plugins/matchers/matchedAncestors.js +18 -0
- package/src/MarkdownControl/plugins/shortcodes/insertShortcode.js +34 -0
- package/src/MarkdownControl/plugins/shortcodes/locations/isCursorInEmptyParagraph.js +17 -0
- package/src/MarkdownControl/plugins/shortcodes/withShortcodes.js +26 -0
- package/src/MarkdownControl/plugins/util.js +11 -0
- package/src/MarkdownControl/renderers.js +352 -0
- package/src/MarkdownPreview.js +27 -0
- package/src/__tests__/__snapshots__/renderer.spec.js.snap +239 -0
- package/src/__tests__/renderer.spec.js +261 -0
- package/src/index.js +16 -0
- package/src/regexHelper.js +137 -0
- package/src/schema.js +35 -0
- package/src/serializers/__tests__/__fixtures__/commonmarkExpected.json +625 -0
- package/src/serializers/__tests__/__fixtures__/duplicate_marks_github_issue_3280.md +1 -0
- package/src/serializers/__tests__/commonmark.spec.js +110 -0
- package/src/serializers/__tests__/index.spec.js +52 -0
- package/src/serializers/__tests__/remarkAllowHtmlEntities.spec.js +25 -0
- package/src/serializers/__tests__/remarkAssertParents.spec.js +171 -0
- package/src/serializers/__tests__/remarkEscapeMarkdownEntities.spec.js +84 -0
- package/src/serializers/__tests__/remarkPaddedLinks.spec.js +43 -0
- package/src/serializers/__tests__/remarkPlugins.spec.js +299 -0
- package/src/serializers/__tests__/remarkShortcodes.spec.js +106 -0
- package/src/serializers/__tests__/remarkSlate.spec.js +67 -0
- package/src/serializers/__tests__/remarkStripTrailingBreaks.spec.js +23 -0
- package/src/serializers/__tests__/slate.spec.js +300 -0
- package/src/serializers/index.js +226 -0
- package/src/serializers/rehypePaperEmoji.js +16 -0
- package/src/serializers/remarkAllowHtmlEntities.js +58 -0
- package/src/serializers/remarkAssertParents.js +83 -0
- package/src/serializers/remarkEscapeMarkdownEntities.js +269 -0
- package/src/serializers/remarkImagesToText.js +26 -0
- package/src/serializers/remarkPaddedLinks.js +120 -0
- package/src/serializers/remarkRehypeShortcodes.js +67 -0
- package/src/serializers/remarkShortcodes.js +106 -0
- package/src/serializers/remarkSlate.js +425 -0
- package/src/serializers/remarkSquashReferences.js +73 -0
- package/src/serializers/remarkStripTrailingBreaks.js +56 -0
- package/src/serializers/remarkWrapHtml.js +20 -0
- package/src/serializers/slateRemark.js +468 -0
- package/src/styles.js +13 -0
- package/src/types.js +3 -0
- package/test-helpers/h.js +32 -0
- package/webpack.config.js +3 -0
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _castArray2 = _interopRequireDefault(require("lodash/castArray"));
|
|
8
|
+
var _tail2 = _interopRequireDefault(require("lodash/tail"));
|
|
9
|
+
var _isArray2 = _interopRequireDefault(require("lodash/isArray"));
|
|
10
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
|
+
function CommandsAndQueries({
|
|
12
|
+
defaultType
|
|
13
|
+
}) {
|
|
14
|
+
return {
|
|
15
|
+
queries: {
|
|
16
|
+
atStartOf(editor, node) {
|
|
17
|
+
const {
|
|
18
|
+
selection
|
|
19
|
+
} = editor.value;
|
|
20
|
+
return selection.isCollapsed && selection.start.isAtStartOfNode(node);
|
|
21
|
+
},
|
|
22
|
+
getAncestor(editor, firstKey, lastKey) {
|
|
23
|
+
if (firstKey === lastKey) {
|
|
24
|
+
return editor.value.document.getParent(firstKey);
|
|
25
|
+
}
|
|
26
|
+
return editor.value.document.getCommonAncestor(firstKey, lastKey);
|
|
27
|
+
},
|
|
28
|
+
getOffset(editor, node) {
|
|
29
|
+
const parent = editor.value.document.getParent(node.key);
|
|
30
|
+
return parent.nodes.indexOf(node);
|
|
31
|
+
},
|
|
32
|
+
getSelectedChildren(editor, node) {
|
|
33
|
+
return node.nodes.filter(child => editor.isSelected(child));
|
|
34
|
+
},
|
|
35
|
+
getCommonAncestor(editor) {
|
|
36
|
+
const {
|
|
37
|
+
startBlock,
|
|
38
|
+
endBlock,
|
|
39
|
+
document: doc
|
|
40
|
+
} = editor.value;
|
|
41
|
+
return doc.getCommonAncestor(startBlock.key, endBlock.key);
|
|
42
|
+
},
|
|
43
|
+
getClosestType(editor, node, type) {
|
|
44
|
+
const types = (0, _castArray2.default)(type);
|
|
45
|
+
return editor.value.document.getClosest(node.key, n => types.includes(n.type));
|
|
46
|
+
},
|
|
47
|
+
getBlockContainer(editor, node) {
|
|
48
|
+
const targetTypes = ['bulleted-list', 'numbered-list', 'list-item', 'quote', 'table-cell'];
|
|
49
|
+
const {
|
|
50
|
+
startBlock,
|
|
51
|
+
selection
|
|
52
|
+
} = editor.value;
|
|
53
|
+
const target = node ? editor.value.document.getParent(node.key) : selection.isCollapsed && startBlock || editor.getCommonAncestor();
|
|
54
|
+
if (!target) {
|
|
55
|
+
return editor.value.document;
|
|
56
|
+
}
|
|
57
|
+
if (targetTypes.includes(target.type)) {
|
|
58
|
+
return target;
|
|
59
|
+
}
|
|
60
|
+
return editor.getBlockContainer(target);
|
|
61
|
+
},
|
|
62
|
+
isSelected(editor, nodes) {
|
|
63
|
+
return (0, _castArray2.default)(nodes).every(node => {
|
|
64
|
+
return editor.value.document.isInRange(node.key, editor.value.selection);
|
|
65
|
+
});
|
|
66
|
+
},
|
|
67
|
+
isFirstChild(editor, node) {
|
|
68
|
+
return editor.value.document.getParent(node.key).nodes.first().key === node.key;
|
|
69
|
+
},
|
|
70
|
+
areSiblings(editor, nodes) {
|
|
71
|
+
if (!(0, _isArray2.default)(nodes) || nodes.length < 2) {
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
const parent = editor.value.document.getParent(nodes[0].key);
|
|
75
|
+
return (0, _tail2.default)(nodes).every(node => {
|
|
76
|
+
return editor.value.document.getParent(node.key).key === parent.key;
|
|
77
|
+
});
|
|
78
|
+
},
|
|
79
|
+
everyBlock(editor, type) {
|
|
80
|
+
return editor.value.blocks.every(block => block.type === type);
|
|
81
|
+
},
|
|
82
|
+
hasMark(editor, type) {
|
|
83
|
+
return editor.value.activeMarks.some(mark => mark.type === type);
|
|
84
|
+
},
|
|
85
|
+
hasBlock(editor, type) {
|
|
86
|
+
return editor.value.blocks.some(node => node.type === type);
|
|
87
|
+
},
|
|
88
|
+
hasInline(editor, type) {
|
|
89
|
+
return editor.value.inlines.some(node => node.type === type);
|
|
90
|
+
},
|
|
91
|
+
hasQuote(editor, quoteLabel) {
|
|
92
|
+
const {
|
|
93
|
+
value
|
|
94
|
+
} = editor;
|
|
95
|
+
const {
|
|
96
|
+
document,
|
|
97
|
+
blocks
|
|
98
|
+
} = value;
|
|
99
|
+
return blocks.some(node => {
|
|
100
|
+
const {
|
|
101
|
+
key: descendantNodeKey
|
|
102
|
+
} = node;
|
|
103
|
+
/* When focusing a quote block, the actual block that gets the focus is the paragraph block whose parent is a `quote` block.
|
|
104
|
+
Hence, we need to get its parent and check if its type is `quote`. This parent will always be defined because every block in the editor
|
|
105
|
+
has a Document object as parent by default.
|
|
106
|
+
*/
|
|
107
|
+
const parent = document.getParent(descendantNodeKey);
|
|
108
|
+
return parent.type === quoteLabel;
|
|
109
|
+
});
|
|
110
|
+
},
|
|
111
|
+
hasListItems(editor, listType) {
|
|
112
|
+
const {
|
|
113
|
+
value
|
|
114
|
+
} = editor;
|
|
115
|
+
const {
|
|
116
|
+
document,
|
|
117
|
+
blocks
|
|
118
|
+
} = value;
|
|
119
|
+
return blocks.some(node => {
|
|
120
|
+
const {
|
|
121
|
+
key: lowestNodeKey
|
|
122
|
+
} = node;
|
|
123
|
+
/* A list block has the following structure:
|
|
124
|
+
<ol>
|
|
125
|
+
<li>
|
|
126
|
+
<p>Coffee</p>
|
|
127
|
+
</li>
|
|
128
|
+
<li>
|
|
129
|
+
<p>Tea</p>
|
|
130
|
+
</li>
|
|
131
|
+
</ol>
|
|
132
|
+
*/
|
|
133
|
+
const parent = document.getParent(lowestNodeKey);
|
|
134
|
+
const grandparent = document.getParent(parent.key);
|
|
135
|
+
return parent.type === 'list-item' && (grandparent === null || grandparent === void 0 ? void 0 : grandparent.type) === listType;
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
},
|
|
139
|
+
commands: {
|
|
140
|
+
toggleBlock(editor, type) {
|
|
141
|
+
switch (type) {
|
|
142
|
+
case 'heading-one':
|
|
143
|
+
case 'heading-two':
|
|
144
|
+
case 'heading-three':
|
|
145
|
+
case 'heading-four':
|
|
146
|
+
case 'heading-five':
|
|
147
|
+
case 'heading-six':
|
|
148
|
+
return editor.setBlocks(editor.everyBlock(type) ? defaultType : type);
|
|
149
|
+
case 'quote':
|
|
150
|
+
return editor.toggleQuoteBlock();
|
|
151
|
+
case 'numbered-list':
|
|
152
|
+
case 'bulleted-list':
|
|
153
|
+
{
|
|
154
|
+
return editor.toggleList(type);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
},
|
|
158
|
+
unwrapBlockChildren(editor, block) {
|
|
159
|
+
if (!block || block.object !== 'block') {
|
|
160
|
+
throw Error(`Expected block but received ${block}.`);
|
|
161
|
+
}
|
|
162
|
+
const index = editor.value.document.getPath(block.key).last();
|
|
163
|
+
const parent = editor.value.document.getParent(block.key);
|
|
164
|
+
editor.withoutNormalizing(() => {
|
|
165
|
+
block.nodes.forEach((node, idx) => {
|
|
166
|
+
editor.moveNodeByKey(node.key, parent.key, index + idx);
|
|
167
|
+
});
|
|
168
|
+
editor.removeNodeByKey(block.key);
|
|
169
|
+
});
|
|
170
|
+
},
|
|
171
|
+
unwrapNodeToDepth(editor, node, depth) {
|
|
172
|
+
let currentDepth = 0;
|
|
173
|
+
editor.withoutNormalizing(() => {
|
|
174
|
+
while (currentDepth < depth) {
|
|
175
|
+
editor.unwrapNodeByKey(node.key);
|
|
176
|
+
currentDepth += 1;
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
},
|
|
180
|
+
unwrapNodeFromAncestor(editor, node, ancestor) {
|
|
181
|
+
const depth = ancestor.getDepth(node.key);
|
|
182
|
+
editor.unwrapNodeToDepth(node, depth);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
var _default = CommandsAndQueries;
|
|
188
|
+
exports.default = _default;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
function ForceInsert({
|
|
8
|
+
defaultType
|
|
9
|
+
}) {
|
|
10
|
+
return {
|
|
11
|
+
queries: {
|
|
12
|
+
canInsertBeforeNode(editor, node) {
|
|
13
|
+
if (!editor.isVoid(node)) {
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
return !!editor.value.document.getPreviousSibling(node.key);
|
|
17
|
+
},
|
|
18
|
+
canInsertAfterNode(editor, node) {
|
|
19
|
+
if (!editor.isVoid(node)) {
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
const nextSibling = editor.value.document.getNextSibling(node.key);
|
|
23
|
+
return nextSibling && !editor.isVoid(nextSibling);
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
commands: {
|
|
27
|
+
forceInsertBeforeNode(editor, node) {
|
|
28
|
+
const block = {
|
|
29
|
+
type: defaultType,
|
|
30
|
+
object: 'block'
|
|
31
|
+
};
|
|
32
|
+
const parent = editor.value.document.getParent(node.key);
|
|
33
|
+
return editor.insertNodeByKey(parent.key, 0, block).moveToStartOfNode(parent).focus();
|
|
34
|
+
},
|
|
35
|
+
forceInsertAfterNode(editor, node) {
|
|
36
|
+
return editor.moveToEndOfNode(node).insertBlock(defaultType).focus();
|
|
37
|
+
},
|
|
38
|
+
moveToEndOfDocument(editor) {
|
|
39
|
+
const lastBlock = editor.value.document.nodes.last();
|
|
40
|
+
if (editor.isVoid(lastBlock)) {
|
|
41
|
+
editor.insertBlock(defaultType);
|
|
42
|
+
}
|
|
43
|
+
return editor.moveToEndOfNode(lastBlock).focus();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
var _default = ForceInsert;
|
|
49
|
+
exports.default = _default;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = exports.HOT_KEY_MAP = void 0;
|
|
7
|
+
var _isHotkey = _interopRequireDefault(require("is-hotkey"));
|
|
8
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
9
|
+
const HOT_KEY_MAP = {
|
|
10
|
+
bold: 'mod+b',
|
|
11
|
+
code: 'mod+shift+c',
|
|
12
|
+
italic: 'mod+i',
|
|
13
|
+
strikethrough: 'mod+shift+s',
|
|
14
|
+
'heading-one': 'mod+1',
|
|
15
|
+
'heading-two': 'mod+2',
|
|
16
|
+
'heading-three': 'mod+3',
|
|
17
|
+
'heading-four': 'mod+4',
|
|
18
|
+
'heading-five': 'mod+5',
|
|
19
|
+
'heading-six': 'mod+6',
|
|
20
|
+
link: 'mod+k'
|
|
21
|
+
};
|
|
22
|
+
exports.HOT_KEY_MAP = HOT_KEY_MAP;
|
|
23
|
+
function Hotkey(key, fn) {
|
|
24
|
+
return {
|
|
25
|
+
onKeyDown(event, editor, next) {
|
|
26
|
+
if (!(0, _isHotkey.default)(key, event)) {
|
|
27
|
+
return next();
|
|
28
|
+
}
|
|
29
|
+
event.preventDefault();
|
|
30
|
+
editor.command(fn);
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
var _default = Hotkey;
|
|
35
|
+
exports.default = _default;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _isHotkey = _interopRequireDefault(require("is-hotkey"));
|
|
8
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
9
|
+
function LineBreak() {
|
|
10
|
+
return {
|
|
11
|
+
onKeyDown(event, editor, next) {
|
|
12
|
+
const isShiftEnter = (0, _isHotkey.default)('shift+enter', event);
|
|
13
|
+
if (!isShiftEnter) {
|
|
14
|
+
return next();
|
|
15
|
+
}
|
|
16
|
+
return editor.insertInline('break').insertText('').moveToStartOfNextText();
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
var _default = LineBreak;
|
|
21
|
+
exports.default = _default;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
function Link({
|
|
8
|
+
type
|
|
9
|
+
}) {
|
|
10
|
+
return {
|
|
11
|
+
commands: {
|
|
12
|
+
toggleLink(editor, getUrl) {
|
|
13
|
+
const selection = editor.value.selection;
|
|
14
|
+
const isCollapsed = selection && selection.isCollapsed;
|
|
15
|
+
if (editor.hasInline(type)) {
|
|
16
|
+
const inlines = editor.value.inlines.toJSON();
|
|
17
|
+
const link = inlines.find(item => item.type === type);
|
|
18
|
+
const url = getUrl(link.data.url);
|
|
19
|
+
if (url) {
|
|
20
|
+
// replace the old link
|
|
21
|
+
return editor.setInlines({
|
|
22
|
+
data: {
|
|
23
|
+
url
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
} else {
|
|
27
|
+
// remove url if it was removed by the user
|
|
28
|
+
return editor.unwrapInline(type);
|
|
29
|
+
}
|
|
30
|
+
} else {
|
|
31
|
+
const url = getUrl();
|
|
32
|
+
if (!url) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
return isCollapsed ? editor.insertInline({
|
|
36
|
+
type,
|
|
37
|
+
data: {
|
|
38
|
+
url
|
|
39
|
+
},
|
|
40
|
+
nodes: [{
|
|
41
|
+
object: 'text',
|
|
42
|
+
text: url
|
|
43
|
+
}]
|
|
44
|
+
}) : editor.wrapInline({
|
|
45
|
+
type,
|
|
46
|
+
data: {
|
|
47
|
+
url
|
|
48
|
+
}
|
|
49
|
+
}).moveToEnd();
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
var _default = Link;
|
|
56
|
+
exports.default = _default;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
function defaultEmptyBlock(text = '') {
|
|
8
|
+
return {
|
|
9
|
+
type: 'paragraph',
|
|
10
|
+
children: [{
|
|
11
|
+
text
|
|
12
|
+
}]
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
var _default = defaultEmptyBlock;
|
|
16
|
+
exports.default = _default;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _isHotkey = _interopRequireDefault(require("is-hotkey"));
|
|
8
|
+
var _keyDownEnter = _interopRequireDefault(require("./keyDownEnter"));
|
|
9
|
+
var _keyDownBackspace = _interopRequireDefault(require("./keyDownBackspace"));
|
|
10
|
+
var _isCursorInNonDefaultBlock = _interopRequireDefault(require("../locations/isCursorInNonDefaultBlock"));
|
|
11
|
+
var _toggleBlock = _interopRequireDefault(require("./toggleBlock"));
|
|
12
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
+
const HEADING_HOTKEYS = {
|
|
14
|
+
'mod+1': 'heading-one',
|
|
15
|
+
'mod+2': 'heading-two',
|
|
16
|
+
'mod+3': 'heading-three',
|
|
17
|
+
'mod+4': 'heading-four',
|
|
18
|
+
'mod+5': 'heading-five',
|
|
19
|
+
'mod+6': 'heading-six'
|
|
20
|
+
};
|
|
21
|
+
function keyDown(event, editor) {
|
|
22
|
+
if (!editor.selection) return;
|
|
23
|
+
for (const hotkey in HEADING_HOTKEYS) {
|
|
24
|
+
if ((0, _isHotkey.default)(hotkey, event)) {
|
|
25
|
+
(0, _toggleBlock.default)(editor, HEADING_HOTKEYS[hotkey]);
|
|
26
|
+
event.preventDefault();
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
if (!(0, _isCursorInNonDefaultBlock.default)(editor)) return;
|
|
31
|
+
if ((0, _isHotkey.default)('enter', event)) {
|
|
32
|
+
const eventIntercepted = (0, _keyDownEnter.default)(editor);
|
|
33
|
+
if (eventIntercepted) {
|
|
34
|
+
event.preventDefault();
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if ((0, _isHotkey.default)('backspace', event)) {
|
|
39
|
+
const eventIntercepted = (0, _keyDownBackspace.default)(editor);
|
|
40
|
+
if (eventIntercepted) {
|
|
41
|
+
event.preventDefault();
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
var _default = keyDown;
|
|
47
|
+
exports.default = _default;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _slate = require("slate");
|
|
8
|
+
var _unwrapIfCursorAtStart = _interopRequireDefault(require("../transforms/unwrapIfCursorAtStart"));
|
|
9
|
+
var _isCursorAtStartOfNonEmptyHeading = _interopRequireDefault(require("../locations/isCursorAtStartOfNonEmptyHeading"));
|
|
10
|
+
var _lowestMatchedAncestor = _interopRequireDefault(require("../../matchers/lowestMatchedAncestor"));
|
|
11
|
+
var _areCurrentAndPreviousBlocksOfType = _interopRequireDefault(require("../locations/areCurrentAndPreviousBlocksOfType"));
|
|
12
|
+
var _isCursorAtStartOfBlockType = _interopRequireDefault(require("../locations/isCursorAtStartOfBlockType"));
|
|
13
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
14
|
+
function keyDownBackspace(editor) {
|
|
15
|
+
if (!editor.selection) return;
|
|
16
|
+
if ((0, _isCursorAtStartOfNonEmptyHeading.default)(editor)) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
if ((0, _isCursorAtStartOfBlockType.default)(editor, 'quote') && (0, _areCurrentAndPreviousBlocksOfType.default)(editor, 'quote')) {
|
|
20
|
+
_slate.Transforms.mergeNodes(editor, (0, _lowestMatchedAncestor.default)(editor, 'quote'));
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
return (0, _unwrapIfCursorAtStart.default)(editor, true);
|
|
24
|
+
}
|
|
25
|
+
var _default = keyDownBackspace;
|
|
26
|
+
exports.default = _default;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _isCursorInBlockType = _interopRequireDefault(require("../locations/isCursorInBlockType"));
|
|
8
|
+
var _splitIntoParagraph = _interopRequireDefault(require("../transforms/splitIntoParagraph"));
|
|
9
|
+
var _unwrapIfCursorAtStart = _interopRequireDefault(require("../transforms/unwrapIfCursorAtStart"));
|
|
10
|
+
var _isCursorAtEndOfParagraph = _interopRequireDefault(require("../locations/isCursorAtEndOfParagraph"));
|
|
11
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
12
|
+
function keyDownEnter(editor) {
|
|
13
|
+
if (!editor.selection) return;
|
|
14
|
+
if ((0, _isCursorInBlockType.default)(editor, 'heading', true)) {
|
|
15
|
+
return handleHeading(editor);
|
|
16
|
+
}
|
|
17
|
+
return (0, _unwrapIfCursorAtStart.default)(editor);
|
|
18
|
+
}
|
|
19
|
+
function handleHeading(editor) {
|
|
20
|
+
if ((0, _isCursorAtEndOfParagraph.default)(editor)) {
|
|
21
|
+
// split into paragraph if cursor is at the end of heading
|
|
22
|
+
(0, _splitIntoParagraph.default)(editor);
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
var _default = keyDownEnter;
|
|
28
|
+
exports.default = _default;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _slate = require("slate");
|
|
8
|
+
var _isCursorInBlockType = _interopRequireDefault(require("../locations/isCursorInBlockType"));
|
|
9
|
+
var _getListTypeAtCursor = _interopRequireDefault(require("../locations/getListTypeAtCursor"));
|
|
10
|
+
var _wrapListItemsInBlock = _interopRequireDefault(require("../transforms/wrapListItemsInBlock"));
|
|
11
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
12
|
+
function toggleBlock(editor, type) {
|
|
13
|
+
const {
|
|
14
|
+
selection
|
|
15
|
+
} = editor;
|
|
16
|
+
if (!selection) return;
|
|
17
|
+
const isHeading = type.startsWith('heading-');
|
|
18
|
+
const isActive = (0, _isCursorInBlockType.default)(editor, type, isHeading, _slate.Range.isExpanded(selection));
|
|
19
|
+
const listType = (0, _getListTypeAtCursor.default)(editor);
|
|
20
|
+
|
|
21
|
+
// headings do not contain paragraphs so they could be converted, not wrapped/unwrapped
|
|
22
|
+
if (isHeading) {
|
|
23
|
+
_slate.Transforms.setNodes(editor, {
|
|
24
|
+
type: isActive ? 'paragraph' : type
|
|
25
|
+
});
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
const {
|
|
29
|
+
focus,
|
|
30
|
+
anchor
|
|
31
|
+
} = selection;
|
|
32
|
+
if (!isActive && listType && focus.path[focus.path.length - 3] != anchor.path[anchor.path.length - 3]) {
|
|
33
|
+
return (0, _wrapListItemsInBlock.default)(editor, type, listType);
|
|
34
|
+
}
|
|
35
|
+
if (!isActive) {
|
|
36
|
+
return _slate.Transforms.wrapNodes(editor, {
|
|
37
|
+
type
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
_slate.Transforms.unwrapNodes(editor, {
|
|
41
|
+
match: n => n.type === type
|
|
42
|
+
});
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
var _default = toggleBlock;
|
|
46
|
+
exports.default = _default;
|
package/dist/esm/MarkdownControl/plugins/blocks/locations/areCurrentAndPreviousBlocksOfType.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _slate = require("slate");
|
|
8
|
+
var _lowestMatchedAncestor = _interopRequireDefault(require("../../matchers/lowestMatchedAncestor"));
|
|
9
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
10
|
+
function areCurrentAndPreviousBlocksOfType(editor, type) {
|
|
11
|
+
const {
|
|
12
|
+
selection
|
|
13
|
+
} = editor;
|
|
14
|
+
if (!selection) return false;
|
|
15
|
+
const [current] = _slate.Editor.nodes(editor, (0, _lowestMatchedAncestor.default)(editor, 'block'));
|
|
16
|
+
const previous = _slate.Editor.previous(editor, (0, _lowestMatchedAncestor.default)(editor, type));
|
|
17
|
+
return current && previous && current[0].type === previous[0].type;
|
|
18
|
+
}
|
|
19
|
+
var _default = areCurrentAndPreviousBlocksOfType;
|
|
20
|
+
exports.default = _default;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _slate = require("slate");
|
|
8
|
+
var _lowestMatchedAncestor = _interopRequireDefault(require("../../matchers/lowestMatchedAncestor"));
|
|
9
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
10
|
+
function getListTypeAtCursor(editor) {
|
|
11
|
+
const list = _slate.Editor.above(editor, (0, _lowestMatchedAncestor.default)(editor, 'list'));
|
|
12
|
+
if (!list) return null;
|
|
13
|
+
return list[0].type;
|
|
14
|
+
}
|
|
15
|
+
var _default = getListTypeAtCursor;
|
|
16
|
+
exports.default = _default;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _slate = require("slate");
|
|
8
|
+
var _lowestMatchedAncestor = _interopRequireDefault(require("../../matchers/lowestMatchedAncestor"));
|
|
9
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
10
|
+
function isCursorAtEndOfParagraph(editor) {
|
|
11
|
+
const {
|
|
12
|
+
selection
|
|
13
|
+
} = editor;
|
|
14
|
+
if (!selection) return false;
|
|
15
|
+
const paragraph = _slate.Editor.above(editor, (0, _lowestMatchedAncestor.default)(editor, 'paragraph'));
|
|
16
|
+
return !!paragraph && _slate.Editor.isEnd(editor, editor.selection.focus, paragraph[1]);
|
|
17
|
+
}
|
|
18
|
+
var _default = isCursorAtEndOfParagraph;
|
|
19
|
+
exports.default = _default;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _slate = require("slate");
|
|
8
|
+
var _lowestMatchedAncestor = _interopRequireDefault(require("../../matchers/lowestMatchedAncestor"));
|
|
9
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
10
|
+
function isCursorAtStartOfBlockType(editor, type) {
|
|
11
|
+
const {
|
|
12
|
+
selection
|
|
13
|
+
} = editor;
|
|
14
|
+
if (!selection) return false;
|
|
15
|
+
const block = _slate.Editor.above(editor, (0, _lowestMatchedAncestor.default)(editor, type));
|
|
16
|
+
return !!block && _slate.Editor.isStart(editor, editor.selection.focus, block[1]);
|
|
17
|
+
}
|
|
18
|
+
var _default = isCursorAtStartOfBlockType;
|
|
19
|
+
exports.default = _default;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _slate = require("slate");
|
|
8
|
+
function isCursorAtStartOfNonEmptyHeading(editor) {
|
|
9
|
+
const {
|
|
10
|
+
selection
|
|
11
|
+
} = editor;
|
|
12
|
+
if (!selection) return false;
|
|
13
|
+
const [match] = Array.from(_slate.Editor.nodes(editor, {
|
|
14
|
+
match: n => _slate.Element.isElement(n) && _slate.Editor.isBlock(editor, n) && `${n.type}`.startsWith('heading-'),
|
|
15
|
+
mode: 'lowest'
|
|
16
|
+
}));
|
|
17
|
+
return !!match && _slate.Editor.isStart(editor, editor.selection.focus, match[1]) && !_slate.Editor.isEmpty(editor, match[0]);
|
|
18
|
+
}
|
|
19
|
+
var _default = isCursorAtStartOfNonEmptyHeading;
|
|
20
|
+
exports.default = _default;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _slate = require("slate");
|
|
8
|
+
function isCursorInBlockType(editor, type, ignoreHeadings, ignoreLists) {
|
|
9
|
+
const {
|
|
10
|
+
selection
|
|
11
|
+
} = editor;
|
|
12
|
+
if (!selection) return false;
|
|
13
|
+
const [match] = Array.from(_slate.Editor.nodes(editor, {
|
|
14
|
+
match: n => _slate.Element.isElement(n) && _slate.Editor.isBlock(editor, n) && n.type !== 'paragraph' && n.type !== 'list-item' && (ignoreHeadings || !`${n.type}`.startsWith('heading-')) && (!ignoreLists || !`${n.type}`.endsWith('-list')),
|
|
15
|
+
mode: 'lowest'
|
|
16
|
+
}));
|
|
17
|
+
return !!match && (match[0].type === type || `${match[0].type}`.startsWith(`${type}-` || `${match[0].type}`.endsWith(`-${type}`)));
|
|
18
|
+
}
|
|
19
|
+
var _default = isCursorInBlockType;
|
|
20
|
+
exports.default = _default;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _slate = require("slate");
|
|
8
|
+
function isCursorInNonDefaultBlock(editor) {
|
|
9
|
+
const {
|
|
10
|
+
selection
|
|
11
|
+
} = editor;
|
|
12
|
+
if (!selection) return false;
|
|
13
|
+
const [match] = Array.from(_slate.Editor.nodes(editor, {
|
|
14
|
+
match: n => _slate.Element.isElement(n) && _slate.Editor.isBlock(editor, n) && n.type !== 'paragraph',
|
|
15
|
+
mode: 'lowest'
|
|
16
|
+
}));
|
|
17
|
+
return !!match && !_slate.Editor.isEditor(match[0]);
|
|
18
|
+
}
|
|
19
|
+
var _default = isCursorInNonDefaultBlock;
|
|
20
|
+
exports.default = _default;
|