decap-cms-widget-markdown 3.2.0 → 3.4.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 (123) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/decap-cms-widget-markdown.js +5 -5
  3. package/dist/decap-cms-widget-markdown.js.LICENSE.txt +5 -5
  4. package/dist/decap-cms-widget-markdown.js.map +1 -1
  5. package/dist/esm/MarkdownControl/RawEditor.js +36 -44
  6. package/dist/esm/MarkdownControl/Toolbar.js +75 -86
  7. package/dist/esm/MarkdownControl/ToolbarButton.js +16 -23
  8. package/dist/esm/MarkdownControl/VisualEditor.js +87 -96
  9. package/dist/esm/MarkdownControl/components/Shortcode.js +28 -40
  10. package/dist/esm/MarkdownControl/components/VoidBlock.js +18 -23
  11. package/dist/esm/MarkdownControl/index.js +54 -59
  12. package/dist/esm/MarkdownControl/plugins/BreakToDefaultBlock.js +3 -10
  13. package/dist/esm/MarkdownControl/plugins/CloseBlock.js +3 -10
  14. package/dist/esm/MarkdownControl/plugins/CommandsAndQueries.js +9 -16
  15. package/dist/esm/MarkdownControl/plugins/ForceInsert.js +1 -7
  16. package/dist/esm/MarkdownControl/plugins/Hotkey.js +4 -11
  17. package/dist/esm/MarkdownControl/plugins/LineBreak.js +3 -10
  18. package/dist/esm/MarkdownControl/plugins/Link.js +1 -7
  19. package/dist/esm/MarkdownControl/plugins/blocks/defaultEmptyBlock.js +1 -7
  20. package/dist/esm/MarkdownControl/plugins/blocks/events/keyDown.js +18 -25
  21. package/dist/esm/MarkdownControl/plugins/blocks/events/keyDownBackspace.js +11 -18
  22. package/dist/esm/MarkdownControl/plugins/blocks/events/keyDownEnter.js +9 -16
  23. package/dist/esm/MarkdownControl/plugins/blocks/events/toggleBlock.js +11 -18
  24. package/dist/esm/MarkdownControl/plugins/blocks/locations/areCurrentAndPreviousBlocksOfType.js +5 -12
  25. package/dist/esm/MarkdownControl/plugins/blocks/locations/getListTypeAtCursor.js +4 -11
  26. package/dist/esm/MarkdownControl/plugins/blocks/locations/isCursorAtEndOfParagraph.js +5 -12
  27. package/dist/esm/MarkdownControl/plugins/blocks/locations/isCursorAtStartOfBlockType.js +5 -12
  28. package/dist/esm/MarkdownControl/plugins/blocks/locations/isCursorAtStartOfNonEmptyHeading.js +5 -11
  29. package/dist/esm/MarkdownControl/plugins/blocks/locations/isCursorCollapsedAfterSoftBreak.js +4 -10
  30. package/dist/esm/MarkdownControl/plugins/blocks/locations/isCursorInBlockType.js +4 -10
  31. package/dist/esm/MarkdownControl/plugins/blocks/locations/isCursorInNonDefaultBlock.js +5 -11
  32. package/dist/esm/MarkdownControl/plugins/blocks/transforms/splitIntoParagraph.js +6 -12
  33. package/dist/esm/MarkdownControl/plugins/blocks/transforms/unwrapIfCursorAtStart.js +12 -19
  34. package/dist/esm/MarkdownControl/plugins/blocks/transforms/wrapListItemsInBlock.js +7 -13
  35. package/dist/esm/MarkdownControl/plugins/blocks/withBlocks.js +5 -12
  36. package/dist/esm/MarkdownControl/plugins/html/withHtml.js +29 -14
  37. package/dist/esm/MarkdownControl/plugins/inlines/events/keyDown.js +11 -18
  38. package/dist/esm/MarkdownControl/plugins/inlines/events/keyDownShiftEnter.js +5 -11
  39. package/dist/esm/MarkdownControl/plugins/inlines/events/toggleLink.js +8 -16
  40. package/dist/esm/MarkdownControl/plugins/inlines/events/toggleMark.js +6 -13
  41. package/dist/esm/MarkdownControl/plugins/inlines/locations/isMarkActive.js +3 -9
  42. package/dist/esm/MarkdownControl/plugins/inlines/selectors/getActiveLink.js +4 -11
  43. package/dist/esm/MarkdownControl/plugins/inlines/transforms/unwrapLink.js +4 -11
  44. package/dist/esm/MarkdownControl/plugins/inlines/transforms/wrapLink.js +11 -18
  45. package/dist/esm/MarkdownControl/plugins/inlines/withInlines.js +3 -10
  46. package/dist/esm/MarkdownControl/plugins/lists/events/keyDown.js +14 -21
  47. package/dist/esm/MarkdownControl/plugins/lists/events/keyDownBackspace.js +11 -18
  48. package/dist/esm/MarkdownControl/plugins/lists/events/keyDownEnter.js +18 -25
  49. package/dist/esm/MarkdownControl/plugins/lists/events/keyDownShiftTab.js +13 -23
  50. package/dist/esm/MarkdownControl/plugins/lists/events/keyDownTab.js +15 -26
  51. package/dist/esm/MarkdownControl/plugins/lists/events/toggleListType.js +11 -18
  52. package/dist/esm/MarkdownControl/plugins/lists/locations/isCursorAtListItemStart.js +3 -9
  53. package/dist/esm/MarkdownControl/plugins/lists/locations/isCursorAtNoninitialParagraphStart.js +3 -9
  54. package/dist/esm/MarkdownControl/plugins/lists/locations/isCursorInItemContainingNestedList.js +3 -10
  55. package/dist/esm/MarkdownControl/plugins/lists/locations/isCursorInListItem.js +4 -10
  56. package/dist/esm/MarkdownControl/plugins/lists/locations/isSelectionWithinNoninitialListItem.js +4 -10
  57. package/dist/esm/MarkdownControl/plugins/lists/selectors/getListContainedInListItem.js +5 -12
  58. package/dist/esm/MarkdownControl/plugins/lists/selectors/getLowestAncestorList.js +4 -11
  59. package/dist/esm/MarkdownControl/plugins/lists/selectors/getLowestAncestorQuote.js +4 -11
  60. package/dist/esm/MarkdownControl/plugins/lists/transforms/changeListType.js +8 -15
  61. package/dist/esm/MarkdownControl/plugins/lists/transforms/convertParagraphToListItem.js +8 -15
  62. package/dist/esm/MarkdownControl/plugins/lists/transforms/liftFirstMatchedParent.js +6 -16
  63. package/dist/esm/MarkdownControl/plugins/lists/transforms/liftListItem.js +13 -20
  64. package/dist/esm/MarkdownControl/plugins/lists/transforms/mergeWithPreviousListItem.js +6 -13
  65. package/dist/esm/MarkdownControl/plugins/lists/transforms/moveListToListItem.js +3 -9
  66. package/dist/esm/MarkdownControl/plugins/lists/transforms/splitListItem.js +12 -19
  67. package/dist/esm/MarkdownControl/plugins/lists/transforms/splitToNestedList.js +11 -18
  68. package/dist/esm/MarkdownControl/plugins/lists/transforms/unwrapFirstMatchedParent.js +4 -11
  69. package/dist/esm/MarkdownControl/plugins/lists/transforms/unwrapSelectionFromList.js +9 -20
  70. package/dist/esm/MarkdownControl/plugins/lists/transforms/wrapFirstMatchedParent.js +4 -11
  71. package/dist/esm/MarkdownControl/plugins/lists/transforms/wrapSelectionInList.js +8 -15
  72. package/dist/esm/MarkdownControl/plugins/lists/withLists.js +19 -26
  73. package/dist/esm/MarkdownControl/plugins/matchers/lowestMatchedAncestor.js +3 -10
  74. package/dist/esm/MarkdownControl/plugins/matchers/matchLink.js +3 -9
  75. package/dist/esm/MarkdownControl/plugins/matchers/matchedAncestors.js +3 -9
  76. package/dist/esm/MarkdownControl/plugins/shortcodes/insertShortcode.js +6 -13
  77. package/dist/esm/MarkdownControl/plugins/shortcodes/locations/isCursorInEmptyParagraph.js +5 -11
  78. package/dist/esm/MarkdownControl/plugins/shortcodes/withShortcodes.js +5 -12
  79. package/dist/esm/MarkdownControl/plugins/util.js +5 -12
  80. package/dist/esm/MarkdownControl/renderers.js +90 -102
  81. package/dist/esm/MarkdownPreview.js +21 -27
  82. package/dist/esm/index.js +13 -24
  83. package/dist/esm/regexHelper.js +6 -14
  84. package/dist/esm/schema.js +1 -7
  85. package/dist/esm/serializers/index.js +46 -57
  86. package/dist/esm/serializers/rehypePaperEmoji.js +1 -7
  87. package/dist/esm/serializers/remarkAllowHtmlEntities.js +1 -7
  88. package/dist/esm/serializers/remarkAssertParents.js +20 -29
  89. package/dist/esm/serializers/remarkEscapeMarkdownEntities.js +22 -28
  90. package/dist/esm/serializers/remarkImagesToText.js +4 -14
  91. package/dist/esm/serializers/remarkPaddedLinks.js +22 -32
  92. package/dist/esm/serializers/remarkRehypeShortcodes.js +17 -26
  93. package/dist/esm/serializers/remarkShortcodes.js +3 -11
  94. package/dist/esm/serializers/remarkSlate.js +65 -64
  95. package/dist/esm/serializers/remarkSquashReferences.js +15 -25
  96. package/dist/esm/serializers/remarkStripTrailingBreaks.js +3 -9
  97. package/dist/esm/serializers/remarkWrapHtml.js +3 -9
  98. package/dist/esm/serializers/slateRemark.js +69 -75
  99. package/dist/esm/styles.js +5 -12
  100. package/dist/esm/types.js +2 -8
  101. package/package.json +6 -6
  102. package/src/MarkdownControl/RawEditor.js +2 -1
  103. package/src/MarkdownControl/Toolbar.js +5 -0
  104. package/src/MarkdownControl/VisualEditor.js +3 -2
  105. package/src/MarkdownControl/components/Shortcode.js +1 -1
  106. package/src/MarkdownControl/index.js +9 -0
  107. package/src/MarkdownControl/plugins/CommandsAndQueries.js +3 -1
  108. package/src/MarkdownControl/plugins/html/withHtml.js +19 -0
  109. package/src/MarkdownControl/plugins/util.js +2 -1
  110. package/src/MarkdownPreview.js +5 -0
  111. package/src/__tests__/renderer.spec.js +84 -117
  112. package/src/regexHelper.js +1 -1
  113. package/src/serializers/__tests__/commonmark.spec.js +1 -1
  114. package/src/serializers/__tests__/slate.spec.js +1 -1
  115. package/src/serializers/index.js +1 -1
  116. package/src/serializers/remarkAssertParents.js +4 -1
  117. package/src/serializers/remarkEscapeMarkdownEntities.js +4 -1
  118. package/src/serializers/remarkPaddedLinks.js +7 -1
  119. package/src/serializers/remarkRehypeShortcodes.js +2 -1
  120. package/src/serializers/remarkSlate.js +6 -1
  121. package/src/serializers/remarkSquashReferences.js +2 -1
  122. package/src/serializers/slateRemark.js +6 -1
  123. package/src/__tests__/__snapshots__/renderer.spec.js.snap +0 -239
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
- import { create, act } from 'react-test-renderer';
3
- import { padStart } from 'lodash';
2
+ import { render, screen } from '@testing-library/react';
3
+ import padStart from 'lodash/padStart';
4
4
  import { Map } from 'immutable';
