@plone/volto 17.0.0-alpha.3 → 17.0.0-alpha.30

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 (438) hide show
  1. package/.eslintrc +26 -3
  2. package/.yarn/install-state.gz +0 -0
  3. package/.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs +541 -0
  4. package/.yarn/releases/yarn-3.6.3.cjs +874 -0
  5. package/CHANGELOG.md +716 -20
  6. package/CONTRIBUTING.md +5 -1
  7. package/README.md +20 -21
  8. package/addon-registry.js +44 -1
  9. package/create-addons-loader.js +1 -1
  10. package/create-theme-addons-loader.js +79 -0
  11. package/cypress/support/commands.js +70 -14
  12. package/cypress/support/e2e.js +1 -2
  13. package/cypress/support/volto-slate.js +4 -5
  14. package/cypress.config.js +1 -0
  15. package/docker-compose.yml +1 -1
  16. package/locales/ca/LC_MESSAGES/volto.po +422 -53
  17. package/locales/ca.json +1 -1
  18. package/locales/de/LC_MESSAGES/volto.po +442 -73
  19. package/locales/de.json +1 -1
  20. package/locales/en/LC_MESSAGES/volto.po +420 -51
  21. package/locales/en.json +1 -1
  22. package/locales/es/LC_MESSAGES/volto.po +431 -62
  23. package/locales/es.json +1 -1
  24. package/locales/eu/LC_MESSAGES/volto.po +421 -52
  25. package/locales/eu.json +1 -1
  26. package/locales/fi/LC_MESSAGES/volto.po +4985 -0
  27. package/locales/fi.json +1 -1
  28. package/locales/fr/LC_MESSAGES/volto.po +422 -53
  29. package/locales/fr.json +1 -1
  30. package/locales/it/LC_MESSAGES/volto.po +589 -220
  31. package/locales/it.json +1 -1
  32. package/locales/ja/LC_MESSAGES/volto.po +421 -52
  33. package/locales/ja.json +1 -1
  34. package/locales/nl/LC_MESSAGES/volto.po +1072 -691
  35. package/locales/nl.json +1 -1
  36. package/locales/pt/LC_MESSAGES/volto.po +422 -53
  37. package/locales/pt.json +1 -1
  38. package/locales/pt_BR/LC_MESSAGES/volto.po +429 -60
  39. package/locales/pt_BR.json +1 -1
  40. package/locales/ro/LC_MESSAGES/volto.po +422 -53
  41. package/locales/ro.json +1 -1
  42. package/locales/volto.pot +425 -52
  43. package/locales/zh_CN/LC_MESSAGES/volto.po +422 -53
  44. package/locales/zh_CN.json +1 -1
  45. package/package.json +46 -35
  46. package/packages/volto-slate/build/messages/src/blocks/Table/TableBlockEdit.json +1 -1
  47. package/packages/volto-slate/build/messages/src/blocks/Text/DefaultTextBlockEditor.json +1 -1
  48. package/packages/volto-slate/build/messages/src/blocks/Text/DetachedTextBlockEditor.json +1 -1
  49. package/packages/volto-slate/build/messages/src/blocks/Text/SlashMenu.json +1 -1
  50. package/packages/volto-slate/build/messages/src/editor/plugins/AdvancedLink/index.json +1 -1
  51. package/packages/volto-slate/build/messages/src/editor/plugins/Link/index.json +1 -1
  52. package/packages/volto-slate/build/messages/src/editor/plugins/Table/index.json +1 -1
  53. package/packages/volto-slate/build/messages/src/elementEditor/messages.json +1 -1
  54. package/packages/volto-slate/build/messages/src/widgets/HtmlSlateWidget.json +1 -1
  55. package/packages/volto-slate/build/messages/src/widgets/RichTextWidgetView.json +1 -1
  56. package/packages/volto-slate/package.json +1 -1
  57. package/packages/volto-slate/src/actions/index.js +1 -1
  58. package/packages/volto-slate/src/blocks/Table/TableBlockEdit.jsx +21 -212
  59. package/packages/volto-slate/src/blocks/Table/schema.js +122 -0
  60. package/packages/volto-slate/src/blocks/Text/DefaultTextBlockEditor.jsx +8 -3
  61. package/packages/volto-slate/src/blocks/Text/SlashMenu.jsx +4 -3
  62. package/packages/volto-slate/src/blocks/Text/TextBlockView.jsx +21 -16
  63. package/packages/volto-slate/src/blocks/Text/extensions/withDeserializers.js +3 -1
  64. package/packages/volto-slate/src/blocks/Text/index.js +10 -7
  65. package/packages/volto-slate/src/editor/config.jsx +5 -4
  66. package/packages/volto-slate/src/editor/deserialize.js +0 -1
  67. package/packages/volto-slate/src/editor/index.js +4 -4
  68. package/packages/volto-slate/src/editor/less/slate.less +28 -0
  69. package/packages/volto-slate/src/editor/plugins/Link/render.jsx +5 -6
  70. package/packages/volto-slate/src/editor/plugins/StyleMenu/StyleMenu.jsx +14 -4
  71. package/packages/volto-slate/src/editor/plugins/StyleMenu/utils.js +14 -5
  72. package/packages/volto-slate/src/editor/render.jsx +77 -8
  73. package/packages/volto-slate/src/editor/ui/SlateContextToolbar.jsx +2 -2
  74. package/packages/volto-slate/src/editor/ui/index.js +15 -15
  75. package/packages/volto-slate/src/index.js +2 -2
  76. package/packages/volto-slate/src/utils/blocks.js +7 -0
  77. package/packages/volto-slate/src/widgets/RichTextWidget.jsx +15 -8
  78. package/razzle.config.js +32 -6
  79. package/src/actions/index.js +10 -0
  80. package/src/actions/language/language.js +9 -8
  81. package/src/actions/navroot/navroot.js +16 -0
  82. package/src/actions/navroot/navroot.test.js +15 -0
  83. package/src/actions/querystringsearch/querystringsearch.js +20 -14
  84. package/src/actions/relations/rebuild.js +25 -0
  85. package/src/actions/relations/relations.js +103 -0
  86. package/src/actions/relations/relations.test.js +15 -0
  87. package/src/actions/site/site.js +16 -0
  88. package/src/actions/site/site.test.js +15 -0
  89. package/src/actions/userSession/userSession.js +17 -1
  90. package/src/components/index.js +194 -191
  91. package/src/components/manage/Actions/Actions.jsx +133 -243
  92. package/src/components/manage/Add/Add.jsx +9 -10
  93. package/src/components/manage/AnchorPlugin/index.jsx +2 -2
  94. package/src/components/manage/AnchorPlugin/utils/EditorUtils.js +3 -1
  95. package/src/components/manage/BlockChooser/BlockChooser.jsx +8 -3
  96. package/src/components/manage/BlockChooser/BlockChooser.test.jsx +5 -0
  97. package/src/components/manage/Blocks/Block/BlocksForm.jsx +19 -2
  98. package/src/components/manage/Blocks/Block/Edit.jsx +1 -1
  99. package/src/components/manage/Blocks/Block/Settings.jsx +2 -0
  100. package/src/components/manage/Blocks/Block/Settings.test.jsx +92 -0
  101. package/src/components/manage/Blocks/Block/Style.jsx +2 -2
  102. package/src/components/manage/Blocks/Container/Data.jsx +32 -0
  103. package/src/components/manage/Blocks/Container/Edit.jsx +177 -0
  104. package/src/components/manage/Blocks/Container/EditBlockWrapper.jsx +121 -0
  105. package/src/components/manage/Blocks/Container/NewBlockAddButton.jsx +84 -0
  106. package/src/components/manage/Blocks/Container/SimpleContainerToolbar.jsx +54 -0
  107. package/src/components/manage/Blocks/Grid/Edit.jsx +47 -0
  108. package/src/components/manage/Blocks/Grid/View.jsx +43 -0
  109. package/src/components/manage/Blocks/Grid/adapter.js +14 -0
  110. package/src/components/manage/Blocks/Grid/grid-1.svg +6 -0
  111. package/src/components/manage/Blocks/Grid/grid-2.svg +9 -0
  112. package/src/components/manage/Blocks/Grid/grid-3.svg +10 -0
  113. package/src/components/manage/Blocks/Grid/grid-4.svg +11 -0
  114. package/src/components/manage/Blocks/Grid/schema.js +35 -0
  115. package/src/components/manage/Blocks/Grid/templates.js +47 -0
  116. package/src/components/manage/Blocks/HTML/Edit.jsx +8 -8
  117. package/src/components/manage/Blocks/HeroImageLeft/Edit.jsx +36 -26
  118. package/src/components/manage/Blocks/Image/Edit.jsx +51 -12
  119. package/src/components/manage/Blocks/Image/Edit.test.jsx +2 -0
  120. package/src/components/manage/Blocks/Image/ImageSidebar.jsx +66 -16
  121. package/src/components/manage/Blocks/Image/View.jsx +26 -5
  122. package/src/components/manage/Blocks/Image/View.test.jsx +20 -0
  123. package/src/components/manage/Blocks/Image/schema.js +17 -10
  124. package/src/components/manage/Blocks/Image/utils.js +14 -0
  125. package/src/components/manage/Blocks/LeadImage/Edit.jsx +32 -10
  126. package/src/components/manage/Blocks/LeadImage/Edit.test.jsx +11 -1
  127. package/src/components/manage/Blocks/LeadImage/LeadImageSidebar.jsx +28 -9
  128. package/src/components/manage/Blocks/LeadImage/LeadImageSidebar.test.jsx +8 -2
  129. package/src/components/manage/Blocks/LeadImage/View.jsx +50 -38
  130. package/src/components/manage/Blocks/LeadImage/View.test.jsx +11 -1
  131. package/src/components/manage/Blocks/Listing/DefaultTemplate.jsx +18 -3
  132. package/src/components/manage/Blocks/Listing/Edit.jsx +0 -14
  133. package/src/components/manage/Blocks/Listing/ListingBody.jsx +32 -8
  134. package/src/components/manage/Blocks/Listing/ListingBody.test.jsx +20 -0
  135. package/src/components/manage/Blocks/Listing/SummaryTemplate.jsx +1 -1
  136. package/src/components/manage/Blocks/Listing/getAsyncData.js +9 -3
  137. package/src/components/manage/Blocks/Listing/withQuerystringResults.jsx +34 -19
  138. package/src/components/manage/Blocks/Maps/Edit.jsx +135 -209
  139. package/src/components/manage/Blocks/Maps/Edit.test.jsx +1 -2
  140. package/src/components/manage/Blocks/Maps/View.test.jsx +1 -2
  141. package/src/components/manage/Blocks/Search/SearchBlockEdit.jsx +5 -4
  142. package/src/components/manage/Blocks/Search/SearchBlockView.jsx +4 -2
  143. package/src/components/manage/Blocks/Search/components/DateRangeFacet.jsx +4 -1
  144. package/src/components/manage/Blocks/Search/components/Facets.jsx +66 -7
  145. package/src/components/manage/Blocks/Search/components/FilterList.jsx +4 -6
  146. package/src/components/manage/Blocks/Search/components/SearchInput.jsx +9 -2
  147. package/src/components/manage/Blocks/Search/components/SelectFacet.jsx +2 -9
  148. package/src/components/manage/Blocks/Search/components/index.js +13 -13
  149. package/src/components/manage/Blocks/Search/hocs/index.js +2 -2
  150. package/src/components/manage/Blocks/Search/hocs/withQueryString.jsx +5 -2
  151. package/src/components/manage/Blocks/Search/hocs/withSearch.jsx +93 -46
  152. package/src/components/manage/Blocks/Search/layout/LeftColumnFacets.jsx +17 -5
  153. package/src/components/manage/Blocks/Search/layout/RightColumnFacets.jsx +17 -5
  154. package/src/components/manage/Blocks/Search/layout/TopSideFacets.jsx +21 -5
  155. package/src/components/manage/Blocks/Search/schema.js +29 -14
  156. package/src/components/manage/Blocks/Table/Cell.jsx +2 -3
  157. package/src/components/manage/Blocks/Teaser/Body.jsx +0 -1
  158. package/src/components/manage/Blocks/Teaser/DefaultBody.jsx +5 -10
  159. package/src/components/manage/Blocks/Teaser/schema.js +5 -0
  160. package/src/components/manage/Blocks/Text/Edit.jsx +2 -3
  161. package/src/components/manage/Blocks/Title/View.jsx +0 -23
  162. package/src/components/manage/Blocks/Title/View.test.jsx +16 -1
  163. package/src/components/manage/Blocks/ToC/Schema.jsx +40 -7
  164. package/src/components/manage/Blocks/ToC/View.jsx +84 -14
  165. package/src/components/manage/Blocks/ToC/variations/DefaultTocRenderer.jsx +8 -3
  166. package/src/components/manage/Blocks/ToC/variations/DefaultTocRenderer.test.jsx +44 -0
  167. package/src/components/manage/Blocks/ToC/variations/HorizontalMenu.jsx +149 -10
  168. package/src/components/manage/Blocks/ToC/variations/index.js +3 -1
  169. package/src/components/manage/Contents/Contents.jsx +319 -139
  170. package/src/components/manage/Contents/ContentsItem.jsx +6 -0
  171. package/src/components/manage/Contents/ContentsPropertiesModal.jsx +90 -166
  172. package/src/components/manage/Contents/ContentsRenameModal.jsx +88 -139
  173. package/src/components/manage/Contents/ContentsRenameModal.stories.jsx +61 -0
  174. package/src/components/manage/Contents/ContentsTagsModal.jsx +83 -130
  175. package/src/components/manage/Contents/ContentsTagsModal.stories.jsx +68 -0
  176. package/src/components/manage/Contents/ContentsUploadModal.jsx +11 -7
  177. package/src/components/manage/Contents/ContentsWorkflowModal.jsx +87 -154
  178. package/src/components/manage/Controlpanels/Aliases.jsx +4 -12
  179. package/src/components/manage/Controlpanels/Controlpanels.jsx +199 -224
  180. package/src/components/manage/Controlpanels/Controlpanels.test.jsx +46 -7
  181. package/src/components/manage/Controlpanels/Groups/GroupsControlpanel.jsx +65 -38
  182. package/src/components/manage/Controlpanels/Groups/RenderGroups.jsx +2 -2
  183. package/src/components/manage/Controlpanels/Relations/BrokenRelations.jsx +91 -0
  184. package/src/components/manage/Controlpanels/Relations/Relations.jsx +114 -0
  185. package/src/components/manage/Controlpanels/Relations/RelationsListing.jsx +480 -0
  186. package/src/components/manage/Controlpanels/Relations/RelationsMatrix.jsx +531 -0
  187. package/src/components/manage/Controlpanels/Rules/AddRule.jsx +3 -10
  188. package/src/components/manage/Controlpanels/Rules/EditRule.jsx +1 -1
  189. package/src/components/manage/Controlpanels/UndoControlpanel.jsx +6 -9
  190. package/src/components/manage/Controlpanels/Users/RenderUsers.jsx +97 -7
  191. package/src/components/manage/Controlpanels/Users/UserGroupMembershipControlPanel.jsx +3 -3
  192. package/src/components/manage/Controlpanels/Users/UserGroupMembershipListing.jsx +51 -82
  193. package/src/components/manage/Controlpanels/Users/UserGroupMembershipMatrix.jsx +79 -75
  194. package/src/components/manage/Controlpanels/Users/UsersControlpanel.jsx +127 -99
  195. package/src/components/manage/Delete/Delete.jsx +96 -171
  196. package/src/components/manage/Diff/DiffField.jsx +25 -1
  197. package/src/components/manage/DragDropList/DragDropList.jsx +18 -13
  198. package/src/components/manage/Form/BlockDataForm.jsx +3 -2
  199. package/src/components/manage/Form/BlockDataForm.test.jsx +51 -17
  200. package/src/components/manage/Form/Form.jsx +7 -6
  201. package/src/components/manage/Form/InlineForm.jsx +39 -9
  202. package/src/components/manage/Form/InlineForm.test.jsx +16 -14
  203. package/src/components/manage/Form/InlineFormState.js +8 -0
  204. package/src/components/manage/History/History.jsx +11 -1
  205. package/src/components/manage/LinksToItem/LinksToItem.jsx +209 -0
  206. package/src/components/manage/LinksToItem/LinksToItem.test.jsx +100 -0
  207. package/src/components/manage/LockingToastsFactory/LockingToastsFactory.jsx +1 -2
  208. package/src/components/manage/Messages/Messages.jsx +32 -99
  209. package/src/components/manage/Messages/Messages.test.jsx +0 -1
  210. package/src/components/manage/Multilingual/CreateTranslation.jsx +2 -2
  211. package/src/components/manage/Multilingual/TranslationObject.jsx +4 -3
  212. package/src/components/manage/Preferences/ChangePassword.jsx +2 -2
  213. package/src/components/manage/Preferences/PersonalPreferences.jsx +2 -2
  214. package/src/components/manage/Sharing/Sharing.jsx +62 -22
  215. package/src/components/manage/Sidebar/AlignBlock.jsx +1 -1
  216. package/src/components/manage/Sidebar/Sidebar.jsx +139 -220
  217. package/src/components/manage/TemplateChooser/TemplateChooser.jsx +38 -0
  218. package/src/components/manage/TemplateChooser/TemplateChooser.test.jsx +34 -0
  219. package/src/components/manage/TemplateChooser/template.svg +10 -0
  220. package/src/components/manage/Toast/Toast.jsx +2 -2
  221. package/src/components/manage/Toolbar/More.jsx +17 -2
  222. package/src/components/manage/Toolbar/PersonalTools.jsx +97 -155
  223. package/src/components/manage/Toolbar/Toolbar.jsx +2 -2
  224. package/src/components/manage/Toolbar/Types.jsx +2 -2
  225. package/src/components/manage/UniversalLink/UniversalLink.jsx +6 -12
  226. package/src/components/manage/UniversalLink/UniversalLink.test.jsx +37 -0
  227. package/src/components/manage/Widgets/AlignWidget.jsx +2 -4
  228. package/src/components/manage/Widgets/ArrayWidget.jsx +3 -1
  229. package/src/components/manage/Widgets/ArrayWidget.test.jsx +45 -1
  230. package/src/components/manage/Widgets/ColorPickerWidget.jsx +6 -1
  231. package/src/components/manage/Widgets/ColorPickerWidget.test.jsx +9 -7
  232. package/src/components/manage/Widgets/DatetimeWidget.jsx +11 -13
  233. package/src/components/manage/Widgets/FileWidget.jsx +2 -1
  234. package/src/components/manage/Widgets/FormFieldWrapper.jsx +1 -1
  235. package/src/components/manage/Widgets/IdWidget.jsx +1 -2
  236. package/src/components/manage/Widgets/ObjectBrowserWidget.jsx +2 -9
  237. package/src/components/manage/Widgets/ObjectListWidget.jsx +3 -8
  238. package/src/components/manage/Widgets/RecurrenceWidget/ByDayField.jsx +2 -1
  239. package/src/components/manage/Widgets/RecurrenceWidget/MonthOfTheYearField.jsx +2 -1
  240. package/src/components/manage/Widgets/RecurrenceWidget/Occurences.jsx +2 -1
  241. package/src/components/manage/Widgets/RecurrenceWidget/RecurrenceWidget.jsx +10 -12
  242. package/src/components/manage/Widgets/RecurrenceWidget/WeekdayOfTheMonthField.jsx +2 -1
  243. package/src/components/manage/Widgets/RecurrenceWidget/WeekdayOfTheMonthIndexField.jsx +4 -4
  244. package/src/components/manage/Widgets/RegistryImageWidget.jsx +210 -0
  245. package/src/components/manage/Widgets/RegistryImageWidget.test.jsx +91 -0
  246. package/src/components/manage/Widgets/SchemaWidget.jsx +6 -9
  247. package/src/components/manage/Widgets/SelectUtils.js +2 -2
  248. package/src/components/manage/Widgets/SelectWidget.jsx +16 -2
  249. package/src/components/manage/Widgets/SelectWidget.test.jsx +45 -1
  250. package/src/components/manage/Widgets/WysiwygWidget.jsx +2 -9
  251. package/src/components/manage/Workflow/Workflow.jsx +75 -184
  252. package/src/components/theme/Anontools/Anontools.jsx +44 -72
  253. package/src/components/theme/Anontools/Anontools.stories.jsx +16 -6
  254. package/src/components/theme/Anontools/Anontools.test.jsx +16 -2
  255. package/src/components/theme/Breadcrumbs/Breadcrumbs.jsx +52 -99
  256. package/src/components/theme/Breadcrumbs/Breadcrumbs.stories.jsx +14 -13
  257. package/src/components/theme/Comments/Comment.stories.jsx +84 -0
  258. package/src/components/theme/Comments/CommentEditModal.jsx +63 -115
  259. package/src/components/theme/Comments/Comments.jsx +268 -380
  260. package/src/components/theme/Component/Component.jsx +1 -1
  261. package/src/components/theme/ContactForm/ContactForm.jsx +108 -192
  262. package/src/components/theme/ContactForm/ContactForm.stories.jsx +1 -1
  263. package/src/components/theme/ContactForm/ContactForm.test.jsx +2 -3
  264. package/src/components/theme/ContentMetadataTags/ContentMetadataTags.jsx +41 -3
  265. package/src/components/theme/Error/ServerError.jsx +29 -0
  266. package/src/components/theme/Footer/Footer.jsx +2 -13
  267. package/src/components/theme/Header/Header.jsx +37 -63
  268. package/src/components/theme/Header/Header.test.jsx +18 -0
  269. package/src/components/theme/Icon/Icon.jsx +2 -2
  270. package/src/components/theme/Image/Image.jsx +96 -0
  271. package/src/components/theme/Image/Image.test.jsx +125 -0
  272. package/src/components/theme/LanguageSelector/LanguageSelector.js +8 -3
  273. package/src/components/theme/Login/Login.jsx +160 -242
  274. package/src/components/theme/Logo/Logo.Multilingual.test.jsx +131 -1
  275. package/src/components/theme/Logo/Logo.jsx +35 -26
  276. package/src/components/theme/Logo/Logo.test.jsx +135 -1
  277. package/src/components/theme/Logout/Logout.jsx +36 -83
  278. package/src/components/theme/MultilingualRedirector/MultilingualRedirector.jsx +2 -2
  279. package/src/components/theme/Navigation/NavItem.jsx +4 -2
  280. package/src/components/theme/Navigation/Navigation.jsx +86 -171
  281. package/src/components/theme/NotFound/NotFound.jsx +55 -41
  282. package/src/components/theme/PasswordReset/PasswordReset.jsx +8 -6
  283. package/src/components/theme/PasswordReset/RequestPasswordReset.jsx +96 -171
  284. package/src/components/theme/PreviewImage/PreviewImage.jsx +31 -15
  285. package/src/components/theme/PreviewImage/PreviewImage.test.js +53 -13
  286. package/src/components/theme/Register/Register.jsx +2 -4
  287. package/src/components/theme/Search/SearchTags.jsx +30 -60
  288. package/src/components/theme/SearchWidget/SearchWidget.jsx +49 -97
  289. package/src/components/theme/SearchWidget/SearchWidget.test.jsx +8 -0
  290. package/src/components/theme/Sitemap/Sitemap.jsx +25 -12
  291. package/src/components/theme/Sitemap/Sitemap.test.jsx +23 -2
  292. package/src/components/theme/TsTest/TsTest.test.tsx +11 -0
  293. package/src/components/theme/TsTest/TsTest.tsx +15 -0
  294. package/src/components/theme/View/AlbumView.jsx +21 -16
  295. package/src/components/theme/View/DefaultView.jsx +1 -1
  296. package/src/components/theme/View/EventDatesInfo.jsx +2 -1
  297. package/src/components/theme/View/EventView.jsx +36 -25
  298. package/src/components/theme/View/FileView.jsx +23 -18
  299. package/src/components/theme/View/ImageView.jsx +40 -32
  300. package/src/components/theme/View/ImageView.test.jsx +4 -0
  301. package/src/components/theme/View/LinkView.jsx +53 -78
  302. package/src/components/theme/View/ListingView.jsx +36 -28
  303. package/src/components/theme/View/NewsItemView.jsx +16 -17
  304. package/src/components/theme/View/RenderBlocks.jsx +56 -21
  305. package/src/components/theme/View/RenderEmptyBlock.jsx +5 -0
  306. package/src/components/theme/View/SummaryView.jsx +49 -39
  307. package/src/components/theme/View/TabularView.jsx +59 -53
  308. package/src/components/theme/View/View.jsx +2 -0
  309. package/src/components/theme/Widgets/DateWidget.jsx +2 -1
  310. package/src/components/theme/Widgets/DatetimeWidget.jsx +2 -1
  311. package/src/components/theme/Widgets/ImageWidget.stories.jsx +1 -2
  312. package/src/components/theme/Widgets/RelationsWidget.jsx +13 -11
  313. package/src/config/Blocks.jsx +46 -0
  314. package/src/config/Components.jsx +3 -1
  315. package/src/config/ControlPanels.js +2 -1
  316. package/src/config/Loadables.jsx +1 -1
  317. package/src/config/NonContentRoutes.jsx +1 -0
  318. package/src/config/RichTextEditor/Blocks.jsx +4 -5
  319. package/src/config/RichTextEditor/FromHTML.jsx +2 -2
  320. package/src/config/RichTextEditor/Plugins.jsx +2 -3
  321. package/src/config/RichTextEditor/Styles.jsx +1 -1
  322. package/src/config/RichTextEditor/ToHTML.jsx +12 -10
  323. package/src/config/RichTextEditor/index.js +2 -3
  324. package/src/config/Views.jsx +6 -4
  325. package/src/config/Widgets.jsx +4 -0
  326. package/src/config/index.js +38 -2
  327. package/src/config/server.js +2 -0
  328. package/src/constants/ActionTypes.js +8 -0
  329. package/src/constants/Indexes.js +3 -1
  330. package/src/constants/Languages.js +8 -4
  331. package/src/express-middleware/devproxy.js +1 -1
  332. package/src/express-middleware/files.js +11 -9
  333. package/src/express-middleware/images.js +12 -5
  334. package/src/express-middleware/ok.js +16 -0
  335. package/src/express-middleware/robotstxt.js +1 -1
  336. package/src/express-middleware/sitemap.js +37 -5
  337. package/src/express-middleware/static.js +3 -3
  338. package/src/helpers/Api/Api.js +1 -1
  339. package/src/helpers/Blocks/Blocks.js +52 -6
  340. package/src/helpers/Blocks/Blocks.test.js +92 -13
  341. package/src/helpers/Extensions/index.js +2 -1
  342. package/src/helpers/Extensions/withBlockSchemaEnhancer.js +63 -61
  343. package/src/helpers/Extensions/withBlockSchemaEnhancer.test.js +145 -0
  344. package/src/helpers/FormValidation/FormValidation.js +42 -3
  345. package/src/helpers/FormValidation/FormValidation.test.js +73 -0
  346. package/src/helpers/Html/Html.jsx +5 -9
  347. package/src/helpers/Html/Html.test.jsx +5 -0
  348. package/src/helpers/Loadable/__mocks__/Loadable.js +18 -18
  349. package/src/helpers/MessageLabels/MessageLabels.js +111 -4
  350. package/src/helpers/Robots/Robots.js +24 -6
  351. package/src/helpers/ScrollToTop/ScrollToTop.jsx +5 -3
  352. package/src/helpers/Site/index.js +21 -0
  353. package/src/helpers/Sitemap/Sitemap.js +44 -2
  354. package/src/helpers/Url/Url.js +30 -4
  355. package/src/helpers/Url/Url.test.js +55 -0
  356. package/src/helpers/Utils/UseDetectClickOutside.stories.jsx +190 -0
  357. package/src/helpers/Utils/Utils.js +73 -13
  358. package/src/helpers/Utils/Utils.test.js +17 -4
  359. package/src/helpers/Utils/usePagination.js +67 -14
  360. package/src/helpers/Utils/usePagination.test.js +115 -0
  361. package/src/helpers/index.js +22 -10
  362. package/src/hooks/client/useClient.js +11 -0
  363. package/src/hooks/clipboard/useClipboard.js +26 -0
  364. package/src/hooks/index.js +2 -0
  365. package/src/icons/grid-block.svg +11 -0
  366. package/src/middleware/Api.test.js +54 -0
  367. package/src/middleware/api.js +209 -175
  368. package/src/middleware/blacklistRoutes.js +25 -22
  369. package/src/middleware/index.js +2 -2
  370. package/src/middleware/storeProtectLoadUtils.js +61 -62
  371. package/src/middleware/storeProtectLoadUtils.test.js +47 -43
  372. package/src/reducers/actions/actions.js +8 -6
  373. package/src/reducers/actions/actions.test.js +70 -0
  374. package/src/reducers/breadcrumbs/breadcrumbs.js +1 -1
  375. package/src/reducers/content/content.test.js +4 -4
  376. package/src/reducers/index.js +6 -0
  377. package/src/reducers/navigation/navigation.js +6 -6
  378. package/src/reducers/navigation/navigation.test.js +30 -0
  379. package/src/reducers/navroot/navroot.js +79 -0
  380. package/src/reducers/navroot/navroot.test.js +110 -0
  381. package/src/reducers/relations/relations.js +201 -0
  382. package/src/reducers/site/site.js +51 -0
  383. package/src/reducers/site/site.test.js +67 -0
  384. package/src/reducers/types/types.js +1 -1
  385. package/src/reducers/userSession/userSession.js +15 -1
  386. package/src/registry.js +2 -2
  387. package/src/routes.js +14 -0
  388. package/src/server.jsx +37 -23
  389. package/src/start-server.js +2 -2
  390. package/src/storybook.jsx +24 -38
  391. package/test-setup-config.js +12 -1
  392. package/theme/themes/pastanaga/collections/form.overrides +46 -0
  393. package/theme/themes/pastanaga/collections/menu.overrides +3 -2
  394. package/theme/themes/pastanaga/elements/container.overrides +5 -2
  395. package/theme/themes/pastanaga/elements/input.overrides +11 -1
  396. package/theme/themes/pastanaga/elements/label.overrides +10 -0
  397. package/theme/themes/pastanaga/elements/step.overrides +2 -1
  398. package/theme/themes/pastanaga/extras/blocks.less +25 -15
  399. package/theme/themes/pastanaga/extras/color-picker-widget.less +1 -1
  400. package/theme/themes/pastanaga/extras/contents.less +6 -1
  401. package/theme/themes/pastanaga/extras/draftjs.less +4 -4
  402. package/theme/themes/pastanaga/extras/grid.less +427 -0
  403. package/theme/themes/pastanaga/extras/login.less +3 -0
  404. package/theme/themes/pastanaga/extras/main.less +14 -7
  405. package/theme/themes/pastanaga/extras/react-dates-overrides.less +4 -2
  406. package/theme/themes/pastanaga/extras/search.less +7 -1
  407. package/theme/themes/pastanaga/extras/sidebar.less +9 -4
  408. package/theme/themes/pastanaga/extras/time-picker-overrides.less +5 -3
  409. package/theme/themes/pastanaga/extras/toc.less +29 -0
  410. package/theme/themes/pastanaga/extras/toolbar.less +6 -2
  411. package/theme/themes/pastanaga/extras/userscontrolpanel.less +104 -73
  412. package/theme/themes/pastanaga/extras/widgets.less +1 -1
  413. package/theme/themes/pastanaga/modules/rating.overrides +2 -1
  414. package/theme/themes/pastanaga-cms-ui/elements/container.overrides +2 -1
  415. package/theme/themes/pastanaga-cms-ui/extras/cms-ui.elements.container.less +6 -2
  416. package/theme/themes/pastanaga-cms-ui/extras/cms-ui.site.less +2 -2
  417. package/tsconfig.json +33 -0
  418. package/webpack-plugins/webpack-less-plugin.js +19 -0
  419. package/.changelog.draft +0 -19
  420. package/.editorconfig +0 -36
  421. package/.storybook/main.js +0 -127
  422. package/.storybook/manager.js +0 -15
  423. package/.storybook/preview.js +0 -21
  424. package/.storybook/static/previewImage.svg +0 -48
  425. package/.vale.ini +0 -10
  426. package/.yarnrc.yml +0 -5
  427. package/jsdoc.json +0 -16
  428. package/netlify.toml +0 -5
  429. package/pyvenv.cfg +0 -3
  430. package/share/man/man1/ttx.1 +0 -225
  431. package/src/components/manage/Blocks/Teaser/utils.js +0 -44
  432. package/src/components/manage/Blocks/Teaser/utils.test.jsx +0 -229
  433. package/src/components/theme/Header/Header.md +0 -27
  434. package/styles/Vocab/Base/accept.txt +0 -0
  435. package/styles/Vocab/Base/reject.txt +0 -0
  436. package/styles/Vocab/Plone/accept.txt +0 -8
  437. package/styles/Vocab/Plone/reject.txt +0 -0
  438. package/towncrier.toml +0 -33
