decap-cms-widget-markdown 3.12.0 → 3.13.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.
Files changed (45) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/decap-cms-widget-markdown.js +6 -6
  3. package/dist/decap-cms-widget-markdown.js.map +1 -1
  4. package/dist/esm/MarkdownControl/Toolbar.js +6 -6
  5. package/dist/esm/MarkdownControl/VisualEditor.js +7 -3
  6. package/dist/esm/MarkdownControl/components/InlineShortcode.js +67 -0
  7. package/dist/esm/MarkdownControl/index.js +2 -2
  8. package/dist/esm/MarkdownControl/plugins/shortcodes/insertShortcode.js +53 -4
  9. package/dist/esm/MarkdownControl/plugins/shortcodes/withShortcodes.js +11 -1
  10. package/dist/esm/MarkdownControl/renderers.js +21 -16
  11. package/dist/esm/MarkdownPreview.js +37 -3
  12. package/dist/esm/serializers/remarkRehypeShortcodes.js +18 -15
  13. package/dist/esm/serializers/remarkShortcodes.js +118 -12
  14. package/dist/esm/serializers/remarkSlate.js +14 -1
  15. package/dist/esm/serializers/slateRemark.js +18 -2
  16. package/package.json +23 -13
  17. package/src/MarkdownControl/Toolbar.js +2 -2
  18. package/src/MarkdownControl/VisualEditor.js +5 -1
  19. package/src/MarkdownControl/components/InlineShortcode.js +77 -0
  20. package/src/MarkdownControl/components/__tests__/InlineShortcode.spec.js +81 -0
  21. package/src/MarkdownControl/index.js +2 -2
  22. package/src/MarkdownControl/plugins/shortcodes/__tests__/insertShortcode.spec.js +106 -0
  23. package/src/MarkdownControl/plugins/shortcodes/insertShortcode.js +59 -6
  24. package/src/MarkdownControl/plugins/shortcodes/withShortcodes.js +12 -2
  25. package/src/MarkdownControl/renderers.js +3 -0
  26. package/src/MarkdownPreview.js +38 -3
  27. package/src/__tests__/renderer.spec.js +68 -0
  28. package/src/serializers/__tests__/remarkShortcodes.spec.js +210 -1
  29. package/src/serializers/__tests__/slate.spec.js +80 -0
  30. package/src/serializers/remarkRehypeShortcodes.js +19 -9
  31. package/src/serializers/remarkShortcodes.js +140 -12
  32. package/src/serializers/remarkSlate.js +7 -0
  33. package/src/serializers/slateRemark.js +13 -2
  34. package/LICENSE +0 -22
  35. package/dist/esm/MarkdownControl/plugins/BreakToDefaultBlock.js +0 -26
  36. package/dist/esm/MarkdownControl/plugins/CloseBlock.js +0 -28
  37. package/dist/esm/MarkdownControl/plugins/CommandsAndQueries.js +0 -180
  38. package/dist/esm/MarkdownControl/plugins/ForceInsert.js +0 -42
  39. package/dist/esm/MarkdownControl/plugins/Hotkey.js +0 -26
  40. package/dist/esm/MarkdownControl/plugins/LineBreak.js +0 -13
  41. package/dist/esm/MarkdownControl/plugins/Link.js +0 -49
  42. package/dist/esm/MarkdownControl/plugins/lists/locations/isCursorInItemContainingNestedList.js +0 -6
  43. package/dist/esm/MarkdownControl/plugins/util.js +0 -11
  44. package/dist/esm/serializers/remarkImagesToText.js +0 -31
  45. package/dist/esm/types.js +0 -2
@@ -1,14 +1,63 @@
1
- import { Transforms } from 'slate';
1
+ import { Editor, Range, Transforms } from 'slate';
2
2
  import isCursorInEmptyParagraph from './locations/isCursorInEmptyParagraph';
3
- function insertShortcode(editor, pluginConfig) {
4
- const defaultValues = pluginConfig.fields.toMap().mapKeys((_, field) => field.get('name')).map(field => field.get('default', ''));
3
+ async function insertShortcode(editor, pluginConfig, cmsContext = {}) {
4
+ if (pluginConfig.type === 'inline') {
5
+ const selectionRef = editor.selection ? Editor.rangeRef(editor, editor.selection) : null;
6
+ let selectedText = '';
7
+ if (editor.selection && Range.isRange(editor.selection)) {
8
+ selectedText = Editor.string(editor, editor.selection);
9
+ }
10
+ let shortcodeData = {};
11
+ if (typeof pluginConfig.onInsert === 'function') {
12
+ try {
13
+ const result = await pluginConfig.onInsert({
14
+ selectedText,
15
+ cmsContext
16
+ });
17
+ if (result === null || result === undefined) {
18
+ selectionRef?.unref();
19
+ return;
20
+ }
21
+ shortcodeData = result;
22
+ } catch (err) {
23
+ selectionRef?.unref();
24
+ console.error(`Error in onInsert for inline component '${pluginConfig.id}':`, err);
25
+ return;
26
+ }
27
+ } else if (pluginConfig.fields) {
28
+ const defaultValues = pluginConfig.fields.toMap().mapKeys((_, field) => field.get('name')).map(field => field.get('default', ''));
29
+ shortcodeData = defaultValues.toJS();
30
+ }
31
+ const nodeData = {
32
+ type: 'inline-shortcode',
33
+ id: pluginConfig.id,
34
+ data: {
35
+ shortcode: pluginConfig.id,
36
+ shortcodeNew: true,
37
+ shortcodeData,
38
+ isVoid: true
39
+ },
40
+ children: [{
41
+ text: ''
42
+ }]
43
+ };
44
+ const at = selectionRef?.unref();
45
+ if (selectionRef && !at) {
46
+ return;
47
+ }
48
+ Transforms.insertNodes(editor, nodeData, at ? {
49
+ at
50
+ } : undefined);
51
+ return;
52
+ }
53
+ const defaultValues = pluginConfig.fields ? pluginConfig.fields.toMap().mapKeys((_, field) => field.get('name')).map(field => field.get('default', '')).toJS() : {};
5
54
  const nodeData = {
6
55
  type: 'shortcode',
7
56
  id: pluginConfig.id,
8
57
  data: {
9
58
  shortcode: pluginConfig.id,
10
59
  shortcodeNew: true,
11
- shortcodeData: defaultValues.toJS()
60
+ shortcodeData: defaultValues
12
61
  },
13
62
  children: [{
14
63
  text: ''
@@ -3,10 +3,20 @@ import defaultEmptyBlock from '../blocks/defaultEmptyBlock';
3
3
  function withShortcodes(editor) {
4
4
  const {
5
5
  isVoid,
6
+ isInline,
6
7
  normalizeNode
7
8
  } = editor;
8
9
  editor.isVoid = element => {
9
- return element.type === 'shortcode' ? true : isVoid(element);
10
+ if (element.type === 'shortcode') {
11
+ return true;
12
+ }
13
+ if (element.type === 'inline-shortcode') {
14
+ return true;
15
+ }
16
+ return isVoid(element);
17
+ };
18
+ editor.isInline = element => {
19
+ return element.type === 'inline-shortcode' ? true : isInline(element);
10
20
  };
11
21
 
12
22
  // Prevent empty editor after deleting shortcode theat was only child