5
5
 
6
6
  import MarkdownPreview from '../MarkdownPreview';
@@ -40,14 +40,21 @@ Text with **bold** & _em_ elements
40
40
  `;
41
41
  const html = await markdownToHtml(value);
42
42
 
43
- let root;
44
- await act(async () => {
45
- root = create(
46
- <MarkdownPreview value={html} getAsset={jest.fn()} resolveWidget={jest.fn()} />,
47
- );
48
- });
49
-
50
- expect(root.toJSON()).toMatchSnapshot();
43
+ const { container } = render(
44
+ <MarkdownPreview value={html} getAsset={jest.fn()} resolveWidget={jest.fn()} />,
45
+ );
46
+ expect(screen.getByRole('heading', { level: 1 })).toHaveTextContent('H1');
47
+ expect(screen.getByRole('heading', { level: 2 })).toHaveTextContent('H2');
48
+ expect(screen.getByRole('heading', { level: 3 })).toHaveTextContent('H3');
49
+ expect(screen.getByRole('heading', { level: 4 })).toHaveTextContent('H4');
50
+ expect(screen.getByRole('heading', { level: 5 })).toHaveTextContent('H5');
51
+ expect(screen.getByRole('heading', { level: 6 })).toHaveTextContent('H6');
52
+ expect(container).toHaveTextContent('Text with bold & em elements');
53
+ expect(screen.getByRole('link', { name: 'link title' })).toHaveAttribute(
54
+ 'href',
55
+ 'http://google.com',
56
+ );
57
+ expect(screen.getAllByRole('img').length).toBe(2);
51
58
  });
52
59
  });
53
60
 
@@ -57,14 +64,8 @@ Text with **bold** & _em_ elements
57
64
  const value = padStart(' Title', heading + 7, '#');
58
65
  const html = await markdownToHtml(value);
59
66
 
60
- let root;
61
- await act(async () => {
62
- root = create(
63
- <MarkdownPreview value={html} getAsset={jest.fn()} resolveWidget={jest.fn()} />,
64
- );
65
- });
66
-
67
- expect(root.toJSON()).toMatchSnapshot();
67
+ render(<MarkdownPreview value={html} getAsset={jest.fn()} resolveWidget={jest.fn()} />);
68
+ expect(screen.getByRole('heading', { level: heading + 1 })).toHaveTextContent('Title');
68
69
  });
69
70
  }
70
71
  });
@@ -84,39 +85,15 @@ Text with **bold** & _em_ elements
84
85
  `;
