@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
|
@@ -6,8 +6,9 @@
|
|
|
6
6
|
import React from 'react';
|
|
7
7
|
import PropTypes from 'prop-types';
|
|
8
8
|
import { UniversalLink } from '@plone/volto/components';
|
|
9
|
-
import { Container, Table } from 'semantic-ui-react';
|
|
9
|
+
import { Container as SemanticContainer, Table } from 'semantic-ui-react';
|
|
10
10
|
import { FormattedMessage } from 'react-intl';
|
|
11
|
+
import config from '@plone/volto/registry';
|
|
11
12
|
|
|
12
13
|
/**
|
|
13
14
|
* Tabular view component class.
|
|
@@ -15,59 +16,64 @@ import { FormattedMessage } from 'react-intl';
|
|
|
15
16
|
* @param {Object} content Content object.
|
|
16
17
|
* @returns {string} Markup of the component.
|
|
17
18
|
*/
|
|
18
|
-
const TabularView = ({ content }) =>
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
<Table.
|
|
35
|
-
<
|
|
36
|
-
id="
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
<
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
<Table.Row key={item.url}>
|
|
51
|
-
<Table.Cell>
|
|
52
|
-
<UniversalLink
|
|
53
|
-
item={item}
|
|
54
|
-
className="summary url"
|
|
55
|
-
title={item['@type']}
|
|
56
|
-
>
|
|
57
|
-
{item.title}
|
|
58
|
-
</UniversalLink>
|
|
59
|
-
</Table.Cell>
|
|
60
|
-
<Table.Cell>{item.description}</Table.Cell>
|
|
61
|
-
<Table.Cell>{item['@type']}</Table.Cell>
|
|
62
|
-
<Table.Cell>{item.review_state}</Table.Cell>
|
|
19
|
+
const TabularView = ({ content }) => {
|
|
20
|
+
const Container =
|
|
21
|
+
config.getComponent({ name: 'Container' }).component || SemanticContainer;
|
|
22
|
+
|
|
23
|
+
return (
|
|
24
|
+
<Container className="view-wrapper">
|
|
25
|
+
<article id="content">
|
|
26
|
+
<header>
|
|
27
|
+
<h1 className="documentFirstHeading">{content.title}</h1>
|
|
28
|
+
{content.description && (
|
|
29
|
+
<p className="documentDescription">{content.description}</p>
|
|
30
|
+
)}
|
|
31
|
+
</header>
|
|
32
|
+
<section id="content-core">
|
|
33
|
+
<Table celled padded>
|
|
34
|
+
<Table.Header>
|
|
35
|
+
<Table.Row>
|
|
36
|
+
<Table.HeaderCell>
|
|
37
|
+
<FormattedMessage id="Title" defaultMessage="Title" />
|
|
38
|
+
</Table.HeaderCell>
|
|
39
|
+
<Table.HeaderCell>
|
|
40
|
+
<FormattedMessage
|
|
41
|
+
id="Description"
|
|
42
|
+
defaultMessage="Description"
|
|
43
|
+
/>
|
|
44
|
+
</Table.HeaderCell>
|
|
45
|
+
<Table.HeaderCell>
|
|
46
|
+
<FormattedMessage id="Type" defaultMessage="Type" />
|
|
47
|
+
</Table.HeaderCell>
|
|
48
|
+
<Table.HeaderCell>
|
|
49
|
+
<FormattedMessage id="State" defaultMessage="State" />
|
|
50
|
+
</Table.HeaderCell>
|
|
63
51
|
</Table.Row>
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
52
|
+
</Table.Header>
|
|
53
|
+
<Table.Body>
|
|
54
|
+
{content.items.map((item) => (
|
|
55
|
+
<Table.Row key={item.url}>
|
|
56
|
+
<Table.Cell>
|
|
57
|
+
<UniversalLink
|
|
58
|
+
item={item}
|
|
59
|
+
className="summary url"
|
|
60
|
+
title={item['@type']}
|
|
61
|
+
>
|
|
62
|
+
{item.title}
|
|
63
|
+
</UniversalLink>
|
|
64
|
+
</Table.Cell>
|
|
65
|
+
<Table.Cell>{item.description}</Table.Cell>
|
|
66
|
+
<Table.Cell>{item['@type']}</Table.Cell>
|
|
67
|
+
<Table.Cell>{item.review_state}</Table.Cell>
|
|
68
|
+
</Table.Row>
|
|
69
|
+
))}
|
|
70
|
+
</Table.Body>
|
|
71
|
+
</Table>
|
|
72
|
+
</section>
|
|
73
|
+
</article>
|
|
74
|
+
</Container>
|
|
75
|
+
);
|
|
76
|
+
};
|
|
71
77
|
|
|
72
78
|
/**
|
|
73
79
|
* Property types.
|
|
@@ -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
|
|
@@ -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
|
-
|
|
10
|
-
<
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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
|
''
|
package/src/config/Blocks.jsx
CHANGED
|
@@ -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
|
|
|
@@ -458,6 +467,27 @@ const blocksConfig = {
|
|
|
458
467
|
},
|
|
459
468
|
},
|
|
460
469
|
},
|
|
470
|
+
// This next block is not named just grid for some reasons:
|
|
471
|
+
// 1.- Naming it grid will collide with the SemanticUI CSS of the Grid component
|
|
472
|
+
// 2.- It would prevent the transition from the old grid
|
|
473
|
+
// (based on @kitconcept/volto-blocks-grid) without having to perform any migration.
|
|
474
|
+
// This way, both can co-exist at the same time.
|
|
475
|
+
gridBlock: {
|
|
476
|
+
id: 'gridBlock',
|
|
477
|
+
title: 'Grid',
|
|
478
|
+
icon: gridSVG,
|
|
479
|
+
group: 'common',
|
|
480
|
+
view: GridBlockView,
|
|
481
|
+
edit: GridBlockEdit,
|
|
482
|
+
blockSchema: GridBlockSchema,
|
|
483
|
+
dataAdapter: GridBlockDataAdapter,
|
|
484
|
+
restricted: false,
|
|
485
|
+
mostUsed: true,
|
|
486
|
+
sidebarTab: 1,
|
|
487
|
+
templates: GridTemplates,
|
|
488
|
+
maxLength: 4,
|
|
489
|
+
allowedBlocks: ['image', 'listing', 'slate', 'teaser'],
|
|
490
|
+
},
|
|
461
491
|
teaser: {
|
|
462
492
|
id: 'teaser',
|
|
463
493
|
title: 'Teaser',
|
|
@@ -481,6 +511,20 @@ const blocksConfig = {
|
|
|
481
511
|
},
|
|
482
512
|
};
|
|
483
513
|
|
|
514
|
+
// This is required in order to initialize the inner blocksConfig
|
|
515
|
+
// for the grid block, since we need to modify how the inner teaser
|
|
516
|
+
// block behave in it (= no schemaEnhancer fields for teasers inside a grid)
|
|
517
|
+
// Afterwards, it can be further customized in add-ons using the same technique.
|
|
518
|
+
blocksConfig.gridBlock.blocksConfig = { ...blocksConfig };
|
|
519
|
+
blocksConfig.gridBlock.blocksConfig.teaser = {
|
|
520
|
+
...blocksConfig.teaser,
|
|
521
|
+
schemaEnhancer: gridTeaserDisableStylingSchema,
|
|
522
|
+
};
|
|
523
|
+
blocksConfig.gridBlock.blocksConfig.image = {
|
|
524
|
+
...blocksConfig.image,
|
|
525
|
+
schemaEnhancer: gridImageDisableSizeAndPositionHandlersSchema,
|
|
526
|
+
};
|
|
527
|
+
|
|
484
528
|
const requiredBlocks = ['title'];
|
|
485
529
|
|
|
486
530
|
const initialBlocks = {};
|
|
@@ -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) => {
|
|
@@ -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;
|
|
@@ -27,4 +27,4 @@ export default (props) => {
|
|
|
27
27
|
const listBlockTypes = ['unordered-list-item', 'ordered-list-item'];
|
|
28
28
|
|
|
29
29
|
return { extendedBlockRenderMap, blockStyleFn, listBlockTypes };
|
|
30
|
-
}
|
|
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
|
|
package/src/config/Widgets.jsx
CHANGED
|
@@ -98,6 +98,7 @@ export const widgetMapping = {
|
|
|
98
98
|
select_querystring_field: SelectMetadataWidget,
|
|
99
99
|
autocomplete: SelectAutoComplete,
|
|
100
100
|
color_picker: ColorPickerWidget,
|
|
101
|
+
select: SelectWidget,
|
|
101
102
|
},
|
|
102
103
|
vocabulary: {
|
|
103
104
|
'plone.app.vocabularies.Catalog': ObjectBrowserWidget,
|
|
@@ -147,6 +148,7 @@ export const widgetMapping = {
|
|
|
147
148
|
title: TitleViewWidget,
|
|
148
149
|
url: UrlViewWidget,
|
|
149
150
|
internal_url: InternalUrlWidget,
|
|
151
|
+
object: () => '', // TODO: Not implemented yet: Object View widget
|
|
150
152
|
},
|
|
151
153
|
vocabulary: {},
|
|
152
154
|
choices: SelectViewWidget,
|
package/src/config/index.js
CHANGED
|
@@ -74,8 +74,11 @@ let config = {
|
|
|
74
74
|
port,
|
|
75
75
|
// The URL Volto is going to be served (see sensible defaults above)
|
|
76
76
|
publicURL,
|
|
77
|
+
okRoute: '/ok',
|
|
77
78
|
apiPath,
|
|
78
79
|
apiExpanders: [
|
|
80
|
+
// Added here for documentation purposes, addded at the end because it
|
|
81
|
+
// depends on a value of this object.
|
|
79
82
|
// Add the following expanders for only issuing a single request.
|
|
80
83
|
// https://6.docs.plone.org/volto/configuration/settings-reference.html#term-apiExpanders
|
|
81
84
|
// {
|
|
@@ -150,6 +153,7 @@ let config = {
|
|
|
150
153
|
},
|
|
151
154
|
appExtras: [],
|
|
152
155
|
maxResponseSize: 2000000000, // This is superagent default (200 mb)
|
|
156
|
+
maxFileUploadSize: null,
|
|
153
157
|
serverConfig,
|
|
154
158
|
storeExtenders: [],
|
|
155
159
|
showTags: true,
|
|
@@ -180,6 +184,10 @@ let config = {
|
|
|
180
184
|
styleClassNameConverters,
|
|
181
185
|
hashLinkSmoothScroll: false,
|
|
182
186
|
styleClassNameExtenders,
|
|
187
|
+
querystringSearchGet: false,
|
|
188
|
+
blockSettingsTabFieldsetsInitialStateOpen: true,
|
|
189
|
+
excludeLinksAndReferencesMenuItem: false,
|
|
190
|
+
containerBlockTypes: ['gridBlock'],
|
|
183
191
|
},
|
|
184
192
|
experimental: {
|
|
185
193
|
addBlockButton: {
|
|
@@ -210,6 +218,22 @@ let config = {
|
|
|
210
218
|
components,
|
|
211
219
|
};
|
|
212
220
|
|
|
221
|
+
// The apiExpanders depends on a config of the object, so it's done here
|
|
222
|
+
config.settings.apiExpanders = [
|
|
223
|
+
...config.settings.apiExpanders,
|
|
224
|
+
{
|
|
225
|
+
match: '',
|
|
226
|
+
GET_CONTENT: ['breadcrumbs', 'actions', 'types'],
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
match: '',
|
|
230
|
+
GET_CONTENT: ['navigation'],
|
|
231
|
+
querystring: (config) => ({
|
|
232
|
+
'expand.navigation.depth': config.settings.navDepth,
|
|
233
|
+
}),
|
|
234
|
+
},
|
|
235
|
+
];
|
|
236
|
+
|
|
213
237
|
ConfigRegistry.settings = config.settings;
|
|
214
238
|
ConfigRegistry.experimental = config.experimental;
|
|
215
239
|
ConfigRegistry.blocks = config.blocks;
|
package/src/config/server.js
CHANGED
|
@@ -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,10 @@ 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 REBUILD_RELATIONS = 'REBUILD_RELATIONS';
|
|
39
43
|
export const GET_SCHEMA = 'GET_SCHEMA';
|
|
40
44
|
export const POST_SCHEMA = 'POST_SCHEMA';
|
|
41
45
|
export const PUT_SCHEMA = 'PUT_SCHEMA';
|
package/src/constants/Indexes.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* @module constants/indexes
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
|
|
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
|
-
|
|
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
|
-
|
|
15
|
-
it: 'Italian',
|
|
16
|
-
eu: 'Euskara',
|
|
20
|
+
zh_CN: '中文',
|
|
17
21
|
};
|
|
@@ -9,7 +9,7 @@ const HEADERS = [
|
|
|
9
9
|
'Content-Type',
|
|
10
10
|
];
|
|
11
11
|
|
|
12
|
-
function
|
|
12
|
+
function filesMiddlewareFn(req, res, next) {
|
|
13
13
|
getAPIResourceWithAuth(req)
|
|
14
14
|
.then((resource) => {
|
|
15
15
|
// Just forward the headers that we need
|
|
@@ -24,10 +24,10 @@ function fileMiddleware(req, res, next) {
|
|
|
24
24
|
.catch(next);
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
export default function () {
|
|
27
|
+
export default function filesMiddleware() {
|
|
28
28
|
const middleware = express.Router();
|
|
29
29
|
|
|
30
|
-
middleware.all(['**/@@download/*', '**/@@display-file/*'],
|
|
30
|
+
middleware.all(['**/@@download/*', '**/@@display-file/*'], filesMiddlewareFn);
|
|
31
31
|
middleware.id = 'filesResourcesProcessor';
|
|
32
32
|
return middleware;
|
|
33
33
|
}
|
|
@@ -3,7 +3,7 @@ import { getAPIResourceWithAuth } from '@plone/volto/helpers';
|
|
|
3
3
|
|
|
4
4
|
const HEADERS = ['content-type', 'content-disposition', 'cache-control'];
|
|
5
5
|
|
|
6
|
-
function
|
|
6
|
+
function imageMiddlewareFn(req, res, next) {
|
|
7
7
|
getAPIResourceWithAuth(req)
|
|
8
8
|
.then((resource) => {
|
|
9
9
|
// Just forward the headers that we need
|
|
@@ -17,11 +17,11 @@ function imageMiddleware(req, res, next) {
|
|
|
17
17
|
.catch(next);
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
export default function () {
|
|
20
|
+
export default function imagesMiddleware() {
|
|
21
21
|
const middleware = express.Router();
|
|
22
22
|
|
|
23
|
-
middleware.all(['**/@@images/*'],
|
|
24
|
-
middleware.all(['/@portrait/*'],
|
|
23
|
+
middleware.all(['**/@@images/*'], imageMiddlewareFn);
|
|
24
|
+
middleware.all(['/@portrait/*'], imageMiddlewareFn);
|
|
25
25
|
middleware.id = 'imageResourcesProcessor';
|
|
26
26
|
return middleware;
|
|
27
27
|
}
|
|
@@ -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 () {
|
|
12
|
+
const middleware = express.Router();
|
|
13
|
+
middleware.all(config?.settings?.okRoute || '/ok', ok);
|
|
14
|
+
middleware.id = 'ok';
|
|
15
|
+
return middleware;
|
|
16
|
+
}
|
|
@@ -22,7 +22,7 @@ const envRobots = function (req, res, next) {
|
|
|
22
22
|
res.send(process.env.VOLTO_ROBOTSTXT);
|
|
23
23
|
};
|
|
24
24
|
|
|
25
|
-
export default function () {
|
|
25
|
+
export default function robotstxtMiddleware() {
|
|
26
26
|
const middleware = express.Router();
|
|
27
27
|
if (process.env.VOLTO_ROBOTSTXT) {
|
|
28
28
|
middleware.all('**/robots.txt', envRobots);
|
|
@@ -1,12 +1,34 @@
|
|
|
1
1
|
import express from 'express';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
generateSitemap,
|
|
4
|
+
generateSitemapIndex,
|
|
5
|
+
SITEMAP_BATCH_SIZE,
|
|
6
|
+
} from '@plone/volto/helpers/Sitemap/Sitemap';
|
|
3
7
|
|
|
4
8
|
export const sitemap = function (req, res, next) {
|
|
5
|
-
|
|
9
|
+
let start = 0;
|
|
10
|
+
let size = undefined;
|
|
11
|
+
const { batch: batchStr } = req.params;
|
|
12
|
+
if (batchStr !== undefined) {
|
|
13
|
+
const batch = parseInt(batchStr);
|
|
14
|
+
if (isNaN(batch) || batch === 0 || '' + batch !== batchStr) {
|
|
15
|
+
res.status(404);
|
|
16
|
+
// Some data, such as the internal API address, may be sensitive to be published
|
|
17
|
+
res.send(
|
|
18
|
+
`Invalid sitemap name, use sitemap.xml.gz, or batched sitemapN.xml.gz where N is a positive integer.`,
|
|
19
|
+
);
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
start = SITEMAP_BATCH_SIZE * (batch - 1);
|
|
23
|
+
size = SITEMAP_BATCH_SIZE;
|
|
24
|
+
}
|
|
25
|
+
generateSitemap(req, start, size).then((sitemap) => {
|
|
6
26
|
if (Buffer.isBuffer(sitemap)) {
|
|
7
27
|
res.set('Content-Type', 'application/x-gzip');
|
|
8
|
-
res.set(
|
|
9
|
-
|
|
28
|
+
res.set(
|
|
29
|
+
'Content-Disposition',
|
|
30
|
+
`attachment; filename="sitemap${batchStr || ''}.xml.gz"`,
|
|
31
|
+
);
|
|
10
32
|
res.send(sitemap);
|
|
11
33
|
} else {
|
|
12
34
|
// {"errno":-111, "code":"ECONNREFUSED", "host": ...}
|
|
@@ -17,10 +39,20 @@ export const sitemap = function (req, res, next) {
|
|
|
17
39
|
});
|
|
18
40
|
};
|
|
19
41
|
|
|
20
|
-
export
|
|
42
|
+
export const sitemapIndex = function (req, res, next) {
|
|
43
|
+
generateSitemapIndex(req).then((sitemapIndex) => {
|
|
44
|
+
res.set('Content-Type', 'application/xml');
|
|
45
|
+
res.set('Content-Disposition', 'attachment; filename="sitemap-index.xml"');
|
|
46
|
+
res.send(sitemapIndex);
|
|
47
|
+
});
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
export default function sitemapMiddleware() {
|
|
21
51
|
const middleware = express.Router();
|
|
22
52
|
|
|
23
53
|
middleware.all('**/sitemap.xml.gz', sitemap);
|
|
54
|
+
middleware.all('**/sitemap:batch.xml.gz', sitemap);
|
|
55
|
+
middleware.all('**/sitemap-index.xml', sitemapIndex);
|
|
24
56
|
middleware.id = 'sitemap.xml.gz';
|
|
25
57
|
return middleware;
|
|
26
58
|
}
|
|
@@ -2,7 +2,7 @@ import express from 'express';
|
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import config from '@plone/volto/registry';
|
|
4
4
|
|
|
5
|
-
const
|
|
5
|
+
const staticMiddlewareFn = express.static(
|
|
6
6
|
process.env.BUILD_DIR
|
|
7
7
|
? path.join(process.env.BUILD_DIR, 'public')
|
|
8
8
|
: process.env.RAZZLE_PUBLIC_DIR,
|
|
@@ -24,9 +24,9 @@ const staticMiddleware = express.static(
|
|
|
24
24
|
},
|
|
25
25
|
);
|
|
26
26
|
|
|
27
|
-
export default function () {
|
|
27
|
+
export default function staticsMiddleware() {
|
|
28
28
|
const middleware = express.Router();
|
|
29
|
-
middleware.all('*',
|
|
29
|
+
middleware.all('*', staticMiddlewareFn);
|
|
30
30
|
middleware.id = 'staticResourcesProcessor';
|
|
31
31
|
return middleware;
|
|
32
32
|
}
|
package/src/helpers/Api/Api.js
CHANGED