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.
- package/CHANGELOG.md +16 -0
- package/dist/decap-cms-widget-markdown.js +5 -5
- package/dist/decap-cms-widget-markdown.js.LICENSE.txt +5 -5
- package/dist/decap-cms-widget-markdown.js.map +1 -1
- package/dist/esm/MarkdownControl/RawEditor.js +36 -44
- package/dist/esm/MarkdownControl/Toolbar.js +75 -86
- package/dist/esm/MarkdownControl/ToolbarButton.js +16 -23
- package/dist/esm/MarkdownControl/VisualEditor.js +87 -96
- package/dist/esm/MarkdownControl/components/Shortcode.js +28 -40
- package/dist/esm/MarkdownControl/components/VoidBlock.js +18 -23
- package/dist/esm/MarkdownControl/index.js +54 -59
- package/dist/esm/MarkdownControl/plugins/BreakToDefaultBlock.js +3 -10
- package/dist/esm/MarkdownControl/plugins/CloseBlock.js +3 -10
- package/dist/esm/MarkdownControl/plugins/CommandsAndQueries.js +9 -16
- package/dist/esm/MarkdownControl/plugins/ForceInsert.js +1 -7
- package/dist/esm/MarkdownControl/plugins/Hotkey.js +4 -11
- package/dist/esm/MarkdownControl/plugins/LineBreak.js +3 -10
- package/dist/esm/MarkdownControl/plugins/Link.js +1 -7
- package/dist/esm/MarkdownControl/plugins/blocks/defaultEmptyBlock.js +1 -7
- package/dist/esm/MarkdownControl/plugins/blocks/events/keyDown.js +18 -25
- package/dist/esm/MarkdownControl/plugins/blocks/events/keyDownBackspace.js +11 -18
- package/dist/esm/MarkdownControl/plugins/blocks/events/keyDownEnter.js +9 -16
- package/dist/esm/MarkdownControl/plugins/blocks/events/toggleBlock.js +11 -18
- package/dist/esm/MarkdownControl/plugins/blocks/locations/areCurrentAndPreviousBlocksOfType.js +5 -12
- package/dist/esm/MarkdownControl/plugins/blocks/locations/getListTypeAtCursor.js +4 -11
- package/dist/esm/MarkdownControl/plugins/blocks/locations/isCursorAtEndOfParagraph.js +5 -12
- package/dist/esm/MarkdownControl/plugins/blocks/locations/isCursorAtStartOfBlockType.js +5 -12
- package/dist/esm/MarkdownControl/plugins/blocks/locations/isCursorAtStartOfNonEmptyHeading.js +5 -11
- package/dist/esm/MarkdownControl/plugins/blocks/locations/isCursorCollapsedAfterSoftBreak.js +4 -10
- package/dist/esm/MarkdownControl/plugins/blocks/locations/isCursorInBlockType.js +4 -10
- package/dist/esm/MarkdownControl/plugins/blocks/locations/isCursorInNonDefaultBlock.js +5 -11
- package/dist/esm/MarkdownControl/plugins/blocks/transforms/splitIntoParagraph.js +6 -12
- package/dist/esm/MarkdownControl/plugins/blocks/transforms/unwrapIfCursorAtStart.js +12 -19
- package/dist/esm/MarkdownControl/plugins/blocks/transforms/wrapListItemsInBlock.js +7 -13
- package/dist/esm/MarkdownControl/plugins/blocks/withBlocks.js +5 -12
- package/dist/esm/MarkdownControl/plugins/html/withHtml.js +29 -14
- package/dist/esm/MarkdownControl/plugins/inlines/events/keyDown.js +11 -18
- package/dist/esm/MarkdownControl/plugins/inlines/events/keyDownShiftEnter.js +5 -11
- package/dist/esm/MarkdownControl/plugins/inlines/events/toggleLink.js +8 -16
- package/dist/esm/MarkdownControl/plugins/inlines/events/toggleMark.js +6 -13
- package/dist/esm/MarkdownControl/plugins/inlines/locations/isMarkActive.js +3 -9
- package/dist/esm/MarkdownControl/plugins/inlines/selectors/getActiveLink.js +4 -11
- package/dist/esm/MarkdownControl/plugins/inlines/transforms/unwrapLink.js +4 -11
- package/dist/esm/MarkdownControl/plugins/inlines/transforms/wrapLink.js +11 -18
- package/dist/esm/MarkdownControl/plugins/inlines/withInlines.js +3 -10
- package/dist/esm/MarkdownControl/plugins/lists/events/keyDown.js +14 -21
- package/dist/esm/MarkdownControl/plugins/lists/events/keyDownBackspace.js +11 -18
- package/dist/esm/MarkdownControl/plugins/lists/events/keyDownEnter.js +18 -25
- package/dist/esm/MarkdownControl/plugins/lists/events/keyDownShiftTab.js +13 -23
- package/dist/esm/MarkdownControl/plugins/lists/events/keyDownTab.js +15 -26
- package/dist/esm/MarkdownControl/plugins/lists/events/toggleListType.js +11 -18
- package/dist/esm/MarkdownControl/plugins/lists/locations/isCursorAtListItemStart.js +3 -9
- package/dist/esm/MarkdownControl/plugins/lists/locations/isCursorAtNoninitialParagraphStart.js +3 -9
- package/dist/esm/MarkdownControl/plugins/lists/locations/isCursorInItemContainingNestedList.js +3 -10
- package/dist/esm/MarkdownControl/plugins/lists/locations/isCursorInListItem.js +4 -10
- package/dist/esm/MarkdownControl/plugins/lists/locations/isSelectionWithinNoninitialListItem.js +4 -10
- package/dist/esm/MarkdownControl/plugins/lists/selectors/getListContainedInListItem.js +5 -12
- package/dist/esm/MarkdownControl/plugins/lists/selectors/getLowestAncestorList.js +4 -11
- package/dist/esm/MarkdownControl/plugins/lists/selectors/getLowestAncestorQuote.js +4 -11
- package/dist/esm/MarkdownControl/plugins/lists/transforms/changeListType.js +8 -15
- package/dist/esm/MarkdownControl/plugins/lists/transforms/convertParagraphToListItem.js +8 -15
- package/dist/esm/MarkdownControl/plugins/lists/transforms/liftFirstMatchedParent.js +6 -16
- package/dist/esm/MarkdownControl/plugins/lists/transforms/liftListItem.js +13 -20
- package/dist/esm/MarkdownControl/plugins/lists/transforms/mergeWithPreviousListItem.js +6 -13
- package/dist/esm/MarkdownControl/plugins/lists/transforms/moveListToListItem.js +3 -9
- package/dist/esm/MarkdownControl/plugins/lists/transforms/splitListItem.js +12 -19
- package/dist/esm/MarkdownControl/plugins/lists/transforms/splitToNestedList.js +11 -18
- package/dist/esm/MarkdownControl/plugins/lists/transforms/unwrapFirstMatchedParent.js +4 -11
- package/dist/esm/MarkdownControl/plugins/lists/transforms/unwrapSelectionFromList.js +9 -20
- package/dist/esm/MarkdownControl/plugins/lists/transforms/wrapFirstMatchedParent.js +4 -11
- package/dist/esm/MarkdownControl/plugins/lists/transforms/wrapSelectionInList.js +8 -15
- package/dist/esm/MarkdownControl/plugins/lists/withLists.js +19 -26
- package/dist/esm/MarkdownControl/plugins/matchers/lowestMatchedAncestor.js +3 -10
- package/dist/esm/MarkdownControl/plugins/matchers/matchLink.js +3 -9
- package/dist/esm/MarkdownControl/plugins/matchers/matchedAncestors.js +3 -9
- package/dist/esm/MarkdownControl/plugins/shortcodes/insertShortcode.js +6 -13
- package/dist/esm/MarkdownControl/plugins/shortcodes/locations/isCursorInEmptyParagraph.js +5 -11
- package/dist/esm/MarkdownControl/plugins/shortcodes/withShortcodes.js +5 -12
- package/dist/esm/MarkdownControl/plugins/util.js +5 -12
- package/dist/esm/MarkdownControl/renderers.js +90 -102
- package/dist/esm/MarkdownPreview.js +21 -27
- package/dist/esm/index.js +13 -24
- package/dist/esm/regexHelper.js +6 -14
- package/dist/esm/schema.js +1 -7
- package/dist/esm/serializers/index.js +46 -57
- package/dist/esm/serializers/rehypePaperEmoji.js +1 -7
- package/dist/esm/serializers/remarkAllowHtmlEntities.js +1 -7
- package/dist/esm/serializers/remarkAssertParents.js +20 -29
- package/dist/esm/serializers/remarkEscapeMarkdownEntities.js +22 -28
- package/dist/esm/serializers/remarkImagesToText.js +4 -14
- package/dist/esm/serializers/remarkPaddedLinks.js +22 -32
- package/dist/esm/serializers/remarkRehypeShortcodes.js +17 -26
- package/dist/esm/serializers/remarkShortcodes.js +3 -11
- package/dist/esm/serializers/remarkSlate.js +65 -64
- package/dist/esm/serializers/remarkSquashReferences.js +15 -25
- package/dist/esm/serializers/remarkStripTrailingBreaks.js +3 -9
- package/dist/esm/serializers/remarkWrapHtml.js +3 -9
- package/dist/esm/serializers/slateRemark.js +69 -75
- package/dist/esm/styles.js +5 -12
- package/dist/esm/types.js +2 -8
- package/package.json +6 -6
- package/src/MarkdownControl/RawEditor.js +2 -1
- package/src/MarkdownControl/Toolbar.js +5 -0
- package/src/MarkdownControl/VisualEditor.js +3 -2
- package/src/MarkdownControl/components/Shortcode.js +1 -1
- package/src/MarkdownControl/index.js +9 -0
- package/src/MarkdownControl/plugins/CommandsAndQueries.js +3 -1
- package/src/MarkdownControl/plugins/html/withHtml.js +19 -0
- package/src/MarkdownControl/plugins/util.js +2 -1
- package/src/MarkdownPreview.js +5 -0
- package/src/__tests__/renderer.spec.js +84 -117
- package/src/regexHelper.js +1 -1
- package/src/serializers/__tests__/commonmark.spec.js +1 -1
- package/src/serializers/__tests__/slate.spec.js +1 -1
- package/src/serializers/index.js +1 -1
- package/src/serializers/remarkAssertParents.js +4 -1
- package/src/serializers/remarkEscapeMarkdownEntities.js +4 -1
- package/src/serializers/remarkPaddedLinks.js +7 -1
- package/src/serializers/remarkRehypeShortcodes.js +2 -1
- package/src/serializers/remarkSlate.js +6 -1
- package/src/serializers/remarkSquashReferences.js +2 -1
- package/src/serializers/slateRemark.js +6 -1
- package/src/__tests__/__snapshots__/renderer.spec.js.snap +0 -239
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
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
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
expect(
|
|
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
|
-
|
|
61
|
-
|
|
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
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
expect(
|
|
95
|
-
.
|
|
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
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
})
|
|
140
|
-
|
|
141
|
-
|
|
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
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
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
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
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
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
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
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
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
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
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
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
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
|
});
|
package/src/regexHelper.js
CHANGED
package/src/serializers/index.js
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import
|
|
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
|
|
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,4 +1,9 @@
|
|
|
1
|
-
import
|
|
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,9 @@
|
|
|
1
|
-
import
|
|
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> & <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
|
-
`;
|