85
86
  const html = await markdownToHtml(value);
86
87
 
87
- let root;
88
- await act(async () => {
89
- root = create(
90
- <MarkdownPreview value={html} getAsset={jest.fn()} resolveWidget={jest.fn()} />,
91
- );
92
- });
93
-
94
- expect(root.toJSON()).toMatchInlineSnapshot(`
95
- .emotion-0 {
96
- margin: 15px 2px;
97
- }
98
-
99
- <div
100
- className="emotion-0 emotion-1"
101
- dangerouslySetInnerHTML={
102
- Object {
103
- "__html": "<ol>
104
- <li>ol item 1</li>
105
- <li>ol item 2<ul>
106
- <li>Sublist 1</li>
107
- <li>Sublist 2</li>
108
- <li>Sublist 3<ol>
109
- <li>Sub-Sublist 1</li>
110
- <li>Sub-Sublist 2</li>
111
- <li>Sub-Sublist 3</li>
112
- </ol></li>
113
- </ul></li>
114
- <li>ol item 3</li>
115
- </ol>",
116
- }
117
- }
118
- />
119
- `);
88
+ const { container } = render(
89
+ <MarkdownPreview value={html} getAsset={jest.fn()} resolveWidget={jest.fn()} />,
90
+ );
91
+ // Check for ordered and unordered lists
92
+ expect(container.querySelectorAll('ol').length).toBeGreaterThan(0);
93
+ expect(container.querySelectorAll('ul').length).toBeGreaterThan(0);
94
+ expect(screen.getByText('ol item 1')).toBeInTheDocument();
95
+ expect(screen.getByText('Sublist 1')).toBeInTheDocument();
96
+ expect(screen.getByText('Sub-Sublist 1')).toBeInTheDocument();
120
97
  });
