@plone/volto 17.0.0-alpha.2 → 17.0.0-alpha.21
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 +549 -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 +58 -5
- package/cypress/support/e2e.js +1 -2
- package/cypress/support/volto-slate.js +4 -5
- package/docker-compose.yml +1 -1
- package/locales/ca/LC_MESSAGES/volto.po +282 -7
- package/locales/ca.json +1 -1
- package/locales/de/LC_MESSAGES/volto.po +301 -26
- package/locales/de.json +1 -1
- package/locales/en/LC_MESSAGES/volto.po +281 -6
- package/locales/en.json +1 -1
- package/locales/es/LC_MESSAGES/volto.po +291 -16
- package/locales/es.json +1 -1
- package/locales/eu/LC_MESSAGES/volto.po +282 -7
- package/locales/eu.json +1 -1
- package/locales/fi/LC_MESSAGES/volto.po +4891 -0
- package/locales/fi.json +1 -1
- package/locales/fr/LC_MESSAGES/volto.po +282 -7
- package/locales/fr.json +1 -1
- package/locales/it/LC_MESSAGES/volto.po +284 -9
- package/locales/it.json +1 -1
- package/locales/ja/LC_MESSAGES/volto.po +282 -7
- package/locales/ja.json +1 -1
- package/locales/nl/LC_MESSAGES/volto.po +937 -650
- package/locales/nl.json +1 -1
- package/locales/pt/LC_MESSAGES/volto.po +282 -7
- package/locales/pt.json +1 -1
- package/locales/pt_BR/LC_MESSAGES/volto.po +291 -16
- package/locales/pt_BR.json +1 -1
- package/locales/ro/LC_MESSAGES/volto.po +282 -7
- package/locales/ro.json +1 -1
- package/locales/volto.pot +282 -7
- package/locales/zh_CN/LC_MESSAGES/volto.po +282 -7
- package/locales/zh_CN.json +1 -1
- package/package.json +8 -6
- 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 +3 -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 +51 -12
- package/src/components/manage/Blocks/Image/Edit.test.jsx +2 -0
- package/src/components/manage/Blocks/Image/ImageSidebar.jsx +66 -16
- package/src/components/manage/Blocks/Image/View.jsx +25 -5
- package/src/components/manage/Blocks/Image/View.test.jsx +20 -0
- package/src/components/manage/Blocks/Image/schema.js +12 -9
- package/src/components/manage/Blocks/Image/utils.js +14 -0
- package/src/components/manage/Blocks/LeadImage/Edit.jsx +32 -10
- package/src/components/manage/Blocks/LeadImage/Edit.test.jsx +11 -1
- package/src/components/manage/Blocks/LeadImage/LeadImageSidebar.jsx +28 -9
- package/src/components/manage/Blocks/LeadImage/LeadImageSidebar.test.jsx +8 -2
- package/src/components/manage/Blocks/LeadImage/View.jsx +50 -38
- package/src/components/manage/Blocks/LeadImage/View.test.jsx +11 -1
- 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/SummaryTemplate.jsx +1 -1
- 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 +5 -10
- 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 +47 -32
- 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/Sidebar/AlignBlock.jsx +1 -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/Image/Image.jsx +96 -0
- package/src/components/theme/Image/Image.test.jsx +125 -0
- 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 +4 -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/PreviewImage/PreviewImage.jsx +25 -14
- package/src/components/theme/PreviewImage/PreviewImage.test.js +39 -16
- 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 +20 -16
- 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 +36 -25
- package/src/components/theme/View/FileView.jsx +23 -18
- package/src/components/theme/View/ImageView.jsx +40 -32
- package/src/components/theme/View/ImageView.test.jsx +4 -0
- package/src/components/theme/View/LinkView.jsx +53 -78
- package/src/components/theme/View/ListingView.jsx +36 -28
- package/src/components/theme/View/NewsItemView.jsx +16 -17
- 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 +49 -39
- 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 +46 -0
- package/src/config/Components.jsx +2 -1
- 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 +49 -7
- package/src/helpers/Url/Url.test.js +67 -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 +11 -1
- package/theme/themes/pastanaga/extras/blocks.less +5 -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 +8 -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/manage/Blocks/Teaser/utils.js +0 -44
- package/src/components/manage/Blocks/Teaser/utils.test.jsx +0 -229
- package/src/components/theme/Header/Header.md +0 -27
- package/towncrier.toml +0 -33
|
@@ -6,13 +6,13 @@
|
|
|
6
6
|
import React, { Component } from 'react';
|
|
7
7
|
import PropTypes from 'prop-types';
|
|
8
8
|
import { map, remove } from 'lodash';
|
|
9
|
-
import { Button,
|
|
10
|
-
import { Portal } from 'react-portal';
|
|
9
|
+
import { Button, Table } from 'semantic-ui-react';
|
|
11
10
|
import cx from 'classnames';
|
|
12
|
-
import {
|
|
11
|
+
import { defineMessages, injectIntl } from 'react-intl';
|
|
13
12
|
|
|
14
13
|
import Cell from './Cell';
|
|
15
|
-
import {
|
|
14
|
+
import { BlockDataForm, Icon, SidebarPortal } from '@plone/volto/components';
|
|
15
|
+
import TableSchema from './schema';
|
|
16
16
|
|
|
17
17
|
import rowBeforeSVG from '@plone/volto/icons/row-before.svg';
|
|
18
18
|
import rowAfterSVG from '@plone/volto/icons/row-after.svg';
|
|
@@ -130,42 +130,6 @@ const messages = defineMessages({
|
|
|
130
130
|
id: 'Delete col',
|
|
131
131
|
defaultMessage: 'Delete col',
|
|
132
132
|
},
|
|
133
|
-
hideHeaders: {
|
|
134
|
-
id: 'Hide headers',
|
|
135
|
-
defaultMessage: 'Hide headers',
|
|
136
|
-
},
|
|
137
|
-
sortable: {
|
|
138
|
-
id: 'Make the table sortable',
|
|
139
|
-
defaultMessage: 'Make the table sortable',
|
|
140
|
-
},
|
|
141
|
-
sortableDescription: {
|
|
142
|
-
id: 'Visible only in view mode',
|
|
143
|
-
defaultMessage: 'Visible only in view mode',
|
|
144
|
-
},
|
|
145
|
-
fixed: {
|
|
146
|
-
id: 'Fixed width table cells',
|
|
147
|
-
defaultMessage: 'Fixed width table cells',
|
|
148
|
-
},
|
|
149
|
-
compact: {
|
|
150
|
-
id: 'Make the table compact',
|
|
151
|
-
defaultMessage: 'Make the table compact',
|
|
152
|
-
},
|
|
153
|
-
basic: {
|
|
154
|
-
id: 'Reduce complexity',
|
|
155
|
-
defaultMessage: 'Reduce complexity',
|
|
156
|
-
},
|
|
157
|
-
celled: {
|
|
158
|
-
id: 'Divide each row into separate cells',
|
|
159
|
-
defaultMessage: 'Divide each row into separate cells',
|
|
160
|
-
},
|
|
161
|
-
inverted: {
|
|
162
|
-
id: 'Table color inverted',
|
|
163
|
-
defaultMessage: 'Table color inverted',
|
|
164
|
-
},
|
|
165
|
-
striped: {
|
|
166
|
-
id: 'Stripe alternate rows with color',
|
|
167
|
-
defaultMessage: 'Stripe alternate rows with color',
|
|
168
|
-
},
|
|
169
133
|
left: {
|
|
170
134
|
id: 'Left',
|
|
171
135
|
defaultMessage: 'Left',
|
|
@@ -255,15 +219,6 @@ class Edit extends Component {
|
|
|
255
219
|
this.onDeleteCol = this.onDeleteCol.bind(this);
|
|
256
220
|
this.onChangeCell = this.onChangeCell.bind(this);
|
|
257
221
|
this.toggleCellType = this.toggleCellType.bind(this);
|
|
258
|
-
this.toggleBool = this.toggleBool.bind(this);
|
|
259
|
-
this.toggleHideHeaders = this.toggleHideHeaders.bind(this);
|
|
260
|
-
this.toggleSortable = this.toggleSortable.bind(this);
|
|
261
|
-
this.toggleFixed = this.toggleFixed.bind(this);
|
|
262
|
-
this.toggleCompact = this.toggleCompact.bind(this);
|
|
263
|
-
this.toggleBasic = this.toggleBasic.bind(this);
|
|
264
|
-
this.toggleCelled = this.toggleCelled.bind(this);
|
|
265
|
-
this.toggleInverted = this.toggleInverted.bind(this);
|
|
266
|
-
this.toggleStriped = this.toggleStriped.bind(this);
|
|
267
222
|
}
|
|
268
223
|
|
|
269
224
|
/**
|
|
@@ -519,95 +474,6 @@ class Edit extends Component {
|
|
|
519
474
|
});
|
|
520
475
|
}
|
|
521
476
|
|
|
522
|
-
/**
|
|
523
|
-
* Toggles bool state data ('fixed', 'compact' etc. can be true or false).
|
|
524
|
-
* @method toggleBool
|
|
525
|
-
* @param {string} value Key in the table state to toggle.
|
|
526
|
-
* @returns {undefined}
|
|
527
|
-
*/
|
|
528
|
-
toggleBool(value) {
|
|
529
|
-
const table = this.props.data.table;
|
|
530
|
-
this.props.onChangeBlock(this.props.block, {
|
|
531
|
-
...this.props.data,
|
|
532
|
-
table: {
|
|
533
|
-
...table,
|
|
534
|
-
[value]: !table[value],
|
|
535
|
-
},
|
|
536
|
-
});
|
|
537
|
-
}
|
|
538
|
-
|
|
539
|
-
/**
|
|
540
|
-
* Toggle fixed
|
|
541
|
-
* @method toggleHideHeaders
|
|
542
|
-
* @returns {undefined}
|
|
543
|
-
*/
|
|
544
|
-
toggleHideHeaders() {
|
|
545
|
-
this.toggleBool('hideHeaders');
|
|
546
|
-
}
|
|
547
|
-
|
|
548
|
-
/**
|
|
549
|
-
* Toggle sortable
|
|
550
|
-
* @method toggleSortable
|
|
551
|
-
* @returns {undefined}
|
|
552
|
-
*/
|
|
553
|
-
toggleSortable() {
|
|
554
|
-
this.toggleBool('sortable');
|
|
555
|
-
}
|
|
556
|
-
|
|
557
|
-
/**
|
|
558
|
-
* Toggle fixed
|
|
559
|
-
* @method toggleFixed
|
|
560
|
-
* @returns {undefined}
|
|
561
|
-
*/
|
|
562
|
-
toggleFixed() {
|
|
563
|
-
this.toggleBool('fixed');
|
|
564
|
-
}
|
|
565
|
-
|
|
566
|
-
/**
|
|
567
|
-
* Toggle compact
|
|
568
|
-
* @method toggleCompact
|
|
569
|
-
* @returns {undefined}
|
|
570
|
-
*/
|
|
571
|
-
toggleCompact() {
|
|
572
|
-
this.toggleBool('compact');
|
|
573
|
-
}
|
|
574
|
-
|
|
575
|
-
/**
|
|
576
|
-
* Toggle basic
|
|
577
|
-
* @method toggleBasic
|
|
578
|
-
* @returns {undefined}
|
|
579
|
-
*/
|
|
580
|
-
toggleBasic() {
|
|
581
|
-
this.toggleBool('basic');
|
|
582
|
-
}
|
|
583
|
-
|
|
584
|
-
/**
|
|
585
|
-
* Toggle celled
|
|
586
|
-
* @method toggleCelled
|
|
587
|
-
* @returns {undefined}
|
|
588
|
-
*/
|
|
589
|
-
toggleCelled() {
|
|
590
|
-
this.toggleBool('celled');
|
|
591
|
-
}
|
|
592
|
-
|
|
593
|
-
/**
|
|
594
|
-
* Toggle inverted
|
|
595
|
-
* @method toggleInverted
|
|
596
|
-
* @returns {undefined}
|
|
597
|
-
*/
|
|
598
|
-
toggleInverted() {
|
|
599
|
-
this.toggleBool('inverted');
|
|
600
|
-
}
|
|
601
|
-
|
|
602
|
-
/**
|
|
603
|
-
* Toggle striped
|
|
604
|
-
* @method toggleStriped
|
|
605
|
-
* @returns {undefined}
|
|
606
|
-
*/
|
|
607
|
-
toggleStriped() {
|
|
608
|
-
this.toggleBool('striped');
|
|
609
|
-
}
|
|
610
|
-
|
|
611
477
|
componentDidUpdate(prevProps) {
|
|
612
478
|
if (prevProps.selected && !this.props.selected) {
|
|
613
479
|
this.setState({ selected: null });
|
|
@@ -623,6 +489,7 @@ class Edit extends Component {
|
|
|
623
489
|
const headers = this.props.data.table?.rows?.[0]?.cells || [];
|
|
624
490
|
const rows =
|
|
625
491
|
this.props.data.table?.rows?.filter((_, index) => index > 0) || [];
|
|
492
|
+
const schema = TableSchema(this.props);
|
|
626
493
|
|
|
627
494
|
return (
|
|
628
495
|
// TODO: use slate-table instead of table, but first copy the CSS styles
|
|
@@ -802,80 +669,22 @@ class Edit extends Component {
|
|
|
802
669
|
</Table>
|
|
803
670
|
)}
|
|
804
671
|
{this.props.selected && this.state.selected && this.state.isClient && (
|
|
805
|
-
<
|
|
806
|
-
<
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
id
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
id="sortable"
|
|
822
|
-
title={this.props.intl.formatMessage(messages.sortable)}
|
|
823
|
-
description={this.props.intl.formatMessage(
|
|
824
|
-
messages.sortableDescription,
|
|
825
|
-
)}
|
|
826
|
-
type="boolean"
|
|
827
|
-
value={
|
|
828
|
-
this.props.data.table && this.props.data.table.sortable
|
|
829
|
-
}
|
|
830
|
-
onChange={() => this.toggleSortable()}
|
|
831
|
-
/>
|
|
832
|
-
<Field
|
|
833
|
-
id="fixed"
|
|
834
|
-
title={this.props.intl.formatMessage(messages.fixed)}
|
|
835
|
-
type="boolean"
|
|
836
|
-
value={this.props.data.table && this.props.data.table.fixed}
|
|
837
|
-
onChange={() => this.toggleFixed()}
|
|
838
|
-
/>
|
|
839
|
-
<Field
|
|
840
|
-
id="celled"
|
|
841
|
-
title={this.props.intl.formatMessage(messages.celled)}
|
|
842
|
-
type="boolean"
|
|
843
|
-
value={this.props.data.table && this.props.data.table.celled}
|
|
844
|
-
onChange={this.toggleCelled}
|
|
845
|
-
/>
|
|
846
|
-
<Field
|
|
847
|
-
id="striped"
|
|
848
|
-
title={this.props.intl.formatMessage(messages.striped)}
|
|
849
|
-
type="boolean"
|
|
850
|
-
value={this.props.data.table && this.props.data.table.striped}
|
|
851
|
-
onChange={this.toggleStriped}
|
|
852
|
-
/>
|
|
853
|
-
<Field
|
|
854
|
-
id="compact"
|
|
855
|
-
title={this.props.intl.formatMessage(messages.compact)}
|
|
856
|
-
type="boolean"
|
|
857
|
-
value={this.props.data.table && this.props.data.table.compact}
|
|
858
|
-
onChange={() => this.toggleCompact()}
|
|
859
|
-
/>
|
|
860
|
-
<Field
|
|
861
|
-
id="basic"
|
|
862
|
-
title={this.props.intl.formatMessage(messages.basic)}
|
|
863
|
-
type="boolean"
|
|
864
|
-
value={this.props.data.table && this.props.data.table.basic}
|
|
865
|
-
onChange={this.toggleBasic}
|
|
866
|
-
/>
|
|
867
|
-
<Field
|
|
868
|
-
id="inverted"
|
|
869
|
-
title={this.props.intl.formatMessage(messages.inverted)}
|
|
870
|
-
type="boolean"
|
|
871
|
-
value={
|
|
872
|
-
this.props.data.table && this.props.data.table.inverted
|
|
873
|
-
}
|
|
874
|
-
onChange={this.toggleInverted}
|
|
875
|
-
/>
|
|
876
|
-
</Segment>
|
|
877
|
-
</Form>
|
|
878
|
-
</Portal>
|
|
672
|
+
<SidebarPortal selected={this.props.selected}>
|
|
673
|
+
<BlockDataForm
|
|
674
|
+
schema={schema}
|
|
675
|
+
title={schema.title}
|
|
676
|
+
onChangeField={(id, value) => {
|
|
677
|
+
this.props.onChangeBlock(this.props.block, {
|
|
678
|
+
...this.props.data,
|
|
679
|
+
[id]: value,
|
|
680
|
+
});
|
|
681
|
+
}}
|
|
682
|
+
onChangeBlock={this.props.onChangeBlock}
|
|
683
|
+
formData={this.props.data}
|
|
684
|
+
block={this.props.block}
|
|
685
|
+
blocksConfig={this.props.blocksConfig}
|
|
686
|
+
/>
|
|
687
|
+
</SidebarPortal>
|
|
879
688
|
)}
|
|
880
689
|
</div>
|
|
881
690
|
);
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { defineMessages } from 'react-intl';
|
|
2
|
+
|
|
3
|
+
const messages = defineMessages({
|
|
4
|
+
hideHeaders: {
|
|
5
|
+
id: 'Hide headers',
|
|
6
|
+
defaultMessage: 'Hide headers',
|
|
7
|
+
},
|
|
8
|
+
sortable: {
|
|
9
|
+
id: 'Make the table sortable',
|
|
10
|
+
defaultMessage: 'Make the table sortable',
|
|
11
|
+
},
|
|
12
|
+
sortableDescription: {
|
|
13
|
+
id: 'Visible only in view mode',
|
|
14
|
+
defaultMessage: 'Visible only in view mode',
|
|
15
|
+
},
|
|
16
|
+
fixed: {
|
|
17
|
+
id: 'Fixed width table cells',
|
|
18
|
+
defaultMessage: 'Fixed width table cells',
|
|
19
|
+
},
|
|
20
|
+
compact: {
|
|
21
|
+
id: 'Make the table compact',
|
|
22
|
+
defaultMessage: 'Make the table compact',
|
|
23
|
+
},
|
|
24
|
+
basic: {
|
|
25
|
+
id: 'Reduce complexity',
|
|
26
|
+
defaultMessage: 'Reduce complexity',
|
|
27
|
+
},
|
|
28
|
+
celled: {
|
|
29
|
+
id: 'Divide each row into separate cells',
|
|
30
|
+
defaultMessage: 'Divide each row into separate cells',
|
|
31
|
+
},
|
|
32
|
+
inverted: {
|
|
33
|
+
id: 'Table color inverted',
|
|
34
|
+
defaultMessage: 'Table color inverted',
|
|
35
|
+
},
|
|
36
|
+
striped: {
|
|
37
|
+
id: 'Stripe alternate rows with color',
|
|
38
|
+
defaultMessage: 'Stripe alternate rows with color',
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
function TableSchema(props) {
|
|
43
|
+
const { intl } = props;
|
|
44
|
+
return {
|
|
45
|
+
title: 'Table block',
|
|
46
|
+
fieldsets: [
|
|
47
|
+
{
|
|
48
|
+
id: 'default',
|
|
49
|
+
title: 'Default',
|
|
50
|
+
fields: [
|
|
51
|
+
'hideHeaders',
|
|
52
|
+
'sortable',
|
|
53
|
+
'fixed',
|
|
54
|
+
'celled',
|
|
55
|
+
'striped',
|
|
56
|
+
'compact',
|
|
57
|
+
'basic',
|
|
58
|
+
'inverted',
|
|
59
|
+
],
|
|
60
|
+
},
|
|
61
|
+
],
|
|
62
|
+
properties: {
|
|
63
|
+
hideHeaders: {
|
|
64
|
+
title: intl.formatMessage(messages.hideHeaders),
|
|
65
|
+
type: 'boolean',
|
|
66
|
+
},
|
|
67
|
+
sortable: {
|
|
68
|
+
title: intl.formatMessage(messages.sortable),
|
|
69
|
+
type: 'boolean',
|
|
70
|
+
},
|
|
71
|
+
fixed: {
|
|
72
|
+
title: intl.formatMessage(messages.fixed),
|
|
73
|
+
type: 'boolean',
|
|
74
|
+
},
|
|
75
|
+
celled: {
|
|
76
|
+
title: intl.formatMessage(messages.celled),
|
|
77
|
+
type: 'boolean',
|
|
78
|
+
},
|
|
79
|
+
striped: {
|
|
80
|
+
title: intl.formatMessage(messages.striped),
|
|
81
|
+
type: 'boolean',
|
|
82
|
+
},
|
|
83
|
+
compact: {
|
|
84
|
+
title: intl.formatMessage(messages.compact),
|
|
85
|
+
type: 'boolean',
|
|
86
|
+
},
|
|
87
|
+
basic: {
|
|
88
|
+
title: intl.formatMessage(messages.basic),
|
|
89
|
+
type: 'boolean',
|
|
90
|
+
},
|
|
91
|
+
inverted: {
|
|
92
|
+
title: intl.formatMessage(messages.inverted),
|
|
93
|
+
type: 'boolean',
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
required: [],
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export function TableBlockSchema(props) {
|
|
101
|
+
return {
|
|
102
|
+
title: 'Table block',
|
|
103
|
+
fieldsets: [
|
|
104
|
+
{
|
|
105
|
+
id: 'default',
|
|
106
|
+
title: 'Default',
|
|
107
|
+
fields: ['table'],
|
|
108
|
+
},
|
|
109
|
+
],
|
|
110
|
+
properties: {
|
|
111
|
+
table: {
|
|
112
|
+
title: 'Table block',
|
|
113
|
+
widget: 'object',
|
|
114
|
+
schema: TableSchema(props),
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
|
|
118
|
+
required: [],
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
export default TableBlockSchema;
|
|
@@ -6,7 +6,11 @@ import { defineMessages, useIntl } from 'react-intl';
|
|
|
6
6
|
import { useInView } from 'react-intersection-observer';
|
|
7
7
|
import { Dimmer, Loader, Message, Segment } from 'semantic-ui-react';
|
|
8
8
|
|
|
9
|
-
import {
|
|
9
|
+
import {
|
|
10
|
+
flattenToAppURL,
|
|
11
|
+
getBaseUrl,
|
|
12
|
+
validateFileUploadSize,
|
|
13
|
+
} from '@plone/volto/helpers';
|
|
10
14
|
import config from '@plone/volto/registry';
|
|
11
15
|
import {
|
|
12
16
|
BlockDataForm,
|
|
@@ -71,6 +75,7 @@ export const DefaultTextBlockEditor = (props) => {
|
|
|
71
75
|
const { slate } = config.settings;
|
|
72
76
|
const { textblockExtensions } = slate;
|
|
73
77
|
const { value } = data;
|
|
78
|
+
const intl = useIntl();
|
|
74
79
|
|
|
75
80
|
// const [addNewBlockOpened, setAddNewBlockOpened] = React.useState();
|
|
76
81
|
const [showDropzone, setShowDropzone] = React.useState(false);
|
|
@@ -106,6 +111,7 @@ export const DefaultTextBlockEditor = (props) => {
|
|
|
106
111
|
files.forEach((file) => {
|
|
107
112
|
const [mime] = file.type.split('/');
|
|
108
113
|
if (mime !== 'image') return;
|
|
114
|
+
if (!validateFileUploadSize(file, intl.formatMessage)) return;
|
|
109
115
|
|
|
110
116
|
readAsDataURL(file).then((data) => {
|
|
111
117
|
const fields = data.match(/^data:(.*);(.*),(.*)$/);
|
|
@@ -127,7 +133,7 @@ export const DefaultTextBlockEditor = (props) => {
|
|
|
127
133
|
});
|
|
128
134
|
setShowDropzone(false);
|
|
129
135
|
},
|
|
130
|
-
[pathname, uploadContent, block],
|
|
136
|
+
[pathname, uploadContent, block, intl.formatMessage],
|
|
131
137
|
);
|
|
132
138
|
|
|
133
139
|
const { loaded, loading } = uploadRequest;
|
|
@@ -178,7 +184,6 @@ export const DefaultTextBlockEditor = (props) => {
|
|
|
178
184
|
instructions = formDescription;
|
|
179
185
|
}
|
|
180
186
|
|
|
181
|
-
const intl = useIntl();
|
|
182
187
|
const placeholder =
|
|
183
188
|
data.placeholder || formTitle || intl.formatMessage(messages.text);
|
|
184
189
|
const schema = TextBlockSchema(data);
|
|
@@ -110,7 +110,7 @@ const PersistentSlashMenu = ({ editor }) => {
|
|
|
110
110
|
|
|
111
111
|
const [slashMenuSelected, setSlashMenuSelected] = React.useState(0);
|
|
112
112
|
|
|
113
|
-
const
|
|
113
|
+
const hasAllowedBlocks = !isEmpty(allowedBlocks);
|
|
114
114
|
const slashCommand = data.plaintext
|
|
115
115
|
?.toLowerCase()
|
|
116
116
|
.trim()
|
|
@@ -119,12 +119,13 @@ const PersistentSlashMenu = ({ editor }) => {
|
|
|
119
119
|
const availableBlocks = React.useMemo(
|
|
120
120
|
() =>
|
|
121
121
|
filter(blocksConfig, (item) =>
|
|
122
|
-
|
|
122
|
+
hasAllowedBlocks
|
|
123
123
|
? allowedBlocks.includes(item.id)
|
|
124
124
|
: typeof item.restricted === 'function'
|
|
125
125
|
? !item.restricted({ properties, block: item })
|
|
126
126
|
: !item.restricted,
|
|
127
127
|
)
|
|
128
|
+
.filter((block) => Boolean(block.title && block.id))
|
|
128
129
|
.filter((block) => {
|
|
129
130
|
// typed text is a substring of the title or id
|
|
130
131
|
const title = translateBlockTitle(block, intl).toLowerCase();
|
|
@@ -150,7 +151,7 @@ const PersistentSlashMenu = ({ editor }) => {
|
|
|
150
151
|
intl,
|
|
151
152
|
properties,
|
|
152
153
|
slashCommand,
|
|
153
|
-
|
|
154
|
+
hasAllowedBlocks,
|
|
154
155
|
],
|
|
155
156
|
);
|
|
156
157
|
|
|
@@ -1,26 +1,30 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
serializeNodes,
|
|
3
|
+
serializeNodesToText,
|
|
4
|
+
} from '@plone/volto-slate/editor/render';
|
|
2
5
|
import config from '@plone/volto/registry';
|
|
6
|
+
import { isEqual } from 'lodash';
|
|
7
|
+
import Slugger from 'github-slugger';
|
|
3
8
|
|
|
4
9
|
const TextBlockView = (props) => {
|
|
5
10
|
const { id, data, styling = {} } = props;
|
|
6
11
|
const { value, override_toc } = data;
|
|
7
12
|
const metadata = props.metadata || props.properties;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
res.id = id;
|
|
18
|
-
}
|
|
13
|
+
const { topLevelTargetElements } = config.settings.slate;
|
|
14
|
+
|
|
15
|
+
const getAttributes = (node, path) => {
|
|
16
|
+
const res = { ...styling };
|
|
17
|
+
if (node.type && isEqual(path, [0])) {
|
|
18
|
+
if (topLevelTargetElements.includes(node.type) || override_toc) {
|
|
19
|
+
const text = serializeNodesToText(node?.children || []);
|
|
20
|
+
const slug = Slugger.slug(text);
|
|
21
|
+
res.id = slug || id;
|
|
19
22
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
23
|
+
}
|
|
24
|
+
return res;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
return serializeNodes(value, getAttributes, { metadata: metadata });
|
|
24
28
|
};
|
|
25
29
|
|
|
26
30
|
export default TextBlockView;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import isUrl from 'is-url';
|
|
2
2
|
import imageExtensions from 'image-extensions';
|
|
3
3
|
import { blockTagDeserializer } from '@plone/volto-slate/editor/deserialize';
|
|
4
|
-
import { getBaseUrl } from '@plone/volto/helpers';
|
|
4
|
+
import { getBaseUrl, validateFileUploadSize } from '@plone/volto/helpers';
|
|
5
5
|
import { v4 as uuid } from 'uuid';
|
|
6
6
|
import { Transforms } from 'slate';
|
|
7
7
|
|
|
@@ -66,7 +66,9 @@ export const withDeserializers = (editor) => {
|
|
|
66
66
|
...editor.dataTransferHandlers,
|
|
67
67
|
files: (files) => {
|
|
68
68
|
const unprocessed = [];
|
|
69
|
+
const { intl } = editor.getBlockProps();
|
|
69
70
|
for (const file of files) {
|
|
71
|
+
if (!validateFileUploadSize(file, intl.formatMessage)) return;
|
|
70
72
|
const reader = new FileReader();
|
|
71
73
|
const [mime] = file.type.split('/');
|
|
72
74
|
if (mime === 'image') {
|
|
@@ -35,7 +35,7 @@ import textSVG from '@plone/volto/icons/subtext.svg';
|
|
|
35
35
|
|
|
36
36
|
export { TextBlockView, TextBlockEdit, TextBlockSchema };
|
|
37
37
|
|
|
38
|
-
export default (config)
|
|
38
|
+
export default function applyConfig(config) {
|
|
39
39
|
config.settings.slate = {
|
|
40
40
|
// TODO: should we inverse order? First here gets executed last
|
|
41
41
|
textblockExtensions: [
|
|
@@ -164,5 +164,13 @@ export default (config) => {
|
|
|
164
164
|
edit: (props) => <TextBlockEdit {...props} detached />,
|
|
165
165
|
restricted: true,
|
|
166
166
|
};
|
|
167
|
+
|
|
168
|
+
if (config.blocks.blocksConfig.gridBlock) {
|
|
169
|
+
// This is required in order to initialize the inner blocksConfig
|
|
170
|
+
// for the grid block, since the slate block lives in an add-on
|
|
171
|
+
// it should be responsible to fill itself into the grid configuration
|
|
172
|
+
config.blocks.blocksConfig.gridBlock.blocksConfig.slate = slateBlockConfig;
|
|
173
|
+
}
|
|
174
|
+
|
|
167
175
|
return config;
|
|
168
|
-
}
|
|
176
|
+
}
|
|
@@ -43,6 +43,7 @@ import {
|
|
|
43
43
|
bTagDeserializer,
|
|
44
44
|
codeTagDeserializer,
|
|
45
45
|
} from './deserialize';
|
|
46
|
+
import { renderLinkElement } from './render';
|
|
46
47
|
|
|
47
48
|
// Registry of available buttons
|
|
48
49
|
export const buttons = {
|
|
@@ -234,10 +235,10 @@ export const defaultBlockType = 'p';
|
|
|
234
235
|
export const elements = {
|
|
235
236
|
default: ({ attributes, children }) => <p {...attributes}>{children}</p>,
|
|
236
237
|
|
|
237
|
-
h1: (
|
|
238
|
-
h2: (
|
|
239
|
-
h3: (
|
|
240
|
-
h4: (
|
|
238
|
+
h1: renderLinkElement('h1'),
|
|
239
|
+
h2: renderLinkElement('h2'),
|
|
240
|
+
h3: renderLinkElement('h3'),
|
|
241
|
+
h4: renderLinkElement('h4'),
|
|
241
242
|
|
|
242
243
|
li: ({ attributes, children }) => <li {...attributes}>{children}</li>,
|
|
243
244
|
ol: ({ attributes, children }) => <ol {...attributes}>{children}</ol>,
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import * as slateConfig from './config';
|
|
2
2
|
import installDefaultPlugins from './plugins';
|
|
3
|
-
export SlateEditor from './SlateEditor';
|
|
4
|
-
export EditorReference from './EditorReference';
|
|
3
|
+
export { default as SlateEditor } from './SlateEditor';
|
|
4
|
+
export { default as EditorReference } from './EditorReference';
|
|
5
5
|
|
|
6
|
-
export default (config)
|
|
6
|
+
export default function applyConfig(config) {
|
|
7
7
|
config.settings.slate = {
|
|
8
8
|
...slateConfig,
|
|
9
9
|
// showExpandedToolbar: false,
|
|
@@ -11,4 +11,4 @@ export default (config) => {
|
|
|
11
11
|
};
|
|
12
12
|
config = installDefaultPlugins(config);
|
|
13
13
|
return config;
|
|
14
|
-
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
h1,
|
|
2
|
+
h2,
|
|
3
|
+
h3,
|
|
4
|
+
h4 {
|
|
5
|
+
&:hover {
|
|
6
|
+
a.anchor {
|
|
7
|
+
svg {
|
|
8
|
+
opacity: 1;
|
|
9
|
+
transform: rotate(15deg);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
a.anchor {
|
|
15
|
+
position: absolute;
|
|
16
|
+
display: inline-block;
|
|
17
|
+
margin-left: 5px;
|
|
18
|
+
vertical-align: middle;
|
|
19
|
+
|
|
20
|
+
svg {
|
|
21
|
+
width: 1.6ch;
|
|
22
|
+
fill: #42526e;
|
|
23
|
+
opacity: 0;
|
|
24
|
+
transform: rotate(15deg) translate(-8px, 2px);
|
|
25
|
+
transition: opacity 0.2s ease 0s, transform 0.2s ease 0s;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|