@@ -2,10 +2,11 @@ import React from 'react';
2
2
  import cx from 'classnames';
3
3
  import moment from 'moment';
4
4
  import { useSelector } from 'react-redux';
5
+ import { toBackendLang } from '@plone/volto/helpers';
5
6
 
6
7
  const DateWidget = ({ value, children, className, format = 'll' }) => {
7
8
  const lang = useSelector((state) => state.intl.locale);
8
- moment.locale(lang);
9
+ moment.locale(toBackendLang(lang));
9
10
  return value ? (
10
11
  <span className={cx(className, 'date', 'widget')}>
11
12
  {children
@@ -2,10 +2,11 @@ import React from 'react';
2
2
  import cx from 'classnames';
3
3
  import moment from 'moment';
4
4
  import { useSelector } from 'react-redux';
5
+ import { toBackendLang } from '@plone/volto/helpers';
5
6
 
6
7
  const DatetimeWidget = ({ value, children, className, format = 'lll' }) => {
7
8
  const lang = useSelector((state) => state.intl.locale);
8
- moment.locale(lang);
9
+ moment.locale(toBackendLang(lang));
9
10
  return value ? (
10
11
  <span className={cx(className, 'datetime', 'widget')}>
11
12
  {children
@@ -17,8 +17,7 @@ Image.args = {
17
17
  value: {
18
18
  download: 'download/filename.png',
19
19
  file_name: 'filename.png',
20
- data:
21
- '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',
20
+ data: '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',
22
21
  size: 100,
23
22
  'content-type': 'image/png',
24
23
  },
@@ -5,17 +5,19 @@ import RelationWidget from './RelationWidget';
5
5
  const RelationsWidget = ({ value, children, className }) =>
6
6
  value ? (
7
7
  <ul className={cx(className, 'relations', 'widget')}>
8
- {value.map((item, key) => (
9
- <li key={key}>
10
- <RelationWidget
11
- value={item}
12
- className={className}
13
- key={item.token || item.title || item}
14
- >
15
- {children}
16
- </RelationWidget>
17
- </li>
18
- ))}
8
+ {value.map((item, key) => {
9
+ return item ? (
10
+ <li key={key}>
11
+ <RelationWidget
12
+ value={item || `relation target not found '${key}'`}
13
+ className={className}
14
+ key={item.token || item.title || item}
15
+ >
16
+ {children}
17
+ </RelationWidget>
18
+ </li>
19
+ ) : null;
20
+ })}
19
21
  </ul>
20
22
  ) : (
21
23
  ''
@@ -42,6 +42,7 @@ import tableSVG from '@plone/volto/icons/table.svg';
42
42
  import listingBlockSVG from '@plone/volto/icons/content-listing.svg';
43
43
  import tocSVG from '@plone/volto/icons/list-bullet.svg';
44
44
  import searchSVG from '@plone/volto/icons/zoom.svg';
45
+ import gridSVG from '@plone/volto/icons/grid-block.svg';
45
46
  import imagesSVG from '@plone/volto/icons/images.svg';
46
47
 
47
48
  import ImageGalleryListingBlockTemplate from '@plone/volto/components/manage/Blocks/Listing/ImageGallery';
@@ -50,6 +51,14 @@ import TextSettingsSchema from '@plone/volto/components/manage/Blocks/Text/Schem
50
51
  import ImageSettingsSchema from '@plone/volto/components/manage/Blocks/Image/LayoutSchema';
51
52
  import ToCSettingsSchema from '@plone/volto/components/manage/Blocks/ToC/Schema';
52
53
 
54
+ import GridBlockView from '@plone/volto/components/manage/Blocks/Grid/View';
55
+ import GridBlockEdit from '@plone/volto/components/manage/Blocks/Grid/Edit';
56
+ import { GridBlockDataAdapter } from '@plone/volto/components/manage/Blocks/Grid/adapter';
57
+ import { GridBlockSchema } from '@plone/volto/components/manage/Blocks/Grid/schema';
58
+ import GridTemplates from '@plone/volto/components/manage/Blocks/Grid/templates';
59
+ import { gridTeaserDisableStylingSchema } from '@plone/volto/components/manage/Blocks/Teaser/schema';
60
+ import { gridImageDisableSizeAndPositionHandlersSchema } from '@plone/volto/components/manage/Blocks/Image/schema';
61
+
53
62
  import SearchBlockView from '@plone/volto/components/manage/Blocks/Search/SearchBlockView';
54
63
  import SearchBlockEdit from '@plone/volto/components/manage/Blocks/Search/SearchBlockEdit';
55
64
 
@@ -66,6 +75,7 @@ import {
66
75
  DateRangeFacetFilterListEntry,
67
76
  } from '@plone/volto/components/manage/Blocks/Search/components';
68
77
  import getListingBlockAsyncData from '@plone/volto/components/manage/Blocks/Listing/getAsyncData';
78
+ import { getImageBlockSizes } from '@plone/volto/components/manage/Blocks/Image/utils';
69
79
 
70
80
  // block sidebar schemas (not the Dexterity Layout block settings schemas)
71
81
  import HeroImageLeftBlockSchema from '@plone/volto/components/manage/Blocks/HeroImageLeft/schema';
@@ -249,6 +259,7 @@ const blocksConfig = {
249
259
  restricted: false,
250
260
  mostUsed: true,
251
261
  sidebarTab: 1,
262
+ getSizes: getImageBlockSizes,
252
263
  },
253
264
  leadimage: {
254
265
  id: 'leadimage',
@@ -458,6 +469,27 @@ const blocksConfig = {
458
469
  },
459
470
  },
460
471
  },
472
+ // This next block is not named just grid for some reasons:
473
+ // 1.- Naming it grid will collide with the SemanticUI CSS of the Grid component
474
+ // 2.- It would prevent the transition from the old grid
475
+ // (based on @kitconcept/volto-blocks-grid) without having to perform any migration.
476
+ // This way, both can co-exist at the same time.
477
+ gridBlock: {
478
+ id: 'gridBlock',
479
+ title: 'Grid',
480
+ icon: gridSVG,
481
+ group: 'common',
482
+ view: GridBlockView,
483
+ edit: GridBlockEdit,
484
+ blockSchema: GridBlockSchema,
485
+ dataAdapter: GridBlockDataAdapter,
486
+ restricted: false,
487
+ mostUsed: true,
488
+ sidebarTab: 1,
489
+ templates: GridTemplates,
490
+ maxLength: 4,
491
+ allowedBlocks: ['image', 'listing', 'slate', 'teaser'],
492
+ },
461
493
  teaser: {
462
494
  id: 'teaser',
463
495
  title: 'Teaser',
@@ -481,6 +513,20 @@ const blocksConfig = {
481
513
  },
482
514
  };
483
515
 
516
+ // This is required in order to initialize the inner blocksConfig
517
+ // for the grid block, since we need to modify how the inner teaser
518
+ // block behave in it (= no schemaEnhancer fields for teasers inside a grid)
519
+ // Afterwards, it can be further customized in add-ons using the same technique.
520
+ blocksConfig.gridBlock.blocksConfig = { ...blocksConfig };
521
+ blocksConfig.gridBlock.blocksConfig.teaser = {
522
+ ...blocksConfig.teaser,
523
+ schemaEnhancer: gridTeaserDisableStylingSchema,
524
+ };
525
+ blocksConfig.gridBlock.blocksConfig.image = {
526
+ ...blocksConfig.image,
527
+ schemaEnhancer: gridImageDisableSizeAndPositionHandlersSchema,
528
+ };
529
+
484
530
  const requiredBlocks = ['title'];
485
531
 
486
532
  const initialBlocks = {};
@@ -1,6 +1,8 @@
1
- import { App, PreviewImage } from '@plone/volto/components';
1
+ import { App, PreviewImage, Image } from '@plone/volto/components';
2
2
 
3
+ // Register components.
3
4
  export const components = {
4
5
  PreviewImage: { component: PreviewImage },
5
6
  App: { component: App },
7
+ Image: { component: Image },
6
8
  };
@@ -18,6 +18,7 @@ import settingsSVG from '@plone/volto/icons/settings.svg';
18
18
  import rulesSVG from '@plone/volto/icons/content-existing.svg';
19
19
  import undoControlPanelSVG from '@plone/volto/icons/undo-control-panel.svg';
20
20
  import linkSVG from '@plone/volto/icons/link.svg';
21
+ import relationsSVG from '@plone/volto/icons/ahead.svg';
21
22
 
22
23
  export const controlPanelsIcons = {
23
24
  default: settingsSVG,
@@ -40,6 +41,7 @@ export const controlPanelsIcons = {
40
41
  rules: rulesSVG,
41
42
  undo: undoControlPanelSVG,
42
43
  aliases: linkSVG,
44
+ relations: relationsSVG,
43
45
  };
44
46
 
45
47
  export const filterControlPanels = (controlpanels) => {
@@ -73,7 +75,6 @@ export const filterControlPanelsSchema = (controlpanel) => {
73
75
  'toolbar_position',
74
76
  'toolbar_logo',
75
77
  'default_page',
76
- 'site_logo',
77
78
  'site_favicon',
78
79
  'site_favicon_mimetype',
79
80
  'exposeDCMetaTags',
@@ -2,7 +2,7 @@ import loadable from '@loadable/component';
2
2
 
3
3
  export const loadables = {
4
4
  prettierStandalone: loadable.lib(() => import('prettier/standalone')),
5
- prettierParserHtml: loadable.lib(() => import('prettier/parser-html')),
5
+ prettierParserHtml: loadable.lib(() => import('prettier/plugins/html')),
6
6
  prismCore: loadable.lib(() => import('prismjs/components/prism-core')),
7
7
  toastify: loadable.lib(() => import('react-toastify')),
8
8
  reactSelect: loadable.lib(() => import('react-select'), { ssr: false }),
@@ -12,6 +12,7 @@ export const nonContentRoutes = [
12
12
  '/diff',
13
13
  /\/edit$/,
14
14
  '/historyview',
15
+ '/links-to-item',
15
16
  '/layout',
16
17
  '/login',
17
18
  '/logout',
@@ -1,4 +1,4 @@
1
- export default (props) => {
1
+ export default function Blocks(props) {
2
2
  const { draftJs, immutableLib } = props;
3
3
  const { DefaultDraftBlockRenderMap } = draftJs;
4
4
  const { Map } = immutableLib;
@@ -12,9 +12,8 @@ export default (props) => {
12
12
  },
13
13
  });
14
14
 
15
- const extendedBlockRenderMap = DefaultDraftBlockRenderMap.merge(
16
- blockRenderMap,
17
- );
15
+ const extendedBlockRenderMap =
16
+ DefaultDraftBlockRenderMap.merge(blockRenderMap);
18
17
 
19
18
  const blockStyleFn = (contentBlock) => {
20
19
  const type = contentBlock.getType();
@@ -27,4 +26,4 @@ export default (props) => {
27
26
  const listBlockTypes = ['unordered-list-item', 'ordered-list-item'];
28
27
 
29
28
  return { extendedBlockRenderMap, blockStyleFn, listBlockTypes };
30
- };
29
+ }
@@ -1,8 +1,8 @@
1
- export default (element) => {
1
+ export default function FromHTMLCustomBlockFn(element) {
2
2
  if (element.className === 'callout') {
3
3
  return {
4
4
  type: 'callout',
5
5
  };
6
6
  }
7
7
  return null;
8
- };
8
+ }
@@ -23,9 +23,8 @@ const breakOutOptions = {
23
23
  const plugins = (props) => {
24
24
  const { draftJsInlineToolbarPlugin, draftJsBlockBreakoutPlugin } = props;
25
25
  const { Separator } = draftJsInlineToolbarPlugin;
26
- const blockBreakoutPlugin = draftJsBlockBreakoutPlugin.default(
27
- breakOutOptions,
28
- );
26
+ const blockBreakoutPlugin =
27
+ draftJsBlockBreakoutPlugin.default(breakOutOptions);
29
28
 
30
29
  const linkPlugin = createLinkPlugin({ libraries: props });
31
30
 
@@ -13,7 +13,7 @@ import orderedListSVG from '@plone/volto/icons/list-numbered.svg';
13
13
  import blockquoteSVG from '@plone/volto/icons/quote.svg';
14
14
  import calloutSVG from '@plone/volto/icons/megaphone.svg';
15
15
 
16
- export default function (props) {
16
+ export default function Styles(props) {
17
17
  const createInlineStyleButton = props.draftJsCreateInlineStyleButton.default;
18
18
  const createBlockStyleButton = props.draftJsCreateBlockStyleButton.default;
19
19
 
@@ -101,16 +101,18 @@ const splitSoftLinesOfLists = (children) =>
101
101
  });
102
102
 
103
103
  // Returns how the default lists should be rendered
104
- const getList = (ordered) => (children, { depth, keys }) =>
105
- ordered ? (
106
- <ol key={keys[0]} keys={keys} depth={depth}>
107
- {splitSoftLinesOfLists(children)}
108
- </ol>
109
- ) : (
110
- <ul key={keys[0]} keys={keys} depth={depth}>
111
- {splitSoftLinesOfLists(children)}
112
- </ul>
113
- );
104
+ const getList =
105
+ (ordered) =>
106
+ (children, { depth, keys }) =>
107
+ ordered ? (
108
+ <ol key={keys[0]} keys={keys} depth={depth}>
109
+ {splitSoftLinesOfLists(children)}
110
+ </ol>
111
+ ) : (
112
+ <ul key={keys[0]} keys={keys} depth={depth}>
113
+ {splitSoftLinesOfLists(children)}
114
+ </ul>
115
+ );
114
116
 
115
117
  // Special function to deal with list clones
116
118
  /*const getSpecialList = type => (children, { depth, keys }) => (
@@ -5,9 +5,8 @@ import FromHTMLCustomBlockFn from './FromHTML';
5
5
 
6
6
  export const richtextEditorSettings = (props) => {
7
7
  const { plugins, inlineToolbarButtons } = Plugins(props);
8
- const { extendedBlockRenderMap, blockStyleFn, listBlockTypes } = Blocks(
9
- props,
10
- );
8
+ const { extendedBlockRenderMap, blockStyleFn, listBlockTypes } =
9
+ Blocks(props);
11
10
 
12
11
  return {
13
12
  extendedBlockRenderMap,
@@ -16,6 +16,7 @@ import RequestTimeout from '@plone/volto/components/theme/RequestTimeout/Request
16
16
  import AlbumView from '@plone/volto/components/theme/View/AlbumView';
17
17
  import Unauthorized from '@plone/volto/components/theme/Unauthorized/Unauthorized';
18
18
  import Forbidden from '@plone/volto/components/theme/Forbidden/Forbidden';
19
+ import ServerError from '@plone/volto/components/theme/Error/ServerError';
19
20
 
20
21
  const EventView = loadable(() =>
21
22
  import('@plone/volto/components/theme/View/EventView'),
@@ -110,10 +111,11 @@ export const contentTypesViews = {
110
111
  export const defaultView = DefaultView;
111
112
 
112
113
  export const errorViews = {
113
- '404': NotFoundView,
114
- '401': Unauthorized,
115
- '403': Forbidden,
116
- '408': RequestTimeout,
114
+ 404: NotFoundView,
115
+ 401: Unauthorized,
116
+ 403: Forbidden,
117
+ 408: RequestTimeout,
118
+ 500: ServerError,
117
119
  ECONNREFUSED: ConnectionRefused,
118
120
  corsError: CorsError,
119
121
  };
@@ -24,6 +24,7 @@ import InternalUrlWidget from '@plone/volto/components/manage/Widgets/InternalUr
24
24
  import EmailWidget from '@plone/volto/components/manage/Widgets/EmailWidget';
25
25
  import NumberWidget from '@plone/volto/components/manage/Widgets/NumberWidget';
26
26
  import ImageSizeWidget from '@plone/volto/components/manage/Widgets/ImageSizeWidget';
27
+ import RegistryImageWidget from '@plone/volto/components/manage/Widgets/RegistryImageWidget';
27
28
 
28
29
  import ReferenceWidget from '@plone/volto/components/manage/Widgets/ReferenceWidget';
29
30
  import ObjectBrowserWidget from '@plone/volto/components/manage/Widgets/ObjectBrowserWidget';
@@ -72,6 +73,7 @@ export const widgetMapping = {
72
73
  recurrence: RecurrenceWidget,
73
74
  remoteUrl: UrlWidget,
74
75
  id: IdWidget,
76
+ site_logo: RegistryImageWidget,
75
77
  },
76
78
  widget: {
77
79
  richtext: WysiwygWidget,
@@ -98,6 +100,7 @@ export const widgetMapping = {
98
100
  select_querystring_field: SelectMetadataWidget,
99
101
  autocomplete: SelectAutoComplete,
100
102
  color_picker: ColorPickerWidget,
103
+ select: SelectWidget,
101
104
  },
102
105
  vocabulary: {
103
106
  'plone.app.vocabularies.Catalog': ObjectBrowserWidget,
@@ -147,6 +150,7 @@ export const widgetMapping = {
147
150
  title: TitleViewWidget,
148
151
  url: UrlViewWidget,
149
152
  internal_url: InternalUrlWidget,
153
+ object: () => '', // TODO: Not implemented yet: Object View widget
150
154
  },
151
155
  vocabulary: {},
152
156
  choices: SelectViewWidget,
@@ -37,6 +37,8 @@ import applyAddonConfiguration, { addonsInfo } from 'load-volto-addons';
37
37
 
38
38
  import ConfigRegistry from '@plone/volto/registry';
39
39
 
40
+ import { getSiteAsyncPropExtender } from '@plone/volto/helpers';
41
+
40
42
  const host = process.env.HOST || 'localhost';
41
43
  const port = process.env.PORT || '3000';
42
44
 
@@ -74,13 +76,22 @@ let config = {
74
76
  port,
75
77
  // The URL Volto is going to be served (see sensible defaults above)
76
78
  publicURL,
79
+ okRoute: '/ok',
77
80
  apiPath,
78
81
  apiExpanders: [
82
+ // Added here for documentation purposes, addded at the end because it
83
+ // depends on a value of this object.
79
84
  // Add the following expanders for only issuing a single request.
80
85
  // https://6.docs.plone.org/volto/configuration/settings-reference.html#term-apiExpanders
81
86
  // {
82
87
  // match: '',
83
- // GET_CONTENT: ['breadcrumbs', 'navigation', 'actions', 'types'],
88
+ // GET_CONTENT: [
89
+ // 'breadcrumbs',
90
+ // 'navigation',
91
+ // 'actions',
92
+ // 'types',
93
+ // 'navroot',
94
+ // ],
84
95
  // },
85
96
  ],
86
97
  // Internal proxy to bypass CORS *while developing*. NOT intended for production use.
@@ -125,7 +136,7 @@ let config = {
125
136
  useEmailAsLogin: false,
126
137
  persistentReducers: ['blocksClipboard'],
127
138
  initialReducersBlacklist: [], // reducers in this list won't be hydrated in windows.__data
128
- asyncPropsExtenders: [], // per route asyncConnect customizers
139
+ asyncPropsExtenders: [getSiteAsyncPropExtender], // per route asyncConnect customizers
129
140
  contentIcons: contentIcons,
130
141
  loadables,
131
142
  lazyBundles: {
@@ -150,6 +161,7 @@ let config = {
150
161
  },
151
162
  appExtras: [],
152
163
  maxResponseSize: 2000000000, // This is superagent default (200 mb)
164
+ maxFileUploadSize: null,
153
165
  serverConfig,
154
166
  storeExtenders: [],
155
167
  showTags: true,
@@ -180,6 +192,14 @@ let config = {
180
192
  styleClassNameConverters,
181
193
  hashLinkSmoothScroll: false,
182
194
  styleClassNameExtenders,
195
+ querystringSearchGet: false,
196
+ blockSettingsTabFieldsetsInitialStateOpen: true,
197
+ excludeLinksAndReferencesMenuItem: false,
198
+ containerBlockTypes: ['gridBlock'],
199
+ siteTitleFormat: {
200
+ includeSiteTitle: false,
201
+ titleAndSiteTitleSeparator: '-',
202
+ },
183
203
  },
184
204
  experimental: {
185
205
  addBlockButton: {
@@ -210,6 +230,22 @@ let config = {
210
230
  components,
211
231
  };
212
232
 
233
+ // The apiExpanders depends on a config of the object, so it's done here
234
+ config.settings.apiExpanders = [
235
+ ...config.settings.apiExpanders,
236
+ {
237
+ match: '',
238
+ GET_CONTENT: ['breadcrumbs', 'actions', 'types', 'navroot'],
239
+ },
240
+ {
241
+ match: '',
242
+ GET_CONTENT: ['navigation'],
243
+ querystring: (config) => ({
244
+ 'expand.navigation.depth': config.settings.navDepth,
245
+ }),
246
+ },
247
+ ];
248
+
213
249
  ConfigRegistry.settings = config.settings;
214
250
  ConfigRegistry.experimental = config.experimental;
215
251
  ConfigRegistry.blocks = config.blocks;
@@ -1,6 +1,7 @@
1
1
  import imagesMiddleware from '@plone/volto/express-middleware/images';
2
2
  import filesMiddleware from '@plone/volto/express-middleware/files';
3
3
  import robotstxtMiddleware from '@plone/volto/express-middleware/robotstxt';
4
+ import okMiddleware from '@plone/volto/express-middleware/ok';
4
5
  import sitemapMiddleware from '@plone/volto/express-middleware/sitemap';
5
6
  import staticsMiddleware from '@plone/volto/express-middleware/static';
6
7
  import devProxyMiddleware from '@plone/volto/express-middleware/devproxy';
@@ -11,6 +12,7 @@ const settings = {
11
12
  filesMiddleware(),
12
13
  imagesMiddleware(),
13
14
  robotstxtMiddleware(),
15
+ okMiddleware(),
14
16
  sitemapMiddleware(),
15
17
  staticsMiddleware(),
16
18
  ],
@@ -36,6 +36,11 @@ export const GET_NAVIGATION = 'GET_NAVIGATION';
36
36
  export const GET_PRINCIPALS = 'GET_PRINCIPALS';
37
37
  export const GET_QUERYSTRING = 'GET_QUERYSTRING';
38
38
  export const GET_QUERYSTRING_RESULTS = 'GET_QUERYSTRING_RESULTS';
39
+ export const CREATE_RELATIONS = 'CREATE_RELATIONS';
40
+ export const DELETE_RELATIONS = 'DELETE_RELATIONS';
41
+ export const LIST_RELATIONS = 'LIST_RELATIONS';
42
+ export const STATS_RELATIONS = 'STATS_RELATIONS';
43
+ export const REBUILD_RELATIONS = 'REBUILD_RELATIONS';
39
44
  export const GET_SCHEMA = 'GET_SCHEMA';
40
45
  export const POST_SCHEMA = 'POST_SCHEMA';
41
46
  export const PUT_SCHEMA = 'PUT_SCHEMA';
@@ -133,3 +138,6 @@ export const REMOVE_ALIASES = 'REMOVE_ALIASES';
133
138
  export const GET_USERSCHEMA = 'GET_USERSCHEMA';
134
139
  export const GET_UPGRADE = 'GET_UPGRADE';
135
140
  export const POST_UPGRADE = 'POST_UPGRADE';
141
+ export const RESET_LOGIN_REQUEST = 'RESET_LOGIN_REQUEST';
142
+ export const GET_SITE = 'GET_SITE';
143
+ export const GET_NAVROOT = 'GET_NAVROOT';
@@ -3,7 +3,7 @@
3
3
  * @module constants/indexes
4
4
  */
5
5
 
6
- export default {
6
+ const Indexes = {
7
7
  sortable_title: { label: 'Title', type: 'string', sort_on: 'sortable_title' },
8
8
  review_state: { label: 'Review state', type: 'string' },
9
9
  ModificationDate: {
@@ -35,6 +35,8 @@ export default {
35
35
  Type: { label: 'Type', type: 'string' },
36
36
  };
37
37
 
38
+ export default Indexes;
39
+
38
40
  export const defaultIndexes = [
39
41
  'review_state',
40
42
  'ModificationDate',
@@ -4,14 +4,18 @@
4
4
  */
5
5
 
6
6
  module.exports = {
7
- en: 'English',
7
+ ca: 'Català',
8
8
  de: 'Deutsch',
9
+ en: 'English',
10
+ es: 'Español',
11
+ eu: 'Euskara',
12
+ fi: 'Suomi',
13
+ fr: 'Français',
14
+ it: 'Italiano',
9
15
  nl: 'Nederlands',
10
16
  ro: 'Română',
11
17
  ja: '日本語',
12
18
  pt: 'Português',
13
19
  pt_BR: 'Português (Brasil)',
14
- es: 'Spanish',
15
- it: 'Italian',
16
- eu: 'Euskara',
20
+ zh_CN: '中文',
17
21
  };
@@ -37,7 +37,7 @@ function getEnv() {
37
37
  return _env;
38
38
  }
39
39
 
40
- export default function () {
40
+ export default function devProxyMiddleware() {
41
41
  const middleware = express.Router();
42
42
  const devProxy = createProxyMiddleware(filter, {
43
43
  selfHandleResponse: true,
@@ -2,19 +2,21 @@ import express from 'express';
2
2
  import { getAPIResourceWithAuth } from '@plone/volto/helpers';
3
3
 
4
4
  const HEADERS = [
5
- 'Accept-Ranges',
6
- 'Cache-Control',
7
- 'Content-Disposition',
8
- 'Content-Range',
9
- 'Content-Type',
5
+ 'accept-ranges',
6
+ 'cache-control',
7
+ 'content-disposition',
8
+ 'content-range',
9
+ 'content-type',
10
+ 'x-sendfile',
11
+ 'x-accel-redirect',
10
12
  ];
11
13
 
12
- function fileMiddleware(req, res, next) {
14
+ function filesMiddlewareFn(req, res, next) {
13
15
  getAPIResourceWithAuth(req)
14
16
  .then((resource) => {
15
17
  // Just forward the headers that we need
16
18
  HEADERS.forEach((header) => {
17
- if (resource.get(header)) {
19
+ if (resource.headers[header]) {
18
20
  res.set(header, resource.get(header));
19
21
  }
20
22
  });
@@ -24,10 +26,10 @@ function fileMiddleware(req, res, next) {
24
26
  .catch(next);
25
27
  }
26
28
 
27
- export default function () {
29
+ export default function filesMiddleware() {
28
30
  const middleware = express.Router();
29
31
 
30
- middleware.all(['**/@@download/*', '**/@@display-file/*'], fileMiddleware);
32
+ middleware.all(['**/@@download/*', '**/@@display-file/*'], filesMiddlewareFn);
31
33
  middleware.id = 'filesResourcesProcessor';
32
34
  return middleware;
33
35
  }
@@ -1,9 +1,15 @@
1
1
  import express from 'express';
2
2
  import { getAPIResourceWithAuth } from '@plone/volto/helpers';
3
3
 
4
- const HEADERS = ['content-type', 'content-disposition', 'cache-control'];
4
+ const HEADERS = [
5
+ 'content-type',
6
+ 'content-disposition',
7
+ 'cache-control',
8
+ 'x-sendfile',
9
+ 'x-accel-redirect',
10
+ ];
5
11
 
6
- function imageMiddleware(req, res, next) {
12
+ function imageMiddlewareFn(req, res, next) {
7
13
  getAPIResourceWithAuth(req)
8
14
  .then((resource) => {
9
15
  // Just forward the headers that we need
@@ -17,11 +23,12 @@ function imageMiddleware(req, res, next) {
17
23
  .catch(next);
18
24
  }
19
25
 
20
- export default function () {
26
+ export default function imagesMiddleware() {
21
27
  const middleware = express.Router();
22
28
 
23
- middleware.all(['**/@@images/*'], imageMiddleware);
24
- middleware.all(['/@portrait/*'], imageMiddleware);
29
+ middleware.all(['**/@@images/*'], imageMiddlewareFn);
30
+ middleware.all(['/@portrait/*'], imageMiddlewareFn);
31
+ middleware.all(['/@@site-logo/*'], imageMiddlewareFn);
25
32
  middleware.id = 'imageResourcesProcessor';
26
33
  return middleware;
27
34
  }
@@ -0,0 +1,16 @@
1
+ import express from 'express';
2
+ import config from '@plone/volto/registry';
3
+
4
+ const ok = function (req, res, next) {
5
+ res.type('text/plain');
6
+ res.set('Expires', 'Sat, 1 Jan 2000 00:00:00 GMT');
7
+ res.set('Cache-Control', 'max-age=0, must-revalidate, private');
8
+ res.send('ok');
9
+ };
10
+
11
+ export default function okRouteMiddleware() {
12
+ const middleware = express.Router();
13
+ middleware.all(config?.settings?.okRoute || '/ok', ok);
14
+ middleware.id = 'ok';
15
+ return middleware;
16
+ }