121
98
  });
122
99
 
@@ -131,14 +108,19 @@ I get 10 times more traffic from [Google] than from [Yahoo] or [MSN].
131
108
  `;
132
109
  const html = await markdownToHtml(value);
133
110
 
134
- let root;
135
- await act(async () => {
136
- root = create(
137
- <MarkdownPreview value={html} getAsset={jest.fn()} resolveWidget={jest.fn()} />,
138
- );
139
- });
140
-
141
- expect(root.toJSON()).toMatchSnapshot();
111
+ render(<MarkdownPreview value={html} getAsset={jest.fn()} resolveWidget={jest.fn()} />);
112
+ expect(screen.getByRole('link', { name: 'Google' })).toHaveAttribute(
113
+ 'href',
114
+ 'http://google.com/',
115
+ );
116
+ expect(screen.getByRole('link', { name: 'Yahoo' })).toHaveAttribute(
117
+ 'href',
118
+ 'http://search.yahoo.com/',
119
+ );
120
+ expect(screen.getByRole('link', { name: 'MSN' })).toHaveAttribute(
121
+ 'href',
122
+ 'http://search.msn.com/',
123
+ );
142
124
  });
143
125
  });
144
126
 
@@ -147,28 +129,22 @@ I get 10 times more traffic from [Google] than from [Yahoo] or [MSN].
147
129
  const value = 'Use the `printf()` function.';
148
130
  const html = await markdownToHtml(value);
149
131
 
150
- let root;
151
- await act(async () => {
152
- root = create(
153
- <MarkdownPreview value={html} getAsset={jest.fn()} resolveWidget={jest.fn()} />,
154
- );
155
- });
156
-
157
- expect(root.toJSON()).toMatchSnapshot();
132
+ const { container } = render(
133
+ <MarkdownPreview value={html} getAsset={jest.fn()} resolveWidget={jest.fn()} />,
134
+ );
135
+ expect(container.querySelector('code')).toHaveTextContent('printf()');
158
136
  });
159
137
 
160
138
  it('should render code 2', async () => {
161
139
  const value = '``There is a literal backtick (`) here.``';
