@plone/volto 18.0.0-alpha.2 → 18.0.0-alpha.4

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 (293) hide show
  1. package/.eslintrc +3 -3
  2. package/.prettierignore +8 -0
  3. package/.prettierrc +12 -0
  4. package/{packages/registry/.release-it.json → .release-it.json} +11 -6
  5. package/CHANGELOG.md +44 -4
  6. package/locales/ca/LC_MESSAGES/volto.po +1 -0
  7. package/locales/de/LC_MESSAGES/volto.po +1 -0
  8. package/locales/en/LC_MESSAGES/volto.po +1 -0
  9. package/locales/es/LC_MESSAGES/volto.po +1 -0
  10. package/locales/eu/LC_MESSAGES/volto.po +1 -0
  11. package/locales/fi/LC_MESSAGES/volto.po +1 -0
  12. package/locales/fr/LC_MESSAGES/volto.po +1 -0
  13. package/locales/it/LC_MESSAGES/volto.po +1 -0
  14. package/locales/ja/LC_MESSAGES/volto.po +1 -0
  15. package/locales/nl/LC_MESSAGES/volto.po +1 -0
  16. package/locales/pt/LC_MESSAGES/volto.po +1 -0
  17. package/locales/pt_BR/LC_MESSAGES/volto.po +1 -0
  18. package/locales/ro/LC_MESSAGES/volto.po +1 -0
  19. package/locales/volto.pot +2 -1
  20. package/locales/zh_CN/LC_MESSAGES/volto.po +1 -0
  21. package/package.json +57 -127
  22. package/razzle.config.js +4 -7
  23. package/src/components/manage/Blocks/Video/Body.jsx +52 -22
  24. package/src/components/manage/Blocks/Video/Body.test.jsx +167 -0
  25. package/src/components/manage/Controlpanels/Users/UserGroupMembershipControlPanel.jsx +2 -2
  26. package/src/components/manage/Form/Form.jsx +5 -2
  27. package/src/components/theme/Breadcrumbs/Breadcrumbs.jsx +19 -2
  28. package/src/components/theme/ContentMetadataTags/ContentMetadataTags.jsx +46 -39
  29. package/src/config/index.js +0 -4
  30. package/src/icons/divide-horizontal.svg +0 -0
  31. package/src/icons/divide-vertical.svg +0 -0
  32. package/src/icons/hero.svg +0 -0
  33. package/src/icons/slider.svg +0 -0
  34. package/src/icons/summary.svg +0 -0
  35. package/src/middleware/api.js +1 -1
  36. package/theme/themes/default/elements/icon.overrides +0 -0
  37. package/theme/themes/default/globals/reset.overrides +0 -0
  38. package/theme/themes/default/globals/site.variables +0 -0
  39. package/theme/themes/default/modules/dropdown.overrides +0 -0
  40. package/theme/themes/default/modules/dropdown.variables +0 -0
  41. package/theme/themes/default/modules/modal.variables +0 -0
  42. package/theme/themes/default/modules/video.overrides +0 -0
  43. package/theme/themes/default/modules/video.variables +0 -0
  44. package/theme/themes/pastanaga/assets/fonts/icons.eot +0 -0
  45. package/theme/themes/pastanaga/assets/fonts/icons.svg +0 -0
  46. package/theme/themes/pastanaga/assets/fonts/icons.ttf +0 -0
  47. package/theme/themes/pastanaga/assets/fonts/icons.woff +0 -0
  48. package/theme/themes/pastanaga/globals/reset.overrides +0 -0
  49. package/theme/themes/pastanaga/globals/site.variables +0 -0
  50. package/theme/themes/pastanaga/modules/dropdown.variables +0 -0
  51. package/theme/themes/pastanaga/modules/modal.variables +0 -0
  52. package/theme/themes/pastanaga/modules/video.overrides +0 -0
  53. package/theme/themes/pastanaga/modules/video.variables +0 -0
  54. package/tsconfig.json +1 -4
  55. package/types/components/manage/Blocks/Video/Body.d.ts +5 -0
  56. package/types/config/RichTextEditor/index.d.ts +5 -8
  57. package/types/helpers/AsyncConnect/index.d.ts +2 -2
  58. package/types/helpers/Url/Url.d.ts +3 -3
  59. package/types/icons/load-icons.d.ts +1 -1
  60. package/webpack-plugins/webpack-less-plugin.js +1 -0
  61. package/CODE_OF_CONDUCT.md +0 -13
  62. package/CONTRIBUTING.md +0 -7
  63. package/README.md +0 -154
  64. package/RELEASING.md +0 -73
  65. package/ROADMAP.md +0 -30
  66. package/SECURITY.md +0 -14
  67. package/logos/Logo.png +0 -0
  68. package/logos/VoltoLogoEra2-dark-mode.png +0 -0
  69. package/logos/VoltoLogoEra2.png +0 -0
  70. package/logos/volto-colorful.png +0 -0
  71. package/logos/volto-colorful.svg +0 -35
  72. package/logos/volto-guide.png +0 -0
  73. package/logos/volto-h-transparent.svg +0 -6
  74. package/logos/volto-transparent.png +0 -0
  75. package/logos/volto-transparent.svg +0 -19
  76. package/logos/volto-transparent2.svg +0 -5
  77. package/logos/volto-yellow.svg +0 -29
  78. package/logos/volto.sketch +0 -0
  79. package/packages/README.md +0 -7
  80. package/packages/registry/.towncrier/towncrier_template.jinja +0 -10
  81. package/packages/registry/CHANGELOG.md +0 -16
  82. package/packages/registry/README.md +0 -207
  83. package/packages/registry/addon-registry.js +0 -603
  84. package/packages/registry/create-addons-loader.js +0 -116
  85. package/packages/registry/create-theme-addons-loader.js +0 -78
  86. package/packages/registry/news/.gitkeep +0 -0
  87. package/packages/registry/package.json +0 -76
  88. package/packages/registry/src/index.ts +0 -174
  89. package/packages/registry/src/registry.test.js +0 -111
  90. package/packages/registry/tsconfig.json +0 -32
  91. package/packages/scripts/CHANGELOG.md +0 -173
  92. package/packages/scripts/README.md +0 -128
  93. package/packages/scripts/addon/consolidate.js +0 -28
  94. package/packages/scripts/addon/generators.js +0 -213
  95. package/packages/scripts/addon/getAddonInfo.js +0 -65
  96. package/packages/scripts/addon/index.js +0 -88
  97. package/packages/scripts/addon/utils.js +0 -44
  98. package/packages/scripts/backportpr.js +0 -75
  99. package/packages/scripts/changelogupdater.cjs +0 -94
  100. package/packages/scripts/corepackagebump.js +0 -20
  101. package/packages/scripts/i18n.cjs +0 -310
  102. package/packages/scripts/package.json +0 -76
  103. package/packages/scripts/templates/towncrier_template.jinja +0 -10
  104. package/packages/types/Blocks/View.ts +0 -11
  105. package/packages/types/actions.ts +0 -15
  106. package/packages/types/breadcrumbs.ts +0 -10
  107. package/packages/types/config/Blocks.ts +0 -153
  108. package/packages/types/config/Content.ts +0 -62
  109. package/packages/types/config/Settings.ts +0 -86
  110. package/packages/types/config/Views.ts +0 -15
  111. package/packages/types/config/Widgets.ts +0 -7
  112. package/packages/types/config/index.ts +0 -21
  113. package/packages/types/content/common.ts +0 -60
  114. package/packages/types/content/get.ts +0 -66
  115. package/packages/types/index.ts +0 -0
  116. package/packages/types/navigation.ts +0 -12
  117. package/packages/types/package.json +0 -64
  118. package/packages/types/types.ts +0 -61
  119. package/packages/volto-slate/.i18n.babel.config.js +0 -1
  120. package/packages/volto-slate/README.md +0 -4
  121. package/packages/volto-slate/build/messages/src/blocks/Table/TableBlockEdit.json +0 -90
  122. package/packages/volto-slate/build/messages/src/blocks/Text/DefaultTextBlockEditor.json +0 -6
  123. package/packages/volto-slate/build/messages/src/blocks/Text/DetachedTextBlockEditor.json +0 -6
  124. package/packages/volto-slate/build/messages/src/blocks/Text/SlashMenu.json +0 -6
  125. package/packages/volto-slate/build/messages/src/editor/plugins/AdvancedLink/index.json +0 -10
  126. package/packages/volto-slate/build/messages/src/editor/plugins/Link/index.json +0 -10
  127. package/packages/volto-slate/build/messages/src/editor/plugins/Table/index.json +0 -30
  128. package/packages/volto-slate/build/messages/src/elementEditor/messages.json +0 -10
  129. package/packages/volto-slate/build/messages/src/widgets/HtmlSlateWidget.json +0 -6
  130. package/packages/volto-slate/build/messages/src/widgets/RichTextWidgetView.json +0 -6
  131. package/packages/volto-slate/locales/de/LC_MESSAGES/volto.po +0 -148
  132. package/packages/volto-slate/locales/en/LC_MESSAGES/volto.po +0 -148
  133. package/packages/volto-slate/locales/volto.pot +0 -182
  134. package/packages/volto-slate/package.json +0 -43
  135. package/packages/volto-slate/src/actions/content.js +0 -30
  136. package/packages/volto-slate/src/actions/index.js +0 -3
  137. package/packages/volto-slate/src/actions/plugins.js +0 -9
  138. package/packages/volto-slate/src/actions/selection.js +0 -22
  139. package/packages/volto-slate/src/blocks/Table/Cell.jsx +0 -87
  140. package/packages/volto-slate/src/blocks/Table/Cell.test.js +0 -54
  141. package/packages/volto-slate/src/blocks/Table/TableBlockEdit.jsx +0 -694
  142. package/packages/volto-slate/src/blocks/Table/TableBlockEdit.test.js +0 -40
  143. package/packages/volto-slate/src/blocks/Table/TableBlockView.jsx +0 -150
  144. package/packages/volto-slate/src/blocks/Table/TableBlockView.test.js +0 -49
  145. package/packages/volto-slate/src/blocks/Table/deconstruct.js +0 -113
  146. package/packages/volto-slate/src/blocks/Table/extensions/normalizeTable.js +0 -5
  147. package/packages/volto-slate/src/blocks/Table/index.js +0 -60
  148. package/packages/volto-slate/src/blocks/Table/schema.js +0 -122
  149. package/packages/volto-slate/src/blocks/Text/DefaultTextBlockEditor.jsx +0 -304
  150. package/packages/volto-slate/src/blocks/Text/DetachedTextBlockEditor.jsx +0 -77
  151. package/packages/volto-slate/src/blocks/Text/MarkdownIntroduction.jsx +0 -59
  152. package/packages/volto-slate/src/blocks/Text/PluginSidebar.jsx +0 -18
  153. package/packages/volto-slate/src/blocks/Text/ShortcutListing.jsx +0 -28
  154. package/packages/volto-slate/src/blocks/Text/SlashMenu.jsx +0 -203
  155. package/packages/volto-slate/src/blocks/Text/TextBlockEdit.jsx +0 -38
  156. package/packages/volto-slate/src/blocks/Text/TextBlockEdit.test.js +0 -107
  157. package/packages/volto-slate/src/blocks/Text/TextBlockSchema.js +0 -54
  158. package/packages/volto-slate/src/blocks/Text/TextBlockView.jsx +0 -31
  159. package/packages/volto-slate/src/blocks/Text/css/editor.css +0 -18
  160. package/packages/volto-slate/src/blocks/Text/extensions/Readme.md +0 -49
  161. package/packages/volto-slate/src/blocks/Text/extensions/breakList.js +0 -100
  162. package/packages/volto-slate/src/blocks/Text/extensions/index.js +0 -6
  163. package/packages/volto-slate/src/blocks/Text/extensions/insertBreak.js +0 -57
  164. package/packages/volto-slate/src/blocks/Text/extensions/isSelected.js +0 -7
  165. package/packages/volto-slate/src/blocks/Text/extensions/normalizeExternalData.js +0 -7
  166. package/packages/volto-slate/src/blocks/Text/extensions/withDeserializers.js +0 -87
  167. package/packages/volto-slate/src/blocks/Text/extensions/withLists.js +0 -5
  168. package/packages/volto-slate/src/blocks/Text/index.js +0 -171
  169. package/packages/volto-slate/src/blocks/Text/keyboard/backspaceInList.js +0 -58
  170. package/packages/volto-slate/src/blocks/Text/keyboard/breakBlocks.js +0 -3
  171. package/packages/volto-slate/src/blocks/Text/keyboard/cancelEsc.js +0 -7
  172. package/packages/volto-slate/src/blocks/Text/keyboard/indentListItems.js +0 -240
  173. package/packages/volto-slate/src/blocks/Text/keyboard/index.js +0 -52
  174. package/packages/volto-slate/src/blocks/Text/keyboard/joinBlocks.js +0 -180
  175. package/packages/volto-slate/src/blocks/Text/keyboard/moveListItems.js +0 -124
  176. package/packages/volto-slate/src/blocks/Text/keyboard/slashMenu.js +0 -19
  177. package/packages/volto-slate/src/blocks/Text/keyboard/softBreak.js +0 -7
  178. package/packages/volto-slate/src/blocks/Text/keyboard/traverseBlocks.js +0 -81
  179. package/packages/volto-slate/src/blocks/Text/keyboard/unwrapEmptyString.js +0 -26
  180. package/packages/volto-slate/src/blocks/Text/schema.js +0 -39
  181. package/packages/volto-slate/src/constants.js +0 -123
  182. package/packages/volto-slate/src/editor/EditorContext.jsx +0 -5
  183. package/packages/volto-slate/src/editor/EditorReference.jsx +0 -22
  184. package/packages/volto-slate/src/editor/SlateEditor.jsx +0 -375
  185. package/packages/volto-slate/src/editor/config.jsx +0 -344
  186. package/packages/volto-slate/src/editor/decorate.js +0 -68
  187. package/packages/volto-slate/src/editor/deserialize.js +0 -185
  188. package/packages/volto-slate/src/editor/extensions/index.js +0 -6
  189. package/packages/volto-slate/src/editor/extensions/insertBreak.js +0 -15
  190. package/packages/volto-slate/src/editor/extensions/insertData.js +0 -159
  191. package/packages/volto-slate/src/editor/extensions/isInline.js +0 -14
  192. package/packages/volto-slate/src/editor/extensions/normalizeExternalData.js +0 -8
  193. package/packages/volto-slate/src/editor/extensions/normalizeNode.js +0 -48
  194. package/packages/volto-slate/src/editor/extensions/withDeserializers.js +0 -15
  195. package/packages/volto-slate/src/editor/extensions/withTestingFeatures.jsx +0 -84
  196. package/packages/volto-slate/src/editor/index.js +0 -14
  197. package/packages/volto-slate/src/editor/less/editor.less +0 -173
  198. package/packages/volto-slate/src/editor/less/globals.less +0 -18
  199. package/packages/volto-slate/src/editor/less/slate.less +0 -28
  200. package/packages/volto-slate/src/editor/plugins/AdvancedLink/deserialize.js +0 -90
  201. package/packages/volto-slate/src/editor/plugins/AdvancedLink/extensions.js +0 -32
  202. package/packages/volto-slate/src/editor/plugins/AdvancedLink/index.js +0 -50
  203. package/packages/volto-slate/src/editor/plugins/AdvancedLink/render.jsx +0 -37
  204. package/packages/volto-slate/src/editor/plugins/AdvancedLink/schema.js +0 -114
  205. package/packages/volto-slate/src/editor/plugins/AdvancedLink/styles.less +0 -8
  206. package/packages/volto-slate/src/editor/plugins/Blockquote/index.js +0 -30
  207. package/packages/volto-slate/src/editor/plugins/Callout/index.js +0 -34
  208. package/packages/volto-slate/src/editor/plugins/Image/deconstruct.js +0 -30
  209. package/packages/volto-slate/src/editor/plugins/Image/extensions.js +0 -51
  210. package/packages/volto-slate/src/editor/plugins/Image/index.js +0 -11
  211. package/packages/volto-slate/src/editor/plugins/Image/render.jsx +0 -22
  212. package/packages/volto-slate/src/editor/plugins/Link/extensions.js +0 -58
  213. package/packages/volto-slate/src/editor/plugins/Link/index.js +0 -164
  214. package/packages/volto-slate/src/editor/plugins/Link/render.jsx +0 -54
  215. package/packages/volto-slate/src/editor/plugins/Markdown/constants.js +0 -81
  216. package/packages/volto-slate/src/editor/plugins/Markdown/extensions.js +0 -334
  217. package/packages/volto-slate/src/editor/plugins/Markdown/index.js +0 -28
  218. package/packages/volto-slate/src/editor/plugins/Markdown/utils.js +0 -198
  219. package/packages/volto-slate/src/editor/plugins/StyleMenu/StyleMenu.jsx +0 -153
  220. package/packages/volto-slate/src/editor/plugins/StyleMenu/index.js +0 -19
  221. package/packages/volto-slate/src/editor/plugins/StyleMenu/style.less +0 -29
  222. package/packages/volto-slate/src/editor/plugins/StyleMenu/utils.js +0 -168
  223. package/packages/volto-slate/src/editor/plugins/Table/TableButton.jsx +0 -142
  224. package/packages/volto-slate/src/editor/plugins/Table/TableCell.jsx +0 -44
  225. package/packages/volto-slate/src/editor/plugins/Table/TableContainer.jsx +0 -37
  226. package/packages/volto-slate/src/editor/plugins/Table/TableSizePicker.jsx +0 -83
  227. package/packages/volto-slate/src/editor/plugins/Table/extensions.js +0 -87
  228. package/packages/volto-slate/src/editor/plugins/Table/index.js +0 -390
  229. package/packages/volto-slate/src/editor/plugins/Table/less/public.less +0 -29
  230. package/packages/volto-slate/src/editor/plugins/Table/less/table.less +0 -28
  231. package/packages/volto-slate/src/editor/plugins/Table/render.jsx +0 -30
  232. package/packages/volto-slate/src/editor/plugins/index.js +0 -19
  233. package/packages/volto-slate/src/editor/render.jsx +0 -224
  234. package/packages/volto-slate/src/editor/ui/BasicToolbar.jsx +0 -11
  235. package/packages/volto-slate/src/editor/ui/BlockButton.jsx +0 -31
  236. package/packages/volto-slate/src/editor/ui/ClearFormattingButton.jsx +0 -21
  237. package/packages/volto-slate/src/editor/ui/ExpandedToolbar.jsx +0 -18
  238. package/packages/volto-slate/src/editor/ui/Expando.jsx +0 -5
  239. package/packages/volto-slate/src/editor/ui/InlineToolbar.jsx +0 -73
  240. package/packages/volto-slate/src/editor/ui/MarkButton.jsx +0 -23
  241. package/packages/volto-slate/src/editor/ui/MarkElementButton.jsx +0 -30
  242. package/packages/volto-slate/src/editor/ui/Menu.jsx +0 -13
  243. package/packages/volto-slate/src/editor/ui/PositionedToolbar.jsx +0 -32
  244. package/packages/volto-slate/src/editor/ui/Separator.jsx +0 -7
  245. package/packages/volto-slate/src/editor/ui/SlateContextToolbar.jsx +0 -13
  246. package/packages/volto-slate/src/editor/ui/SlateToolbar.jsx +0 -96
  247. package/packages/volto-slate/src/editor/ui/Toolbar.jsx +0 -103
  248. package/packages/volto-slate/src/editor/ui/ToolbarButton.jsx +0 -33
  249. package/packages/volto-slate/src/editor/ui/ToolbarButton.test.js +0 -25
  250. package/packages/volto-slate/src/editor/ui/index.js +0 -15
  251. package/packages/volto-slate/src/editor/utils.js +0 -248
  252. package/packages/volto-slate/src/elementEditor/ContextButtons.jsx +0 -56
  253. package/packages/volto-slate/src/elementEditor/PluginEditor.jsx +0 -124
  254. package/packages/volto-slate/src/elementEditor/Readme.md +0 -6
  255. package/packages/volto-slate/src/elementEditor/SchemaProvider.jsx +0 -3
  256. package/packages/volto-slate/src/elementEditor/SidebarEditor.jsx +0 -46
  257. package/packages/volto-slate/src/elementEditor/ToolbarButton.jsx +0 -44
  258. package/packages/volto-slate/src/elementEditor/index.js +0 -5
  259. package/packages/volto-slate/src/elementEditor/makeInlineElementPlugin.js +0 -100
  260. package/packages/volto-slate/src/elementEditor/messages.js +0 -14
  261. package/packages/volto-slate/src/elementEditor/utils.js +0 -226
  262. package/packages/volto-slate/src/hooks/index.js +0 -3
  263. package/packages/volto-slate/src/hooks/useEditorContext.js +0 -6
  264. package/packages/volto-slate/src/hooks/useIsomorphicLayoutEffect.js +0 -7
  265. package/packages/volto-slate/src/hooks/useSelectionPosition.js +0 -25
  266. package/packages/volto-slate/src/i18n.js +0 -180
  267. package/packages/volto-slate/src/icons/hashlink.svg +0 -57
  268. package/packages/volto-slate/src/index.js +0 -61
  269. package/packages/volto-slate/src/reducers/content.js +0 -74
  270. package/packages/volto-slate/src/reducers/index.js +0 -3
  271. package/packages/volto-slate/src/reducers/plugins.js +0 -17
  272. package/packages/volto-slate/src/reducers/selection.js +0 -16
  273. package/packages/volto-slate/src/utils/blocks.js +0 -375
  274. package/packages/volto-slate/src/utils/blocks.test.js +0 -138
  275. package/packages/volto-slate/src/utils/editor.js +0 -31
  276. package/packages/volto-slate/src/utils/image.js +0 -25
  277. package/packages/volto-slate/src/utils/index.js +0 -11
  278. package/packages/volto-slate/src/utils/internals.js +0 -46
  279. package/packages/volto-slate/src/utils/lists.js +0 -92
  280. package/packages/volto-slate/src/utils/marks.js +0 -104
  281. package/packages/volto-slate/src/utils/mime-types.js +0 -24
  282. package/packages/volto-slate/src/utils/nodes.js +0 -4
  283. package/packages/volto-slate/src/utils/ops.js +0 -20
  284. package/packages/volto-slate/src/utils/random.js +0 -17
  285. package/packages/volto-slate/src/utils/selection.js +0 -236
  286. package/packages/volto-slate/src/utils/slate-string-utils.js +0 -408
  287. package/packages/volto-slate/src/utils/volto-blocks.js +0 -314
  288. package/packages/volto-slate/src/widgets/ErrorBoundary.jsx +0 -27
  289. package/packages/volto-slate/src/widgets/HtmlSlateWidget.jsx +0 -139
  290. package/packages/volto-slate/src/widgets/ObjectByTypeWidget.jsx +0 -49
  291. package/packages/volto-slate/src/widgets/RichTextWidget.jsx +0 -72
  292. package/packages/volto-slate/src/widgets/RichTextWidgetView.jsx +0 -37
  293. package/packages/volto-slate/src/widgets/style.css +0 -21
