@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,40 +0,0 @@
1
- import React from 'react';
2
- import renderer from 'react-test-renderer';
3
- import configureStore from 'redux-mock-store';
4
- import { Provider } from 'react-intl-redux';
5
-
6
- import Edit from './TableBlockEdit';
7
-
8
- const mockStore = configureStore();
9
-
10
- global.__SERVER__ = true; // eslint-disable-line no-underscore-dangle
11
-
12
- test('renders an edit table block component', () => {
13
- const store = mockStore({
14
- intl: {
15
- locale: 'en',
16
- messages: {},
17
- },
18
- });
19
- const component = renderer.create(
20
- <Provider store={store}>
21
- <Edit
22
- data={{ table: { rows: [] } }}
23
- selected={false}
24
- block="1234"
25
- onAddBlock={() => {}}
26
- onChangeBlock={() => {}}
27
- onSelectBlock={() => {}}
28
- onDeleteBlock={() => {}}
29
- onInsertBlock={() => {}}
30
- onFocusPreviousBlock={() => {}}
31
- onFocusNextBlock={() => {}}
32
- handleKeyDown={() => {}}
33
- onMutateBlock={() => {}}
34
- index={1}
35
- />
36
- </Provider>,
37
- );
38
- const json = component.toJSON();
39
- expect(json).toMatchSnapshot();
40
- });
@@ -1,150 +0,0 @@
1
- /**
2
- * Slate Table block's View component.
3
- * @module volto-slate/blocks/Table/View
4
- */
5
-
6
- import React, { useState, useMemo } from 'react';
7
- import PropTypes from 'prop-types';
8
- import { Table } from 'semantic-ui-react';
9
- import { map } from 'lodash';
10
- import {
11
- serializeNodes,
12
- serializeNodesToText,
13
- } from '@plone/volto-slate/editor/render';
14
- import { Node } from 'slate';
15
-
16
- // TODO: loading LESS files with `volto-slate/...` paths does not work currently
17
- import '../../editor/plugins/Table/less/public.less';
18
-
19
- /**
20
- * Slate Table block's View class.
21
- * @class View
22
- * @extends Component
23
- * @param {object} data The table data to render as a table.
24
- */
25
- const View = ({ data }) => {
26
- const [state, setState] = useState({
27
- column: null,
28
- direction: null,
29
- });
30
-
31
- const headers = useMemo(() => {
32
- return data.table.rows?.[0]?.cells;
33
- }, [data.table.rows]);
34
-
35
- const rows = useMemo(() => {
36
- const items = [];
37
- if (!data.table.rows) return [];
38
- data.table.rows.forEach((row, index) => {
39
- if (index > 0) {
40
- items[index] = [];
41
- row.cells.forEach((cell, cellIndex) => {
42
- items[index][cellIndex] = {
43
- ...cell,
44
- value:
45
- cell.value && Node.string({ children: cell.value }).length > 0
46
- ? serializeNodes(cell.value)
47
- : '\u00A0',
48
- valueText:
49
- cell.value && Node.string({ children: cell.value }).length > 0
50
- ? serializeNodesToText(cell.value)
51
- : '\u00A0',
52
- };
53
- });
54
- }
55
- });
56
- return items;
57
- }, [data.table.rows]);
58
-
59
- const sortedRows = useMemo(() => {
60
- if (state.column === null) return Object.keys(rows);
61
- return Object.keys(rows).sort((a, b) => {
62
- const a_text = rows[a][state.column].valueText;
63
- const b_text = rows[b][state.column].valueText;
64
- if (state.direction === 'ascending' ? a_text < b_text : a_text > b_text) {
65
- return -1;
66
- }
67
- if (state.direction === 'ascending' ? a_text > b_text : a_text < b_text) {
68
- return 1;
69
- }
70
- return 0;
71
- });
72
- }, [state, rows]);
73
-
74
- return (
75
- <>
76
- {data && data.table && (
77
- <Table
78
- fixed={data.table.fixed}
79
- compact={data.table.compact}
80
- basic={data.table.basic ? 'very' : false}
81
- celled={data.table.celled}
82
- inverted={data.table.inverted}
83
- striped={data.table.striped}
84
- sortable={data.table.sortable}
85
- className="slate-table-block"
86
- >
87
- {!data.table.hideHeaders ? (
88
- <Table.Header>
89
- <Table.Row>
90
- {headers.map((cell, index) => (
91
- <Table.HeaderCell
92
- key={cell.key}
93
- textAlign="left"
94
- verticalAlign="middle"
95
- sorted={state.column === index ? state.direction : null}
96
- onClick={() => {
97
- if (!data.table.sortable) return;
98
- setState({
99
- column: index,
100
- direction:
101
- state.column !== index
102
- ? 'ascending'
103
- : state.direction === 'ascending'
104
- ? 'descending'
105
- : 'ascending',
106
- });
107
- }}
108
- >
109
- {cell.value &&
110
- Node.string({ children: cell.value }).length > 0
111
- ? serializeNodes(cell.value)
112
- : '\u00A0'}
113
- </Table.HeaderCell>
114
- ))}
115
- </Table.Row>
116
- </Table.Header>
117
- ) : (
118
- ''
119
- )}
120
- <Table.Body>
121
- {map(sortedRows, (row) => (
122
- <Table.Row key={row}>
123
- {map(rows[row], (cell) => (
124
- <Table.Cell
125
- key={cell.key}
126
- textAlign="left"
127
- verticalAlign="middle"
128
- >
129
- {cell.value}
130
- </Table.Cell>
131
- ))}
132
- </Table.Row>
133
- ))}
134
- </Table.Body>
135
- </Table>
136
- )}
137
- </>
138
- );
139
- };
140
-
141
- /**
142
- * Property types.
143
- * @property {Object} propTypes Property types.
144
- * @static
145
- */
146
- View.propTypes = {
147
- data: PropTypes.objectOf(PropTypes.any).isRequired,
148
- };
149
-
150
- export default View;
@@ -1,49 +0,0 @@
1
- import React from 'react';
2
- import renderer from 'react-test-renderer';
3
- import View from './TableBlockView';
4
- import config from '@plone/volto/registry';
5
-
6
- beforeAll(() => {
7
- config.settings = {
8
- slate: {
9
- elements: {
10
- default: ({ attributes, children }) => (
11
- <p {...attributes}>{children}</p>
12
- ),
13
- h2: ({ attributes, children }) => <h2 {...attributes}>{children}</h2>,
14
- },
15
- leafs: {},
16
- },
17
- };
18
- });
19
-
20
- test('renders a view table component', () => {
21
- const component = renderer.create(
22
- <View
23
- data={{
24
- table: {
25
- rows: [
26
- {
27
- key: 'a',
28
- cells: [
29
- {
30
- type: 'data',
31
- key: 'b',
32
- value: [
33
- {
34
- type: 'h2',
35
- children: [{ text: 'My header' }],
36
- },
37
- ],
38
- },
39
- ],
40
- },
41
- ],
42
- hideHeaders: false,
43
- },
44
- }}
45
- />,
46
- );
47
- const json = component.toJSON();
48
- expect(json).toMatchSnapshot();
49
- });
@@ -1,113 +0,0 @@
1
- import { v4 as uuid } from 'uuid';
2
- import { Editor, Transforms } from 'slate';
3
- import {
4
- TABLE,
5
- THEAD,
6
- TBODY,
7
- TFOOT,
8
- TD,
9
- TH,
10
- TR,
11
- } from '@plone/volto-slate/constants';
12
-
13
- /**
14
- * @param {Array} rows The array of rows that almost completely defines a
15
- * `table`-typed block.
16
- * @returns {Array} A tuple `[id, block]` where `id` is the new block's ID and
17
- * the `block` is all the block's data.
18
- */
19
- export function syncCreateTableBlock(rows) {
20
- const id = uuid();
21
- const block = {
22
- '@type': 'table',
23
- table: {
24
- rows,
25
- },
26
- };
27
- return [id, block];
28
- }
29
-
30
- /**
31
- * @param {Editor} editor The Slate Editor from which to extract tables.
32
- * @param {PathRef} pathRef Has the current value a `Path` so that the search is
33
- * done just inside nodes in that `Path`.
34
- * @returns Extracts tables from a Slate `Editor` into an array of detached
35
- * `table` blocks.
36
- */
37
- export const extractTables = (editor, pathRef) => {
38
- const tableNodes = Array.from(
39
- Editor.nodes(editor, {
40
- at: pathRef.current,
41
- match: (node) => node.type === TABLE,
42
- }),
43
- );
44
- const tables = tableNodes.map(([node]) => extractVoltoTable(node));
45
-
46
- Transforms.removeNodes(editor, {
47
- at: pathRef.current,
48
- match: (node) => node.type === TABLE,
49
- });
50
-
51
- return tables.map((el) => syncCreateTableBlock(el));
52
- };
53
-
54
- /**
55
- * @param {Node[]} fragment A Slate document fragment.
56
- * @returns {Array} An array of rows in the format requested by `table`
57
- * blocks.
58
- */
59
- function collectRowsFrom(fragment) {
60
- let rows = [];
61
- fragment.children.forEach((y) => {
62
- if (y.type === TR) {
63
- let row = { key: uuid(), cells: [] };
64
-
65
- y.children.forEach((z) => {
66
- let val = JSON.parse(JSON.stringify(z.children));
67
- if (z.type === TD) {
68
- row.cells.push({
69
- key: uuid(),
70
- type: 'data',
71
- value: val,
72
- });
73
- } else if (z.type === TH) {
74
- row.cells.push({
75
- key: uuid(),
76
- type: 'header',
77
- value: val,
78
- });
79
- }
80
- });
81
-
82
- rows.push(row);
83
- }
84
- });
85
- return rows;
86
- }
87
-
88
- /**
89
- * @param {HTMLElement} el The <table> element from which to extract rows.
90
- * @returns {Array} A rows array that contains rows in the format required by
91
- * `table` blocks.
92
- */
93
- function extractVoltoTable(el) {
94
- let thead = [],
95
- tfoot = [],
96
- tbody = [];
97
-
98
- el.children.forEach((fragment) => {
99
- if (fragment.type === THEAD) {
100
- // not supported by View fully, so prepend this to tbody below
101
- thead = collectRowsFrom(fragment);
102
- } else if (fragment.type === TBODY) {
103
- tbody = collectRowsFrom(fragment);
104
- } else if (fragment.type === TFOOT) {
105
- // not supported by View fully, so append this to tbody below
106
- tfoot = collectRowsFrom(fragment);
107
- }
108
- });
109
-
110
- const rows = [...thead, ...tbody, ...tfoot];
111
-
112
- return rows;
113
- }
@@ -1,5 +0,0 @@
1
- export const normalizeTable = (editor) => {
2
- // Normalization rules for table cells
3
-
4
- return editor;
5
- };
@@ -1,60 +0,0 @@
1
- import TableBlockEdit from './TableBlockEdit';
2
- import TableBlockView from './TableBlockView';
3
- import { extractTables } from './deconstruct';
4
- import { normalizeTable } from './extensions/normalizeTable';
5
- import { normalizeExternalData } from '../Text/extensions';
6
-
7
- import tableSVG from '@plone/volto/icons/table.svg';
8
-
9
- /**
10
- * @summary Called from Volto to configure new or existing Volto block types.
11
- * @param {object} config The object received from Volto containing the
12
- * configuration for all the blocks.
13
- */
14
- export default function install(config) {
15
- config.settings.slate = {
16
- ...config.settings.slate,
17
- voltoBlockEmiters: [
18
- ...(config.settings.slate.voltoBlockEmiters || []),
19
- extractTables,
20
- ],
21
- tableblockExtensions: [
22
- // First here gets executed last
23
- // withLists,
24
- // withSplitBlocksOnBreak,
25
- // withDeleteSelectionOnEnter,
26
- // withDeserializers,
27
- // breakList,
28
- normalizeTable,
29
- normalizeExternalData,
30
- ],
31
- };
32
-
33
- const tableBlockConfig = {
34
- id: 'table',
35
- title: 'Table',
36
- icon: tableSVG,
37
- group: 'common',
38
- view: TableBlockView,
39
- edit: TableBlockEdit,
40
- restricted: false,
41
- mostUsed: false,
42
- blockHasOwnFocusManagement: true,
43
- sidebarTab: 1,
44
- security: {
45
- addPermission: [],
46
- view: [],
47
- },
48
- // blockHasValue: (data) => {
49
- // return true;
50
- // },
51
- };
52
-
53
- config.blocks.blocksConfig.table.restricted = true;
54
- config.blocks.blocksConfig.slateTable = {
55
- ...tableBlockConfig,
56
- id: 'slateTable',
57
- };
58
-
59
- return config;
60
- }
@@ -1,122 +0,0 @@
1
- import { defineMessages } from 'react-intl';
2
-
3
- const messages = defineMessages({
4
- hideHeaders: {
5
- id: 'Hide headers',
6
- defaultMessage: 'Hide headers',
7
- },
8
- sortable: {
9
- id: 'Make the table sortable',
10
- defaultMessage: 'Make the table sortable',
11
- },
12
- sortableDescription: {
13
- id: 'Visible only in view mode',
14
- defaultMessage: 'Visible only in view mode',
15
- },
16
- fixed: {
17
- id: 'Fixed width table cells',
18
- defaultMessage: 'Fixed width table cells',
19
- },
20
- compact: {
21
- id: 'Make the table compact',
22
- defaultMessage: 'Make the table compact',
23
- },
24
- basic: {
25
- id: 'Reduce complexity',
26
- defaultMessage: 'Reduce complexity',
27
- },
28
- celled: {
29
- id: 'Divide each row into separate cells',
30
- defaultMessage: 'Divide each row into separate cells',
31
- },
32
- inverted: {
33
- id: 'Table color inverted',
34
- defaultMessage: 'Table color inverted',
35
- },
36
- striped: {
37
- id: 'Stripe alternate rows with color',
38
- defaultMessage: 'Stripe alternate rows with color',
39
- },
40
- });
41
-
42
- function TableSchema(props) {
43
- const { intl } = props;
44
- return {
45
- title: 'Table block',
46
- fieldsets: [
47
- {
48
- id: 'default',
49
- title: 'Default',
50
- fields: [
51
- 'hideHeaders',
52
- 'sortable',
53
- 'fixed',
54
- 'celled',
55
- 'striped',
56
- 'compact',
57
- 'basic',
58
- 'inverted',
59
- ],
60
- },
61
- ],
62
- properties: {
63
- hideHeaders: {
64
- title: intl.formatMessage(messages.hideHeaders),
65
- type: 'boolean',
66
- },
67
- sortable: {
68
- title: intl.formatMessage(messages.sortable),
69
- type: 'boolean',
70
- },
71
- fixed: {
72
- title: intl.formatMessage(messages.fixed),
73
- type: 'boolean',
74
- },
75
- celled: {
76
- title: intl.formatMessage(messages.celled),
77
- type: 'boolean',
78
- },
79
- striped: {
80
- title: intl.formatMessage(messages.striped),
81
- type: 'boolean',
82
- },
83
- compact: {
84
- title: intl.formatMessage(messages.compact),
85
- type: 'boolean',
86
- },
87
- basic: {
88
- title: intl.formatMessage(messages.basic),
89
- type: 'boolean',
90
- },
91
- inverted: {
92
- title: intl.formatMessage(messages.inverted),
93
- type: 'boolean',
94
- },
95
- },
96
- required: [],
97
- };
98
- }
99
-
100
- export function TableBlockSchema(props) {
101
- return {
102
- title: 'Table block',
103
- fieldsets: [
104
- {
105
- id: 'default',
106
- title: 'Default',
107
- fields: ['table'],
108
- },
109
- ],
110
- properties: {
111
- table: {
112
- title: 'Table block',
113
- widget: 'object',
114
- schema: TableSchema(props),
115
- },
116
- },
117
-
118
- required: [],
119
- };
120
- }
121
-
122
- export default TableBlockSchema;