decap-cms-widget-markdown 3.5.0 → 3.6.1
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 +17 -0
- package/dist/decap-cms-widget-markdown.js +6 -6
- package/dist/decap-cms-widget-markdown.js.LICENSE.txt +1 -1
- package/dist/decap-cms-widget-markdown.js.map +1 -1
- package/dist/esm/MarkdownControl/RawEditor.js +2 -1
- package/dist/esm/MarkdownControl/Toolbar.js +13 -5
- package/dist/esm/MarkdownControl/VisualEditor.js +5 -3
- package/dist/esm/MarkdownControl/plugins/inlines/withInlines.js +19 -1
- package/dist/esm/schema.js +1 -1
- package/package.json +8 -7
- package/src/MarkdownControl/RawEditor.js +1 -1
- package/src/MarkdownControl/Toolbar.js +19 -1
- package/src/MarkdownControl/VisualEditor.js +3 -2
- package/src/MarkdownControl/plugins/inlines/withInlines.js +19 -1
- package/src/schema.js +1 -0
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "decap-cms-widget-markdown",
|
|
3
3
|
"description": "Widget for editing markdown in Decap CMS.",
|
|
4
|
-
"version": "3.
|
|
4
|
+
"version": "3.6.1",
|
|
5
5
|
"homepage": "https://www.decapcms.org/docs/widgets/#markdown",
|
|
6
6
|
"repository": "https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-markdown",
|
|
7
7
|
"bugs": "https://github.com/decaporg/decap-cms/issues",
|
|
@@ -35,12 +35,13 @@
|
|
|
35
35
|
"remark-slate": "^1.8.6",
|
|
36
36
|
"remark-slate-transformer": "^0.7.4",
|
|
37
37
|
"remark-stringify": "^6.0.4",
|
|
38
|
-
"slate": "^0.
|
|
38
|
+
"slate": "^0.118.1",
|
|
39
39
|
"slate-base64-serializer": "^0.2.107",
|
|
40
|
-
"slate-
|
|
41
|
-
"slate-
|
|
42
|
-
"slate-
|
|
43
|
-
"slate-
|
|
40
|
+
"slate-dom": "^0.118.1",
|
|
41
|
+
"slate-history": "^0.113.1",
|
|
42
|
+
"slate-hyperscript": "^0.100.0",
|
|
43
|
+
"slate-plain-serializer": "^0.7.3",
|
|
44
|
+
"slate-react": "^0.117.4",
|
|
44
45
|
"slate-soft-break": "^0.9.0",
|
|
45
46
|
"unified": "^9.2.0",
|
|
46
47
|
"unist-builder": "^1.0.3",
|
|
@@ -62,5 +63,5 @@
|
|
|
62
63
|
"commonmark": "^0.30.0",
|
|
63
64
|
"commonmark-spec": "^0.30.0"
|
|
64
65
|
},
|
|
65
|
-
"gitHead": "
|
|
66
|
+
"gitHead": "46c6646c68ead2cd982acb236d7aff0356f313ba"
|
|
66
67
|
}
|
|
@@ -160,6 +160,16 @@ export default class Toolbar extends React.Component {
|
|
|
160
160
|
disabled={disabled}
|
|
161
161
|
/>
|
|
162
162
|
)}
|
|
163
|
+
{isVisible('strikethrough') && (
|
|
164
|
+
<ToolbarButton
|
|
165
|
+
type="strikethrough"
|
|
166
|
+
label={t('editor.editorWidgets.markdown.strikethrough')}
|
|
167
|
+
icon="strikethrough"
|
|
168
|
+
onClick={this.handleMarkClick}
|
|
169
|
+
isActive={hasMark('delete')}
|
|
170
|
+
disabled={disabled}
|
|
171
|
+
/>
|
|
172
|
+
)}
|
|
163
173
|
{isVisible('code') && (
|
|
164
174
|
<ToolbarButton
|
|
165
175
|
type="code"
|
|
@@ -271,7 +281,15 @@ export default class Toolbar extends React.Component {
|
|
|
271
281
|
<ToolbarToggleLabel isActive={!rawMode} offPosition>
|
|
272
282
|
{t('editor.editorWidgets.markdown.richText')}
|
|
273
283
|
</ToolbarToggleLabel>
|
|
274
|
-
<StyledToggle
|
|
284
|
+
<StyledToggle
|
|
285
|
+
active={rawMode}
|
|
286
|
+
onChange={onToggleMode}
|
|
287
|
+
aria-label={
|
|
288
|
+
rawMode
|
|
289
|
+
? t('editor.editorWidgets.markdown.toggleMode.rich')
|
|
290
|
+
: t('editor.editorWidgets.markdown.toggleMode.markdown')
|
|
291
|
+
}
|
|
292
|
+
/>
|
|
275
293
|
<ToolbarToggleLabel isActive={rawMode}>
|
|
276
294
|
{t('editor.editorWidgets.markdown.markdown')}
|
|
277
295
|
</ToolbarToggleLabel>
|
|
@@ -141,7 +141,8 @@ function Editor(props) {
|
|
|
141
141
|
|
|
142
142
|
function handleMarkClick(format) {
|
|
143
143
|
ReactEditor.focus(editor);
|
|
144
|
-
|
|
144
|
+
const markFormat = format === 'strikethrough' ? 'delete' : format;
|
|
145
|
+
toggleMark(editor, markFormat);
|
|
145
146
|
}
|
|
146
147
|
|
|
147
148
|
function handleBlockClick(format) {
|
|
@@ -222,7 +223,7 @@ function Editor(props) {
|
|
|
222
223
|
position: relative;
|
|
223
224
|
`}
|
|
224
225
|
>
|
|
225
|
-
<Slate editor={editor} value={editorValue} onChange={handleChange}>
|
|
226
|
+
<Slate editor={editor} value={editorValue} initialValue={editorValue} onChange={handleChange}>
|
|
226
227
|
<EditorControlBar>
|
|
227
228
|
{
|
|
228
229
|
<Toolbar
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import { Element, Node, Transforms } from 'slate';
|
|
2
|
+
|
|
1
3
|
import keyDown from './events/keyDown';
|
|
2
4
|
|
|
3
5
|
function withInlines(editor) {
|
|
4
|
-
const { isInline, isVoid } = editor;
|
|
6
|
+
const { isInline, isVoid, normalizeNode } = editor;
|
|
5
7
|
|
|
6
8
|
editor.isInline = element =>
|
|
7
9
|
['link', 'button', 'break', 'image'].includes(element.type) || isInline(element);
|
|
@@ -9,6 +11,22 @@ function withInlines(editor) {
|
|
|
9
11
|
editor.isVoid = element =>
|
|
10
12
|
['break', 'image', 'thematic-break'].includes(element.type) || isVoid(element);
|
|
11
13
|
|
|
14
|
+
// Remove empty links (fixes #7640: hidden link remains when deleting linked text)
|
|
15
|
+
editor.normalizeNode = entry => {
|
|
16
|
+
const [node, path] = entry;
|
|
17
|
+
|
|
18
|
+
if (Element.isElement(node) && node.type === 'link') {
|
|
19
|
+
// Check if link is empty (no text content)
|
|
20
|
+
const text = Node.string(node);
|
|
21
|
+
if (text === '') {
|
|
22
|
+
Transforms.removeNodes(editor, { at: path });
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
normalizeNode(entry);
|
|
28
|
+
};
|
|
29
|
+
|
|
12
30
|
if (editor.keyDownHandlers === undefined) {
|
|
13
31
|
editor.keyDownHandlers = [];
|
|
14
32
|
}
|