design-comuni-plone-theme 11.22.0 → 11.23.0

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 (31) hide show
  1. package/.yarn/install-state.gz +0 -0
  2. package/CHANGELOG.md +30 -0
  3. package/RELEASE.md +15 -0
  4. package/locales/de/LC_MESSAGES/volto.po +2 -0
  5. package/locales/en/LC_MESSAGES/volto.po +2 -0
  6. package/locales/es/LC_MESSAGES/volto.po +2 -0
  7. package/locales/fr/LC_MESSAGES/volto.po +2 -0
  8. package/locales/it/LC_MESSAGES/volto.po +2 -0
  9. package/locales/volto.pot +3 -1
  10. package/package.json +1 -1
  11. package/publiccode.yml +2 -2
  12. package/src/components/ItaliaTheme/AppExtras/GenericAppExtras.jsx +1 -2
  13. package/src/components/ItaliaTheme/Blocks/Accordion/Edit.jsx +44 -0
  14. package/src/components/ItaliaTheme/Blocks/Accordion/View.jsx +23 -0
  15. package/src/components/ItaliaTheme/Blocks/BandiSearch/Body.jsx +4 -0
  16. package/src/components/ItaliaTheme/Blocks/Common/SearchFilters/DateFilter.jsx +3 -2
  17. package/src/components/ItaliaTheme/Blocks/Common/SearchFilters/TextFilter.jsx +1 -0
  18. package/src/components/ItaliaTheme/Blocks/EventSearch/Body.jsx +9 -0
  19. package/src/components/ItaliaTheme/Blocks/SearchSections/Body.jsx +1 -0
  20. package/src/components/ItaliaTheme/Blocks/UOSearch/Body.jsx +1 -0
  21. package/src/components/ItaliaTheme/CustomerSatisfaction/Steps/AnswersStep.jsx +1 -0
  22. package/src/components/ItaliaTheme/CustomerSatisfaction/Steps/CommentsStep.jsx +1 -0
  23. package/src/components/ItaliaTheme/LoginAgid/LoginAgid.jsx +2 -5
  24. package/src/components/ItaliaTheme/Search/Search.jsx +2 -3
  25. package/src/components/ItaliaTheme/Unauthorized/Unauthorized.jsx +2 -5
  26. package/src/components/ItaliaTheme/View/Commons/Gallery.jsx +35 -28
  27. package/src/config/Blocks/ListingOptions/cardWithSlideUpTextTemplate.js +6 -1
  28. package/src/customizations/volto/helpers/BodyClass/BodyClass.jsx +78 -0
  29. package/src/theme/ItaliaTheme/Blocks/_accordion.scss +12 -0
  30. package/src/theme/ItaliaTheme/Blocks/_form.scss +38 -32
  31. package/src/theme/ItaliaTheme/Views/_common.scss +27 -0
Binary file
package/CHANGELOG.md CHANGED
@@ -1,5 +1,35 @@
1
1
 
2
2
 
