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/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.5.0",
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.91.1",
38
+ "slate": "^0.118.1",
39
39
  "slate-base64-serializer": "^0.2.107",
40
- "slate-history": "^0.93.0",
41
- "slate-hyperscript": "^0.77.0",
42
- "slate-plain-serializer": "^0.7.1",
43
- "slate-react": "^0.91.2",
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": "d3465f53b7f056ad5d872948a07eaa8e4ae63315"
66
+ "gitHead": "46c6646c68ead2cd982acb236d7aff0356f313ba"
66
67
  }
@@ -57,7 +57,7 @@ function RawEditor(props) {
57
57
  }
58
58
 
59
59
  return (
60
- <Slate editor={editor} value={value} onChange={handleChange}>
60
+ <Slate editor={editor} value={value} initialValue={value} onChange={handleChange}>
61
61
  <RawEditorContainer>
62
62
  <EditorControlBar>
63
63
  <Toolbar
@@ -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 active={rawMode} onChange={onToggleMode} />
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
- toggleMark(editor, format);
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
  }
package/src/schema.js CHANGED
@@ -8,6 +8,7 @@ export default {
8
8
  enum: [
9
9
  'bold',
10
10
  'italic',
11
+ 'strikethrough',
11
12
  'code',
12
13
  'link',
13
14
  'heading-one',