@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,81 +0,0 @@
1
- import { toggleList, unwrapList } from './utils';
2
- import { isBlockActive } from '@plone/volto-slate/utils';
3
- import { UL, OL, LI } from '@plone/volto-slate/constants';
4
-
5
- /**
6
- * Uses the old toggleList function to toggle lists on or off or from a type to another.
7
- * @param {Editor} editor The editor to which to apply the change.
8
- * @param {string} format A list type.
9
- */
10
- export const localToggleList = (editor, format) => {
11
- toggleList(editor, {
12
- typeList: format,
13
- isBulletedActive: !!isBlockActive(editor, UL),
14
- isNumberedActive: !!isBlockActive(editor, OL),
15
- });
16
- };
17
-
18
- /**
19
- * The autoformat rules created by this plugin for the Markdown language.
20
- *
21
- * @todo Use constants instead of the remaining hard-coded types (h2, h3 etc.).
22
- */
23
- export const autoformatRules = [
24
- {
25
- type: 'h2',
26
- markup: '#',
27
- },
28
- {
29
- type: 'h3',
30
- markup: '##',
31
- },
32
- {
33
- type: LI,
34
- markup: ['*', '-', '+'],
35
- format: (editor) => {
36
- localToggleList(editor, 'ul');
37
- },
38
- },
39
- {
40
- type: LI,
41
- markup: ['1.', '1)'],
42
- format: (editor) => {
43
- localToggleList(editor, 'ol');
44
- },
45
- },
46
- {
47
- type: 'blockquote',
48
- markup: ['>'],
49
- // preFormat,
50
- },
51
- {
52
- type: 'bold',
53
- between: ['**', '**'],
54
- mode: 'inline',
55
- insertTrigger: true,
56
- },
57
- {
58
- type: 'bold',
59
- between: ['__', '__'],
60
- mode: 'inline',
61
- insertTrigger: true,
62
- },
63
- {
64
- type: 'italic',
65
- between: ['*', '*'],
66
- mode: 'inline',
67
- insertTrigger: true,
68
- },
69
- {
70
- type: 'italic',
71
- between: ['_', '_'],
72
- mode: 'inline',
73
- insertTrigger: true,
74
- },
75
- {
76
- type: 'strikethrough',
77
- between: ['~~', '~~'],
78
- mode: 'inline',
79
- insertTrigger: true,
80
- },
81
- ];
@@ -1,334 +0,0 @@
1
- import { castArray, map } from 'lodash';
2
- import { Editor, Path, Point, Range, Transforms } from 'slate';
3
-
4
- /**
5
- * Get range from {@link getPointBefore} to the end point of `at`.
6
- */
7
- export const getRangeBefore = (editor, at, options) => {
8
- const anchor = getPointBefore(editor, at, options);
9
- if (!anchor) return;
10
-
11
- const focus = Editor.point(editor, at, { edge: 'end' });
12
-
13
- return {
14
- anchor,
15
- focus,
16
- };
17
- };
18
-
19
- /**
20
- * Autoformat in the middle of a block
21
- */
22
- export const autoformatInlineBlock = (
23
- editor,
24
- { type, markup, preFormat, format },
25
- ) => {
26
- const markupRange = getRangeBefore(editor, editor.selection, {
27
- matchString: markup,
28
- skipInvalid: true,
29
- });
30
-
31
- if (markupRange) {
32
- autoformatBlock(editor, type, markupRange, {
33
- preFormat: () => {
34
- editor.insertBreak();
35
- if (preFormat) {
36
- preFormat(editor);
37
- }
38
- },
39
- format,
40
- });
41
-
42
- return true;
43
- }
44
- };
45
-
46
- /**
47
- * {@link Editor.before} with additional options.
48
- * TODO: support for sequence of any characters.
49
- */
50
- export const getPointBefore = (editor, at, options) => {
51
- if (!options || (!options.match && !options.matchString)) {
52
- return Editor.before(editor, at, options);
53
- }
54
-
55
- let beforeAt = at;
56
- let previousBeforePoint = Editor.point(editor, at, { edge: 'end' });
57
-
58
- const stackLength = (options.matchString?.length || 0) + 1;
59
- const stack = Array(stackLength);
60
-
61
- const unitOffset = !options.unit || options.unit === 'offset';
62
-
63
- let count = 0;
64
- while (true) {
65
- const beforePoint = Editor.before(editor, beforeAt, options);
66
-
67
- // not found
68
- if (!beforePoint) return;
69
-
70
- // different path
71
- if (
72
- !options.multiPaths &&
73
- !Path.equals(beforePoint.path, previousBeforePoint.path)
74
- ) {
75
- return;
76
- }
77
-
78
- const beforeString = Editor.string(editor, {
79
- anchor: beforePoint,
80
- focus: previousBeforePoint,
81
- });
82
-
83
- const matchString = castArray(options.matchString);
84
-
85
- let beforeStringToMatch = beforeString;
86
-
87
- if (unitOffset && stackLength) {
88
- stack.unshift({
89
- point: beforePoint,
90
- text: beforeString,
91
- });
92
- stack.pop();
93
-
94
- beforeStringToMatch = map(stack.slice(0, -1), 'text').join('');
95
- }
96
-
97
- if (
98
- matchString.includes(beforeStringToMatch) ||
99
- options.match?.({ beforeString: beforeStringToMatch, beforePoint, at })
100
- ) {
101
- if (options.afterMatch) {
102
- if (stackLength && unitOffset) {
103
- return stack[stack.length - 1]?.point;
104
- }
105
- return previousBeforePoint;
106
- }
107
- return beforePoint;
108
- }
109
-
110
- previousBeforePoint = beforePoint;
111
- beforeAt = beforePoint;
112
-
113
- count += 1;
114
-
115
- if (!options.skipInvalid) {
116
- if (!matchString || count > matchString.length) return;
117
- }
118
- }
119
- };
120
-
121
- export const autoformatInline = (
122
- editor,
123
- { type, between, markup, ignoreTrim },
124
- ) => {
125
- const selection = editor.selection;
126
-
127
- const startMarkup = between ? between[0] : markup;
128
- const endMarkup = between ? between[1] : '';
129
-
130
- let endMarkupPointBefore = selection.anchor;
131
- if (endMarkup) {
132
- endMarkupPointBefore = getPointBefore(editor, selection, {
133
- matchString: endMarkup,
134
- });
135
- if (!endMarkupPointBefore) return false;
136
- }
137
-
138
- const startMarkupPointAfter = getPointBefore(editor, endMarkupPointBefore, {
139
- matchString: startMarkup,
140
- skipInvalid: true,
141
- afterMatch: true,
142
- });
143
-
144
- if (!startMarkupPointAfter) return false;
145
-
146
- // found
147
-
148
- const markupRange = {
149
- anchor: startMarkupPointAfter,
150
- focus: endMarkupPointBefore,
151
- };
152
-
153
- if (!ignoreTrim) {
154
- const markupText = getText(editor, markupRange);
155
- if (markupText.trim() !== markupText) return false;
156
- }
157
-
158
- // delete end markup
159
- if (endMarkup) {
160
- endMarkupPointBefore = getPointBefore(editor, selection, {
161
- matchString: endMarkup,
162
- });
163
- Transforms.delete(editor, {
164
- at: {
165
- anchor: endMarkupPointBefore,
166
- focus: selection.anchor,
167
- },
168
- });
169
- }
170
-
171
- // add mark to the text between the markups
172
- Transforms.select(editor, markupRange);
173
- editor.addMark(type, true);
174
- Transforms.collapse(editor, { edge: 'end' });
175
- editor.removeMark(type);
176
-
177
- // delete start markup
178
- const startMarkupPointBefore = getPointBefore(editor, selection, {
179
- matchString: startMarkup,
180
- skipInvalid: true,
181
- });
182
- Transforms.delete(editor, {
183
- at: {
184
- anchor: startMarkupPointBefore,
185
- focus: startMarkupPointAfter,
186
- },
187
- });
188
-
189
- return true;
190
- };
191
-
192
- export const autoformatBlock = (editor, type, at, { preFormat, format }) => {
193
- Transforms.delete(editor, { at });
194
-
195
- if (preFormat) {
196
- preFormat(editor);
197
- }
198
-
199
- if (!format) {
200
- Transforms.setNodes(
201
- editor,
202
- { type },
203
- { match: (n) => Editor.isBlock(editor, n) },
204
- );
205
- } else {
206
- format(editor);
207
- }
208
- };
209
-
210
- /**
211
- * See {@link Range.isCollapsed}.
212
- * Return false if `range` is not defined.
213
- */
214
- export const isCollapsed = (range) => !!range && Range.isCollapsed(range);
215
-
216
- /**
217
- * See {@link Editor.string}.
218
- * If `at` is not defined, return an empty string.
219
- */
220
- export const getText = (editor, at) => (at && Editor.string(editor, at)) ?? '';
221
-
222
- /**
223
- * Get the bloc {
224
- * k above a location (default: selection).
225
- * If not found, return the editor entry.
226
- */
227
- export const getBlockAbove = (editor, options = {}) =>
228
- Editor.above(editor, {
229
- match: (n) => Editor.isBlock(editor, n),
230
- ...options,
231
- }) || [editor, []];
232
-
233
- /**
234
- * Get the point from a location (default: selection).
235
- * If the location is a range, get the anchor point.
236
- * If the location is a path, get the point at this path with offset 0.
237
- * If `focus` is true, get the focus point.
238
- */
239
- export const getPointFromLocation = (
240
- editor,
241
- { at = editor.selection, focus } = {},
242
- ) => {
243
- let point;
244
- if (Range.isRange(at)) point = !focus ? at.anchor : at.focus;
245
- if (Point.isPoint(at)) point = at;
246
- if (Path.isPath(at)) point = { path: at, offset: 0 };
247
-
248
- return point;
249
- };
250
-
251
- /**
252
- * Get the range from the start of the block above a location (default: selection) to the location.
253
- */
254
- export const getRangeFromBlockStart = (editor, options = {}) => {
255
- const [, path] = getBlockAbove(editor, options);
256
-
257
- const start = Editor.start(editor, path);
258
-
259
- const focus = getPointFromLocation(editor, options);
260
-
261
- if (!focus) return;
262
-
263
- return { anchor: start, focus };
264
- };
265
-
266
- /**
267
- * Enables support for autoformatting actions.
268
- * Once a markup rule is validated, it does not check the following rules.
269
- */
270
- export const withAutoformat = ({ rules }) => (editor) => {
271
- const { insertText } = editor;
272
-
273
- editor.insertText = (text) => {
274
- if (!isCollapsed(editor.selection)) return insertText(text);
275
-
276
- for (const {
277
- trigger = ' ',
278
- type,
279
- markup,
280
- preFormat,
281
- format,
282
- mode,
283
- between,
284
- ignoreTrim,
285
- insertTrigger,
286
- } of rules) {
287
- const triggers = castArray(trigger);
288
-
289
- // Check trigger
290
- if (!triggers.includes(text)) continue;
291
-
292
- const markups = castArray(markup);
293
-
294
- const rangeFromBlockStart = getRangeFromBlockStart(editor);
295
- const textFromBlockStart = getText(editor, rangeFromBlockStart);
296
-
297
- const valid = () => insertTrigger && insertText(text);
298
-
299
- if (markups.includes(textFromBlockStart)) {
300
- // Start of the block
301
- autoformatBlock(editor, type, rangeFromBlockStart, {
302
- preFormat,
303
- format,
304
- });
305
- return valid();
306
- }
307
-
308
- if (mode === 'inline-block') {
309
- if (
310
- autoformatInlineBlock(editor, { preFormat, markup, format, type })
311
- ) {
312
- return valid();
313
- }
314
- }
315
-
316
- if (mode === 'inline') {
317
- if (
318
- autoformatInline(editor, {
319
- type,
320
- between,
321
- ignoreTrim,
322
- markup: Array.isArray(markup) ? markup[0] : markup,
323
- })
324
- ) {
325
- return valid();
326
- }
327
- }
328
- }
329
-
330
- insertText(text);
331
- };
332
-
333
- return editor;
334
- };
@@ -1,28 +0,0 @@
1
- // import React from 'react';
2
- import { withAutoformat } from './extensions';
3
- import { autoformatRules } from './constants';
4
- // import PluginSidebar from '@plone/volto-slate/blocks/Text/PluginSidebar';
5
-
6
- export default function install(config) {
7
- const { slate } = config.settings;
8
-
9
- slate.extensions = [
10
- ...(slate.extensions || []),
11
- withAutoformat({ rules: autoformatRules }),
12
- ];
13
-
14
- // TODO: this way the markdown shortcuts' explanation appears
15
- // only when one of the toolbars is visible, so I commented this out:
16
- // slate.buttons.markdownSupport = (props) => (
17
- // <PluginSidebar selected={true}>
18
- // <strong>Markdown</strong>
19
- // </PluginSidebar>
20
- // );
21
- // slate.toolbarButtons = [...(slate.toolbarButtons || []), 'markdownSupport'];
22
- // slate.expandedToolbarButtons = [
23
- // ...(slate.expandedToolbarButtons || []),
24
- // 'markdownSupport',
25
- // ];
26
-
27
- return config;
28
- }
@@ -1,198 +0,0 @@
1
- import { Editor, Range, Transforms, Text, Node } from 'slate';
2
- import {
3
- getMaxRange,
4
- selectAll,
5
- getSelectionNodesArrayByType,
6
- } from '@plone/volto-slate/utils';
7
- import { P, LI, UL, OL } from '@plone/volto-slate/constants';
8
-
9
- export function unwrapNodesByType(editor, types, options = {}) {
10
- Transforms.unwrapNodes(editor, {
11
- match: (n) => types.includes(n.type),
12
- ...options,
13
- });
14
- }
15
-
16
- export function unwrapList(
17
- editor,
18
- willWrapAgain,
19
- { typeUl = UL, typeOl = OL, typeLi = LI, unwrapFromList = false } = {},
20
- ) {
21
- // TODO: toggling from one list type to another should keep the structure untouched
22
- if (
23
- editor.selection &&
24
- Range.isExpanded(editor.selection) &&
25
- unwrapFromList
26
- ) {
27
- if (unwrapFromList) {
28
- // unwrapNodesByType(editor, [typeLi]);
29
- // unwrapNodesByType(editor, [typeUl, typeOl], {
30
- // split: true,
31
- // });
32
- // else ...
33
- }
34
- } else {
35
- unwrapNodesByType(editor, [typeLi], { at: getMaxRange(editor) });
36
- unwrapNodesByType(editor, [typeUl, typeOl], {
37
- at: getMaxRange(editor),
38
- });
39
- }
40
-
41
- if (!willWrapAgain) {
42
- convertAllToParagraph(editor);
43
- }
44
- }
45
-
46
- export function convertAllToParagraph(editor) {
47
- // let count = Array.from(Node.children(editor, [])).length;
48
- let result = recursive(editor);
49
- compactAndNormalize(result);
50
-
51
- Editor.withoutNormalizing(editor, () => {
52
- Transforms.removeNodes(editor, { at: [0 /* , i */] });
53
- Transforms.insertNodes(
54
- editor,
55
- { type: P, children: [{ text: '' }] },
56
- { at: [0] },
57
- );
58
- Transforms.insertFragment(editor, [...result], { at: [0] });
59
- });
60
- }
61
-
62
- export function recursive(myNode) {
63
- if (Text.isText(myNode)) return [{ ...myNode }];
64
-
65
- let output = [];
66
- let children = Node.children(myNode, []);
67
-
68
- for (const [node] of children) {
69
- if (Text.isText(node)) {
70
- output.push({ ...node });
71
- } else {
72
- let count = Array.from(node.children).length;
73
- for (let i = 0; i < count; ++i) {
74
- let o = recursive(node.children[i]);
75
- for (let j = 0; j < o.length; ++j) {
76
- output.push(o[j]);
77
- }
78
- }
79
- }
80
- }
81
-
82
- return output;
83
- }
84
-
85
- // TODO: make this add a space between any two Text instances
86
- export function compactAndNormalize(result) {
87
- for (let i = 0; i < result.length - 1; ++i) {
88
- let a = result[i];
89
- let b = result[i + 1];
90
-
91
- let m = textsMatch(a, b);
92
- if (m) {
93
- result[i].text += b.text;
94
- result.splice(i + 1, 1);
95
- }
96
- }
97
-
98
- if (result.length === 0) {
99
- result.push({ text: '' });
100
- }
101
-
102
- return;
103
- }
104
-
105
- // TODO: optimize this:
106
- export function textsMatch(a, b) {
107
- const aKeys = Object.keys(a);
108
- const bKeys = Object.keys(b);
109
-
110
- for (let x in a) {
111
- if (x === 'text') continue;
112
- if (aKeys.includes(x) && bKeys.includes(x)) {
113
- if (a[x] !== b[x]) {
114
- return false;
115
- }
116
- }
117
- }
118
-
119
- for (let x in b) {
120
- if (x === 'text') continue;
121
- if (aKeys.includes(x) && bKeys.includes(x)) {
122
- if (a[x] !== b[x]) {
123
- return false;
124
- }
125
- }
126
- }
127
-
128
- return true;
129
- }
130
-
131
- /**
132
- * @summary Toggles list type.
133
- * @todo need to redo this
134
- * @todo should preserve structure of list if going from a list type to another
135
- * @todo allow nested lists, currently the Markdown plugin uses this function but crashes when making a UL in an OL's LI
136
- * @param {Editor} editor
137
- * @param {object} options
138
- */
139
- export function toggleList(
140
- editor,
141
- {
142
- typeList,
143
- typeUl = UL,
144
- typeOl = OL,
145
- typeLi = LI,
146
- typeP = P,
147
- isBulletedActive = false,
148
- isNumberedActive = false,
149
- },
150
- ) {
151
- // TODO: set previous selection (not this 'select all' command) after toggling list (in all three cases: toggling to numbered, bulleted or none)
152
- selectAll(editor);
153
-
154
- // const isActive = isNodeInSelection(editor, [typeList]);
155
-
156
- // if (the list type/s are unset) {
157
-
158
- const B = typeList === UL;
159
- const N = typeList === OL;
160
-
161
- if (N && !isBulletedActive && !isNumberedActive) {
162
- convertAllToParagraph(editor);
163
- // go on with const willWrapAgain etc.
164
- } else if (N && !isBulletedActive && isNumberedActive) {
165
- convertAllToParagraph(editor);
166
- return;
167
- } else if (N && isBulletedActive && !isNumberedActive) {
168
- // go on with const willWrapAgain etc.
169
- } else if (B && !isBulletedActive && !isNumberedActive) {
170
- convertAllToParagraph(editor);
171
- // go on with const willWrapAgain etc.
172
- } else if (B && !isBulletedActive && isNumberedActive) {
173
- // go on with const willWrapAgain etc.
174
- } else if (B && isBulletedActive && !isNumberedActive) {
175
- convertAllToParagraph(editor);
176
- return;
177
- }
178
-
179
- selectAll(editor);
180
-
181
- const willWrapAgain = !isBulletedActive;
182
- unwrapList(editor, willWrapAgain, { unwrapFromList: isBulletedActive });
183
-
184
- // a new list is created and everything in the editor is put in it;
185
- // `children` property is added automatically as an empty array then
186
- // normalized
187
- const list = { type: typeList };
188
- Transforms.wrapNodes(editor, list);
189
-
190
- // get all the selected paragraphs
191
- const nodes = getSelectionNodesArrayByType(editor, typeP);
192
-
193
- // for each paragraph
194
- for (const [, path] of nodes) {
195
- // convert the paragraph to a list item
196
- Transforms.setNodes(editor, { type: LI }, { at: path });
197
- }
198
- }