3
+ ## [11.23.0](https://github.com/RedTurtle/design-comuni-plone-theme/compare/v11.22.1...v11.23.0) (2024-09-19)
4
+
5
+
6
+ ### Features
7
+
8
+ * title and description for block accordion - v11 ([#765](https://github.com/RedTurtle/design-comuni-plone-theme/issues/765)) ([93e4926](https://github.com/RedTurtle/design-comuni-plone-theme/commit/93e49267e1d896ea08b99ad1860b479f4b7bcd89))
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * added autocomplete attribute in search and customer satisfaction fields ([#768](https://github.com/RedTurtle/design-comuni-plone-theme/issues/768)) ([8de28b9](https://github.com/RedTurtle/design-comuni-plone-theme/commit/8de28b9325ffba67e47431d948f035556e100649))
14
+ * added block id to date ids to ensure unique field ids ([#771](https://github.com/RedTurtle/design-comuni-plone-theme/issues/771)) ([4c9f6c1](https://github.com/RedTurtle/design-comuni-plone-theme/commit/4c9f6c1cead8f6185effd7d287823bb6d8cdaa0c))
15
+ * added filter for eventi rassegne in Event Search ([#774](https://github.com/RedTurtle/design-comuni-plone-theme/issues/774)) ([2f6c69c](https://github.com/RedTurtle/design-comuni-plone-theme/commit/2f6c69c20326568350d32d540a75da28bf017b70))
16
+ * added max-width attribute to row to fit elements within page when zoomed in ([#773](https://github.com/RedTurtle/design-comuni-plone-theme/issues/773)) ([92ab586](https://github.com/RedTurtle/design-comuni-plone-theme/commit/92ab5867ee677280e326b9af2af14decbc163cc8))
17
+ * added submit type attribute to search submit buttons ([#769](https://github.com/RedTurtle/design-comuni-plone-theme/issues/769)) ([bf5a9a6](https://github.com/RedTurtle/design-comuni-plone-theme/commit/bf5a9a6f03bbb27322816743b4b8d1e2cbcafdb1))
18
+ * removed id_lighthouse field in cardWithSlideUpTextTemplate ([#762](https://github.com/RedTurtle/design-comuni-plone-theme/issues/762)) ([aa4fe58](https://github.com/RedTurtle/design-comuni-plone-theme/commit/aa4fe58d6db372a2848efe429e78fceb1203f54d))
19
+ * slider styles + arrows in ct gallery ([#764](https://github.com/RedTurtle/design-comuni-plone-theme/issues/764)) ([c1bbdb9](https://github.com/RedTurtle/design-comuni-plone-theme/commit/c1bbdb998a145c608e0fc8da5d23223ddaa0ac12))
20
+
21
+
22
+ ### Documentation
23
+
24
+ * updated publiccode and release log ([f43b737](https://github.com/RedTurtle/design-comuni-plone-theme/commit/f43b737e4ef0438182f371f46d30002d1459d21d))
25
+
26
+ ## [11.22.1](https://github.com/RedTurtle/design-comuni-plone-theme/compare/v11.22.0...v11.22.1) (2024-09-09)
27
+
28
+
29
+ ### Bug Fixes
30
+
31
+ * removed RemoveBodyClass component in favor of a customized BodyClass component ([61062d8](https://github.com/RedTurtle/design-comuni-plone-theme/commit/61062d84041f52182c2d04716b0411673a98e1f9))
32
+
3
33
  ## [11.22.0](https://github.com/RedTurtle/design-comuni-plone-theme/compare/v11.21.1...v11.22.0) (2024-09-05)
4
34
 
5
35
 
package/RELEASE.md CHANGED
@@ -41,6 +41,21 @@
41
41
  - ...
42
42
  -->
43
43
 
44
+ ## Versione 11.23.0 (19/09/2024)
45
+
46
+ ### Migliorie
47
+
48
+ - Migliorato il layout della galleria immagini nei CT.
49
+ - Nel blocco Cerca Evento, nel caso di un Evento Rassegna, tra i risultati vengono ora visualizzati solo gli appuntamenti della rassegna e non l'evento contenitore.
50
+
51
+ ### Novità
52
+
53
+ - Aggiunto campo per l'inserimento del titolo e della descrizione nel blocco Accordion.
54
+
55
+ ### Fix
56
+
57
+ - Rimosso il campo "ID lighthouse" dal blocco elenco con variazione Card con Testo Animato perchè entra in contrasto con asseveratore. Pianificato evento per ripristinarlo.
58
+
44
59
  ## Versione 11.22.0 (05/09/2024)
45
60
 
46
61
  ### Migliorie
@@ -191,6 +191,7 @@ msgstr ""
191
191
  msgid "Description"
192
192
  msgstr ""
193
193
 
194
+ #: components/ItaliaTheme/Blocks/Accordion/Edit
194
195
  #: components/ItaliaTheme/Blocks/IconBlocks/Edit
195
196
  #: components/ItaliaTheme/Blocks/NumbersBlock/Block/EditBlock
196
197
  # defaultMessage: Descrizione...
@@ -595,6 +596,7 @@ msgstr ""
595
596
  msgid "Thank you."
596
597
  msgstr ""
597
598
 
599
+ #: components/ItaliaTheme/Blocks/Accordion/Edit
598
600
  #: components/ItaliaTheme/Blocks/ContactsBlock/Edit
599
601
  #: components/ItaliaTheme/Blocks/IconBlocks/Edit
600
602
  #: components/ItaliaTheme/Blocks/VideoGallery/Edit
@@ -176,6 +176,7 @@ msgstr "Between {start} and {end}"
176
176
  msgid "Description"
177
177
  msgstr ""
178
178
 
179
+ #: components/ItaliaTheme/Blocks/Accordion/Edit
179
180
  #: components/ItaliaTheme/Blocks/IconBlocks/Edit
180
181
  #: components/ItaliaTheme/Blocks/NumbersBlock/Block/EditBlock
181
182
  # defaultMessage: Descrizione...
@@ -580,6 +581,7 @@ msgstr ""
580
581
  msgid "Thank you."
581
582
  msgstr ""
582
583
 
584
+ #: components/ItaliaTheme/Blocks/Accordion/Edit
583
585
  #: components/ItaliaTheme/Blocks/ContactsBlock/Edit
584
586
  #: components/ItaliaTheme/Blocks/IconBlocks/Edit
585
587
  #: components/ItaliaTheme/Blocks/VideoGallery/Edit
@@ -185,6 +185,7 @@ msgstr ""
185
185
  msgid "Description"
186
186
  msgstr "Descripción..."
187
187
 
188
+ #: components/ItaliaTheme/Blocks/Accordion/Edit
188
189
  #: components/ItaliaTheme/Blocks/IconBlocks/Edit
189
190
  #: components/ItaliaTheme/Blocks/NumbersBlock/Block/EditBlock
190
191
  # defaultMessage: Descrizione...
@@ -589,6 +590,7 @@ msgstr "Texto..."
589
590
  msgid "Thank you."
590
591
  msgstr "Gracias."
591
592
 
593
+ #: components/ItaliaTheme/Blocks/Accordion/Edit
592
594
  #: components/ItaliaTheme/Blocks/ContactsBlock/Edit
593
595
  #: components/ItaliaTheme/Blocks/IconBlocks/Edit
594
596
  #: components/ItaliaTheme/Blocks/VideoGallery/Edit
@@ -193,6 +193,7 @@ msgstr ""
193
193
  msgid "Description"
194
194
  msgstr ""
195
195
 
196
+ #: components/ItaliaTheme/Blocks/Accordion/Edit
196
197
  #: components/ItaliaTheme/Blocks/IconBlocks/Edit
197
198
  #: components/ItaliaTheme/Blocks/NumbersBlock/Block/EditBlock
198
199
  # defaultMessage: Descrizione...
@@ -597,6 +598,7 @@ msgstr ""
597
598
  msgid "Thank you."
598
599
  msgstr "Merci."
599
600
 
601
+ #: components/ItaliaTheme/Blocks/Accordion/Edit
600
602
  #: components/ItaliaTheme/Blocks/ContactsBlock/Edit
601
603
  #: components/ItaliaTheme/Blocks/IconBlocks/Edit
602
604
  #: components/ItaliaTheme/Blocks/VideoGallery/Edit
@@ -176,6 +176,7 @@ msgstr "Dal {start} al {end}"
176
176
  msgid "Description"
177
177
  msgstr "Descrizione"
178
178
 
179
+ #: components/ItaliaTheme/Blocks/Accordion/Edit
179
180
  #: components/ItaliaTheme/Blocks/IconBlocks/Edit
180
181
  #: components/ItaliaTheme/Blocks/NumbersBlock/Block/EditBlock
181
182
  # defaultMessage: Descrizione...
@@ -580,6 +581,7 @@ msgstr "Testo..."
580
581
  msgid "Thank you."
581
582
  msgstr "Grazie."
582
583
 
584
+ #: components/ItaliaTheme/Blocks/Accordion/Edit
583
585
  #: components/ItaliaTheme/Blocks/ContactsBlock/Edit
584
586
  #: components/ItaliaTheme/Blocks/IconBlocks/Edit
585
587
  #: components/ItaliaTheme/Blocks/VideoGallery/Edit
package/locales/volto.pot CHANGED
@@ -1,7 +1,7 @@
1
1
  msgid ""
2
2
  msgstr ""
3
3
  "Project-Id-Version: Plone\n"
4
- "POT-Creation-Date: 2024-09-05T11:07:39.844Z\n"
4
+ "POT-Creation-Date: 2024-09-10T12:46:37.907Z\n"
5
5
  "Last-Translator: Plone i18n <plone-i18n@lists.sourceforge.net>\n"
6
6
  "Language-Team: Plone i18n <plone-i18n@lists.sourceforge.net>\n"
7
7
  "MIME-Version: 1.0\n"
@@ -178,6 +178,7 @@ msgstr ""
178
178
  msgid "Description"
179
179
  msgstr ""
180
180
 
181
+ #: components/ItaliaTheme/Blocks/Accordion/Edit
181
182
  #: components/ItaliaTheme/Blocks/IconBlocks/Edit
182
183
  #: components/ItaliaTheme/Blocks/NumbersBlock/Block/EditBlock
183
184
  # defaultMessage: Descrizione...
@@ -582,6 +583,7 @@ msgstr ""
582
583
  msgid "Thank you."
583
584
  msgstr ""
584
585
 
586
+ #: components/ItaliaTheme/Blocks/Accordion/Edit
585
587
  #: components/ItaliaTheme/Blocks/ContactsBlock/Edit
586
588
  #: components/ItaliaTheme/Blocks/IconBlocks/Edit
587
589
  #: components/ItaliaTheme/Blocks/VideoGallery/Edit
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "design-comuni-plone-theme",
3
3
  "description": "Volto Theme for Italia design guidelines",
4
4
  "license": "GPL-v3",
5
- "version": "11.22.0",
5
+ "version": "11.23.0",
6
6
  "main": "src/index.js",
7
7
  "repository": {
8
8
  "type": "git",
package/publiccode.yml CHANGED
@@ -227,9 +227,9 @@ maintenance:
227
227
  name: io-Comune - Il sito AgID per Comuni ed Enti Pubblici
228
228
  platforms:
229
229
  - web
230
- releaseDate: '2024-09-05'
230
+ releaseDate: '2024-09-19'
231
231
  softwareType: standalone/web
232
- softwareVersion: 11.22.0
232
+ softwareVersion: 11.23.0
233
233
  url: 'https://github.com/italia/design-comuni-plone-theme'
234
234
  usedBy:
235
235
  - ASP Comuni Modenesi Area Nord
@@ -2,7 +2,6 @@ import React from 'react';
2
2
  import { useSelector } from 'react-redux';
3
3
  import { useLocation } from 'react-router-dom';
4
4
  import { BodyClass } from '@plone/volto/helpers';
5
- import { RemoveBodyClass } from 'design-comuni-plone-theme/components/ItaliaTheme';
6
5
  import ScrollToTop from 'design-comuni-plone-theme/components/ItaliaTheme/ScrollToTop/ScrollToTop';
7
6
  import { SubsiteLoader } from 'volto-subsites';
8
7
  import config from '@plone/volto/registry';
@@ -28,7 +27,7 @@ const GenericAppExtras = (props) => {
28
27
  {isPublicUI && (
29
28
  <>
30
29
  <BodyClass className="public-ui" />
31
- <RemoveBodyClass className="cms-ui" />
30
+ <BodyClass className="cms-ui" remove={true} />
32
31
  </>
33
32
  )}
34
33
  <ScrollToTop />
@@ -18,11 +18,21 @@ import Sidebar from './Sidebar.jsx';
18
18
 
19
19
  import { defineMessages } from 'react-intl';
20
20
 
21
+ import { TextEditorWidget } from 'design-comuni-plone-theme/components/ItaliaTheme';
22
+
21
23
  const messages = defineMessages({
22
24
  addItem: {
23
25
  id: 'Add accordion item',
24
26
  defaultMessage: 'Aggiungi elemento',
25
27
  },
28
+ title: {
29
+ id: 'Title',
30
+ defaultMessage: 'Titolo...',
31
+ },
32
+ description: {
33
+ id: 'Description placeholder',
34
+ defaultMessage: 'Descrizione...',
35
+ },
26
36
  });
27
37
  /**
28
38
  * Edit Accordion block class.
@@ -45,6 +55,40 @@ class Edit extends SubblocksEdit {
45
55
  <Container className="px-md-4">
46
56
  <Card className="card-bg rounded" noWrapper={false} space tag="div">
47
57
  <CardBody tag="div">
58
+ <TextEditorWidget
59
+ data={this.props.data}
60
+ fieldName="title"
61
+ selected={this.state.selectedField === 'title'}
62
+ block={this.props.block}
63
+ onChangeBlock={(data) => {
64
+ this.props.onChangeBlock(this.props.block, {
65
+ ...data,
66
+ });
67
+ }}
68
+ placeholder={this.props.intl.formatMessage(messages.title)}
69
+ showToolbar={false}
70
+ onSelectBlock={() => {}}
71
+ onAddBlock={() => {
72
+ this.setState({ selectedField: 'description' });
73
+ }}
74
+ />
75
+ <TextEditorWidget
76
+ data={this.props.data}
77
+ fieldName="description"
78
+ selected={this.state.selectedField === 'description'}
79
+ block={this.props.block}
80
+ onChangeBlock={(data) =>
81
+ this.props.onChangeBlock(this.props.block, {
82
+ ...data,
83
+ })
84
+ }
85
+ placeholder={this.props.intl.formatMessage(
86
+ messages.description,
87
+ )}
88
+ showToolbar={true}
89
+ onSelectBlock={() => {}}
90
+ onAddBlock={() => {}}
91
+ />
48
92
  <SubblocksWrapper node={this.node}>
49
93
  {this.state.subblocks.map((subblock, subindex) => (
50
94
  <div className="accordion-item" key={subblock.id}>
@@ -7,6 +7,9 @@ import React, { useState } from 'react';
7
7
  import PropTypes from 'prop-types';
8
8
  import ViewBlock from './Block/ViewBlock';
9
9
  import { Container, Card, CardBody } from 'design-react-kit';
10
+ import redraft from 'redraft';
11
+ import config from '@plone/volto/registry';
12
+ import { checkRedraftHasContent } from 'design-comuni-plone-theme/helpers';
10
13
 
11
14
  /**
12
15
  * View Accordion block class.
@@ -25,6 +28,26 @@ const AccordionView = ({ data, block }) => {
25
28
  <div className="full-width section section-muted section-inset-shadow py-5">
26
29
  <Container className="px-md-4">
27
30
  <Card className="card-bg rounded" noWrapper={false} space tag="div">
31
+ <div className="block-header">
32
+ {checkRedraftHasContent(data.title) && (
33
+ <div className="title">
34
+ {redraft(
35
+ data.title,
36
+ config.settings.richtextViewSettings.ToHTMLRenderers,
37
+ config.settings.richtextViewSettings.ToHTMLOptions,
38
+ )}
39
+ </div>
40
+ )}
41
+ {checkRedraftHasContent(data.description) && (
42
+ <div className="description">
43
+ {redraft(
44
+ data.description,
45
+ config.settings.richtextViewSettings.ToHTMLRenderers,
46
+ config.settings.richtextViewSettings.ToHTMLOptions,
47
+ )}
48
+ </div>
49
+ )}
50
+ </div>
28
51
  <CardBody tag="div">
29
52
  {data.subblocks.map((subblock, index) => (
30
53
  <ViewBlock
@@ -167,6 +167,7 @@ const Body = ({ data, id, inEditMode, path, onChangeBlock }) => {
167
167
  <>
168
168
  {React.createElement(filterOne.widget.component, {
169
169
  ...filterOne.widget?.props,
170
+ blockID: id,
170
171
  id: 'filterOne',
171
172
  onChange: (filter, value) => {
172
173
  dispatchFilter({
@@ -180,6 +181,7 @@ const Body = ({ data, id, inEditMode, path, onChangeBlock }) => {
180
181
  {filterTwo &&
181
182
  React.createElement(filterTwo.widget?.component, {
182
183
  ...filterTwo.widget?.props,
184
+ blockID: id,
183
185
  id: 'filterTwo',
184
186
  onChange: (filter, value) =>
185
187
  dispatchFilter({
@@ -190,6 +192,7 @@ const Body = ({ data, id, inEditMode, path, onChangeBlock }) => {
190
192
  {filterThree &&
191
193
  React.createElement(filterThree.widget?.component, {
192
194
  ...filterThree.widget?.props,
195
+ blockID: id,
193
196
  id: 'filterThree',
194
197
  onChange: (filter, value) =>
195
198
  dispatchFilter({
@@ -203,6 +206,7 @@ const Body = ({ data, id, inEditMode, path, onChangeBlock }) => {
203
206
  icon={false}
204
207
  tag="button"
205
208
  className="my-2 my-lg-1"
209
+ type="submit"
206
210
  >
207
211
  {intl.formatMessage(messages.find)}
208
212
  </Button>
@@ -188,6 +188,7 @@ const DateFilter = (props) => {
188
188
  endLabel,
189
189
  defaultStart,
190
190
  defaultEnd,
191
+ blockID,
191
192
  ...rest
192
193
  } = props;
193
194
  const { DateRangePicker } = reactDates;
@@ -230,12 +231,12 @@ const DateFilter = (props) => {
230
231
  <DateRangePicker
231
232
  {...rest}
232
233
  startDate={value?.startDate || defaultStart}
233
- startDateId="start-date-filter"
234
+ startDateId={`start-date-filter-${blockID}`}
234
235
  startDatePlaceholderText={
235
236
  startLabel ?? intl.formatMessage(messages.eventSearchStartDate)
236
237
  }
237
238
  endDate={value?.endDate || defaultEnd}
238
- endDateId="end-date-filter"
239
+ endDateId={`end-date-filter-${blockID}`}
239
240
  endDatePlaceholderText={
240
241
  endLabel ?? intl.formatMessage(messages.eventSearchEndDate)
241
242
  }
@@ -21,6 +21,7 @@ const TextFilter = ({ value, id, onChange, placeholder }) => {
21
21
  onChange={(e, data) => {
22
22
  onChange(id, e.target.value ?? '');
23
23
  }}
24
+ autocomplete="off"
24
25
  />
25
26
  </div>
26
27
  );
@@ -75,6 +75,11 @@ const Body = ({ data, id, inEditMode, path, onChangeBlock }) => {
75
75
  o: 'plone.app.querystring.operation.selection.any',
76
76
  v: ['Event'],
77
77
  },
78
+ {
79
+ i: 'rassegna',
80
+ o: 'plone.app.querystring.operation.boolean.isFalse',
81
+ v: '',
82
+ },
78
83
  ];
79
84
 
80
85
  [filterOne, filterTwo, filterThree].forEach((f) => {
@@ -177,6 +182,7 @@ const Body = ({ data, id, inEditMode, path, onChangeBlock }) => {
177
182
  <>
178
183
  {React.createElement(filterOne.widget.component, {
179
184
  ...filterOne.widget?.props,
185
+ blockID: id,
180
186
  id: 'filterOne',
181
187
  onChange: (filter, value) => {
182
188
  dispatchFilter({
@@ -190,6 +196,7 @@ const Body = ({ data, id, inEditMode, path, onChangeBlock }) => {
190
196
  {filterTwo &&
191
197
  React.createElement(filterTwo.widget?.component, {
192
198
  ...filterTwo.widget?.props,
199
+ blockID: id,
193
200
  id: 'filterTwo',
194
201
  onChange: (filter, value) =>
195
202
  dispatchFilter({
@@ -200,6 +207,7 @@ const Body = ({ data, id, inEditMode, path, onChangeBlock }) => {
200
207
  {filterThree &&
201
208
  React.createElement(filterThree.widget?.component, {
202
209
  ...filterThree.widget?.props,
210
+ blockID: id,
203
211
  id: 'filterThree',
204
212
  onChange: (filter, value) =>
205
213
  dispatchFilter({
@@ -213,6 +221,7 @@ const Body = ({ data, id, inEditMode, path, onChangeBlock }) => {
213
221
  icon={false}
214
222
  tag="button"
215
223
  className="my-2 my-lg-1"
224
+ type="submit"
216
225
  >
217
226
  {intl.formatMessage(messages.find)}
218
227
  </Button>
@@ -77,6 +77,7 @@ const Body = ({ block, sections }) => {
77
77
  e.key === 'Enter' ? navigate(inputText, searchFilters()) : null
78
78
  }
79
79
  aria-label={block.placeholder}
80
+ autocomplete="off"
80
81
  ></input>
81
82
  </div>
82
83
  <div className="buttonsContainer mt-2 d-flex">
@@ -198,6 +198,7 @@ const Body = ({ data, id, inEditMode, path, onChangeBlock }) => {
198
198
  icon={false}
199
199
  tag="button"
200
200
  className="my-2 my-lg-1"
201
+ type="submit"
201
202
  >
202
203
  {intl.formatMessage(messages.find)}
203
204
  </Button>
@@ -95,6 +95,7 @@ const AnswersStep = ({
95
95
  checked={s === selectedAnswer}
96
96
  value={s}
97
97
  onChange={handleAnswerChange}
98
+ autocomplete="off"
98
99
  />
99
100
  <Label
100
101
  for={'positive-' + s}
@@ -80,6 +80,7 @@ const CommentsStep = ({
80
80
  invalid={invalid}
81
81
  className="mt-1"
82
82
  data-element="feedback-input-text"
83
+ autoComplete="off"
83
84
  />
84
85
  </FormGroup>
85
86
  </Form>
@@ -11,10 +11,7 @@ import { defineMessages, useIntl } from 'react-intl';
11
11
  import { withRouter } from 'react-router-dom';
12
12
  import { Login } from '@plone/volto/components';
13
13
  import { Row, Col, Container } from 'design-react-kit';
14
- import {
15
- RemoveBodyClass,
16
- LoginAgidButtons,
17
- } from 'design-comuni-plone-theme/components/ItaliaTheme';
14
+ import { LoginAgidButtons } from 'design-comuni-plone-theme/components/ItaliaTheme';
18
15
  import { Button } from 'design-react-kit';
19
16
  import { useLocation } from 'react-router-dom';
20
17
  import { getBaseUrl } from '@plone/volto/helpers';
@@ -72,7 +69,7 @@ const LoginAgid = (props) => {
72
69
  <div id="page-login">
73
70
  <Helmet title={intl.formatMessage(messages.login)} />
74
71
  <BodyClass className="public-ui" />
75
- <RemoveBodyClass className="cms-ui" />
72
+ <BodyClass className="cms-ui" remove={true} />
76
73
  <Container className="view-wrapper py-5">
77
74
  <Row className="view-container">
78
75
  <Col xs={12} lg={{ size: 10, offset: 1 }}>
@@ -24,7 +24,7 @@ import {
24
24
  import { Skiplink, SkiplinkItem } from 'design-react-kit';
25
25
  import { useLocation, useHistory } from 'react-router-dom';
26
26
 
27
- import { Helmet, flattenToAppURL } from '@plone/volto/helpers';
27
+ import { Helmet, flattenToAppURL, BodyClass } from '@plone/volto/helpers';
28
28
  import { resetSubsite } from 'volto-subsites';
29
29
 
30
30
  import {
@@ -33,7 +33,6 @@ import {
33
33
  SearchTopics,
34
34
  SearchCTs,
35
35
  Icon,
36
- RemoveBodyClass,
37
36
  SearchResultItem,
38
37
  } from 'design-comuni-plone-theme/components/ItaliaTheme';
39
38
  import {
@@ -727,7 +726,7 @@ const Search = () => {
727
726
  </Container>
728
727
  </div>
729
728
  {/*force remove body class for subsite search pages*/}
730
- <RemoveBodyClass className="cms-ui" />
729
+ <BodyClass className="cms-ui" remove={true} />
731
730
  </>
732
731
  );
733
732
  };
@@ -13,10 +13,7 @@ import { BodyClass } from '@plone/volto/helpers';
13
13
  import { useLocation } from 'react-router-dom';
14
14
  import { getBaseUrl } from '@plone/volto/helpers';
15
15
  import config from '@plone/volto/registry';
16
- import {
17
- LoginAgidButtons,
18
- RemoveBodyClass,
19
- } from 'design-comuni-plone-theme/components/ItaliaTheme';
16
+ import { LoginAgidButtons } from 'design-comuni-plone-theme/components/ItaliaTheme';
20
17
 
21
18
  /**
22
19
  * unauthorized function.
@@ -58,7 +55,7 @@ const Unauthorized = (props) => {
58
55
  return (
59
56
  <div id="unauthorized-agid" className="view-wrapper">
60
57
  <BodyClass className="public-ui" />
61
- <RemoveBodyClass className="cms-ui" />
58
+ <BodyClass className="cms-ui" remove={true} />
62
59
 
63
60
  <Container className="view-wrapper py-5">
64
61
  {spidLoginUrl || spidLogin ? (
@@ -13,6 +13,7 @@ import {
13
13
  SingleSlideWrapper,
14
14
  CarouselWrapper,
15
15
  } from 'design-comuni-plone-theme/components/ItaliaTheme';
16
+ import { useSlider } from 'design-comuni-plone-theme/components/ItaliaTheme/Slider/slider';
16
17
  import PropTypes from 'prop-types';
17
18
  import { contentFolderHasItems } from 'design-comuni-plone-theme/helpers';
18
19
  import { UniversalLink } from '@plone/volto/components';
@@ -50,6 +51,7 @@ const Gallery = ({
50
51
  reactSlick,
51
52
  }) => {
52
53
  const Slider = reactSlick.default;
54
+ const { SliderNextArrow, SliderPrevArrow } = useSlider();
53
55
  const Image = config.getComponent({ name: 'Image' }).component;
54
56
  const getSettings = (nItems, slideToScroll) => {
55
57
  return {
@@ -58,6 +60,8 @@ const Gallery = ({
58
60
  speed: 500,
59
61
  slidesToShow: nItems < 3 ? nItems : 3,
60
62
  slidesToScroll: slideToScroll ?? 3,
63
+ nextArrow: <SliderNextArrow intl={intl} />,
64
+ prevArrow: <SliderPrevArrow intl={intl} />,
61
65
  responsive: [
62
66
  {
63
67
  breakpoint: 1024,
@@ -154,37 +158,40 @@ const Gallery = ({
154
158
  <Slider {...getSettings(images.length)}>
155
159
  {images.map((item, i) => (
156
160
  <SingleSlideWrapper key={item['@id']} index={i}>
157
- <figure>
158
- <UniversalLink
159
- item={item}
160
- onClick={(e) => {
161
- e.preventDefault();
162
- e.stopPropagation();
163
- setViewImageIndex(i);
164
- }}
165
- onKeyDown={(e) => {
166
- if (e.keyCode === 13) {
161
+ <div className={'slide-wrapper'} role="presentation">
162
+ <figure className="img-wrapper">
163
+ <UniversalLink
164
+ item={item}
165
+ onClick={(e) => {
167
166
  e.preventDefault();
168
167
  e.stopPropagation();
169
168
  setViewImageIndex(i);
170
- }
171
- }}
172
- aria-label={`${intl.formatMessage(
173
- messages.viewPreview,
174
- )} ${item.title}`}
175
- >
176
- <Image
177
- item={item}
178
- alt={item.title}
179
- className="img-fluid"
180
- loading="lazy"
181
- sizes={`(max-width:320px) 300px, (max-width:425px) 400px, ${default_width_image}`}
182
- />
183
- </UniversalLink>
184
- <figcaption className="figure-caption mt-2">
185
- {item.title}
186
- </figcaption>
187
- </figure>
169
+ }}
170
+ onKeyDown={(e) => {
171
+ if (e.keyCode === 13) {
172
+ e.preventDefault();
173
+ e.stopPropagation();
174
+ setViewImageIndex(i);
175
+ }
176
+ }}
177
+ aria-label={`${intl.formatMessage(
178
+ messages.viewPreview,
179
+ )} ${item.title}`}
180
+ className="img-wrapper"
181
+ >
182
+ <Image
183
+ item={item}
184
+ alt={item.title}
185
+ className="img-fluid"
186
+ loading="lazy"
187
+ sizes={`(max-width:320px) 300px, (max-width:425px) 400px, ${default_width_image}`}
188
+ />
189
+ </UniversalLink>
190
+ <figcaption className="figure-caption mt-2">
191
+ {item.title}
192
+ </figcaption>
193
+ </figure>
194
+ </div>
188
195
  </SingleSlideWrapper>
189
196
  ))}
190
197
  </Slider>
@@ -13,7 +13,12 @@ export const addCardWithSlideUpTextTemplateOptions = (
13
13
  ) => {
14
14
  let pos = position;
15
15
 
16
- pos = addLighthouseField(schema, intl, pos);
16
+ // hidden to avoid use of lighthouse on this block
17
+ // which creates problems with asseverazione
18
+ // 1. clients instructed not to use this variation when data-element is needed
19
+ // 2. planned intervention to change structure of variation to allow use of
20
+ // data element without wrapping entire card in link
21
+ // pos = addLighthouseField(schema, intl, pos);
17
22
 
18
23
  pos = addDefaultOptions(schema, formData, intl, pos);
19
24
 
@@ -0,0 +1,78 @@
1
+ /**
2
+ * CUSTOMIZATIONS:
3
+ * - handle bodyclass removal
4
+ */
5
+ import { Component, Children } from 'react';
6
+ import PropTypes from 'prop-types';
7
+ import withSideEffect from 'react-side-effect';
8
+
9
+ /**
10
+ * @export
11
+ * @class BodyClass
12
+ * @extends {Component}
13
+ */
14
+ class BodyClass extends Component {
15
+ /**
16
+ * Render method.
17
+ * @method render
18
+ * @returns {string} Markup for the component.
19
+ */
20
+ render() {
21
+ if (this.props.children) {
22
+ return Children.only(this.props.children);
23
+ }
24
+ return null;
25
+ }
26
+ }
27
+
28
+ BodyClass.propTypes = {
29
+ children: PropTypes.element,
30
+ className: PropTypes.string,
31
+ remove: PropTypes.bool,
32
+ };
33
+
34
+ BodyClass.defaultProps = {
35
+ children: null,
36
+ className: null,
37
+ remove: false,
38
+ };
39
+
40
+ /**
41
+ * reducePropsToState
42
+ * @function reducePropsToState
43
+ * @param {*} propsList propsList
44
+ * @returns {List} classList
45
+ */
46
+ function reducePropsToState(propsList) {
47
+ let classList = [];
48
+ propsList.forEach((props) => {
49
+ if (props.className) {
50
+ if (props.remove) {
51
+ classList = classList.filter((c) => c !== props.className);
52
+ } else {
53
+ classList = classList.concat(props.className.split(' '));
54
+ }
55
+ }
56
+ });
57
+ return classList;
58
+ }
59
+
60
+ /**
61
+ * handleStateChangeOnClient
62
+ * @function handleStateChangeOnClient
63
+ * @param {*} classList classList
64
+ * @returns {null} null
65
+ */
66
+ function handleStateChangeOnClient(classList) {
67
+ document.body.className = '';
68
+ classList.forEach((className) => {
69
+ if (!document.body.classList.contains(className)) {
70
+ document.body.classList.add(className);
71
+ }
72
+ });
73
+ }
74
+
75
+ export default withSideEffect(
76
+ reducePropsToState,
77
+ handleStateChangeOnClient,
78
+ )(BodyClass);
@@ -3,6 +3,18 @@ $accordion-icon-color: #7fb2e5;
3
3
  .block.accordion {
4
4
  .section.full-width {
5
5
  height: auto;
6
+ .title {
7
+ font-size: 2.35rem !important;
8
+ font-weight: bold;
9
+ line-height: 3rem;
10
+
11
+ .DraftEditor-root {
12
+ .public-DraftEditorPlaceholder-root {
13
+ width: 100%;
14
+ font-size: 2.35rem;
15
+ }
16
+ }
17
+ }
6
18
 
7
19
  @media (max-width: #{map-get($grid-breakpoints, md)}) {
8
20
  padding: 0.5em;
@@ -1,45 +1,50 @@
1
1
  .public-ui {
2
2
  .block.form {
3
- @media (max-width: #{map-get($grid-breakpoints, md)}) {
4
- .form-group {
5
- display: flex;
6
- flex-direction: column;
7
-
8
- label {
9
- position: relative;
10
- order: 1;
11
- font-size: 0.777rem;
12
- line-height: 1.375rem;
13
- transform: none;
14
- transform: none;
15
- white-space: normal;
16
-
17
- &.active {
3
+ .row {
4
+ max-width: 100%;
5
+
6
+ @media (max-width: #{map-get($grid-breakpoints, md)}) {
7
+ .form-group {
8
+ display: flex;
9
+ flex-direction: column;
10
+ max-width: 100%;
11
+
12
+ label {
13
+ position: relative;
14
+ order: 1;
18
15
  font-size: 0.777rem;
16
+ line-height: 1.375rem;
17
+ transform: none;
19
18
  transform: none;
19
+ white-space: normal;
20
+
21
+ &.active {
22
+ font-size: 0.777rem;
23
+ transform: none;
24
+ }
20
25
  }
21
- }
22
26
 
23
- input,
24
- textarea,
25
- .form-input-file {
26
- order: 2;
27
- }
27
+ input,
28
+ textarea,
29
+ .form-input-file {
30
+ order: 2;
31
+ }
28
32
 
29
- input[type='date'] ~ label {
30
- font-size: 0.777rem;
31
- transform: none;
32
- }
33
+ input[type='date'] ~ label {
34
+ font-size: 0.777rem;
35
+ transform: none;
36
+ }
33
37
 
34
- small.form-text {
35
- position: relative;
36
- order: 3;
38
+ small.form-text {
39
+ position: relative;
40
+ order: 3;
41
+ }
37
42
  }
38
- }
39
43
 
40
- .form-input-file {
41
- .dropzone-placeholder {
42
- margin-top: 0;
44
+ .form-input-file {
45
+ .dropzone-placeholder {
46
+ margin-top: 0;
47
+ }
43
48
  }
44
49
  }
45
50
  }
@@ -65,6 +70,7 @@
65
70
  &,
66
71
  .volto-subblocks-wrapper,
67
72
  .form-field {
73
+ max-width: 100%;
68
74
  .single-block {
69
75
  .dragsubblock {
70
76
  top: 0.3rem;
@@ -367,3 +367,30 @@ dl.trasparenza-fields {
367
367
  @include rem-size(font-size, 16px);
368
368
  @include rem-size(line-height, 24px);
369
369
  }
370
+
371
+ // CT gallery slider
372
+ .it-carousel-wrapper {
373
+ .slider-container {
374
+ .slick-list .slick-track {
375
+ .slick-slide {
376
+ position: relative;
377
+ margin: 0 auto;
378
+
379
+ a {
380
+ height: 150px;
381
+ &.img-wrapper {
382
+ position: relative;
383
+ overflow: hidden;
384
+ width: 100%;
385
+ margin: 0;
386
+
387
+ img {
388
+ min-height: 150px;
389
+ object-fit: cover;
390
+ }
391
+ }
392
+ }
393
+ }
394
+ }
395
+ }
396
+ }