design-comuni-plone-theme 11.26.5 → 11.28.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 (66) hide show
  1. package/.yarn/cache/{volto-feedback-npm-0.5.2-c3471099a1-48c0763678.zip → volto-feedback-npm-0.6.0-42c860b5c3-49addbf819.zip} +0 -0
  2. package/.yarn/install-state.gz +0 -0
  3. package/CHANGELOG.md +55 -0
  4. package/RELEASE.md +33 -0
  5. package/locales/de/LC_MESSAGES/volto.po +104 -0
  6. package/locales/en/LC_MESSAGES/volto.po +105 -1
  7. package/locales/es/LC_MESSAGES/volto.po +104 -0
  8. package/locales/fr/LC_MESSAGES/volto.po +104 -0
  9. package/locales/it/LC_MESSAGES/volto.po +104 -0
  10. package/locales/volto.pot +105 -1
  11. package/package.json +2 -2
  12. package/publiccode.yml +2 -2
  13. package/src/components/ItaliaTheme/Blocks/Accordion/Block/ViewBlock.jsx +1 -0
  14. package/src/components/ItaliaTheme/Blocks/Listing/CardWithImage/CardWithImageDefault.jsx +1 -1
  15. package/src/components/ItaliaTheme/Blocks/Listing/CardWithSlideUpTextTemplate.jsx +23 -14
  16. package/src/components/ItaliaTheme/Blocks/Listing/Commons/ListingImage.jsx +17 -4
  17. package/src/components/ItaliaTheme/Blocks/Listing/CompleteBlockLinksTemplate.jsx +0 -1
  18. package/src/components/ItaliaTheme/Blocks/Listing/ContentInEvidenceTemplate.jsx +0 -1
  19. package/src/components/ItaliaTheme/Blocks/Listing/GridGalleryTemplate.jsx +4 -3
  20. package/src/components/ItaliaTheme/Blocks/Listing/InEvidenceTemplate.jsx +0 -1
  21. package/src/components/ItaliaTheme/Blocks/__tests__/Accordion.test.jsx +0 -3
  22. package/src/components/ItaliaTheme/Cards/CardPersona.jsx +1 -1
  23. package/src/components/ItaliaTheme/CustomerSatisfaction/FeedbackForm.jsx +25 -6
  24. package/src/components/ItaliaTheme/Header/HeaderSearch/HeaderSearch.jsx +9 -1
  25. package/src/components/ItaliaTheme/Header/HeaderSearch/SearchModal.jsx +10 -1
  26. package/src/components/ItaliaTheme/Header/HeaderSlim/HeaderSlim.jsx +15 -2
  27. package/src/components/ItaliaTheme/Header/HeaderSlim/TertiaryMenu.jsx +1 -1
  28. package/src/components/ItaliaTheme/Header/ParentSiteMenu.jsx +14 -1
  29. package/src/components/ItaliaTheme/SkipLinks/SkipLinks.jsx +9 -1
  30. package/src/components/ItaliaTheme/View/BandoView/BandoView.jsx +19 -1
  31. package/src/components/ItaliaTheme/View/Commons/PageHeader/PageHeader.jsx +3 -4
  32. package/src/components/ItaliaTheme/View/Commons/RelatedItemInEvidence/RelatedItemInEvidence.jsx +14 -1
  33. package/src/components/ItaliaTheme/View/Commons/RelatedItems.jsx +5 -1
  34. package/src/components/ItaliaTheme/View/Commons/SideMenu.jsx +10 -6
  35. package/src/components/ItaliaTheme/View/DocumentoView/DocumentoView.jsx +20 -1
  36. package/src/components/ItaliaTheme/View/EventoView/EventoView.jsx +20 -1
  37. package/src/components/ItaliaTheme/View/FAQ/FaqFolder/SearchBar.jsx +2 -0
  38. package/src/components/ItaliaTheme/View/NewsItemView/NewsItemView.jsx +19 -1
  39. package/src/components/ItaliaTheme/View/PaginaArgomentoView/PaginaArgomentoViewNoBlocks.jsx +14 -1
  40. package/src/components/ItaliaTheme/View/PersonaView/PersonaDocumenti.jsx +57 -20
  41. package/src/components/ItaliaTheme/View/PersonaView/PersonaView.jsx +20 -1
  42. package/src/components/ItaliaTheme/View/ServizioView/ServizioView.jsx +19 -2
  43. package/src/components/ItaliaTheme/View/UOView/UOView.jsx +20 -1
  44. package/src/components/ItaliaTheme/View/VenueView/VenueView.jsx +24 -11
  45. package/src/components/SelectInput/SelectInput.jsx +2 -1
  46. package/src/components/TextInput.jsx +1 -0
  47. package/src/config/Blocks/ListingOptions/cardWithSlideUpTextTemplate.js +1 -6
  48. package/src/config/italiaConfig.js +23 -2
  49. package/src/customizations/volto/components/manage/Blocks/Search/SearchBlockView.jsx +20 -1
  50. package/src/customizations/volto/components/manage/Blocks/Search/layout/LeftColumnFacets.jsx +21 -17
  51. package/src/customizations/volto/components/manage/Blocks/Search/layout/RightColumnFacets.jsx +21 -17
  52. package/src/customizations/volto/components/manage/Widgets/RecurrenceWidget/RecurrenceWidget.jsx +5 -2
  53. package/src/customizations/volto/components/theme/Footer/Footer.jsx +12 -5
  54. package/src/customizations/volto/components/theme/Navigation/Navigation.jsx +16 -2
  55. package/src/customizations/volto/helpers/FormValidation/FormValidation.js +8 -5
  56. package/src/customizations/volto-form-block/components/Field.jsx +7 -0
  57. package/src/customizations/volto-form-block/fieldSchema.js +345 -0
  58. package/src/overrideTranslations.jsx +4 -0
  59. package/src/theme/ItaliaTheme/Blocks/_cardWithImage.scss +1 -0
  60. package/src/theme/ItaliaTheme/Blocks/_cardWithSlideUpTextTemplate.scss +10 -0
  61. package/src/theme/ItaliaTheme/Blocks/_search.scss +20 -2
  62. package/src/theme/ItaliaTheme/Components/_cardPersona.scss +2 -0
  63. package/src/theme/ItaliaTheme/Views/_servizio.scss +6 -0
  64. package/src/theme/ItaliaTheme/_ar.scss +3 -2
  65. package/src/theme/bootstrap-override/_bootstrap-italia-site.scss +1 -0
  66. package/src/theme/bootstrap-override/bootstrap-italia/_form-select.scss +17 -0
