@plone/volto 17.0.0-alpha.2 → 17.0.0-alpha.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.yarn/install-state.gz +0 -0
- package/CHANGELOG.md +530 -15
- package/CONTRIBUTING.md +1 -1
- package/README.md +11 -14
- package/addon-registry.js +34 -0
- package/create-theme-addons-loader.js +79 -0
- package/cypress/support/commands.js +56 -4
- package/cypress/support/volto-slate.js +4 -5
- package/docker-compose.yml +1 -1
- package/locales/ca/LC_MESSAGES/volto.po +272 -6
- package/locales/ca.json +1 -1
- package/locales/de/LC_MESSAGES/volto.po +291 -25
- package/locales/de.json +1 -1
- package/locales/en/LC_MESSAGES/volto.po +271 -5
- package/locales/en.json +1 -1
- package/locales/es/LC_MESSAGES/volto.po +281 -15
- package/locales/es.json +1 -1
- package/locales/eu/LC_MESSAGES/volto.po +272 -6
- package/locales/eu.json +1 -1
- package/locales/fi/LC_MESSAGES/volto.po +4882 -0
- package/locales/fi.json +1 -1
- package/locales/fr/LC_MESSAGES/volto.po +272 -6
- package/locales/fr.json +1 -1
- package/locales/it/LC_MESSAGES/volto.po +273 -7
- package/locales/it.json +1 -1
- package/locales/ja/LC_MESSAGES/volto.po +272 -6
- package/locales/ja.json +1 -1
- package/locales/nl/LC_MESSAGES/volto.po +927 -649
- package/locales/nl.json +1 -1
- package/locales/pt/LC_MESSAGES/volto.po +272 -6
- package/locales/pt.json +1 -1
- package/locales/pt_BR/LC_MESSAGES/volto.po +281 -15
- package/locales/pt_BR.json +1 -1
- package/locales/ro/LC_MESSAGES/volto.po +272 -6
- package/locales/ro.json +1 -1
- package/locales/volto.pot +272 -6
- package/locales/zh_CN/LC_MESSAGES/volto.po +272 -6
- package/locales/zh_CN.json +1 -1
- package/package.json +5 -3
- package/packages/volto-slate/build/messages/src/blocks/Table/TableBlockEdit.json +1 -1
- package/packages/volto-slate/build/messages/src/blocks/Text/DefaultTextBlockEditor.json +1 -1
- package/packages/volto-slate/build/messages/src/blocks/Text/DetachedTextBlockEditor.json +1 -1
- package/packages/volto-slate/build/messages/src/blocks/Text/SlashMenu.json +1 -1
- package/packages/volto-slate/build/messages/src/editor/plugins/AdvancedLink/index.json +1 -1
- package/packages/volto-slate/build/messages/src/editor/plugins/Link/index.json +1 -1
- package/packages/volto-slate/build/messages/src/editor/plugins/Table/index.json +1 -1
- package/packages/volto-slate/build/messages/src/elementEditor/messages.json +1 -1
- package/packages/volto-slate/build/messages/src/widgets/HtmlSlateWidget.json +1 -1
- package/packages/volto-slate/build/messages/src/widgets/RichTextWidgetView.json +1 -1
- package/packages/volto-slate/package.json +1 -1
- package/packages/volto-slate/src/actions/index.js +1 -1
- package/packages/volto-slate/src/blocks/Table/TableBlockEdit.jsx +21 -212
- package/packages/volto-slate/src/blocks/Table/schema.js +122 -0
- package/packages/volto-slate/src/blocks/Text/DefaultTextBlockEditor.jsx +8 -3
- package/packages/volto-slate/src/blocks/Text/SlashMenu.jsx +4 -3
- package/packages/volto-slate/src/blocks/Text/TextBlockView.jsx +20 -16
- package/packages/volto-slate/src/blocks/Text/extensions/withDeserializers.js +3 -1
- package/packages/volto-slate/src/blocks/Text/index.js +10 -2
- package/packages/volto-slate/src/editor/config.jsx +5 -4
- package/packages/volto-slate/src/editor/deserialize.js +0 -1
- package/packages/volto-slate/src/editor/index.js +4 -4
- package/packages/volto-slate/src/editor/less/slate.less +28 -0
- package/packages/volto-slate/src/editor/plugins/StyleMenu/StyleMenu.jsx +14 -4
- package/packages/volto-slate/src/editor/plugins/StyleMenu/utils.js +14 -5
- package/packages/volto-slate/src/editor/render.jsx +68 -8
- package/packages/volto-slate/src/editor/ui/SlateContextToolbar.jsx +2 -2
- package/packages/volto-slate/src/editor/ui/index.js +15 -15
- package/packages/volto-slate/src/index.js +2 -2
- package/packages/volto-slate/src/utils/blocks.js +7 -0
- package/packages/volto-slate/src/widgets/RichTextWidget.jsx +15 -8
- package/razzle.config.js +28 -0
- package/src/actions/index.js +6 -0
- package/src/actions/language/language.js +9 -8
- package/src/actions/querystringsearch/querystringsearch.js +20 -14
- package/src/actions/relations/rebuild.js +25 -0
- package/src/actions/relations/relations.js +86 -0
- package/src/actions/relations/relations.test.js +15 -0
- package/src/components/index.js +2 -0
- package/src/components/manage/Add/Add.jsx +2 -2
- package/src/components/manage/AnchorPlugin/index.jsx +2 -2
- package/src/components/manage/AnchorPlugin/utils/EditorUtils.js +3 -1
- package/src/components/manage/BlockChooser/BlockChooser.jsx +14 -5
- package/src/components/manage/BlockChooser/BlockChooser.test.jsx +5 -0
- package/src/components/manage/Blocks/Block/BlocksForm.jsx +19 -2
- package/src/components/manage/Blocks/Block/Edit.jsx +1 -1
- package/src/components/manage/Blocks/Block/Style.jsx +2 -2
- package/src/components/manage/Blocks/Container/Data.jsx +32 -0
- package/src/components/manage/Blocks/Container/Edit.jsx +174 -0
- package/src/components/manage/Blocks/Container/EditBlockWrapper.jsx +120 -0
- package/src/components/manage/Blocks/Container/NewBlockAddButton.jsx +84 -0
- package/src/components/manage/Blocks/Container/SimpleContainerToolbar.jsx +54 -0
- package/src/components/manage/Blocks/Grid/Edit.jsx +33 -0
- package/src/components/manage/Blocks/Grid/View.jsx +43 -0
- package/src/components/manage/Blocks/Grid/adapter.js +14 -0
- package/src/components/manage/Blocks/Grid/grid-1.svg +6 -0
- package/src/components/manage/Blocks/Grid/grid-2.svg +9 -0
- package/src/components/manage/Blocks/Grid/grid-3.svg +10 -0
- package/src/components/manage/Blocks/Grid/grid-4.svg +11 -0
- package/src/components/manage/Blocks/Grid/schema.js +35 -0
- package/src/components/manage/Blocks/Grid/templates.js +47 -0
- package/src/components/manage/Blocks/HeroImageLeft/Edit.jsx +6 -1
- package/src/components/manage/Blocks/Image/Edit.jsx +11 -7
- package/src/components/manage/Blocks/Image/ImageSidebar.jsx +2 -1
- package/src/components/manage/Blocks/Image/schema.js +11 -0
- package/src/components/manage/Blocks/Listing/DefaultTemplate.jsx +18 -3
- package/src/components/manage/Blocks/Listing/Edit.jsx +0 -14
- package/src/components/manage/Blocks/Listing/ListingBody.jsx +30 -8
- package/src/components/manage/Blocks/Listing/ListingBody.test.jsx +20 -0
- package/src/components/manage/Blocks/Listing/getAsyncData.js +9 -3
- package/src/components/manage/Blocks/Listing/withQuerystringResults.jsx +26 -18
- package/src/components/manage/Blocks/Search/SearchBlockEdit.jsx +5 -4
- package/src/components/manage/Blocks/Search/SearchBlockView.jsx +2 -1
- package/src/components/manage/Blocks/Search/components/DateRangeFacet.jsx +4 -1
- package/src/components/manage/Blocks/Search/components/Facets.jsx +64 -4
- package/src/components/manage/Blocks/Search/components/SearchInput.jsx +9 -2
- package/src/components/manage/Blocks/Search/components/index.js +13 -13
- package/src/components/manage/Blocks/Search/hocs/index.js +2 -2
- package/src/components/manage/Blocks/Search/hocs/withQueryString.jsx +2 -2
- package/src/components/manage/Blocks/Search/hocs/withSearch.jsx +43 -15
- package/src/components/manage/Blocks/Search/layout/LeftColumnFacets.jsx +17 -5
- package/src/components/manage/Blocks/Search/layout/RightColumnFacets.jsx +17 -5
- package/src/components/manage/Blocks/Search/layout/TopSideFacets.jsx +21 -5
- package/src/components/manage/Blocks/Search/schema.js +16 -1
- package/src/components/manage/Blocks/Teaser/Body.jsx +0 -1
- package/src/components/manage/Blocks/Teaser/DefaultBody.jsx +20 -15
- package/src/components/manage/Blocks/Teaser/schema.js +5 -0
- package/src/components/manage/Blocks/Title/View.jsx +15 -5
- package/src/components/manage/Blocks/Title/View.test.jsx +16 -1
- package/src/components/manage/Blocks/ToC/Schema.jsx +5 -1
- package/src/components/manage/Blocks/ToC/View.jsx +8 -1
- package/src/components/manage/Blocks/ToC/variations/DefaultTocRenderer.jsx +17 -4
- package/src/components/manage/Blocks/ToC/variations/HorizontalMenu.jsx +148 -10
- package/src/components/manage/Blocks/ToC/variations/index.js +3 -1
- package/src/components/manage/Contents/Contents.jsx +39 -26
- package/src/components/manage/Contents/ContentsItem.jsx +6 -0
- package/src/components/manage/Contents/ContentsUploadModal.jsx +10 -5
- package/src/components/manage/Controlpanels/AddonsControlpanel.jsx +3 -3
- package/src/components/manage/Controlpanels/Controlpanels.jsx +199 -224
- package/src/components/manage/Controlpanels/Controlpanels.test.jsx +46 -7
- package/src/components/manage/Controlpanels/Relations/BrokenRelations.jsx +66 -0
- package/src/components/manage/Controlpanels/Relations/Relations.jsx +114 -0
- package/src/components/manage/Controlpanels/Relations/RelationsListing.jsx +479 -0
- package/src/components/manage/Controlpanels/Relations/RelationsMatrix.jsx +531 -0
- package/src/components/manage/Controlpanels/Users/UserGroupMembershipControlPanel.jsx +3 -3
- package/src/components/manage/Controlpanels/Users/UserGroupMembershipListing.jsx +51 -82
- package/src/components/manage/Controlpanels/Users/UserGroupMembershipMatrix.jsx +79 -75
- package/src/components/manage/DragDropList/DragDropList.jsx +18 -13
- package/src/components/manage/Form/Form.jsx +5 -3
- package/src/components/manage/Form/InlineForm.jsx +39 -9
- package/src/components/manage/Form/InlineFormState.js +8 -0
- package/src/components/manage/History/History.jsx +11 -1
- package/src/components/manage/LinksToItem/LinksToItem.jsx +209 -0
- package/src/components/manage/LinksToItem/LinksToItem.test.jsx +97 -0
- package/src/components/manage/Multilingual/CreateTranslation.jsx +2 -2
- package/src/components/manage/Multilingual/TranslationObject.jsx +4 -3
- package/src/components/manage/Preferences/ChangePassword.jsx +2 -2
- package/src/components/manage/Preferences/PersonalPreferences.jsx +2 -2
- package/src/components/manage/Sharing/Sharing.jsx +5 -1
- package/src/components/manage/TemplateChooser/TemplateChooser.jsx +38 -0
- package/src/components/manage/TemplateChooser/TemplateChooser.test.jsx +34 -0
- package/src/components/manage/TemplateChooser/template.svg +10 -0
- package/src/components/manage/Toast/Toast.jsx +2 -2
- package/src/components/manage/Toolbar/More.jsx +15 -0
- package/src/components/manage/Toolbar/Types.jsx +2 -2
- package/src/components/manage/UniversalLink/UniversalLink.jsx +2 -6
- package/src/components/manage/UniversalLink/UniversalLink.test.jsx +36 -0
- package/src/components/manage/Widgets/ColorPickerWidget.jsx +6 -1
- package/src/components/manage/Widgets/DatetimeWidget.jsx +9 -5
- package/src/components/manage/Widgets/FileWidget.jsx +2 -1
- package/src/components/manage/Widgets/ObjectListWidget.jsx +3 -8
- package/src/components/manage/Widgets/RecurrenceWidget/ByDayField.jsx +2 -1
- package/src/components/manage/Widgets/RecurrenceWidget/MonthOfTheYearField.jsx +2 -1
- package/src/components/manage/Widgets/RecurrenceWidget/Occurences.jsx +2 -1
- package/src/components/manage/Widgets/RecurrenceWidget/RecurrenceWidget.jsx +8 -3
- package/src/components/manage/Widgets/RecurrenceWidget/WeekdayOfTheMonthField.jsx +2 -1
- package/src/components/manage/Widgets/SelectUtils.js +1 -1
- package/src/components/manage/Widgets/SelectWidget.jsx +1 -1
- package/src/components/theme/Anontools/Anontools.jsx +44 -72
- package/src/components/theme/Anontools/Anontools.stories.jsx +16 -6
- package/src/components/theme/Anontools/Anontools.test.jsx +16 -2
- package/src/components/theme/Breadcrumbs/Breadcrumbs.jsx +52 -99
- package/src/components/theme/Breadcrumbs/Breadcrumbs.stories.jsx +14 -13
- package/src/components/theme/Comments/CommentEditModal.jsx +63 -115
- package/src/components/theme/Component/Component.jsx +1 -1
- package/src/components/theme/ContactForm/ContactForm.jsx +108 -192
- package/src/components/theme/ContactForm/ContactForm.stories.jsx +1 -1
- package/src/components/theme/ContactForm/ContactForm.test.jsx +2 -3
- package/src/components/theme/Footer/Footer.jsx +2 -13
- package/src/components/theme/Header/Header.jsx +37 -63
- package/src/components/theme/Header/Header.test.jsx +18 -0
- package/src/components/theme/Icon/Icon.jsx +2 -2
- package/src/components/theme/LanguageSelector/LanguageSelector.js +8 -3
- package/src/components/theme/Login/Login.jsx +1 -0
- package/src/components/theme/Logo/Logo.jsx +2 -1
- package/src/components/theme/MultilingualRedirector/MultilingualRedirector.jsx +2 -2
- package/src/components/theme/Navigation/NavItem.jsx +4 -2
- package/src/components/theme/NotFound/NotFound.jsx +55 -41
- package/src/components/theme/PasswordReset/PasswordReset.jsx +7 -4
- package/src/components/theme/PasswordReset/RequestPasswordReset.jsx +1 -1
- package/src/components/theme/SearchWidget/SearchWidget.jsx +38 -98
- package/src/components/theme/Sitemap/Sitemap.jsx +5 -3
- package/src/components/theme/View/AlbumView.jsx +9 -1
- package/src/components/theme/View/DefaultView.jsx +1 -1
- package/src/components/theme/View/EventDatesInfo.jsx +2 -1
- package/src/components/theme/View/EventView.jsx +6 -2
- package/src/components/theme/View/FileView.jsx +23 -18
- package/src/components/theme/View/ImageView.jsx +37 -32
- package/src/components/theme/View/LinkView.jsx +53 -78
- package/src/components/theme/View/ListingView.jsx +33 -27
- package/src/components/theme/View/NewsItemView.jsx +10 -5
- package/src/components/theme/View/RenderBlocks.jsx +56 -21
- package/src/components/theme/View/RenderEmptyBlock.jsx +5 -0
- package/src/components/theme/View/SummaryView.jsx +47 -38
- package/src/components/theme/View/TabularView.jsx +59 -53
- package/src/components/theme/Widgets/DateWidget.jsx +2 -1
- package/src/components/theme/Widgets/DatetimeWidget.jsx +2 -1
- package/src/components/theme/Widgets/RelationsWidget.jsx +13 -11
- package/src/config/Blocks.jsx +44 -0
- package/src/config/ControlPanels.js +2 -0
- package/src/config/NonContentRoutes.jsx +1 -0
- package/src/config/RichTextEditor/Blocks.jsx +2 -2
- package/src/config/RichTextEditor/FromHTML.jsx +2 -2
- package/src/config/RichTextEditor/Styles.jsx +1 -1
- package/src/config/Widgets.jsx +2 -0
- package/src/config/index.js +24 -0
- package/src/config/server.js +2 -0
- package/src/constants/ActionTypes.js +4 -0
- package/src/constants/Indexes.js +3 -1
- package/src/constants/Languages.js +8 -4
- package/src/express-middleware/devproxy.js +1 -1
- package/src/express-middleware/files.js +3 -3
- package/src/express-middleware/images.js +4 -4
- package/src/express-middleware/ok.js +16 -0
- package/src/express-middleware/robotstxt.js +1 -1
- package/src/express-middleware/sitemap.js +37 -5
- package/src/express-middleware/static.js +3 -3
- package/src/helpers/Api/Api.js +1 -1
- package/src/helpers/Blocks/Blocks.js +48 -0
- package/src/helpers/Blocks/Blocks.test.js +79 -0
- package/src/helpers/Extensions/index.js +2 -1
- package/src/helpers/Extensions/withBlockSchemaEnhancer.js +15 -11
- package/src/helpers/Extensions/withBlockSchemaEnhancer.test.js +145 -0
- package/src/helpers/FormValidation/FormValidation.js +40 -2
- package/src/helpers/FormValidation/FormValidation.test.js +73 -0
- package/src/helpers/Html/Html.jsx +3 -1
- package/src/helpers/Html/Html.test.jsx +5 -0
- package/src/helpers/MessageLabels/MessageLabels.js +80 -0
- package/src/helpers/Robots/Robots.js +24 -6
- package/src/helpers/ScrollToTop/ScrollToTop.jsx +5 -3
- package/src/helpers/Sitemap/Sitemap.js +44 -2
- package/src/helpers/Url/Url.js +27 -6
- package/src/helpers/Url/Url.test.js +26 -0
- package/src/helpers/Utils/UseDetectClickOutside.stories.jsx +191 -0
- package/src/helpers/Utils/Utils.js +63 -13
- package/src/helpers/Utils/Utils.test.js +4 -4
- package/src/helpers/Utils/usePagination.js +67 -14
- package/src/helpers/Utils/usePagination.test.js +115 -0
- package/src/helpers/index.js +20 -10
- package/src/hooks/client/useClient.js +11 -0
- package/src/hooks/clipboard/useClipboard.js +26 -0
- package/src/hooks/index.js +2 -0
- package/src/icons/grid-block.svg +11 -0
- package/src/middleware/Api.test.js +54 -0
- package/src/middleware/api.js +24 -6
- package/src/middleware/index.js +2 -2
- package/src/reducers/actions/actions.js +8 -6
- package/src/reducers/actions/actions.test.js +70 -0
- package/src/reducers/breadcrumbs/breadcrumbs.js +1 -1
- package/src/reducers/index.js +2 -0
- package/src/reducers/navigation/navigation.js +1 -1
- package/src/reducers/relations/relations.js +173 -0
- package/src/reducers/types/types.js +1 -1
- package/src/routes.js +14 -0
- package/src/server.jsx +28 -23
- package/src/start-server.js +2 -2
- package/test-setup-config.js +2 -0
- package/theme/themes/pastanaga/extras/blocks.less +3 -1
- package/theme/themes/pastanaga/extras/contents.less +1 -0
- package/theme/themes/pastanaga/extras/grid.less +426 -0
- package/theme/themes/pastanaga/extras/main.less +3 -1
- package/theme/themes/pastanaga/extras/search.less +6 -0
- package/theme/themes/pastanaga/extras/sidebar.less +4 -0
- package/theme/themes/pastanaga/extras/toc.less +29 -0
- package/theme/themes/pastanaga/extras/userscontrolpanel.less +99 -76
- package/.changelog.draft +0 -31
- package/.editorconfig +0 -36
- package/.storybook/main.js +0 -127
- package/.storybook/manager.js +0 -15
- package/.storybook/preview.js +0 -21
- package/.storybook/static/previewImage.svg +0 -48
- package/.yarnrc.yml +0 -5
- package/jsdoc.json +0 -16
- package/netlify.toml +0 -5
- package/pyvenv.cfg +0 -3
- package/share/man/man1/ttx.1 +0 -225
- package/src/components/theme/Header/Header.md +0 -27
- package/towncrier.toml +0 -33
package/CONTRIBUTING.md
CHANGED
package/README.md
CHANGED
|
@@ -86,7 +86,7 @@ cd myvoltoproject
|
|
|
86
86
|
You can bootstrap a ready Docker Plone container with all the dependencies and ready for Volto use. We recommend to use the Plone docker builds based in `pip` [plone/plone-backend](https://github.com/plone/plone-backend) image:
|
|
87
87
|
|
|
88
88
|
```shell
|
|
89
|
-
docker run -it --rm --name=plone -p 8080:8080 -e SITE=Plone -e PROFILES="plone.volto:default-homepage" plone/plone-backend:6.0.
|
|
89
|
+
docker run -it --rm --name=plone -p 8080:8080 -e SITE=Plone -e PROFILES="plone.volto:default-homepage" plone/plone-backend:6.0.5
|
|
90
90
|
```
|
|
91
91
|
|
|
92
92
|
or as an alternative if you have experience with Plone and you have all the
|
|
@@ -182,23 +182,20 @@ Please create a new [issue](https://github.com/plone/volto/issues/new) or [pull
|
|
|
182
182
|
|
|
183
183
|
## Documentation
|
|
184
184
|
|
|
185
|
-
You can find the latest (in-progress) documentation in [https://6.
|
|
185
|
+
You can find the latest (in-progress) documentation in [https://6.docs.plone.org/](https://6.docs.plone.org/volto/index.html)
|
|
186
186
|
|
|
187
187
|
## Training
|
|
188
188
|
|
|
189
|
-
On the [Plone
|
|
190
|
-
Volto-dedicated open training materials, plus React and other
|
|
191
|
-
JavaScript-centered trainings.
|
|
189
|
+
On the [Plone Training website](https://training.plone.org), you'll find Volto-dedicated training materials, plus other JavaScript-centered trainings.
|
|
192
190
|
|
|
193
191
|
- [Mastering Plone 6 Development](https://training.plone.org/mastering-plone/)
|
|
194
192
|
The comprehensive training on Plone 6 with best practice tips for developers and integrators.
|
|
195
|
-
- [Volto](https://training.plone.org/5/volto/index.html)
|
|
196
|
-
A detailed training on how to create your own website using Volto frontend.
|
|
197
193
|
- [Volto Hands-On](https://training.plone.org/voltohandson/index.html)
|
|
198
194
|
- [Volto Add-ons Development](https://training.plone.org/voltoaddons/index.html)
|
|
199
|
-
- [
|
|
200
|
-
- [
|
|
201
|
-
- [
|
|
195
|
+
- [Effective Volto](https://training.plone.org/effective-volto/index.html)
|
|
196
|
+
- [Plone Deployment](https://training.plone.org/plone-deployment/index.html)
|
|
197
|
+
- [Volto](https://2022.training.plone.org/volto/index.html) (archived)
|
|
198
|
+
- [JavaScript For Plone Developers](https://2022.training.plone.org/javascript/index.html) (archived)
|
|
202
199
|
|
|
203
200
|
## Talks
|
|
204
201
|
|
|
@@ -245,7 +242,7 @@ We do not guarantee that deprecated browsers (e.g., Internet Explorer 11) are su
|
|
|
245
242
|
|
|
246
243
|
## Upgrades
|
|
247
244
|
|
|
248
|
-
You can find the upgrade guide here: https://6.
|
|
245
|
+
You can find the upgrade guide here: https://6.docs.plone.org/volto/upgrade-guide/index.html
|
|
249
246
|
|
|
250
247
|
## Volto Development
|
|
251
248
|
|
|
@@ -269,7 +266,7 @@ yarn
|
|
|
269
266
|
Either using a Docker command:
|
|
270
267
|
|
|
271
268
|
```shell
|
|
272
|
-
docker run -it --rm --name=plone -p 8080:8080 -e SITE=Plone -e PROFILES="plone.volto:default-homepage" plone/plone-backend:6.0.
|
|
269
|
+
docker run -it --rm --name=plone -p 8080:8080 -e SITE=Plone -e PROFILES="plone.volto:default-homepage" plone/plone-backend:6.0.5
|
|
273
270
|
```
|
|
274
271
|
|
|
275
272
|
or using the convenience makefile command:
|
|
@@ -320,11 +317,11 @@ yarn test
|
|
|
320
317
|
|
|
321
318
|
Here you can find a guide on how acceptance testing is done in Volto:
|
|
322
319
|
|
|
323
|
-
https://6.
|
|
320
|
+
https://6.docs.plone.org/volto/developer-guidelines/acceptance-tests.html
|
|
324
321
|
|
|
325
322
|
## Translations
|
|
326
323
|
|
|
327
|
-
If you would like contribute to translate Volto into several languages, please, read the [Internationalization (i18n) guide](https://6.
|
|
324
|
+
If you would like contribute to translate Volto into several languages, please, read the [Internationalization (i18n) guide](https://6.docs.plone.org/volto/recipes/i18n.html).
|
|
328
325
|
|
|
329
326
|
## Contributors
|
|
330
327
|
|
package/addon-registry.js
CHANGED
|
@@ -130,6 +130,11 @@ class AddonConfigurationRegistry {
|
|
|
130
130
|
this.packages = {};
|
|
131
131
|
this.customizations = new Map();
|
|
132
132
|
|
|
133
|
+
// Theme from a package.json key, from volto.config.js or from an ENV VAR
|
|
134
|
+
// Programatically via volto.config.js wins or the ENV VAR if present
|
|
135
|
+
this.theme =
|
|
136
|
+
packageJson.theme || this.voltoConfigJS.theme || process.env.THEME;
|
|
137
|
+
|
|
133
138
|
this.initDevelopmentPackages();
|
|
134
139
|
this.initPublishedPackages();
|
|
135
140
|
this.initAddonsFromEnvVar();
|
|
@@ -354,6 +359,35 @@ class AddonConfigurationRegistry {
|
|
|
354
359
|
.filter((e) => e);
|
|
355
360
|
}
|
|
356
361
|
|
|
362
|
+
getCustomThemeAddons() {
|
|
363
|
+
const customThemeAddonsInfo = {
|
|
364
|
+
variables: [],
|
|
365
|
+
main: [],
|
|
366
|
+
};
|
|
367
|
+
|
|
368
|
+
this.getAddonDependencies().forEach((addon) => {
|
|
369
|
+
const normalizedAddonName = addon.split(':')[0];
|
|
370
|
+
// We have two possible insertion points, variables and main
|
|
371
|
+
|
|
372
|
+
const customThemeVariables = `${this.packages[normalizedAddonName].modulePath}/theme/_variables.scss`;
|
|
373
|
+
const customThemeMain = `${this.packages[normalizedAddonName].modulePath}/theme/_main.scss`;
|
|
374
|
+
if (
|
|
375
|
+
fs.existsSync(customThemeVariables) &&
|
|
376
|
+
normalizedAddonName !== this.theme
|
|
377
|
+
) {
|
|
378
|
+
customThemeAddonsInfo.variables.push(normalizedAddonName);
|
|
379
|
+
}
|
|
380
|
+
if (
|
|
381
|
+
fs.existsSync(customThemeMain) &&
|
|
382
|
+
normalizedAddonName !== this.theme
|
|
383
|
+
) {
|
|
384
|
+
customThemeAddonsInfo.main.push(normalizedAddonName);
|
|
385
|
+
}
|
|
386
|
+
});
|
|
387
|
+
|
|
388
|
+
return customThemeAddonsInfo;
|
|
389
|
+
}
|
|
390
|
+
|
|
357
391
|
/**
|
|
358
392
|
* Returns a mapping name:diskpath to be uses in webpack's resolve aliases
|
|
359
393
|
*/
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
const path = require('path');
|
|
2
|
+
const fs = require('fs');
|
|
3
|
+
const tmp = require('tmp');
|
|
4
|
+
const cryptoRandomString = require('crypto-random-string');
|
|
5
|
+
|
|
6
|
+
const titleCase = (w) => w.slice(0, 1).toUpperCase() + w.slice(1, w.length);
|
|
7
|
+
|
|
8
|
+
/*
|
|
9
|
+
* Transforms a package name to javascript variable name
|
|
10
|
+
*/
|
|
11
|
+
function nameFromPackage(name) {
|
|
12
|
+
name =
|
|
13
|
+
name.replace(/[@~./\\:\s]/gi, '') ||
|
|
14
|
+
cryptoRandomString({ length: 10, characters: 'abcdefghijk' });
|
|
15
|
+
return name
|
|
16
|
+
.split('-')
|
|
17
|
+
.map((w, i) => (i > 0 ? titleCase(w) : w))
|
|
18
|
+
.join('');
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/*
|
|
22
|
+
* Creates a static file with code necessary to load the addons configuration
|
|
23
|
+
*
|
|
24
|
+
*/
|
|
25
|
+
function getAddonsLoaderCode(name, customThemeAddons = []) {
|
|
26
|
+
let buf = `/*
|
|
27
|
+
This file is autogenerated. Don't change it directly.
|
|
28
|
+
Add a ./theme/_${name}.scss in your add-on to load your theme customizations in the current theme.
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
`;
|
|
32
|
+
customThemeAddons.forEach((addon) => {
|
|
33
|
+
const customization = `${addon}/theme/${name}`;
|
|
34
|
+
const line = `@import '${customization}';\n`;
|
|
35
|
+
buf += line;
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
return buf;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
module.exports = ({ main, variables }) => {
|
|
42
|
+
// const addonsThemeLoaderVariablesPath = path.join(
|
|
43
|
+
// process.cwd(),
|
|
44
|
+
// 'src',
|
|
45
|
+
// '_variables.scss',
|
|
46
|
+
// );
|
|
47
|
+
// const addonsThemeLoaderMainPath = path.join(
|
|
48
|
+
// process.cwd(),
|
|
49
|
+
// 'src',
|
|
50
|
+
// '_main.scss',
|
|
51
|
+
// );
|
|
52
|
+
|
|
53
|
+
// const addonsThemeLoaderVariablesPath = path.join(
|
|
54
|
+
// process.cwd(),
|
|
55
|
+
// 'src',
|
|
56
|
+
// '_variables.scss',
|
|
57
|
+
// );
|
|
58
|
+
// const addonsThemeLoaderMainPath = path.join(
|
|
59
|
+
// process.cwd(),
|
|
60
|
+
// 'src',
|
|
61
|
+
// '_main.scss',
|
|
62
|
+
// );
|
|
63
|
+
|
|
64
|
+
const addonsThemeLoaderVariablesPath = tmp.tmpNameSync({ postfix: '.scss' });
|
|
65
|
+
const addonsThemeLoaderMainPath = tmp.tmpNameSync({ postfix: '.scss' });
|
|
66
|
+
fs.writeFileSync(
|
|
67
|
+
addonsThemeLoaderVariablesPath,
|
|
68
|
+
new Buffer.from(getAddonsLoaderCode('variables', variables)),
|
|
69
|
+
);
|
|
70
|
+
fs.writeFileSync(
|
|
71
|
+
addonsThemeLoaderMainPath,
|
|
72
|
+
new Buffer.from(getAddonsLoaderCode('main', main)),
|
|
73
|
+
);
|
|
74
|
+
|
|
75
|
+
return [addonsThemeLoaderVariablesPath, addonsThemeLoaderMainPath];
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
module.exports.getAddonsLoaderCode = getAddonsLoaderCode;
|
|
79
|
+
module.exports.nameFromPackage = nameFromPackage;
|
|
@@ -21,6 +21,23 @@ const ploneAuthObj = {
|
|
|
21
21
|
pass: ploneAuth[1],
|
|
22
22
|
};
|
|
23
23
|
|
|
24
|
+
// --- isInViewport ----------------------------------------------------------
|
|
25
|
+
Cypress.Commands.add('isInViewport', (element) => {
|
|
26
|
+
cy.get(element).then(($el) => {
|
|
27
|
+
const windowInnerWidth = Cypress.config(`viewportWidth`);
|
|
28
|
+
const windowInnerHeight = Cypress.config(`viewportHeight`);
|
|
29
|
+
const rect = $el[0].getBoundingClientRect();
|
|
30
|
+
|
|
31
|
+
const rightBoundOfWindow = windowInnerWidth;
|
|
32
|
+
const bottomBoundOfWindow = windowInnerHeight;
|
|
33
|
+
|
|
34
|
+
expect(rect.top).to.be.at.least(0);
|
|
35
|
+
expect(rect.left).to.be.at.least(0);
|
|
36
|
+
expect(rect.right).to.be.lessThan(rightBoundOfWindow);
|
|
37
|
+
expect(rect.bottom).to.be.lessThan(bottomBoundOfWindow);
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
|
|
24
41
|
// --- AUTOLOGIN -------------------------------------------------------------
|
|
25
42
|
Cypress.Commands.add('autologin', (usr, pass) => {
|
|
26
43
|
let api_url, user, password;
|
|
@@ -671,10 +688,7 @@ Cypress.Commands.add(
|
|
|
671
688
|
Cypress.Commands.add('toolbarSave', () => {
|
|
672
689
|
// Save
|
|
673
690
|
cy.get('#toolbar-save', { timeout: 10000 }).click();
|
|
674
|
-
cy.waitForResourceToLoad('
|
|
675
|
-
cy.waitForResourceToLoad('@breadcrumbs');
|
|
676
|
-
cy.waitForResourceToLoad('@actions');
|
|
677
|
-
cy.waitForResourceToLoad('@types');
|
|
691
|
+
cy.waitForResourceToLoad('');
|
|
678
692
|
});
|
|
679
693
|
|
|
680
694
|
Cypress.Commands.add('clearSlate', (selector) => {
|
|
@@ -705,6 +719,20 @@ Cypress.Commands.add('getSlate', (createNewSlate = false) => {
|
|
|
705
719
|
return slate;
|
|
706
720
|
});
|
|
707
721
|
|
|
722
|
+
Cypress.Commands.add('getSlateSelector', (selector = SLATE_SELECTOR) => {
|
|
723
|
+
let slate;
|
|
724
|
+
cy.getIfExists(
|
|
725
|
+
selector,
|
|
726
|
+
() => {
|
|
727
|
+
slate = cy.get(selector).last();
|
|
728
|
+
},
|
|
729
|
+
() => {
|
|
730
|
+
slate = cy.get(selector, { timeout: 10000 }).last();
|
|
731
|
+
},
|
|
732
|
+
);
|
|
733
|
+
return slate;
|
|
734
|
+
});
|
|
735
|
+
|
|
708
736
|
Cypress.Commands.add('getSlateTitle', () => {
|
|
709
737
|
return cy.get(SLATE_TITLE_SELECTOR, {
|
|
710
738
|
timeout: 10000,
|
|
@@ -763,6 +791,10 @@ Cypress.Commands.add('getSlateEditorAndType', (type) => {
|
|
|
763
791
|
cy.getSlate().focus().click().type(type);
|
|
764
792
|
});
|
|
765
793
|
|
|
794
|
+
Cypress.Commands.add('getSlateEditorSelectorAndType', (selector, type) => {
|
|
795
|
+
cy.getSlateSelector(selector).focus().click().type(type);
|
|
796
|
+
});
|
|
797
|
+
|
|
766
798
|
Cypress.Commands.add('setSlateCursor', (subject, query, endQuery) => {
|
|
767
799
|
cy.get('.slate-editor.selected [contenteditable=true]')
|
|
768
800
|
.focus()
|
|
@@ -849,3 +881,23 @@ Cypress.Commands.add('getTableSlate', (header = false) => {
|
|
|
849
881
|
);
|
|
850
882
|
return slate;
|
|
851
883
|
});
|
|
884
|
+
|
|
885
|
+
Cypress.Commands.add('configureListingWith', (contentType) => {
|
|
886
|
+
cy.get('.sidebar-container .tabs-wrapper .menu .item')
|
|
887
|
+
.contains('Block')
|
|
888
|
+
.click();
|
|
889
|
+
cy.get('.querystring-widget .fields').contains('Add criteria').click();
|
|
890
|
+
cy.get(
|
|
891
|
+
'.querystring-widget .fields:first-of-type .field:first-of-type .react-select__menu .react-select__option',
|
|
892
|
+
)
|
|
893
|
+
.contains('Type')
|
|
894
|
+
.click();
|
|
895
|
+
|
|
896
|
+
//insert Page
|
|
897
|
+
cy.get('.querystring-widget .fields:first-of-type > .field').click();
|
|
898
|
+
cy.get(
|
|
899
|
+
'.querystring-widget .fields:first-of-type > .field .react-select__menu .react-select__option',
|
|
900
|
+
)
|
|
901
|
+
.contains(contentType)
|
|
902
|
+
.click();
|
|
903
|
+
});
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export const slateBeforeEach = (contentType = 'Document') => {
|
|
2
|
+
cy.intercept('GET', `/**/*?expand*`).as('content');
|
|
2
3
|
cy.autologin();
|
|
3
4
|
cy.createContent({
|
|
4
5
|
contentType: contentType,
|
|
@@ -6,12 +7,10 @@ export const slateBeforeEach = (contentType = 'Document') => {
|
|
|
6
7
|
contentTitle: 'My Page',
|
|
7
8
|
});
|
|
8
9
|
cy.visit('/my-page');
|
|
9
|
-
cy.
|
|
10
|
-
|
|
11
|
-
cy.waitForResourceToLoad('@actions');
|
|
12
|
-
cy.waitForResourceToLoad('@types');
|
|
13
|
-
cy.waitForResourceToLoad('my-page');
|
|
10
|
+
cy.wait('@content');
|
|
11
|
+
|
|
14
12
|
cy.navigate('/my-page/edit');
|
|
13
|
+
cy.wait('@content');
|
|
15
14
|
};
|
|
16
15
|
|
|
17
16
|
export const getSelectedSlateEditor = () => {
|