162
140
  const html = await markdownToHtml(value);
163
141
 
164
- let root;
165
- await act(async () => {
166
- root = create(
167
- <MarkdownPreview value={html} getAsset={jest.fn()} resolveWidget={jest.fn()} />,
168
- );
169
- });
170
-
171
- expect(root.toJSON()).toMatchSnapshot();
142
+ const { container } = render(
143
+ <MarkdownPreview value={html} getAsset={jest.fn()} resolveWidget={jest.fn()} />,
144
+ );
145
+ expect(container.querySelector('code')).toHaveTextContent(
146
+ 'There is a literal backtick (`) here.',
147
+ );
172
148
  });
173
149
  });
174
150
 
@@ -191,14 +167,12 @@ I get 10 times more traffic from [Google] than from [Yahoo] or [MSN].
191
167
  `;
192
168
  const html = await markdownToHtml(value);
193
169
 
194
- let root;
195
- await act(async () => {
196
- root = create(
197
- <MarkdownPreview value={html} getAsset={jest.fn()} resolveWidget={jest.fn()} />,
198
- );
199
- });
200
-
201
- expect(root.toJSON()).toMatchSnapshot();
170
+ const { container } = render(
171
+ <MarkdownPreview value={html} getAsset={jest.fn()} resolveWidget={jest.fn()} />,
172
+ );
173
+ expect(container.querySelector('form')).toBeInTheDocument();
174
+ expect(container.querySelector('dl')).toBeInTheDocument();
175
+ expect(container.querySelector('h1[style]')).toHaveTextContent('Test');
202
176
  });
203
177
  });
204
178
  });
@@ -208,14 +182,11 @@ I get 10 times more traffic from [Google] than from [Yahoo] or [MSN].
208
182
  const value = '<p>Paragraph with <em>inline</em> element</p>';
209
183
  const html = await markdownToHtml(value);
210
184
 
211
- let root;
212
- await act(async () => {
213
- root = create(
214
- <MarkdownPreview value={html} getAsset={jest.fn()} resolveWidget={jest.fn()} />,
215
- );
216
- });
217
-
218
- expect(root.toJSON()).toMatchSnapshot();
185
+ const { container } = render(
186
+ <MarkdownPreview value={html} getAsset={jest.fn()} resolveWidget={jest.fn()} />,
187
+ );
188
+ expect(container.querySelector('p')).toHaveTextContent('Paragraph with inline element');
189
+ expect(container.querySelector('em')).toHaveTextContent('inline');
219
190
  });
220
191
  });
221
192
 
@@ -224,38 +195,34 @@ I get 10 times more traffic from [Google] than from [Yahoo] or [MSN].
224
195
  const value = `<img src="foobar.png" onerror="alert('hello')">`;
225
196
  const field = Map({ sanitize_preview: true });
226
197
 
227
- let root;
228
- await act(async () => {
229
- root = create(
230
- <MarkdownPreview
231
- value={value}
232
- getAsset={jest.fn()}
233
- resolveWidget={jest.fn()}
234
- field={field}
235
- />,
236
- );
237
- });
238
-
239
- expect(root.toJSON()).toMatchSnapshot();
198
+ const { container } = render(
199
+ <MarkdownPreview
200
+ value={value}
201
+ getAsset={jest.fn()}
202
+ resolveWidget={jest.fn()}
203
+ field={field}
204
+ />,
205
+ );
206
+ const img = container.querySelector('img');
207
+ expect(img).toHaveAttribute('src', 'foobar.png');
208
+ expect(img).not.toHaveAttribute('onerror');
240
209
  });
241
210
 
242
211
  it('should not sanitize HTML', async () => {
243
212
  const value = `<img src="foobar.png" onerror="alert('hello')">`;
244
213
  const field = Map({ sanitize_preview: false });
245
214
 
246
- let root;
247
- await act(async () => {
248
- root = create(
249
- <MarkdownPreview
250
- value={value}
251
- getAsset={jest.fn()}
252
- resolveWidget={jest.fn()}
253
- field={field}
254
- />,
255
- );
256
- });
257
-
258
- expect(root.toJSON()).toMatchSnapshot();
215
+ const { container } = render(
216
+ <MarkdownPreview
217
+ value={value}
218
+ getAsset={jest.fn()}
219
+ resolveWidget={jest.fn()}
220
+ field={field}
221
+ />,
222
+ );
223
+ const img = container.querySelector('img');
224
+ expect(img).toHaveAttribute('src', 'foobar.png');
225
+ expect(img).toHaveAttribute('onerror', "alert('hello')");
259
226
  });
260
227
  });
261
228
  });
@@ -1,4 +1,4 @@
1
- import { last } from 'lodash';
1
+ import last from 'lodash/last';
2
2
 
3
3
  /**
4
4
  * Joins an array of regular expressions into a single expression, without
@@ -1,4 +1,4 @@
1
- import { flow } from 'lodash';
1
+ import flow from 'lodash/flow';
2
2
  import { tests as commonmarkSpec } from 'commonmark-spec';
3
3
  import * as commonmark from 'commonmark';
4
4
 
@@ -1,6 +1,6 @@
1
1
  /** @jsx h */
2
2
 
3
- import { flow } from 'lodash';
3
+ import flow from 'lodash/flow';
4
4
 
5
5
  import h from '../../../test-helpers/h';
6
6
  import { markdownToSlate, slateToMarkdown } from '../index';
@@ -1,4 +1,4 @@
1
- import { trimEnd } from 'lodash';
1
+ import trimEnd from 'lodash/trimEnd';
2
2
  import unified from 'unified';
3
3
  import u from 'unist-builder';
4
4
  import markdownToRemarkPlugin from 'remark-parse';
@@ -1,4 +1,7 @@
1
- import { concat, last, nth, isEmpty } from 'lodash';
1
+ import concat from 'lodash/concat';
2
+ import last from 'lodash/last';
3
+ import nth from 'lodash/nth';
4
+ import isEmpty from 'lodash/isEmpty';
2
5
  import visitParents from 'unist-util-visit-parents';
3
6
 
4
7
  /**
@@ -1,4 +1,7 @@
1
- import { has, flow, partial, map } from 'lodash';
1
+ import has from 'lodash/has';
2
+ import flow from 'lodash/flow';
3
+ import partial from 'lodash/partial';
4
+ import map from 'lodash/map';
2
5
 
3
6
  import { joinPatternSegments, combinePatterns, replaceWhen } from '../regexHelper';
4
7
 
@@ -1,4 +1,10 @@
1
- import { find, findLast, startsWith, endsWith, trimStart, trimEnd, flatMap } from 'lodash';
1
+ import find from 'lodash/find';
2
+ import findLast from 'lodash/findLast';
3
+ import startsWith from 'lodash/startsWith';
4
+ import endsWith from 'lodash/endsWith';
5
+ import trimStart from 'lodash/trimStart';
6
+ import trimEnd from 'lodash/trimEnd';
7
+ import flatMap from 'lodash/flatMap';
2
8
  import u from 'unist-builder';
3
9
  import toString from 'mdast-util-to-string';
4
10
 
@@ -1,5 +1,6 @@
1
1
  import React from 'react';
2
- import { map, has } from 'lodash';
2
+ import map from 'lodash/map';
3
+ import has from 'lodash/has';
3
4
  import { renderToString } from 'react-dom/server';
4
5
  import u from 'unist-builder';
5
6
 
@@ -1,4 +1,9 @@
1
- import { isEmpty, isArray, flatMap, map, flatten, isEqual } from 'lodash';
1
+ import isEmpty from 'lodash/isEmpty';
2
+ import isArray from 'lodash/isArray';
3
+ import flatMap from 'lodash/flatMap';
4
+ import map from 'lodash/map';
5
+ import flatten from 'lodash/flatten';
6
+ import isEqual from 'lodash/isEqual';
2
7
 
3
8
  /**
4
9
  * Map of MDAST node types to Slate node types.
@@ -1,4 +1,5 @@
1
- import { without, flatten } from 'lodash';
1
+ import without from 'lodash/without';
2
+ import flatten from 'lodash/flatten';
2
3
  import u from 'unist-builder';
3
4
  import mdastDefinitions from 'mdast-util-definitions';
4
5
 
@@ -1,4 +1,9 @@
1
- import { get, without, last, map, intersection, omit } from 'lodash';
1
+ import get from 'lodash/get';
2
+ import without from 'lodash/without';
3
+ import last from 'lodash/last';
4
+ import map from 'lodash/map';
5
+ import intersection from 'lodash/intersection';
6
+ import omit from 'lodash/omit';
2
7
  import u from 'unist-builder';
3
8
  import mdastToString from 'mdast-util-to-string';
4
9
 
@@ -1,239 +0,0 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
2
-
3
- exports[`Markdown Preview renderer HTML rendering should render HTML 1`] = `
4
- .emotion-0 {
5
- margin: 15px 2px;
6
- }
7
-
8
- <div
9
- className="emotion-0 emotion-1"
10
- dangerouslySetInnerHTML={
11
- Object {
12
- "__html": "<p>Paragraph with <em>inline</em> element</p>",
13
- }
14
- }
15
- />
16
- `;
17
-
18
- exports[`Markdown Preview renderer HTML sanitization should not sanitize HTML 1`] = `
19
- .emotion-0 {
20
- margin: 15px 2px;
21
- }
22
-
23
- <div
24
- className="emotion-0 emotion-1"
25
- dangerouslySetInnerHTML={
26
- Object {
27
- "__html": "<img src=\\"foobar.png\\" onerror=\\"alert('hello')\\">",
28
- }
29
- }
30
- />
31
- `;
32
-
33
- exports[`Markdown Preview renderer HTML sanitization should sanitize HTML 1`] = `
34
- .emotion-0 {
35
- margin: 15px 2px;
36
- }
37
-
38
- <div
39
- className="emotion-0 emotion-1"
40
- dangerouslySetInnerHTML={
41
- Object {
42
- "__html": "<img src=\\"foobar.png\\">",
43
- }
44
- }
45
- />
46
- `;
47
-
48
- exports[`Markdown Preview renderer Markdown rendering Code should render code 1`] = `
49
- .emotion-0 {
50
- margin: 15px 2px;
51
- }
52
-
53
- <div
54
- className="emotion-0 emotion-1"
55
- dangerouslySetInnerHTML={
56
- Object {
57
- "__html": "<p>Use the <code>printf()</code> function.</p>",
58
- }
59
- }
60
- />
61
- `;
62
-
63
- exports[`Markdown Preview renderer Markdown rendering Code should render code 2 1`] = `
64
- .emotion-0 {
65
- margin: 15px 2px;
66
- }
67
-
68
- <div
69
- className="emotion-0 emotion-1"
70
- dangerouslySetInnerHTML={
71
- Object {
72
- "__html": "<p><code>There is a literal backtick (\`) here.</code></p>",
73
- }
74
- }
75
- />
76
- `;
77
-
78
- exports[`Markdown Preview renderer Markdown rendering General should render markdown 1`] = `
79
- .emotion-0 {
80
- margin: 15px 2px;
81
- }
82
-
83
- <div
84
- className="emotion-0 emotion-1"
85
- dangerouslySetInnerHTML={
86
- Object {
87
- "__html": "<h1>H1</h1>
88
- <p>Text with <strong>bold</strong> &amp; <em>em</em> elements</p>
89
- <h2>H2</h2>
90
- <ul>
91
- <li>ul item 1</li>
92
- <li>ul item 2</li>
93
- </ul>
94
- <h3>H3</h3>
95
- <ol>
96
- <li>ol item 1</li>
97
- <li>ol item 2</li>
98
- <li>ol item 3</li>
99
- </ol>
100
- <h4>H4</h4>
101
- <p><a href=\\"http://google.com\\">link title</a></p>
102
- <h5>H5</h5>
103
- <p><img src=\\"https://pbs.twimg.com/profile_images/678903331176214528/TQTdqGwD.jpg\\" alt=\\"alt text\\" /></p>
104
- <h6>H6</h6>
105
- <p><img src=\\"https://pbs.twimg.com/profile_images/678903331176214528/TQTdqGwD.jpg\\" /></p>",
106
- }
107
- }
108
- />
109
- `;
110
-
111
- exports[`Markdown Preview renderer Markdown rendering HTML should render HTML as is when using Markdown 1`] = `
112
- .emotion-0 {
113
- margin: 15px 2px;
114
- }
115
-
116
- <div
117
- className="emotion-0 emotion-1"
118
- dangerouslySetInnerHTML={
119
- Object {
120
- "__html": "<h1>Title</h1>
121
- <form action=\\"test\\">
122
- <label for=\\"input\\">
123
- <input type=\\"checkbox\\" checked=\\"checked\\" id=\\"input\\"/> My label
124
- </label>
125
- <dl class=\\"test-class another-class\\" style=\\"width: 100%\\">
126
- <dt data-attr=\\"test\\">Test HTML content</dt>
127
- <dt>Testing HTML in Markdown</dt>
128
- </dl>
129
- </form>
130
- <h1 style=\\"display: block; border: 10px solid #f00; width: 100%\\">Test</h1>",
131
- }
132
- }
133
- />
134
- `;
135
-
136
- exports[`Markdown Preview renderer Markdown rendering Headings should render Heading 1 1`] = `
137
- .emotion-0 {
138
- margin: 15px 2px;
139
- }
140
-
141
- <div
142
- className="emotion-0 emotion-1"
143
- dangerouslySetInnerHTML={
144
- Object {
145
- "__html": "<h1>Title</h1>",
146
- }
147
- }
148
- />
149
- `;
150
-
151
- exports[`Markdown Preview renderer Markdown rendering Headings should render Heading 2 1`] = `
152
- .emotion-0 {
153
- margin: 15px 2px;
154
- }
155
-
156
- <div
157
- className="emotion-0 emotion-1"
158
- dangerouslySetInnerHTML={
159
- Object {
160
- "__html": "<h2>Title</h2>",
161
- }
162
- }
163
- />
164
- `;
165
-
166
- exports[`Markdown Preview renderer Markdown rendering Headings should render Heading 3 1`] = `
167
- .emotion-0 {
168
- margin: 15px 2px;
169
- }
170
-
171
- <div
172
- className="emotion-0 emotion-1"
173
- dangerouslySetInnerHTML={
174
- Object {
175
- "__html": "<h3>Title</h3>",
176
- }
177
- }
178
- />
179
- `;
180
-
181
- exports[`Markdown Preview renderer Markdown rendering Headings should render Heading 4 1`] = `
182
- .emotion-0 {
183
- margin: 15px 2px;
184
- }
185
-
186
- <div
187
- className="emotion-0 emotion-1"
188
- dangerouslySetInnerHTML={
189
- Object {
190
- "__html": "<h4>Title</h4>",
191
- }
192
- }
193
- />
194
- `;
195
-
196
- exports[`Markdown Preview renderer Markdown rendering Headings should render Heading 5 1`] = `
197
- .emotion-0 {
198
- margin: 15px 2px;
199
- }
200
-
201
- <div
202
- className="emotion-0 emotion-1"
203
- dangerouslySetInnerHTML={
204
- Object {
205
- "__html": "<h5>Title</h5>",
206
- }
207
- }
208
- />
209
- `;
210
-
211
- exports[`Markdown Preview renderer Markdown rendering Headings should render Heading 6 1`] = `
212
- .emotion-0 {
213
- margin: 15px 2px;
214
- }
215
-
216
- <div
217
- className="emotion-0 emotion-1"
218
- dangerouslySetInnerHTML={
219
- Object {
220
- "__html": "<h6>Title</h6>",
221
- }
222
- }
223
- />
224
- `;
225
-
226
- exports[`Markdown Preview renderer Markdown rendering Links should render links 1`] = `
227
- .emotion-0 {
228
- margin: 15px 2px;
229
- }
230
-
231
- <div
232
- className="emotion-0 emotion-1"
233
- dangerouslySetInnerHTML={
234
- Object {
235
- "__html": "<p>I get 10 times more traffic from <a href=\\"http://google.com/\\" title=\\"Google\\">Google</a> than from <a href=\\"http://search.yahoo.com/\\" title=\\"Yahoo Search\\">Yahoo</a> or <a href=\\"http://search.msn.com/\\" title=\\"MSN Search\\">MSN</a>.</p>",
236
- }
237
- }
238
- />
239
- `;