@@ -15,6 +15,10 @@ const messages = defineMessages({
15
15
  id: 'skiplink-footer',
16
16
  defaultMessage: 'Skip to footer',
17
17
  },
18
+ skiplinks_description: {
19
+ id: 'skiplinks-description',
20
+ defaultMessage: 'Skiplinks',
21
+ },
18
22
  });
19
23
 
20
24
  const SkipLinks = () => {
@@ -32,7 +36,11 @@ const SkipLinks = () => {
32
36
 
33
37
  return (
34
38
  <div className="public-ui">
35
- <Skiplink tag="div">
39
+ <Skiplink
40
+ tag="div"
41
+ role="complementary"
42
+ aria-label={intl.formatMessage(messages.skiplinks_description)}
43
+ >
36
44
  <SkiplinkItem href="#view" tag="a">
37
45
  {intl.formatMessage(messages.mainView)}
38
46
  </SkiplinkItem>
@@ -5,6 +5,7 @@
5
5
 
6
6
  import React, { createRef } from 'react';
7
7
  import PropTypes from 'prop-types';
8
+ import { defineMessages, useIntl } from 'react-intl';
8
9
 
9
10
  import {
10
11
  PageHeader,
@@ -25,6 +26,17 @@ import {
25
26
  useSideMenu,
26
27
  } from 'design-comuni-plone-theme/components/ItaliaTheme/View';
27
28
 
29
+ const messages = defineMessages({
30
+ sideMenuIndex: {
31
+ id: 'sideMenuIndex',
32
+ defaultMessage: 'Indice della pagina',
33
+ },
34
+ bandoContent: {
35
+ id: 'bandoContent',
36
+ defaultMessage: 'Contenuto del Bando',
37
+ },
38
+ });
39
+
28
40
  export const BandoViewSectionsOrder = [
29
41
  { /* Testo */ component: BandoText },
30
42
  /* Responsabili */
@@ -46,6 +58,7 @@ export const BandoViewSectionsOrder = [
46
58
  */
47
59
  const BandoView = ({ content, location }) => {
48
60
  let documentBody = createRef();
61
+ const intl = useIntl();
49
62
  const { sideMenuElements, SideMenu } = useSideMenu(content, documentBody);
50
63
 
51
64
  return (
@@ -61,7 +74,10 @@ const BandoView = ({ content, location }) => {
61
74
  showbandostate={true}
62
75
  />
63
76
  <div className="row row-column-border border-light row-column-menu-left">
64
- <aside className="col-lg-4">
77
+ <aside
78
+ className="col-lg-4"
79
+ aria-label={intl.formatMessage(messages.sideMenuIndex)}
80
+ >
65
81
  {__CLIENT__ && (
66
82
  <SideMenu data={sideMenuElements} content_uid={content?.UID} />
67
83
  )}
@@ -70,6 +86,8 @@ const BandoView = ({ content, location }) => {
70
86
  ref={documentBody}
71
87
  id="main-content-section"
72
88
  className="col-lg-8 it-page-sections-container border-light"
89
+ role="region"
90
+ aria-label={intl.formatMessage(messages.bandoContent)}
73
91
  >
74
92
  {/* SEZIONI */}
75
93
  <ContentTypeViewSections
@@ -56,6 +56,7 @@ const PageHeader = (props) => {
56
56
  } = props;
57
57
  const intl = useIntl();
58
58
  const Image = config.getComponent({ name: 'Image' }).component;
59
+ const subtitle = content.subtitle || content.sottotitolo;
59
60
  return (
60
61
  <div className="PageHeaderWrapper mb-4">
61
62
  <div className="row mb-2 mb-lg-0 page-header">
@@ -75,10 +76,8 @@ const PageHeader = (props) => {
75
76
  >
76
77
  {content.title}
77
78
  </h1>
78
- <p className="h2">
79
- {content.subtitle && `${content.subtitle}`}
80
- {content.sottotitolo && `${content.sottotitolo}`}
81
- </p>
79
+
80
+ {subtitle && <p className="h2">{subtitle}</p>}
82
81
 
83
82
  <PageHeaderEventDates content={content} />
84
83
 
@@ -3,6 +3,14 @@ import PropTypes from 'prop-types';
3
3
  import ItemInEvidence from 'design-comuni-plone-theme/components/ItaliaTheme/View/Commons/RelatedItemInEvidence/ItemInEvidence';
4
4
  import Arguments from 'design-comuni-plone-theme/components/ItaliaTheme/View/Commons/RelatedItemInEvidence/Arguments';
5
5
  import { Container, Row, Col } from 'design-react-kit';
6
+ import { defineMessages, useIntl } from 'react-intl';
7
+
8
+ const messages = defineMessages({
9
+ inEvidenceItems: {
10
+ id: 'inEvidenceItems',
11
+ defaultMessage: 'Contenuti in evidenza',
12
+ },
13
+ });
6
14
 
7
15
  /**
8
16
  * RelatedItems view component class.
@@ -11,9 +19,14 @@ import { Container, Row, Col } from 'design-react-kit';
11
19
  * @returns {string} Markup of the component.
12
20
  */
13
21
  const RelatedItemInEvidence = ({ content }) => {
22
+ const intl = useIntl();
14
23
  return (
15
24
  content?.correlato_in_evidenza?.length > 0 && (
16
- <section id="correlato-in-evidenza">
25
+ <section
26
+ id="correlato-in-evidenza"
27
+ role="complementary"
28
+ aria-label={intl.formatMessage(messages.inEvidenceItems)}
29
+ >
17
30
  <section className="section bg-primary">
18
31
  <div className="section-content">
19
32
  <Container>
@@ -71,7 +71,11 @@ const RelatedItems = ({
71
71
  }
72
72
 
73
73
  return related?.length > 0 || children ? (
74
- <section id="contenuti-correlati">
74
+ <section
75
+ id="contenuti-correlati"
76
+ role="complementary"
77
+ aria-label={intl.formatMessage(messages.related_items)}
78
+ >
75
79
  <section className="section section-muted section-inset-shadow">
76
80
  <div className="section-content">
77
81
  <Container>
@@ -24,6 +24,10 @@ const messages = defineMessages({
24
24
  id: 'Contenuto',
25
25
  defaultMessage: 'Contenuto',
26
26
  },
27
+ sideMenuNavigation: {
28
+ id: 'sideMenuNavigation',
29
+ defaultMessage: 'Navigazione della pagina',
30
+ },
27
31
  });
28
32
 
29
33
  const extractHeaders = (elements, intl) => {
@@ -151,7 +155,10 @@ const SideMenu = ({ data, content_uid }) => {
151
155
 
152
156
  return headers?.length > 0 ? (
153
157
  <div className="sticky-wrapper navbar-wrapper page-side-menu">
154
- <nav className="navbar it-navscroll-wrapper navbar-expand-lg">
158
+ <nav
159
+ className="navbar it-navscroll-wrapper navbar-expand-lg"
160
+ aria-label={intl.formatMessage(messages.sideMenuNavigation)}
161
+ >
155
162
  <div className="menu-wrapper">
156
163
  <div className="link-list-wrapper menu-link-list">
157
164
  <div className="accordion-wrapper">
@@ -162,6 +169,7 @@ const SideMenu = ({ data, content_uid }) => {
162
169
  setIsNavOpen(!isNavOpen);
163
170
  }}
164
171
  aria-controls="side-menu-body"
172
+ aria-expanded={isNavOpen}
165
173
  >
166
174
  <h2 className="h3">{intl.formatMessage(messages.index)}</h2>
167
175
  </AccordionHeader>
@@ -171,11 +179,7 @@ const SideMenu = ({ data, content_uid }) => {
171
179
  role="progressbar"
172
180
  />
173
181
  </div>
174
- <AccordionBody
175
- active={isNavOpen}
176
- id="side-menu-body"
177
- role="region"
178
- >
182
+ <AccordionBody active={isNavOpen} id="side-menu-body">
179
183
  <ul className="link-list" data-element="page-index">
180
184
  {headers.map((item, i) => {
181
185
  return (
@@ -25,6 +25,19 @@ import {
25
25
  useSideMenu,
26
26
  } from 'design-comuni-plone-theme/components/ItaliaTheme/View';
27
27
 
28
+ import { defineMessages, useIntl } from 'react-intl';
29
+
30
+ const messages = defineMessages({
31
+ sideMenuIndex: {
32
+ id: 'sideMenuIndex',
33
+ defaultMessage: 'Indice della pagina',
34
+ },
35
+ documentContent: {
36
+ id: 'documentContent',
37
+ defaultMessage: 'Contenuto del documento',
38
+ },
39
+ });
40
+
28
41
  export const DocumentoViewSectionsOrder = [
29
42
  {
30
43
  /* HEADER IMAGE */
@@ -48,6 +61,7 @@ export const DocumentoViewSectionsOrder = [
48
61
  */
49
62
  const DocumentoView = ({ content, location }) => {
50
63
  let documentBody = createRef();
64
+ const intl = useIntl();
51
65
  const { sideMenuElements, SideMenu } = useSideMenu(content, documentBody);
52
66
 
53
67
  //const userLogged = useSelector((state) => state.userSession);
@@ -66,7 +80,10 @@ const DocumentoView = ({ content, location }) => {
66
80
  <ContentImage content={content} position="afterHeader" />
67
81
 
68
82
  <div className="row row-column-border border-light row-column-menu-left">
69
- <aside className="col-lg-4">
83
+ <aside
84
+ className="col-lg-4"
85
+ aria-label={intl.formatMessage(messages.sideMenuIndex)}
86
+ >
70
87
  {__CLIENT__ && (
71
88
  <SideMenu data={sideMenuElements} content_uid={content?.UID} />
72
89
  )}
@@ -75,6 +92,8 @@ const DocumentoView = ({ content, location }) => {
75
92
  ref={documentBody}
76
93
  id="main-content-section"
77
94
  className="col-lg-8 it-page-sections-container border-light"
95
+ role="region"
96
+ aria-label={intl.formatMessage(messages.documentContent)}
78
97
  >
79
98
  {/* SEZIONI */}
80
99
  <ContentTypeViewSections
@@ -27,6 +27,19 @@ import {
27
27
  useSideMenu,
28
28
  } from 'design-comuni-plone-theme/components/ItaliaTheme/View';
29
29
 
30
+ import { defineMessages, useIntl } from 'react-intl';
31
+
32
+ const messages = defineMessages({
33
+ sideMenuIndex: {
34
+ id: 'sideMenuIndex',
35
+ defaultMessage: 'Indice della pagina',
36
+ },
37
+ eventoContent: {
38
+ id: 'eventoContent',
39
+ defaultMessage: "Contenuto dell'evento",
40
+ },
41
+ });
42
+
30
43
  export const EventoViewSectionsOrder = [
31
44
  {
32
45
  /* HEADER IMAGE */
@@ -53,6 +66,7 @@ export const EventoViewSectionsOrder = [
53
66
  */
54
67
  const EventoView = ({ content, location }) => {
55
68
  let documentBody = createRef();
69
+ const intl = useIntl();
56
70
  const { sideMenuElements, SideMenu } = useSideMenu(content, documentBody);
57
71
 
58
72
  return (
@@ -71,7 +85,10 @@ const EventoView = ({ content, location }) => {
71
85
  <ContentImage content={content} position="afterHeader" />
72
86
 
73
87
  <div className="row row-column-border border-light row-column-menu-left">
74
- <aside className="col-lg-4">
88
+ <aside
89
+ className="col-lg-4"
90
+ aria-label={intl.formatMessage(messages.sideMenuIndex)}
91
+ >
75
92
  {__CLIENT__ && (
76
93
  <SideMenu data={sideMenuElements} content_uid={content?.UID} />
77
94
  )}
@@ -80,6 +97,8 @@ const EventoView = ({ content, location }) => {
80
97
  ref={documentBody}
81
98
  id="main-content-section"
82
99
  className="col-lg-8 it-page-sections-container border-light"
100
+ role="region"
101
+ aria-label={intl.formatMessage(messages.eventoContent)}
83
102
  >
84
103
  {/* SEZIONI */}
85
104
  <ContentTypeViewSections
@@ -72,6 +72,8 @@ const SearchBar = ({ searchableText, setSearchableText }) => {
72
72
  }}
73
73
  type="text"
74
74
  aria-controls="faq-search-results-region"
75
+ role="search"
76
+ aria-label={intl.formatMessage(messages.search_faq)}
75
77
  />
76
78
  </div>
77
79
  </div>
@@ -25,6 +25,18 @@ import {
25
25
  useSideMenu,
26
26
  useReadingTime,
27
27
  } from 'design-comuni-plone-theme/components/ItaliaTheme/View';
28
+ import { defineMessages, useIntl } from 'react-intl';
29
+
30
+ const messages = defineMessages({
31
+ sideMenuIndex: {
32
+ id: 'sideMenuIndex',
33
+ defaultMessage: 'Indice della pagina',
34
+ },
35
+ newsContent: {
36
+ id: 'newsContent',
37
+ defaultMessage: 'Contenuto della notizia',
38
+ },
39
+ });
28
40
 
29
41
  export const NewsItemViewSectionsOrder = [
30
42
  {
@@ -49,6 +61,7 @@ export const NewsItemViewSectionsOrder = [
49
61
  */
50
62
  const NewsItemView = ({ content, location }) => {
51
63
  let documentBody = createRef();
64
+ const intl = useIntl();
52
65
  const { sideMenuElements, SideMenu } = useSideMenu(content, documentBody);
53
66
  const { readingtime } = useReadingTime(content, documentBody);
54
67
 
@@ -75,13 +88,18 @@ const NewsItemView = ({ content, location }) => {
75
88
  {/* HEADER IMAGE */}
76
89
  <ContentImage content={content} position="afterHeader" />
77
90
  <div className="row row-column-border border-light row-column-menu-left">
78
- <aside className="col-lg-4">
91
+ <aside
92
+ className="col-lg-4"
93
+ aria-label={intl.formatMessage(messages.sideMenuIndex)}
94
+ >
79
95
  <SideMenu data={sideMenuElements} content_uid={content?.UID} />
80
96
  </aside>
81
97
  <section
82
98
  className="col-lg-8 it-page-sections-container border-light"
83
99
  id="main-content-section"
84
100
  ref={documentBody}
101
+ role="region"
102
+ aria-label={intl.formatMessage(messages.newsContent)}
85
103
  >
86
104
  {/* SEZIONI */}
87
105
  <ContentTypeViewSections
@@ -57,6 +57,14 @@ const messages = defineMessages({
57
57
  id: 'related_uo',
58
58
  defaultMessage: 'Amministrazione',
59
59
  },
60
+ sideMenuIndex: {
61
+ id: 'sideMenuIndex',
62
+ defaultMessage: 'Indice della pagina',
63
+ },
64
+ argomentoContent: {
65
+ id: 'argomentoContent',
66
+ defaultMessage: "Contenuto dell'argomento",
67
+ },
60
68
  });
61
69
 
62
70
  /**
@@ -85,13 +93,18 @@ const PaginaArgomentoViewNoBlocks = ({ content }) => {
85
93
  <ContentImage content={content} position="afterHeader" />
86
94
 
87
95
  <div className="row row-column-border border-light row-column-menu-left">
88
- <aside className="col-lg-4">
96
+ <aside
97
+ className="col-lg-4"
98
+ aria-label={intl.formatMessage(messages.sideMenuIndex)}
99
+ >
89
100
  <SideMenu data={sideMenuElements} content_uid={content?.UID} />
90
101
  </aside>
91
102
  <section
92
103
  className="col-lg-8 it-page-sections-container border-light"
93
104
  id="main-content-section"
94
105
  ref={documentBody}
106
+ role="region"
107
+ aria-label={intl.formatMessage(messages.argomentoContent)}
95
108
  >
96
109
  {/* HEADER IMAGE */}
97
110
  <ContentImage content={content} position="documentBody" />
@@ -215,7 +215,11 @@ const PersonaDocumenti = ({ content }) => {
215
215
  />
216
216
  </RichTextSection>
217
217
  )}
218
- {content.dichiarazioni_di_insussistenza_e_incompatibilita?.download && (
218
+ {(content.dichiarazioni_di_insussistenza_e_incompatibilita?.download ||
219
+ contentFolderHasItems(
220
+ content,
221
+ 'dichiarazione-insussistenza-cause-di-inconferibilita-e-incompatibilita',
222
+ )) && (
219
223
  <RichTextSection
220
224
  tag_id="dichiarazioni_di_insussistenza_e_incompatibilita"
221
225
  title={intl.formatMessage(
@@ -223,20 +227,39 @@ const PersonaDocumenti = ({ content }) => {
223
227
  )}
224
228
  >
225
229
  <div className="card-wrapper card-teaser-wrapper card-teaser-wrapper-equal">
226
- <Attachment
227
- download_url={
228
- content.dichiarazioni_di_insussistenza_e_incompatibilita
229
- .download
230
- }
231
- title={
232
- content.dichiarazioni_di_insussistenza_e_incompatibilita
233
- .filename
234
- }
235
- />
230
+ {content.dichiarazioni_di_insussistenza_e_incompatibilita
231
+ ?.download && (
232
+ <Attachment
233
+ download_url={
234
+ content.dichiarazioni_di_insussistenza_e_incompatibilita
235
+ .download
236
+ }
237
+ title={
238
+ content.dichiarazioni_di_insussistenza_e_incompatibilita
239
+ .filename
240
+ }
241
+ />
242
+ )}
243
+ {contentFolderHasItems(
244
+ content,
245
+ 'dichiarazione-insussistenza-cause-di-inconferibilita-e-incompatibilita',
246
+ ) && (
247
+ <Attachments
248
+ content={content}
249
+ folder_name={
250
+ 'dichiarazione-insussistenza-cause-di-inconferibilita-e-incompatibilita'
251
+ }
252
+ as_section={false}
253
+ />
254
+ )}
236
255
  </div>
237
256
  </RichTextSection>
238
257
  )}
239
- {content.emolumenti_a_carico_della_finanza_pubblica?.download && (
258
+ {(content.emolumenti_a_carico_della_finanza_pubblica?.download ||
259
+ contentFolderHasItems(
260
+ content,
261
+ 'emolumenti-complessivi-percepiti-a-carico-della-finanza-pubblica',
262
+ )) && (
240
263
  <RichTextSection
241
264
  tag_id="emolumenti_a_carico_della_finanza_pubblica"
242
265
  title={intl.formatMessage(
@@ -244,14 +267,28 @@ const PersonaDocumenti = ({ content }) => {
244
267
  )}
245
268
  >
246
269
  <div className="card-wrapper card-teaser-wrapper card-teaser-wrapper-equal">
247
- <Attachment
248
- download_url={
249
- content.emolumenti_a_carico_della_finanza_pubblica.download
250
- }
251
- title={
252
- content.emolumenti_a_carico_della_finanza_pubblica.filename
253
- }
254
- />
270
+ {content.emolumenti_a_carico_della_finanza_pubblica?.download && (
271
+ <Attachment
272
+ download_url={
273
+ content.emolumenti_a_carico_della_finanza_pubblica.download
274
+ }
275
+ title={
276
+ content.emolumenti_a_carico_della_finanza_pubblica.filename
277
+ }
278
+ />
279
+ )}
280
+ {contentFolderHasItems(
281
+ content,
282
+ 'emolumenti-complessivi-percepiti-a-carico-della-finanza-pubblica',
283
+ ) && (
284
+ <Attachments
285
+ content={content}
286
+ folder_name={
287
+ 'emolumenti-complessivi-percepiti-a-carico-della-finanza-pubblica'
288
+ }
289
+ as_section={false}
290
+ />
291
+ )}
255
292
  </div>
256
293
  </RichTextSection>
257
294
  )}
@@ -21,6 +21,19 @@ import {
21
21
  useSideMenu,
22
22
  } from 'design-comuni-plone-theme/components/ItaliaTheme/View';
23
23
 
24
+ import { defineMessages, useIntl } from 'react-intl';
25
+
26
+ const messages = defineMessages({
27
+ sideMenuIndex: {
28
+ id: 'sideMenuIndex',
29
+ defaultMessage: 'Indice della pagina',
30
+ },
31
+ personaContent: {
32
+ id: 'personaContent',
33
+ defaultMessage: 'Contenuto del profilo della persona',
34
+ },
35
+ });
36
+
24
37
  export const PersonaViewSectionsOrder = [
25
38
  { /* RUOLO */ component: PersonaRuolo },
26
39
  { /* CONTATTI */ component: PersonaContatti },
@@ -36,6 +49,7 @@ export const PersonaViewSectionsOrder = [
36
49
  */
37
50
  const PersonaView = ({ content }) => {
38
51
  let documentBody = createRef();
52
+ const intl = useIntl();
39
53
  const { sideMenuElements, SideMenu } = useSideMenu(content, documentBody);
40
54
 
41
55
  return (
@@ -52,13 +66,18 @@ const PersonaView = ({ content }) => {
52
66
  showtassonomiaargomenti={true}
53
67
  />
54
68
  <div className="row row-column-border border-light row-column-menu-left">
55
- <aside className="col-lg-4">
69
+ <aside
70
+ className="col-lg-4"
71
+ aria-label={intl.formatMessage(messages.sideMenuIndex)}
72
+ >
56
73
  <SideMenu data={sideMenuElements} content_uid={content?.UID} />
57
74
  </aside>
58
75
  <section
59
76
  className="col-lg-8 it-page-sections-container border-light"
60
77
  id="main-content-section"
61
78
  ref={documentBody}
79
+ role="region"
80
+ aria-label={intl.formatMessage(messages.personaContent)}
62
81
  >
63
82
  {/* SEZIONI */}
64
83
  <ContentTypeViewSections
@@ -5,7 +5,6 @@
5
5
 
6
6
  import React, { createRef } from 'react';
7
7
  import PropTypes from 'prop-types';
8
- import { useIntl } from 'react-intl';
9
8
  import { injectLazyLibs } from '@plone/volto/helpers/Loadable/Loadable';
10
9
  import {
11
10
  PageHeader,
@@ -40,6 +39,19 @@ import {
40
39
  useSideMenu,
41
40
  } from 'design-comuni-plone-theme/components/ItaliaTheme/View';
42
41
 
42
+ import { defineMessages, useIntl } from 'react-intl';
43
+
44
+ const messages = defineMessages({
45
+ sideMenuIndex: {
46
+ id: 'sideMenuIndex',
47
+ defaultMessage: 'Indice della pagina',
48
+ },
49
+ servizioContent: {
50
+ id: 'servizioContent',
51
+ defaultMessage: 'Contenuto del servizio',
52
+ },
53
+ });
54
+
43
55
  export const ServizioViewSectionsOrder = (props) => [
44
56
  {
45
57
  /* HEADER IMAGE */
@@ -126,13 +138,18 @@ const ServizioView = ({ content, moment }) => {
126
138
  <ContentImage content={content} position="afterHeader" />
127
139
 
128
140
  <div className="row row-column-border border-light row-column-menu-left">
129
- <aside className="col-lg-4 ">
141
+ <aside
142
+ className="col-lg-4"
143
+ aria-label={intl.formatMessage(messages.sideMenuIndex)}
144
+ >
130
145
  <SideMenu data={sideMenuElements} content_uid={content?.UID} />
131
146
  </aside>
132
147
  <section
133
148
  id="main-content-section"
134
149
  className="col-lg-8 it-page-sections-container border-light"
135
150
  ref={documentBody}
151
+ role="region"
152
+ aria-label={intl.formatMessage(messages.servizioContent)}
136
153
  >
137
154
  {/* SEZIONI */}
138
155
  <ContentTypeViewSections
@@ -26,6 +26,19 @@ import {
26
26
  useSideMenu,
27
27
  } from 'design-comuni-plone-theme/components/ItaliaTheme/View';
28
28
 
29
+ import { defineMessages, useIntl } from 'react-intl';
30
+
31
+ const messages = defineMessages({
32
+ sideMenuIndex: {
33
+ id: 'sideMenuIndex',
34
+ defaultMessage: 'Indice della pagina',
35
+ },
36
+ UOContent: {
37
+ id: 'UOContent',
38
+ defaultMessage: "Contenuto dell'unità organizzativa",
39
+ },
40
+ });
41
+
29
42
  export const UOViewSectionsOrder = [
30
43
  {
31
44
  /* HEADER IMAGE */
@@ -59,6 +72,7 @@ export const UOViewSectionsOrder = [
59
72
  */
60
73
  const UOView = ({ content }) => {
61
74
  let documentBody = createRef();
75
+ const intl = useIntl();
62
76
  const { sideMenuElements, SideMenu } = useSideMenu(content, documentBody);
63
77
 
64
78
  return (
@@ -76,7 +90,10 @@ const UOView = ({ content }) => {
76
90
  <ContentImage content={content} position="afterHeader" />
77
91
 
78
92
  <div className="row row-column-border border-light row-column-menu-left">
79
- <aside className="col-lg-4">
93
+ <aside
94
+ className="col-lg-4"
95
+ aria-label={intl.formatMessage(messages.sideMenuIndex)}
96
+ >
80
97
  {__CLIENT__ && (
81
98
  <SideMenu data={sideMenuElements} content_uid={content?.UID} />
82
99
  )}
@@ -85,6 +102,8 @@ const UOView = ({ content }) => {
85
102
  ref={documentBody}
86
103
  id="main-content-section"
87
104
  className="col-lg-8 it-page-sections-container border-light"
105
+ role="region"
106
+ aria-label={intl.formatMessage(messages.UOContent)}
88
107
  >
89
108
  {/* SEZIONI */}
90
109
  <ContentTypeViewSections