@plone/volto 17.0.0-alpha.26 → 17.0.0-alpha.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. package/.eslintrc +26 -3
  2. package/.yarn/install-state.gz +0 -0
  3. package/.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs +541 -0
  4. package/.yarn/releases/yarn-3.6.3.cjs +874 -0
  5. package/CHANGELOG.md +60 -0
  6. package/addon-registry.js +10 -1
  7. package/create-addons-loader.js +1 -1
  8. package/locales/ca/LC_MESSAGES/volto.po +57 -31
  9. package/locales/ca.json +1 -1
  10. package/locales/de/LC_MESSAGES/volto.po +58 -32
  11. package/locales/de.json +1 -1
  12. package/locales/en/LC_MESSAGES/volto.po +57 -31
  13. package/locales/en.json +1 -1
  14. package/locales/es/LC_MESSAGES/volto.po +65 -39
  15. package/locales/es.json +1 -1
  16. package/locales/eu/LC_MESSAGES/volto.po +57 -31
  17. package/locales/eu.json +1 -1
  18. package/locales/fi/LC_MESSAGES/volto.po +57 -31
  19. package/locales/fi.json +1 -1
  20. package/locales/fr/LC_MESSAGES/volto.po +57 -31
  21. package/locales/fr.json +1 -1
  22. package/locales/it/LC_MESSAGES/volto.po +57 -31
  23. package/locales/it.json +1 -1
  24. package/locales/ja/LC_MESSAGES/volto.po +57 -31
  25. package/locales/ja.json +1 -1
  26. package/locales/nl/LC_MESSAGES/volto.po +57 -31
  27. package/locales/nl.json +1 -1
  28. package/locales/pt/LC_MESSAGES/volto.po +57 -31
  29. package/locales/pt.json +1 -1
  30. package/locales/pt_BR/LC_MESSAGES/volto.po +57 -31
  31. package/locales/pt_BR.json +1 -1
  32. package/locales/ro/LC_MESSAGES/volto.po +57 -31
  33. package/locales/ro.json +1 -1
  34. package/locales/volto.pot +62 -32
  35. package/locales/zh_CN/LC_MESSAGES/volto.po +57 -31
  36. package/locales/zh_CN.json +1 -1
  37. package/package.json +35 -26
  38. package/packages/volto-slate/package.json +1 -1
  39. package/packages/volto-slate/src/blocks/Text/TextBlockView.jsx +2 -1
  40. package/packages/volto-slate/src/blocks/Text/index.js +0 -5
  41. package/packages/volto-slate/src/editor/plugins/Link/render.jsx +5 -6
  42. package/packages/volto-slate/src/editor/render.jsx +11 -1
  43. package/razzle.config.js +4 -6
  44. package/src/components/index.js +194 -194
  45. package/src/components/manage/Add/Add.jsx +7 -8
  46. package/src/components/manage/Blocks/Block/Settings.test.jsx +17 -15
  47. package/src/components/manage/Blocks/HTML/Edit.jsx +8 -8
  48. package/src/components/manage/Blocks/HeroImageLeft/Edit.jsx +30 -25
  49. package/src/components/manage/Blocks/Listing/ListingBody.jsx +6 -4
  50. package/src/components/manage/Blocks/Maps/Edit.test.jsx +1 -2
  51. package/src/components/manage/Blocks/Maps/View.test.jsx +1 -2
  52. package/src/components/manage/Blocks/Search/components/Facets.jsx +2 -3
  53. package/src/components/manage/Blocks/Search/components/FilterList.jsx +4 -6
  54. package/src/components/manage/Blocks/Search/components/SelectFacet.jsx +2 -9
  55. package/src/components/manage/Blocks/Search/hocs/withQueryString.jsx +3 -0
  56. package/src/components/manage/Blocks/Search/hocs/withSearch.jsx +8 -6
  57. package/src/components/manage/Blocks/Search/schema.js +13 -13
  58. package/src/components/manage/Blocks/Table/Cell.jsx +2 -3
  59. package/src/components/manage/Blocks/Text/Edit.jsx +2 -3
  60. package/src/components/manage/Blocks/Title/View.jsx +4 -37
  61. package/src/components/manage/Blocks/ToC/View.jsx +1 -0
  62. package/src/components/manage/Blocks/ToC/variations/DefaultTocRenderer.jsx +3 -2
  63. package/src/components/manage/Blocks/ToC/variations/HorizontalMenu.jsx +3 -2
  64. package/src/components/manage/Contents/Contents.jsx +252 -114
  65. package/src/components/manage/Contents/ContentsPropertiesModal.jsx +90 -154
  66. package/src/components/manage/Contents/ContentsRenameModal.jsx +88 -139
  67. package/src/components/manage/Contents/ContentsRenameModal.stories.jsx +61 -0
  68. package/src/components/manage/Contents/ContentsTagsModal.jsx +83 -130
  69. package/src/components/manage/Contents/ContentsTagsModal.stories.jsx +68 -0
  70. package/src/components/manage/Contents/ContentsUploadModal.jsx +1 -2
  71. package/src/components/manage/Contents/ContentsWorkflowModal.jsx +87 -154
  72. package/src/components/manage/Controlpanels/Aliases.jsx +4 -12
  73. package/src/components/manage/Controlpanels/Rules/AddRule.jsx +2 -9
  74. package/src/components/manage/Controlpanels/UndoControlpanel.jsx +6 -9
  75. package/src/components/manage/Form/BlockDataForm.test.jsx +17 -15
  76. package/src/components/manage/Form/Form.jsx +2 -3
  77. package/src/components/manage/Form/InlineForm.test.jsx +16 -14
  78. package/src/components/manage/LockingToastsFactory/LockingToastsFactory.jsx +1 -2
  79. package/src/components/manage/Sharing/Sharing.jsx +7 -0
  80. package/src/components/manage/Sidebar/Sidebar.jsx +139 -220
  81. package/src/components/manage/Toolbar/More.jsx +12 -12
  82. package/src/components/manage/Toolbar/PersonalTools.jsx +97 -155
  83. package/src/components/manage/Toolbar/Toolbar.jsx +2 -2
  84. package/src/components/manage/UniversalLink/UniversalLink.test.jsx +2 -1
  85. package/src/components/manage/Widgets/AlignWidget.jsx +2 -4
  86. package/src/components/manage/Widgets/ColorPickerWidget.test.jsx +9 -7
  87. package/src/components/manage/Widgets/DatetimeWidget.jsx +2 -8
  88. package/src/components/manage/Widgets/IdWidget.jsx +1 -2
  89. package/src/components/manage/Widgets/ObjectBrowserWidget.jsx +2 -9
  90. package/src/components/manage/Widgets/RecurrenceWidget/RecurrenceWidget.jsx +2 -9
  91. package/src/components/manage/Widgets/RecurrenceWidget/WeekdayOfTheMonthIndexField.jsx +4 -4
  92. package/src/components/manage/Widgets/SchemaWidget.jsx +6 -9
  93. package/src/components/manage/Widgets/WysiwygWidget.jsx +2 -9
  94. package/src/components/theme/Comments/Comments.jsx +3 -10
  95. package/src/components/theme/ContentMetadataTags/ContentMetadataTags.jsx +4 -0
  96. package/src/components/theme/Login/Login.jsx +1 -2
  97. package/src/components/theme/PasswordReset/PasswordReset.jsx +1 -2
  98. package/src/components/theme/PreviewImage/PreviewImage.jsx +10 -5
  99. package/src/components/theme/PreviewImage/PreviewImage.test.js +17 -0
  100. package/src/components/theme/Register/Register.jsx +2 -4
  101. package/src/components/theme/TsTest/TsTest.test.tsx +11 -0
  102. package/src/components/theme/TsTest/TsTest.tsx +15 -0
  103. package/src/components/theme/View/AlbumView.jsx +3 -2
  104. package/src/components/theme/Widgets/ImageWidget.stories.jsx +1 -2
  105. package/src/config/Loadables.jsx +1 -1
  106. package/src/config/RichTextEditor/Blocks.jsx +2 -3
  107. package/src/config/RichTextEditor/Plugins.jsx +2 -3
  108. package/src/config/RichTextEditor/ToHTML.jsx +12 -10
  109. package/src/config/RichTextEditor/index.js +2 -3
  110. package/src/config/Views.jsx +5 -5
  111. package/src/express-middleware/ok.js +1 -1
  112. package/src/helpers/Blocks/Blocks.js +4 -6
  113. package/src/helpers/Blocks/Blocks.test.js +35 -35
  114. package/src/helpers/Extensions/withBlockSchemaEnhancer.js +48 -50
  115. package/src/helpers/FormValidation/FormValidation.js +7 -6
  116. package/src/helpers/Html/Html.jsx +2 -8
  117. package/src/helpers/Loadable/__mocks__/Loadable.js +18 -18
  118. package/src/helpers/MessageLabels/MessageLabels.js +2 -3
  119. package/src/helpers/Utils/UseDetectClickOutside.stories.jsx +2 -3
  120. package/src/helpers/Utils/Utils.js +10 -0
  121. package/src/helpers/Utils/Utils.test.js +13 -0
  122. package/src/helpers/index.js +1 -0
  123. package/src/hooks/index.js +1 -1
  124. package/src/middleware/api.js +194 -190
  125. package/src/middleware/blacklistRoutes.js +25 -22
  126. package/src/middleware/storeProtectLoadUtils.js +61 -62
  127. package/src/middleware/storeProtectLoadUtils.test.js +47 -43
  128. package/src/reducers/content/content.test.js +4 -4
  129. package/src/reducers/navigation/navigation.js +5 -5
  130. package/src/reducers/navigation/navigation.test.js +30 -0
  131. package/src/registry.js +2 -2
  132. package/src/storybook.jsx +24 -38
  133. package/theme/themes/pastanaga/collections/menu.overrides +3 -2
  134. package/theme/themes/pastanaga/elements/container.overrides +5 -2
  135. package/theme/themes/pastanaga/elements/input.overrides +1 -1
  136. package/theme/themes/pastanaga/elements/step.overrides +2 -1
  137. package/theme/themes/pastanaga/extras/blocks.less +20 -14
  138. package/theme/themes/pastanaga/extras/color-picker-widget.less +1 -1
  139. package/theme/themes/pastanaga/extras/contents.less +5 -1
  140. package/theme/themes/pastanaga/extras/draftjs.less +4 -4
  141. package/theme/themes/pastanaga/extras/grid.less +5 -4
  142. package/theme/themes/pastanaga/extras/main.less +6 -6
  143. package/theme/themes/pastanaga/extras/react-dates-overrides.less +4 -2
  144. package/theme/themes/pastanaga/extras/search.less +2 -2
  145. package/theme/themes/pastanaga/extras/sidebar.less +5 -4
  146. package/theme/themes/pastanaga/extras/time-picker-overrides.less +5 -3
  147. package/theme/themes/pastanaga/extras/toolbar.less +6 -2
  148. package/theme/themes/pastanaga/extras/userscontrolpanel.less +17 -9
  149. package/theme/themes/pastanaga/extras/widgets.less +1 -1
  150. package/theme/themes/pastanaga/modules/rating.overrides +2 -1
  151. package/theme/themes/pastanaga-cms-ui/elements/container.overrides +2 -1
  152. package/theme/themes/pastanaga-cms-ui/extras/cms-ui.elements.container.less +6 -2
  153. package/theme/themes/pastanaga-cms-ui/extras/cms-ui.site.less +2 -2
  154. package/tsconfig.json +33 -0