@@ -1,180 +0,0 @@
1
- import ReactDOM from 'react-dom';
2
- import { cloneDeep } from 'lodash';
3
- import { serializeNodesToText } from '@plone/volto-slate/editor/render';
4
- import { Editor } from 'slate';
5
- import {
6
- getPreviousVoltoBlock,
7
- getNextVoltoBlock,
8
- isCursorAtBlockStart,
9
- isCursorAtBlockEnd,
10
- mergeSlateWithBlockBackward,
11
- mergeSlateWithBlockForward,
12
- makeEditor,
13
- } from '@plone/volto-slate/utils';
14
- import {
15
- changeBlock,
16
- deleteBlock,
17
- getBlocksFieldname,
18
- getBlocksLayoutFieldname,
19
- } from '@plone/volto/helpers';
20
- /**
21
- * Joins the current block (which has an active Slate Editor)
22
- * with the previous block, to make a single block.
23
- *
24
- * @param {Editor} editor
25
- * @param {KeyboardEvent} event
26
- */
27
- export function joinWithPreviousBlock({ editor, event }) {
28
- if (!isCursorAtBlockStart(editor)) return;
29
-
30
- const blockProps = editor.getBlockProps();
31
- const {
32
- block,
33
- index,
34
- saveSlateBlockSelection,
35
- onSelectBlock,
36
- data,
37
- properties,
38
- onChangeField,
39
- } = blockProps;
40
-
41
- const blocksFieldname = getBlocksFieldname(properties);
42
- const blocksLayoutFieldname = getBlocksLayoutFieldname(properties);
43
-
44
- const prev = getPreviousVoltoBlock(index, properties);
45
- if (!prev) return;
46
- const [otherBlock = {}, otherBlockId] = prev;
47
-
48
- // Don't join with required blocks
49
- if (data?.required || otherBlock?.required || otherBlock['@type'] !== 'slate')
50
- return;
51
-
52
- event.stopPropagation();
53
- event.preventDefault();
54
-
55
- // If the Editor contains no characters TODO: clarify if this special case
56
- // really needs to be handled or not. In `joinWithNextBlock` it is not
57
- // handled.
58
- const text = Editor.string(editor, []);
59
- if (!text) {
60
- const cursor = getBlockEndAsRange(otherBlock);
61
- const newFormData = deleteBlock(properties, block);
62
-
63
- ReactDOM.unstable_batchedUpdates(() => {
64
- saveSlateBlockSelection(otherBlockId, cursor);
65
-
66
- onChangeField(blocksFieldname, newFormData[blocksFieldname]);
67
- onChangeField(blocksLayoutFieldname, newFormData[blocksLayoutFieldname]);
68
-
69
- onSelectBlock(otherBlockId);
70
- });
71
-
72
- return true;
73
- }
74
-
75
- // Else the editor contains characters, so we merge the current block's
76
- // `editor` with the block before, `otherBlock`.
77
- const cursor = mergeSlateWithBlockBackward(editor, otherBlock);
78
-
79
- const combined = JSON.parse(JSON.stringify(editor.children));
80
-
81
- // // TODO: don't remove undo history, etc Should probably save both undo
82
- // // histories, so that the blocks are split, the undos can be restored??
83
-
84
- // const cursor = getBlockEndAsRange(otherBlock);
85
- const formData = changeBlock(properties, otherBlockId, {
86
- '@type': 'slate', // TODO: use a constant specified in src/constants.js instead of 'slate'
87
- value: combined,
88
- plaintext: serializeNodesToText(combined || []),
89
- });
90
- const newFormData = deleteBlock(formData, block);
91
-
92
- ReactDOM.unstable_batchedUpdates(() => {
93
- saveSlateBlockSelection(otherBlockId, cursor);
94
- onChangeField(blocksFieldname, newFormData[blocksFieldname]);
95
- onChangeField(blocksLayoutFieldname, newFormData[blocksLayoutFieldname]);
96
- onSelectBlock(otherBlockId);
97
- });
98
-
99
- return true;
100
- }
101
-
102
- /**
103
- * Joins the current block (which has the cursor) with the next block to make a
104
- * single block.
105
- * @param {Editor} editor
106
- * @param {KeyboardEvent} event
107
- */
108
- export function joinWithNextBlock({ editor, event }) {
109
- if (!isCursorAtBlockEnd(editor)) return;
110
-
111
- const blockProps = editor.getBlockProps();
112
- const {
113
- block,
114
- index,
115
- // saveSlateBlockSelection,
116
- onSelectBlock,
117
- data,
118
- } = blockProps;
119
-
120
- const { properties, onChangeField } = editor.getBlockProps();
121
- const [otherBlock = {}, otherBlockId] = getNextVoltoBlock(index, properties);
122
-
123
- // Don't join with required blocks
124
- if (data?.required || otherBlock?.required || otherBlock['@type'] !== 'slate')
125
- return;
126
-
127
- event.stopPropagation();
128
- event.preventDefault();
129
-
130
- mergeSlateWithBlockForward(editor, otherBlock);
131
-
132
- // const cursor = JSON.parse(JSON.stringify(editor.selection));
133
- const combined = JSON.parse(JSON.stringify(editor.children));
134
-
135
- // TODO: don't remove undo history, etc Should probably save both undo
136
- // histories, so that the blocks are split, the undos can be restored??
137
-
138
- const blocksFieldname = getBlocksFieldname(properties);
139
- const blocksLayoutFieldname = getBlocksLayoutFieldname(properties);
140
-
141
- const formData = changeBlock(properties, otherBlockId, {
142
- // TODO: use a constant specified in src/constants.js instead of 'slate'
143
- '@type': 'slate',
144
- value: combined,
145
- plaintext: serializeNodesToText(combined || []),
146
- });
147
- const newFormData = deleteBlock(formData, block);
148
-
149
- ReactDOM.unstable_batchedUpdates(() => {
150
- // saveSlateBlockSelection(otherBlockId, cursor);
151
- onChangeField(blocksFieldname, newFormData[blocksFieldname]);
152
- onChangeField(blocksLayoutFieldname, newFormData[blocksLayoutFieldname]);
153
- onSelectBlock(otherBlockId);
154
- });
155
- return true;
156
- }
157
-
158
- /**
159
- * @param {object} block The Volto object representing the configuration and
160
- * contents of a Volto Block of type Slate Text.
161
- * @returns {Range} The collapsed Slate Range that represents the last position
162
- * the text cursor can take inside the given block.
163
- */
164
- function getBlockEndAsRange(block) {
165
- const { value } = block;
166
- const location = [value.length - 1]; // adress of root node
167
- const editor = { children: value };
168
- const newEditor = makeEditor();
169
- newEditor.children = cloneDeep(editor.children);
170
- const path = Editor.last(newEditor, location)[1]; // last Node in the block
171
- // The last Text node (leaf node) entry inside the path computed just above.
172
- const [leaf, leafpath] = Editor.leaf(newEditor, path);
173
- // The offset of the Points in the collapsed Range computed below:
174
- const offset = (leaf.text || '').length;
175
-
176
- return {
177
- anchor: { path: leafpath, offset },
178
- focus: { path: leafpath, offset },
179
- };
180
- }
@@ -1,124 +0,0 @@
1
- import { Editor, Path, Transforms, Node } from 'slate';
2
- import { isCursorInList, getCurrentListItem } from '@plone/volto-slate/utils';
3
- import config from '@plone/volto/registry';
4
-
5
- /**
6
- * Move up a list with with `Ctrl+Up`. (The Up key is supposed here to be
7
- * pressed.)
8
- * @param {Editor} Editor
9
- * @param {KeyboardEvent} event
10
- */
11
- export function moveListItemUp({ editor, event }) {
12
- // If Ctrl is not pressed or the cursor is not in a list, do nothing.
13
- if (!(event.ctrlKey && isCursorInList(editor))) return;
14
-
15
- // Else prevent the default behavior of Slate, React and DOM and stop the
16
- // propagation of this event.
17
- const { anchor } = editor.selection;
18
- const { slate } = config.settings;
19
-
20
- event.preventDefault();
21
- event.stopPropagation();
22
-
23
- // Store the current list item's path.
24
- const [, listItemPath] = getCurrentListItem(editor);
25
-
26
- // Don't allow in first line list item Check if the current list item is first
27
- // in its parent
28
- if (
29
- // If the selection starts at the beginning of a root-level block node
30
- anchor.path.slice(1).reduce((acc, n) => acc + n, 0) === 0 ||
31
- // or the current list item is the first in the list that contains it
32
- listItemPath[listItemPath.length - 1] === 0
33
- ) {
34
- // Mark the event as handled and do nothing.
35
- return true;
36
- }
37
-
38
- // Take the Node in the selection that is LI and is farthest-from-root.
39
- const [match] = Editor.nodes(editor, {
40
- match: (n) => n.type === slate.listItemType,
41
- // Explanation of the three modes:
42
- // * 'all' - take all the nodes from the root Editor node to the selected
43
- // leaf Text node
44
- // * 'highest' - take the root Editor node (if there is a selection, in case
45
- // no `at` option is given)
46
- // * 'lowest' - take the farthest-from-root selected leaf Text node
47
- // (Replace the "leaf Text node" expressions in the above list with
48
- // whatever matching function you use.)
49
- mode: 'lowest',
50
- });
51
-
52
- // Get the Path of the above-found Node.
53
- const [, at] = match;
54
-
55
- // Get the Path that represents the previous sibling node of the Path above.
56
- // TODO: handle the exception that this can throw, when `at` has the last
57
- // number in it a `0`. This case is possible because the condition above that
58
- // uses the Array.prototype.reduce method checks only the sum but the last 2
59
- // items can be [2, 0], their sum is 2 but the last item is 0, so the
60
- // exception is thrown.
61
- const to = Path.previous(at);
62
-
63
- // If the Path does not exist, mark the event as handled and do nothing.
64
- if (!Node.has(editor, to)) return true;
65
-
66
- // Move the Node in the selection that is LI and is farthest-from-root to the
67
- // existing Path just before its current location.
68
- Transforms.moveNodes(editor, { at, to });
69
-
70
- // Mark the event as handled.
71
- return true;
72
- }
73
-
74
- /**
75
- * Move down a list with with `Ctrl+Down`. (The Down key is supposed here to be
76
- * pressed.)
77
- * @param {Editor} Editor
78
- * @param {KeyboardEvent} event
79
- */
80
- export function moveListItemDown({ editor, event }) {
81
- // If Ctrl is not pressed or the cursor is not in a list, do nothing.
82
- if (!event.ctrlKey) return;
83
- if (!isCursorInList(editor)) return false;
84
-
85
- // Else
86
- const { slate } = config.settings;
87
-
88
- // Take the Node in the selection that is LI and is farthest-from-root.
89
- const [match] = Editor.nodes(editor, {
90
- // Explanation of the three modes:
91
- // * 'all' - take all the nodes from the root Editor node to the selected
92
- // leaf Text node
93
- // * 'highest' - take the root Editor node (if there is a selection, in case
94
- // no `at` option is given)
95
- // * 'lowest' - take the farthest-from-root selected leaf Text node
96
- // (Replace the "leaf Text node" expressions in the above list with
97
- // whatever matching function you use.)
98
- match: (n) => n.type === slate.listItemType,
99
- reverse: true,
100
- mode: 'lowest',
101
- });
102
-
103
- // Get the Path of the above-found Node.
104
- const [, at] = match;
105
-
106
- // Get the Path that represents the next sibling node of the Path above.
107
- const to = Path.next(at);
108
-
109
- // Prevent the default behavior of Slate, React and DOM and stop the
110
- // propagation of this event.
111
- event.preventDefault();
112
- event.stopPropagation();
113
-
114
- // If the Path does not exist, mark the event as handled and do nothing.
115
- if (!Node.has(editor, to)) return true;
116
-
117
- // Move the Node in the selection that is LI and is farthest-from-root to the
118
- // existing Path just after its current location, if there is a place for it
119
- // at the same depth.
120
- Transforms.moveNodes(editor, { at, to });
121
-
122
- // Mark the event as handled.
123
- return true;
124
- }
@@ -1,19 +0,0 @@
1
- export const slashMenu = ({ editor, event }) => {
2
- if (!editor.showSlashMenu) return;
3
-
4
- const { slashArrowUp, slashArrowDown, slashEnter } = editor;
5
-
6
- const handlers = {
7
- ArrowUp: slashArrowUp,
8
- ArrowDown: slashArrowDown,
9
- Enter: slashEnter,
10
- };
11
-
12
- const handler = handlers[event.key];
13
- if (handler) {
14
- event.preventDefault();
15
- handler();
16
- }
17
-
18
- return true;
19
- };
@@ -1,7 +0,0 @@
1
- export const softBreak = ({ editor, event }) => {
2
- if (event.key === 'Enter' && event.shiftKey) {
3
- event.preventDefault();
4
- editor.insertText('\n');
5
- return true;
6
- }
7
- };
@@ -1,81 +0,0 @@
1
- import { Node } from 'slate';
2
- import {
3
- isCursorAtBlockStart,
4
- isCursorAtBlockEnd,
5
- getNextVoltoBlock,
6
- getPreviousVoltoBlock,
7
- createDefaultBlock,
8
- } from '@plone/volto-slate/utils';
9
-
10
- /**
11
- * goUp.
12
- *
13
- * @param {}
14
- */
15
- export function goUp({ editor, event }) {
16
- if (isCursorAtBlockStart(editor)) {
17
- const props = editor.getBlockProps();
18
- const { onFocusPreviousBlock, block, blockNode } = props;
19
-
20
- // const { formContext } = editor;
21
- // const properties = formContext.contextData.formData;
22
- const { properties } = editor.getBlockProps();
23
-
24
- const prev = getPreviousVoltoBlock(props.index, properties);
25
- if (!prev || prev[0]?.['@type'] !== 'slate')
26
- return onFocusPreviousBlock(block, blockNode.current);
27
-
28
- const [slateBlock, id] = prev;
29
- const pseudoEditor = {
30
- children: slateBlock.value || [createDefaultBlock()],
31
- };
32
- const match = Node.last(pseudoEditor, []);
33
- if (!match) return onFocusPreviousBlock(block, blockNode.current);
34
-
35
- const [node, path] = match;
36
- const point = { path, offset: (node?.text || '').length };
37
- const selection = { anchor: point, focus: point };
38
- props.saveSlateBlockSelection(id, selection);
39
- return onFocusPreviousBlock(block, blockNode.current);
40
- }
41
- }
42
-
43
- /**
44
- * goDown.
45
- *
46
- * @param {}
47
- */
48
- export function goDown({ editor, event }) {
49
- if (isCursorAtBlockEnd(editor)) {
50
- const props = editor.getBlockProps();
51
- const { onFocusNextBlock, block, blockNode } = props;
52
-
53
- // const { formContext } = editor;
54
- // const properties = formContext.contextData.formData;
55
- const { properties } = editor.getBlockProps();
56
-
57
- const next = getNextVoltoBlock(props.index, properties);
58
- if (!next || next[0]?.['@type'] !== 'slate')
59
- return onFocusNextBlock(block, blockNode.current);
60
-
61
- const [slateBlock, id] = next;
62
- const pseudoEditor = {
63
- children: slateBlock.value || [createDefaultBlock()],
64
- };
65
- const match = Node.first(pseudoEditor, []);
66
- if (!match) return onFocusNextBlock(block, blockNode.current);
67
-
68
- const path = match[1];
69
- const point = { path, offset: 0 };
70
- const selection = { anchor: point, focus: point };
71
- props.saveSlateBlockSelection(id, selection);
72
- return onFocusNextBlock(block, blockNode.current);
73
- }
74
- }
75
-
76
- export function traverseBlocks(opts) {
77
- const { event } = opts;
78
- event.preventDefault();
79
- // return event.shiftKey ? goUp(opts) : goDown(opts);
80
- return true;
81
- }
@@ -1,26 +0,0 @@
1
- import { Node } from 'slate';
2
- import {
3
- _unwrapElement,
4
- _getActiveElement,
5
- } from '@plone/volto-slate/elementEditor/utils';
6
- import config from '@plone/volto/registry';
7
-
8
- /**
9
- * Handles empty string cases in the given `editor`.
10
- * It will unwrap empty strings for any major type (ex: a, mentions, footnote, zotero).
11
- * @param {Editor} editor
12
- * @param {Event} event
13
- */
14
- export function unwrapEmptyString(props) {
15
- const { nodeTypesToHighlight } = config.settings.slate;
16
- const uniqueNodeTypesToHighligh = [...new Set(nodeTypesToHighlight)];
17
- const getActiveElement = _getActiveElement(uniqueNodeTypesToHighligh);
18
- const unwrapElement = _unwrapElement(uniqueNodeTypesToHighligh);
19
-
20
- const { editor } = props;
21
- const actEl = getActiveElement(editor);
22
-
23
- if (actEl && Node.string(actEl[0]).length === 1) {
24
- unwrapElement(editor);
25
- }
26
- }
@@ -1,39 +0,0 @@
1
- const TextBlockSchema = (data) => {
2
- const { override_toc } = data;
3
- return {
4
- title: 'Advanced settings',
5
- fieldsets: [
6
- {
7
- id: 'default',
8
- title: 'Default',
9
- fields: [
10
- 'override_toc',
11
- ...(override_toc ? ['level', 'entry_text'] : []),
12
- ],
13
- },
14
- ],
15
- properties: {
16
- override_toc: {
17
- title: 'Override TOC entry',
18
- type: 'boolean',
19
- },
20
- level: {
21
- title: 'TOC entry level',
22
- choices: [
23
- ['h1', 'h1'],
24
- ['h2', 'h2'],
25
- ['h3', 'h3'],
26
- ['h4', 'h4'],
27
- ['h5', 'h5'],
28
- ['h6', 'h6'],
29
- ],
30
- },
31
- entry_text: {
32
- title: 'Entry text for TOC',
33
- },
34
- },
35
- required: [],
36
- };
37
- };
38
-
39
- export default TextBlockSchema;
@@ -1,123 +0,0 @@
1
- // action types
2
- export const SAVE_SLATE_BLOCK_SELECTION = 'SAVE_SLATE_BLOCK_SELECTION';
3
- export const SLATE_PLUGINS = 'SLATE_PLUGINS';
4
- export const UPLOAD_CONTENT = 'UPLOAD_CONTENT';
5
-
6
- // element 'types'. Useful to identify element types across codebase
7
- export const IMAGE = 'img';
8
- // export const FOOTNOTE = 'footnote';
9
- export const LINK = 'a';
10
- export const SIMPLELINK = 'link';
11
-
12
- export const TABLE = 'table';
13
- export const THEAD = 'thead';
14
- export const TBODY = 'tbody';
15
- export const TFOOT = 'tbody';
16
- export const TR = 'tr';
17
- export const TH = 'th';
18
- export const TD = 'td';
19
-
20
- export const P = 'p';
21
-
22
- export const LI = 'li';
23
- export const UL = 'ul';
24
- export const OL = 'ol';
25
-
26
- // dom parsing node information
27
- export const TEXT_NODE = 3;
28
- export const ELEMENT_NODE = 1;
29
- export const COMMENT = 8;
30
-
31
- export const INLINE_ELEMENTS = [
32
- 'A',
33
- 'ABBR',
34
- 'ACRONYM',
35
- 'AUDIO',
36
- 'B',
37
- 'BDI',
38
- 'BDO',
39
- 'BIG',
40
- 'BR',
41
- 'BUTTON',
42
- 'CANVAS',
43
- 'CITE',
44
- 'CODE',
45
- 'DATA',
46
- 'DATALIST',
47
- 'DEL',
48
- 'DFN',
49
- 'EM',
50
- 'EMBED',
51
- 'I',
52
- 'IFRAME',
53
- 'IMG',
54
- 'INPUT',
55
- 'INS',
56
- 'KBD',
57
- 'LABEL',
58
- 'MAP',
59
- 'MARK',
60
- 'METER',
61
- 'NOSCRIPT',
62
- 'OBJECT',
63
- 'OUTPUT',
64
- 'PICTURE',
65
- 'PROGRESS',
66
- 'Q',
67
- 'RUBY',
68
- 'S',
69
- 'SAMP',
70
- 'SCRIPT',
71
- 'SELECT',
72
- 'SLOT',
73
- 'SMALL',
74
- 'SPAN',
75
- 'STRONG',
76
- 'SUB',
77
- 'SUP',
78
- 'SVG',
79
- 'TEMPLATE',
80
- 'TEXTAREA',
81
- 'TIME',
82
- 'U',
83
- 'TT',
84
- 'VAR',
85
- 'VIDEO',
86
- 'WBR',
87
- ];
88
-
89
- export const BLOCK_ELEMENTS = [
90
- 'ADDRESS',
91
- 'ARTICLE',
92
- 'ASIDE',
93
- 'BLOCKQUOTE',
94
- 'DETAILS',
95
- 'DIALOG',
96
- 'DD',
97
- 'DIV',
98
- 'DL',
99
- 'DT',
100
- 'FIELDSET',
101
- 'FIGCAPTION',
102
- 'FIGURE',
103
- 'FOOTER',
104
- 'FORM',
105
- 'H1',
106
- 'H2',
107
- 'H3',
108
- 'H4',
109
- 'H5',
110
- 'H6',
111
- 'HEADER',
112
- 'HGROUP',
113
- 'HR',
114
- 'LI',
115
- 'MAIN',
116
- 'NAV',
117
- 'OL',
118
- 'P',
119
- 'PRE',
120
- 'SECTION',
121
- 'TABLE',
122
- 'UL',
123
- ];
@@ -1,5 +0,0 @@
1
- import React from 'react';
2
-
3
- const EditorContext = React.createContext();
4
-
5
- export default EditorContext;
@@ -1,22 +0,0 @@
1
- import React from 'react'; // , useState
2
- import { useSlate } from 'slate-react';
3
-
4
- /**
5
- * A component that can lift the editor to higher level
6
- *
7
- * Use like:
8
- * <SlateEditor ...><EditorReference onHasEditor=((editor) =>
9
- * this.setState({editor}) /></SlateEditor>
10
- *
11
- * With this you have access to the Slate editor "out of tree".
12
- */
13
-
14
- const EditorReference = ({ onHasEditor }) => {
15
- const editor = useSlate();
16
- React.useEffect(() => {
17
- onHasEditor(editor);
18
- }, [onHasEditor, editor]);
19
- return null;
20
- };
21
-
22
- export default EditorReference;