@@ -26,54 +26,58 @@ describe('storeProtectLoadUtils', () => {
26
26
  expect(result).toBe('NEXT');
27
27
  });
28
28
 
29
- const testLocationChange = ({ locationMap, resetBeforeFetch }) => () => {
30
- const dispatch = jest.fn();
31
- const getState = jest.fn(() => ({
32
- router: {
33
- location: {
34
- pathname: '/PATH',
29
+ const testLocationChange =
30
+ ({ locationMap, resetBeforeFetch }) =>
31
+ () => {
32
+ const dispatch = jest.fn();
33
+ const getState = jest.fn(() => ({
34
+ router: {
35
+ location: {
36
+ pathname: '/PATH',
37
+ },
35
38
  },
36
- },
37
- }));
38
- const next = jest.fn(() => 'NEXT');
39
- const action = {
40
- type: '@@router/LOCATION_CHANGE',
41
- payload: { location: { pathname: '/NEW-PATH' } },
39
+ }));
40
+ const next = jest.fn(() => 'NEXT');
41
+ const action = {
42
+ type: '@@router/LOCATION_CHANGE',
43
+ payload: { location: { pathname: '/NEW-PATH' } },
44
+ };
45
+ Url.isCmsUi = jest.fn((path) => locationMap[path]);
46
+ const result = protectLoadStart({ dispatch, getState })(next)(action);
47
+ expect(dispatch).toBeCalledWith({
48
+ type: '@@loadProtector/START',
49
+ location: { pathname: '/NEW-PATH' },
50
+ resetBeforeFetch,
51
+ });
52
+ expect(next).toBeCalledWith(action);
53
+ expect(result).toBe('NEXT');
42
54
  };
43
- Url.isCmsUi = jest.fn((path) => locationMap[path]);
44
- const result = protectLoadStart({ dispatch, getState })(next)(action);
45
- expect(dispatch).toBeCalledWith({
46
- type: '@@loadProtector/START',
47
- location: { pathname: '/NEW-PATH' },
48
- resetBeforeFetch,
49
- });
50
- expect(next).toBeCalledWith(action);
51
- expect(result).toBe('NEXT');
52
- };
53
55
 
54
- const testLocationSkipped = ({ locationMap }) => () => {
55
- const dispatch = jest.fn();
56
- const getState = jest.fn(() => ({
57
- router: {
58
- location: {
59
- pathname: '/PATH',
56
+ const testLocationSkipped =
57
+ ({ locationMap }) =>
58
+ () => {
59
+ const dispatch = jest.fn();
60
+ const getState = jest.fn(() => ({
61
+ router: {
62
+ location: {
63
+ pathname: '/PATH',
64
+ },
60
65
  },
61
- },
62
- }));
63
- const next = jest.fn(() => 'NEXT');
64
- const action = {
65
- type: '@@router/LOCATION_CHANGE',
66
- payload: { location: { pathname: '/NEW-PATH' } },
66
+ }));
67
+ const next = jest.fn(() => 'NEXT');
68
+ const action = {
69
+ type: '@@router/LOCATION_CHANGE',
70
+ payload: { location: { pathname: '/NEW-PATH' } },
71
+ };
72
+ Url.isCmsUi = jest.fn((path) => locationMap[path]);
73
+ const result = protectLoadStart({ dispatch, getState })(next)(action);
74
+ expect(dispatch).toBeCalledWith({
75
+ type: '@@loadProtector/SKIPPED',
76
+ location: { pathname: '/NEW-PATH' },
77
+ });
78
+ expect(next).toBeCalledWith(action);
79
+ expect(result).toBe('NEXT');
67
80
  };
68
- Url.isCmsUi = jest.fn((path) => locationMap[path]);
69
- const result = protectLoadStart({ dispatch, getState })(next)(action);
70
- expect(dispatch).toBeCalledWith({
71
- type: '@@loadProtector/SKIPPED',
72
- location: { pathname: '/NEW-PATH' },
73
- });
74
- expect(next).toBeCalledWith(action);
75
- expect(result).toBe('NEXT');
76
- };
77
81
 
78
82
  describe('location change', () => {
79
83
  test(
@@ -82,7 +82,7 @@ describe('Content reducer', () => {
82
82
  }),
83
83
  ).toMatchObject({
84
84
  subrequests: {
85
- '1234': {
85
+ 1234: {
86
86
  data: null,
87
87
  loaded: false,
88
88
  loading: true,
@@ -136,7 +136,7 @@ describe('Content reducer', () => {
136
136
  }),
137
137
  ).toMatchObject({
138
138
  subrequests: {
139
- '1234': {
139
+ 1234: {
140
140
  data: {
141
141
  items: [
142
142
  {
@@ -170,7 +170,7 @@ describe('Content reducer', () => {
170
170
  }),
171
171
  ).toMatchObject({
172
172
  subrequests: {
173
- '1234': {
173
+ 1234: {
174
174
  data: [
175
175
  {
176
176
  '@id': `${settings.apiPath}/home-page`,
@@ -214,7 +214,7 @@ describe('Content reducer', () => {
214
214
  }),
215
215
  ).toMatchObject({
216
216
  subrequests: {
217
- '1234': {
217
+ 1234: {
218
218
  data: null,
219
219
  loaded: false,
220
220
  loading: false,
@@ -73,11 +73,11 @@ export default function navigation(state = initialState, action = {}) {
73
73
  }
74
74
  return state;
75
75
  case `${GET_NAVIGATION}_SUCCESS`:
76
- hasExpander = hasApiExpander(
77
- 'navigation',
78
- getBaseUrl(flattenToAppURL(action.result['@id'])),
79
- );
80
- if (!hasExpander) {
76
+ // Even if the expander is set or not, if the GET_NAVIGATION is
77
+ // called, we want it to store the data if the actions data is
78
+ // not set in the expander data (['@components']) but in the "normal"
79
+ // action result (we look for the object property returned by the endpoint)
80
+ if (!action.result?.['@components'] && action.result?.items) {
81
81
  return {
82
82
  ...state,
83
83
  error: null,
@@ -172,4 +172,34 @@ describe('Navigation reducer (NAVIGATION)GET_CONTENT', () => {
172
172
  loading: false,
173
173
  });
174
174
  });
175
+
176
+ it('should handle (NAVIGATION)GET_NAVIGATION_SUCCESS (standalone with apiExpander enabled)', () => {
177
+ expect(
178
+ navigation(undefined, {
179
+ type: `${GET_NAVIGATION}_SUCCESS`,
180
+ result: {
181
+ items: [
182
+ {
183
+ title: 'Welcome to Plone!',
184
+ description:
185
+ 'Congratulations! You have successfully installed Plone.',
186
+ '@id': `${settings.apiPath}/front-page`,
187
+ },
188
+ ],
189
+ },
190
+ }),
191
+ ).toEqual({
192
+ error: null,
193
+ items: [
194
+ {
195
+ title: 'Welcome to Plone!',
196
+ description:
197
+ 'Congratulations! You have successfully installed Plone.',
198
+ url: '/front-page',
199
+ },
200
+ ],
201
+ loaded: true,
202
+ loading: false,
203
+ });
204
+ });
175
205
  });
package/src/registry.js CHANGED
@@ -123,8 +123,8 @@ class Config {
123
123
  // Try to set a displayName (useful for React dev tools) for the registered component
124
124
  // Only if it's a function and it's not set previously
125
125
  try {
126
- const displayName = this._data.components[componentName].component
127
- .displayName;
126
+ const displayName =
127
+ this._data.components[componentName].component.displayName;
128
128
 
129
129
  if (
130
130
  !displayName &&
package/src/storybook.jsx CHANGED
@@ -91,8 +91,7 @@ const initialState = () => ({
91
91
  },
92
92
  ],
93
93
  key: '6470b',
94
- text:
95
- 'Disclaimer: This instance is reset every night, so all changes will be lost afterwards.',
94
+ text: 'Disclaimer: This instance is reset every night, so all changes will be lost afterwards.',
96
95
  type: 'unstyled',
97
96
  },
98
97
  ],
@@ -143,13 +142,12 @@ const initialState = () => ({
143
142
  ],
144
143
  inlineStyleRanges: [],
145
144
  key: 'behki',
146
- text:
147
- 'Plone is a CMS built on Python with over 19 years of experience. Plone has very interesting features that appeal to developers and users alike, such as customizable content types, hierarchical URL object traversing and a sophisticated content workflow powered by a granular permissions model. This allows you to build anything from simple websites to enterprise-grade intranets. Volto exposes all these features and communicates with Plone via its mature REST API. Volto can be esily themed and is highly customizable.',
145
+ text: 'Plone is a CMS built on Python with over 19 years of experience. Plone has very interesting features that appeal to developers and users alike, such as customizable content types, hierarchical URL object traversing and a sophisticated content workflow powered by a granular permissions model. This allows you to build anything from simple websites to enterprise-grade intranets. Volto exposes all these features and communicates with Plone via its mature REST API. Volto can be esily themed and is highly customizable.',
148
146
  type: 'unstyled',
149
147
  },
150
148
  ],
151
149
  entityMap: {
152
- '0': {
150
+ 0: {
153
151
  data: {
154
152
  href: 'https://plone.org',
155
153
  rel: 'nofollow',
@@ -158,7 +156,7 @@ const initialState = () => ({
158
156
  mutability: 'MUTABLE',
159
157
  type: 'LINK',
160
158
  },
161
- '1': {
159
+ 1: {
162
160
  data: {
163
161
  href: 'https://github.com/plone/plone.restapi',
164
162
  url: 'https://github.com/plone/plone.restapi',
@@ -219,13 +217,12 @@ const initialState = () => ({
219
217
  ],
220
218
  inlineStyleRanges: [],
221
219
  key: '6a248',
222
- text:
223
- 'Last but not least, it also supports a Volto Nodejs-based backend reference API implementation that demos how other systems could also use Volto to display and create content through it.',
220
+ text: 'Last but not least, it also supports a Volto Nodejs-based backend reference API implementation that demos how other systems could also use Volto to display and create content through it.',
224
221
  type: 'unstyled',
225
222
  },
226
223
  ],
227
224
  entityMap: {
228
- '0': {
225
+ 0: {
229
226
  data: {
230
227
  href: 'https://github.com/plone/volto-reference-backend',
231
228
  url: 'https://github.com/plone/volto-reference-backend',
@@ -252,8 +249,7 @@ const initialState = () => ({
252
249
  },
253
250
  ],
254
251
  key: '94arl',
255
- text:
256
- 'You can log in and use it as admin user using these credentials:',
252
+ text: 'You can log in and use it as admin user using these credentials:',
257
253
  type: 'unstyled',
258
254
  },
259
255
  ],
@@ -276,13 +272,12 @@ const initialState = () => ({
276
272
  ],
277
273
  inlineStyleRanges: [],
278
274
  key: '1bnna',
279
- text:
280
- 'Volto is a React-based frontend for content management systems, currently supporting three backend implementations: Plone, Guillotina and a NodeJS reference implementation.',
275
+ text: 'Volto is a React-based frontend for content management systems, currently supporting three backend implementations: Plone, Guillotina and a NodeJS reference implementation.',
281
276
  type: 'unstyled',
282
277
  },
283
278
  ],
284
279
  entityMap: {
285
- '0': {
280
+ 0: {
286
281
  data: {
287
282
  href: 'https://github.com/plone/volto',
288
283
  url: 'https://github.com/plone/volto',
@@ -303,8 +298,7 @@ const initialState = () => ({
303
298
  entityRanges: [],
304
299
  inlineStyleRanges: [],
305
300
  key: '55n44',
306
- text:
307
- 'You can use this site to test Volto. It runs on the master branch of Volto using latest Plone 5.2 Backend running on Python 3.',
301
+ text: 'You can use this site to test Volto. It runs on the master branch of Volto using latest Plone 5.2 Backend running on Python 3.',
308
302
  type: 'unstyled',
309
303
  },
310
304
  ],
@@ -367,13 +361,12 @@ const initialState = () => ({
367
361
  ],
368
362
  inlineStyleRanges: [],
369
363
  key: '68rve',
370
- text:
371
- 'Volto also supports other APIs like Guillotina, a Python resource management system, inspired by Plone and using the same basic concepts like traversal, content types and permissions model.',
364
+ text: 'Volto also supports other APIs like Guillotina, a Python resource management system, inspired by Plone and using the same basic concepts like traversal, content types and permissions model.',
372
365
  type: 'unstyled',
373
366
  },
374
367
  ],
375
368
  entityMap: {
376
- '0': {
369
+ 0: {
377
370
  data: {
378
371
  href: 'https://guillotina.io/',
379
372
  rel: 'nofollow',
@@ -686,8 +679,7 @@ const initialState = () => ({
686
679
  },
687
680
  ],
688
681
  key: '6470b',
689
- text:
690
- 'Disclaimer: This instance is reset every night, so all changes will be lost afterwards.',
682
+ text: 'Disclaimer: This instance is reset every night, so all changes will be lost afterwards.',
691
683
  type: 'unstyled',
692
684
  },
693
685
  ],
@@ -738,13 +730,12 @@ const initialState = () => ({
738
730
  ],
739
731
  inlineStyleRanges: [],
740
732
  key: 'behki',
741
- text:
742
- 'Plone is a CMS built on Python with over 19 years of experience. Plone has very interesting features that appeal to developers and users alike, such as customizable content types, hierarchical URL object traversing and a sophisticated content workflow powered by a granular permissions model. This allows you to build anything from simple websites to enterprise-grade intranets. Volto exposes all these features and communicates with Plone via its mature REST API. Volto can be esily themed and is highly customizable.',
733
+ text: 'Plone is a CMS built on Python with over 19 years of experience. Plone has very interesting features that appeal to developers and users alike, such as customizable content types, hierarchical URL object traversing and a sophisticated content workflow powered by a granular permissions model. This allows you to build anything from simple websites to enterprise-grade intranets. Volto exposes all these features and communicates with Plone via its mature REST API. Volto can be esily themed and is highly customizable.',
743
734
  type: 'unstyled',
744
735
  },
745
736
  ],
746
737
  entityMap: {
747
- '0': {
738
+ 0: {
748
739
  data: {
749
740
  href: 'https://plone.org',
750
741
  rel: 'nofollow',
@@ -753,7 +744,7 @@ const initialState = () => ({
753
744
  mutability: 'MUTABLE',
754
745
  type: 'LINK',
755
746
  },
756
- '1': {
747
+ 1: {
757
748
  data: {
758
749
  href: 'https://github.com/plone/plone.restapi',
759
750
  url: 'https://github.com/plone/plone.restapi',
@@ -814,13 +805,12 @@ const initialState = () => ({
814
805
  ],
815
806
  inlineStyleRanges: [],
816
807
  key: '6a248',
817
- text:
818
- 'Last but not least, it also supports a Volto Nodejs-based backend reference API implementation that demos how other systems could also use Volto to display and create content through it.',
808
+ text: 'Last but not least, it also supports a Volto Nodejs-based backend reference API implementation that demos how other systems could also use Volto to display and create content through it.',
819
809
  type: 'unstyled',
820
810
  },
821
811
  ],
822
812
  entityMap: {
823
- '0': {
813
+ 0: {
824
814
  data: {
825
815
  href: 'https://github.com/plone/volto-reference-backend',
826
816
  url: 'https://github.com/plone/volto-reference-backend',
@@ -847,8 +837,7 @@ const initialState = () => ({
847
837
  },
848
838
  ],
849
839
  key: '94arl',
850
- text:
851
- 'You can log in and use it as admin user using these credentials:',
840
+ text: 'You can log in and use it as admin user using these credentials:',
852
841
  type: 'unstyled',
853
842
  },
854
843
  ],
@@ -871,13 +860,12 @@ const initialState = () => ({
871
860
  ],
872
861
  inlineStyleRanges: [],
873
862
  key: '1bnna',
874
- text:
875
- 'Volto is a React-based frontend for content management systems, currently supporting three backend implementations: Plone, Guillotina and a NodeJS reference implementation.',
863
+ text: 'Volto is a React-based frontend for content management systems, currently supporting three backend implementations: Plone, Guillotina and a NodeJS reference implementation.',
876
864
  type: 'unstyled',
877
865
  },
878
866
  ],
879
867
  entityMap: {
880
- '0': {
868
+ 0: {
881
869
  data: {
882
870
  href: 'https://github.com/plone/volto',
883
871
  url: 'https://github.com/plone/volto',
@@ -898,8 +886,7 @@ const initialState = () => ({
898
886
  entityRanges: [],
899
887
  inlineStyleRanges: [],
900
888
  key: '55n44',
901
- text:
902
- 'You can use this site to test Volto. It runs on the master branch of Volto using latest Plone 5.2 Backend running on Python 3.',
889
+ text: 'You can use this site to test Volto. It runs on the master branch of Volto using latest Plone 5.2 Backend running on Python 3.',
903
890
  type: 'unstyled',
904
891
  },
905
892
  ],
@@ -962,13 +949,12 @@ const initialState = () => ({
962
949
  ],
963
950
  inlineStyleRanges: [],
964
951
  key: '68rve',
965
- text:
966
- 'Volto also supports other APIs like Guillotina, a Python resource management system, inspired by Plone and using the same basic concepts like traversal, content types and permissions model.',
952
+ text: 'Volto also supports other APIs like Guillotina, a Python resource management system, inspired by Plone and using the same basic concepts like traversal, content types and permissions model.',
967
953
  type: 'unstyled',
968
954
  },
969
955
  ],
970
956
  entityMap: {
971
- '0': {
957
+ 0: {
972
958
  data: {
973
959
  href: 'https://guillotina.io/',
974
960
  rel: 'nofollow',
@@ -45,7 +45,8 @@
45
45
  margin: 4px -14px 0;
46
46
  background-repeat: no-repeat;
47
47
  background-size: 64px 18px;
48
- transition: width 0.3s cubic-bezier(0.6, -0.28, 0.735, 0.045),
48
+ transition:
49
+ width 0.3s cubic-bezier(0.6, -0.28, 0.735, 0.045),
49
50
  margin 0.3s cubic-bezier(0.6, -0.28, 0.735, 0.045);
50
51
  }
51
52
 
@@ -61,9 +62,9 @@
61
62
  width: 20px;
62
63
  height: 80px;
63
64
  padding: 0;
65
+ border-radius: 0;
64
66
  margin-top: -40px;
65
67
  background: transparent;
66
- border-radius: 0;
67
68
  opacity: 0.3;
68
69
  transition: opacity 0.3s;
69
70
  }
@@ -10,7 +10,8 @@
10
10
  .ui.container {
11
11
  display: block;
12
12
  max-width: @maxWidth !important;
13
- transition: width 0.3s cubic-bezier(0.6, -0.28, 0.735, 0.045),
13
+ transition:
14
+ width 0.3s cubic-bezier(0.6, -0.28, 0.735, 0.045),
14
15
  margin-left 0.3s cubic-bezier(0.6, -0.28, 0.735, 0.045),
15
16
  margin-right 0.3s cubic-bezier(0.6, -0.28, 0.735, 0.045);
16
17
  }
@@ -82,7 +83,9 @@
82
83
  }
83
84
  }
84
85
 
85
- body:not(.has-toolbar):not(.has-sidebar):not(.has-toolbar-collapsed):not(.has-sidebar-collapsed) {
86
+ body:not(.has-toolbar):not(.has-sidebar):not(.has-toolbar-collapsed):not(
87
+ .has-sidebar-collapsed
88
+ ) {
86
89
  .contentWidth(0);
87
90
  }
88
91
 
@@ -30,9 +30,9 @@ of an error is present, it overrides a default from SemanticUI grid definitions.
30
30
  display: inline-block;
31
31
  width: 10px;
32
32
  height: 10px;
33
+ border-radius: 50%;
33
34
  margin-left: 5px;
34
35
  background-color: @pink;
35
- border-radius: 50%;
36
36
  content: '';
37
37
  }
38
38
  }
@@ -4,7 +4,8 @@
4
4
 
5
5
  @font-face {
6
6
  font-family: 'Step';
7
- src: url(data:application/x-font-ttf;charset=utf-8;;base64,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)
7
+ src:
8
+ url(data:application/x-font-ttf;charset=utf-8;;base64,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)
8
9
  format('truetype'),
9
10
  url(data:application/font-woff;charset=utf-8;base64,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)
10
11
  format('woff');
@@ -307,9 +307,11 @@ body.has-toolbar.has-sidebar-collapsed .ui.wrapper > .ui.inner.block.full {
307
307
  left: 50%;
308
308
  display: flex;
309
309
  padding: 4px;
310
- background-color: rgba(255, 255, 255, 0.975);
311
310
  border-radius: 2px;
312
- box-shadow: 0 0 8px rgba(0, 0, 0, 0.1), 0 2px 4px rgba(0, 0, 0, 0.05);
311
+ background-color: rgba(255, 255, 255, 0.975);
312
+ box-shadow:
313
+ 0 0 8px rgba(0, 0, 0, 0.1),
314
+ 0 2px 4px rgba(0, 0, 0, 0.05);
313
315
  transform: translate(-50%, 0);
314
316
 
315
317
  form {
@@ -331,8 +333,8 @@ body.has-toolbar.has-sidebar-collapsed .ui.wrapper > .ui.inner.block.full {
331
333
 
332
334
  .ui.icon.button {
333
335
  padding: 4px;
334
- margin-left: 4px;
335
336
  border-radius: 1px;
337
+ margin-left: 4px;
336
338
  color: @brown !important;
337
339
 
338
340
  &:hover {
@@ -352,9 +354,11 @@ body.has-toolbar.has-sidebar-collapsed .ui.wrapper > .ui.inner.block.full {
352
354
  width: ~'min(100%, 450px)';
353
355
  height: 40px;
354
356
  padding: 4px;
355
- background-color: rgba(255, 255, 255, 0.975);
356
357
  border-radius: 2px;
357
- box-shadow: 0 0 8px rgba(0, 0, 0, 0.1), 0 2px 4px rgba(0, 0, 0, 0.05);
358
+ background-color: rgba(255, 255, 255, 0.975);
359
+ box-shadow:
360
+ 0 0 8px rgba(0, 0, 0, 0.1),
361
+ 0 2px 4px rgba(0, 0, 0, 0.05);
358
362
 
359
363
  form {
360
364
  display: flex;
@@ -380,8 +384,8 @@ body.has-toolbar.has-sidebar-collapsed .ui.wrapper > .ui.inner.block.full {
380
384
 
381
385
  .ui.icon.button {
382
386
  padding: 4px;
383
- margin-left: 4px;
384
387
  border-radius: 1px;
388
+ margin-left: 4px;
385
389
  color: @brown !important;
386
390
 
387
391
  &:hover {
@@ -482,8 +486,8 @@ body.has-toolbar.has-sidebar-collapsed .ui.wrapper > .ui.inner.block.full {
482
486
  ); // This is to compensate the width of the icon and center it correctly
483
487
  padding: 0 !important;
484
488
  border: none !important;
485
- background: white !important;
486
489
  border-radius: 50% !important;
490
+ background: white !important;
487
491
  }
488
492
 
489
493
  &:not(.new-add-block) {
@@ -552,8 +556,8 @@ body.has-toolbar.has-sidebar-collapsed .ui.wrapper > .ui.inner.block.full {
552
556
  color: #b8c6c8;
553
557
 
554
558
  .icon {
555
- background: rgba(255, 255, 255, 0.2);
556
559
  border-radius: 2px;
560
+ background: rgba(255, 255, 255, 0.2);
557
561
  }
558
562
 
559
563
  &:hover {
@@ -579,8 +583,8 @@ body.has-toolbar.has-sidebar-collapsed .ui.wrapper > .ui.inner.block.full {
579
583
  .callout {
580
584
  padding: 1em;
581
585
  border: 1px solid rgba(34, 36, 38, 0.15);
582
- margin: 1rem 0;
583
586
  border-radius: 0.28571429rem;
587
+ margin: 1rem 0;
584
588
  box-shadow: 0 1px 2px 0 rgba(34, 36, 38, 0.15);
585
589
  }
586
590
 
@@ -604,8 +608,8 @@ body.has-toolbar.has-sidebar-collapsed .ui.wrapper > .ui.inner.block.full {
604
608
  // HTML block
605
609
  .html-editor {
606
610
  z-index: 1;
607
- background-color: #f3f6f7;
608
611
  border-radius: 4px;
612
+ background-color: #f3f6f7;
609
613
  font-family: monospace;
610
614
  font-size: @16px;
611
615
  word-break: break-all !important;
@@ -715,9 +719,11 @@ body.has-toolbar.has-sidebar-collapsed .ui.wrapper > .ui.inner.block.full {
715
719
  .blocks-chooser {
716
720
  width: 310px;
717
721
  padding: 4px;
718
- background-color: rgba(255, 255, 255, 0.975);
719
722
  border-radius: 2px;
720
- box-shadow: 0 0 8px rgba(0, 0, 0, 0.1), 0 2px 4px rgba(0, 0, 0, 0.05);
723
+ background-color: rgba(255, 255, 255, 0.975);
724
+ box-shadow:
725
+ 0 0 8px rgba(0, 0, 0, 0.1),
726
+ 0 2px 4px rgba(0, 0, 0, 0.05);
721
727
 
722
728
  &:not(.new-add-block) {
723
729
  top: -12px;
@@ -731,9 +737,9 @@ body.has-toolbar.has-sidebar-collapsed .ui.wrapper > .ui.inner.block.full {
731
737
  align-items: center;
732
738
  justify-content: center;
733
739
  padding: 20px 0;
740
+ border-radius: 3px;
734
741
  margin-top: 5px;
735
742
  margin-bottom: 5px;
736
- border-radius: 3px;
737
743
  color: @brown !important;
738
744
  hyphens: auto;
739
745
  text-align: center;
@@ -995,8 +1001,8 @@ body.has-toolbar.has-sidebar-collapsed .ui.wrapper > .ui.inner.block.full {
995
1001
  display: flex;
996
1002
  justify-content: space-between;
997
1003
  padding: 0.5rem;
998
- background-color: #faf8f8;
999
1004
  border-radius: 0.3rem;
1005
+ background-color: #faf8f8;
1000
1006
  }
1001
1007
 
1002
1008
  .active.title .filter-list-title svg {
@@ -27,8 +27,8 @@
27
27
  right: -0.25rem;
28
28
  width: 0.5rem;
29
29
  height: 0.5rem;
30
- background-color: @red;
31
30
  border-radius: 100%;
31
+ background-color: @red;
32
32
  content: '';
33
33
  }
34
34
  }
@@ -46,8 +46,8 @@
46
46
 
47
47
  .ui.icon.button {
48
48
  padding: 10px;
49
- margin-left: 4px;
50
49
  border-radius: 1px;
50
+ margin-left: 4px;
51
51
  color: @brown !important;
52
52
 
53
53
  &:hover {
@@ -192,6 +192,10 @@
192
192
  white-space: normal;
193
193
  word-break: break-all;
194
194
  }
195
+
196
+ .broken-links-list-link-wrapper {
197
+ margin-top: 30px;
198
+ }
195
199
  }
196
200
 
197
201
  .contenttype-event {