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
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: 2025-02-06T14:26:38.454Z\n"
4
+ "POT-Creation-Date: 2025-03-04T14:31:20.722Z\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"
@@ -677,6 +677,11 @@ msgstr ""
677
677
  msgid "Type the title…"
678
678
  msgstr ""
679
679
 
680
+ #: components/ItaliaTheme/View/UOView/UOView
681
+ # defaultMessage: Contenuto dell'unità organizzativa
682
+ msgid "UOContent"
683
+ msgstr ""
684
+
680
685
  #: components/ItaliaTheme/Unauthorized/Unauthorized
681
686
  # defaultMessage: Unauthorized
682
687
  msgid "Unauthorized"
@@ -877,6 +882,11 @@ msgstr ""
877
882
  msgid "argoment"
878
883
  msgstr ""
879
884
 
885
+ #: components/ItaliaTheme/View/PaginaArgomentoView/PaginaArgomentoViewNoBlocks
886
+ # defaultMessage: Contenuto dell'argomento
887
+ msgid "argomentoContent"
888
+ msgstr ""
889
+
880
890
  #: components/ItaliaTheme/Blocks/Listing/RibbonCardTemplate
881
891
  #: components/ItaliaTheme/Blocks/Listing/SimpleCard/SimpleCardTemplateCompact
882
892
  # defaultMessage: Icona {type}
@@ -926,6 +936,11 @@ msgstr ""
926
936
  msgid "atto_nomina"
927
937
  msgstr ""
928
938
 
939
+ #: config/italiaConfig
940
+ # defaultMessage: Login/Logout
941
+ msgid "auth_ft"
942
+ msgstr ""
943
+
929
944
  #: config/Blocks/ListingOptions/sliderTemplate
930
945
  # defaultMessage: Autoplay
931
946
  msgid "autoplay"
@@ -1058,6 +1073,11 @@ msgstr ""
1058
1073
  msgid "bandi_search_no_filters"
1059
1074
  msgstr ""
1060
1075
 
1076
+ #: components/ItaliaTheme/View/BandoView/BandoView
1077
+ # defaultMessage: Contenuto del Bando
1078
+ msgid "bandoContent"
1079
+ msgstr ""
1080
+
1061
1081
  #: components/ItaliaTheme/View/Commons/BandoStatus
1062
1082
  # defaultMessage: Scaduto
1063
1083
  msgid "bando_closed"
@@ -1741,6 +1761,11 @@ msgstr ""
1741
1761
  msgid "dirigente"
1742
1762
  msgstr ""
1743
1763
 
1764
+ #: components/ItaliaTheme/View/DocumentoView/DocumentoView
1765
+ # defaultMessage: Contenuto del documento
1766
+ msgid "documentContent"
1767
+ msgstr ""
1768
+
1744
1769
  #: components/ItaliaTheme/View/Commons/RelatedItems
1745
1770
  # defaultMessage: Documenti e dati
1746
1771
  msgid "documenti-e-dati"
@@ -2004,6 +2029,11 @@ msgstr ""
2004
2029
  msgid "event_url"
2005
2030
  msgstr ""
2006
2031
 
2032
+ #: components/ItaliaTheme/View/EventoView/EventoView
2033
+ # defaultMessage: Contenuto dell'evento
2034
+ msgid "eventoContent"
2035
+ msgstr ""
2036
+
2007
2037
  #: components/ItaliaTheme/View/Commons/Events
2008
2038
  # defaultMessage: Appuntamenti
2009
2039
  msgid "events"
@@ -2102,6 +2132,11 @@ msgstr ""
2102
2132
  msgid "feedback_error"
2103
2133
  msgstr ""
2104
2134
 
2135
+ #: components/ItaliaTheme/CustomerSatisfaction/FeedbackForm
2136
+ # defaultMessage: Feedback form
2137
+ msgid "feedback_form_aria_title"
2138
+ msgstr ""
2139
+
2105
2140
  #: components/ItaliaTheme/CustomerSatisfaction/FeedbackForm
2106
2141
  # defaultMessage: Next
2107
2142
  msgid "feedback_form_button_next"
@@ -2396,6 +2431,11 @@ msgstr ""
2396
2431
  msgid "importi_viaggio"
2397
2432
  msgstr ""
2398
2433
 
2434
+ #: components/ItaliaTheme/View/Commons/RelatedItemInEvidence/RelatedItemInEvidence
2435
+ # defaultMessage: Contenuti in evidenza
2436
+ msgid "inEvidenceItems"
2437
+ msgstr ""
2438
+
2399
2439
  #: components/ItaliaTheme/Blocks/Listing/serviziAmministrazioneTrasparenteTemplate
2400
2440
  #: helpers/amministrazioneTrasparenteHelper
2401
2441
  # defaultMessage: incarico
@@ -2618,6 +2658,11 @@ msgstr ""
2618
2658
  msgid "mailto"
2619
2659
  msgstr ""
2620
2660
 
2661
+ #: overrideTranslations
2662
+ # defaultMessage: Menu principale
2663
+ msgid "mainMenu"
2664
+ msgstr ""
2665
+
2621
2666
  #: config/Blocks/ListingOptions/mapTemplate
2622
2667
  # defaultMessage: Grande
2623
2668
  msgid "map_size_large"
@@ -2703,6 +2748,11 @@ msgstr ""
2703
2748
  msgid "natural_image_size"
2704
2749
  msgstr ""
2705
2750
 
2751
+ #: components/ItaliaTheme/View/NewsItemView/NewsItemView
2752
+ # defaultMessage: Contenuto della notizia
2753
+ msgid "newsContent"
2754
+ msgstr ""
2755
+
2706
2756
  #: components/ItaliaTheme/View/NewsItemView/NewsItemText
2707
2757
  # defaultMessage: Contenuto
2708
2758
  msgid "news_item_contenuto"
@@ -2896,6 +2946,11 @@ msgstr ""
2896
2946
  msgid "paginationLabel"
2897
2947
  msgstr ""
2898
2948
 
2949
+ #: components/ItaliaTheme/Header/ParentSiteMenu
2950
+ # defaultMessage: Main site menu
2951
+ msgid "parent_site_menu"
2952
+ msgstr ""
2953
+
2899
2954
  #: components/ItaliaTheme/View/EventoView/EventoCosE
2900
2955
  # defaultMessage: Parteciperanno
2901
2956
  msgid "parteciperanno"
@@ -2918,6 +2973,11 @@ msgstr ""
2918
2973
  msgid "persona"
2919
2974
  msgstr ""
2920
2975
 
2976
+ #: components/ItaliaTheme/View/PersonaView/PersonaView
2977
+ # defaultMessage: Contenuto del profilo della persona
2978
+ msgid "personaContent"
2979
+ msgstr ""
2980
+
2921
2981
  #: components/ItaliaTheme/View/PersonaView/PersonaRuolo
2922
2982
  # defaultMessage: Fa parte di
2923
2983
  msgid "persona_strutture_correlate"
@@ -3370,6 +3430,7 @@ msgstr ""
3370
3430
  msgid "searchInSection"
3371
3431
  msgstr ""
3372
3432
 
3433
+ #: components/ItaliaTheme/Header/HeaderSearch/HeaderSearch
3373
3434
  #: components/ItaliaTheme/Header/HeaderSearch/SearchModal
3374
3435
  # defaultMessage: Cerca nel sito
3375
3436
  msgid "searchLabel"
@@ -3612,6 +3673,11 @@ msgstr ""
3612
3673
  msgid "servizi_offerti"
3613
3674
  msgstr ""
3614
3675
 
3676
+ #: components/ItaliaTheme/View/ServizioView/ServizioView
3677
+ # defaultMessage: Contenuto del servizio
3678
+ msgid "servizioContent"
3679
+ msgstr ""
3680
+
3615
3681
  #: components/ItaliaTheme/View/ServizioView/ServizioAccedi
3616
3682
  # defaultMessage: Accedi al servizio
3617
3683
  msgid "servizio_canale_digitale"
@@ -3777,6 +3843,24 @@ msgstr ""
3777
3843
  msgid "show_type"
3778
3844
  msgstr ""
3779
3845
 
3846
+ #: components/ItaliaTheme/View/BandoView/BandoView
3847
+ #: components/ItaliaTheme/View/DocumentoView/DocumentoView
3848
+ #: components/ItaliaTheme/View/EventoView/EventoView
3849
+ #: components/ItaliaTheme/View/NewsItemView/NewsItemView
3850
+ #: components/ItaliaTheme/View/PaginaArgomentoView/PaginaArgomentoViewNoBlocks
3851
+ #: components/ItaliaTheme/View/PersonaView/PersonaView
3852
+ #: components/ItaliaTheme/View/ServizioView/ServizioView
3853
+ #: components/ItaliaTheme/View/UOView/UOView
3854
+ #: components/ItaliaTheme/View/VenueView/VenueView
3855
+ # defaultMessage: Indice della pagina
3856
+ msgid "sideMenuIndex"
3857
+ msgstr ""
3858
+
3859
+ #: components/ItaliaTheme/View/Commons/SideMenu
3860
+ # defaultMessage: Navigazione della pagina
3861
+ msgid "sideMenuNavigation"
3862
+ msgstr ""
3863
+
3780
3864
  #: components/ItaliaTheme/View/Commons/TrasparenzaFields
3781
3865
  #: components/ItaliaTheme/View/TrasparenzaView/DettagliProcedimentiView
3782
3866
  # defaultMessage: Silenzio assenso/Dichiarazione dell'interessato sostitutiva del provvedimento finale
@@ -3798,6 +3882,11 @@ msgstr ""
3798
3882
  msgid "simplecard_listing_appearance_oneforrow"
3799
3883
  msgstr ""
3800
3884
 
3885
+ #: config/italiaConfig
3886
+ # defaultMessage: Sitemap
3887
+ msgid "sitemap_ft"
3888
+ msgstr ""
3889
+
3801
3890
  #: components/ItaliaTheme/View/PersonaView/PersonaDocumenti
3802
3891
  # defaultMessage: Situazione patrimoniale
3803
3892
  msgid "situazione_patrimoniale"
@@ -3818,6 +3907,11 @@ msgstr ""
3818
3907
  msgid "skiplink-navigation"
3819
3908
  msgstr ""
3820
3909
 
3910
+ #: components/ItaliaTheme/SkipLinks/SkipLinks
3911
+ # defaultMessage: Skiplinks
3912
+ msgid "skiplinks-description"
3913
+ msgstr ""
3914
+
3821
3915
  #: components/ItaliaTheme/View/PuntoDiContattoView/PuntoDiContattoView
3822
3916
  #: helpers/contentHelper
3823
3917
  # defaultMessage: Skype
@@ -4219,11 +4313,21 @@ msgstr ""
4219
4313
  msgid "url"
4220
4314
  msgstr ""
4221
4315
 
4316
+ #: components/ItaliaTheme/Header/HeaderSlim/HeaderSlim
4317
+ # defaultMessage: Utility Menu
4318
+ msgid "utilityMenu"
4319
+ msgstr ""
4320
+
4222
4321
  #: components/ItaliaTheme/View/PersonaView/PersonaDocumenti
4223
4322
  # defaultMessage: Variazione situazione patrimoniale
4224
4323
  msgid "variazione_situazione_patrimoniale"
4225
4324
  msgstr ""
4226
4325
 
4326
+ #: components/ItaliaTheme/View/VenueView/VenueView
4327
+ # defaultMessage: Informazioni sulla struttura
4328
+ msgid "venueContent"
4329
+ msgstr ""
4330
+
4227
4331
  #: components/ItaliaTheme/Blocks/BandiSearch/Body
4228
4332
  #: components/ItaliaTheme/Blocks/EventSearch/Body
4229
4333
  #: components/ItaliaTheme/Blocks/EventSearch/DefaultFilters
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.26.5",
5
+ "version": "11.28.0",
6
6
  "main": "src/index.js",
7
7
  "repository": {
8
8
  "type": "git",
@@ -151,7 +151,7 @@
151
151
  "volto-data-grid-widget": "2.3.1",
152
152
  "volto-dropdownmenu": "4.1.3",
153
153
  "volto-editablefooter": "5.1.7",
154
- "volto-feedback": "0.5.2",
154
+ "volto-feedback": "0.6.0",
155
155
  "volto-form-block": "3.10.0",
156
156
  "volto-gdpr-privacy": "2.2.12",
157
157
  "volto-google-analytics": "2.0.0",
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: '2025-02-06'
230
+ releaseDate: '2025-03-04'
231
231
  softwareType: standalone/web
232
- softwareVersion: 11.26.5
232
+ softwareVersion: 11.28.0
233
233
  url: 'https://github.com/italia/design-comuni-plone-theme'
234
234
  usedBy:
235
235
  - ASP Comuni Modenesi Area Nord
@@ -70,6 +70,7 @@ const ViewBlock = ({ data, isOpen, toggle, id, index }) => {
70
70
  id={`content-${id}-${index}`}
71
71
  role="region"
72
72
  aria-labelledby={`${id}-${index}`}
73
+ hidden={!isOpen}
73
74
  >
74
75
  <div className="accordion-inner" onFocus={toggle()}>
75
76
  {redraft(
@@ -106,7 +106,7 @@ const CardWithImageDefault = (props) => {
106
106
  })}
107
107
  >
108
108
  <div className="img-responsive img-responsive-panoramic">
109
- <ListingImage item={item} showTitleAttr={false} />
109
+ <ListingImage item={item} />
110
110
  {item['@type'] === 'Event' && (
111
111
  <CardCalendar
112
112
  start={item.start}
@@ -69,17 +69,13 @@ const CardWithSlideUpTextTemplate = (props) => {
69
69
  }).component;
70
70
 
71
71
  return (
72
- <UniversalLink
73
- item={!isEditMode ? item : null}
74
- href={isEditMode ? '#' : null}
72
+ <div
73
+ className="listing-item box bg-img"
75
74
  style={
76
75
  image && {
77
76
  backgroundImage: `url(${image})`,
78
77
  }
79
78
  }
80
- className="listing-item box bg-img"
81
- key={index}
82
- data-element={id_lighthouse}
83
79
  >
84
80
  <div className="bg-gradient"></div>
85
81
  {(category || date) && (
@@ -89,14 +85,22 @@ const CardWithSlideUpTextTemplate = (props) => {
89
85
  {date}
90
86
  </div>
91
87
  )}
92
- <h3
93
- className={cx('title', {
94
- ellipsis: title.length > 50,
95
- })}
96
- title={title.length > 50 ? title : undefined}
88
+ <UniversalLink
89
+ item={!isEditMode ? item : null}
90
+ href={isEditMode ? '#' : null}
91
+ key={index}
92
+ data-element={id_lighthouse}
97
93
  >
98
- {title.substring(0, 50)}
99
- </h3>
94
+ <h3
95
+ className={cx('title', {
96
+ ellipsis: title.length > 50,
97
+ })}
98
+ title={title.length > 50 ? title : undefined}
99
+ >
100
+ {title.substring(0, 50)}
101
+ </h3>
102
+ </UniversalLink>
103
+
100
104
  <div className="box-slide-up">
101
105
  {show_description && item.description && (
102
106
  <p>{item.description}</p>
@@ -111,7 +115,12 @@ const CardWithSlideUpTextTemplate = (props) => {
111
115
  className="justify-content-end"
112
116
  />
113
117
  </div>
114
- </UniversalLink>
118
+ <UniversalLink
119
+ item={!isEditMode ? item : null}
120
+ className="card-link"
121
+ aria-hidden="true"
122
+ ></UniversalLink>
123
+ </div>
115
124
  );
116
125
  })}
117
126
  </div>
@@ -20,7 +20,6 @@ const ListingImage = ({
20
20
  showDefault = false,
21
21
  className = 'listing-image',
22
22
  responsive = true,
23
- showTitleAttr = true,
24
23
  sizes = '(max-width:320px) 200px, (max-width:425px) 300px, (max-width:767px) 500px, 410px',
25
24
  noWrapLink = false,
26
25
  ...imageProps
@@ -46,10 +45,18 @@ const ListingImage = ({
46
45
  } else return null;
47
46
  }
48
47
  const Image = config.getComponent({ name: 'Image' }).component;
48
+
49
+ //Verifies if the item has a preview image or an header image
50
+ const showTitleAttr = !!(item.hasPreviewImage && item.preview_caption);
51
+
52
+ //Verifies with caption to show as alt and title text
53
+ const imageCaption =
54
+ item.hasPreviewImage && item.preview_caption ? item.preview_caption : null;
55
+
49
56
  let commonImageProps = {
50
57
  item,
51
58
  'aria-hidden': imageProps.alt || item.title ? false : true,
52
- alt: imageProps.alt ?? item.title ?? '',
59
+ alt: imageProps.alt ?? imageCaption ?? '',
53
60
  role: imageProps.alt || item.title ? '' : 'presentation',
54
61
  className,
55
62
  loading,
@@ -57,8 +64,14 @@ const ListingImage = ({
57
64
  sizes,
58
65
  ...imageProps,
59
66
  };
60
- if (showTitleAttr)
61
- commonImageProps = { ...commonImageProps, title: item.title };
67
+
68
+ // show title attribute if preview_caption or image_caption is present for the alt text
69
+ if (showTitleAttr) {
70
+ commonImageProps = {
71
+ ...commonImageProps,
72
+ title: imageCaption,
73
+ };
74
+ }
62
75
 
63
76
  return (
64
77
  <ListingImageWrapper item={item} noWrapLink={noWrapLink}>
@@ -86,7 +86,6 @@ const CompleteBlockLinksTemplate = (props) => {
86
86
  item={item}
87
87
  className=""
88
88
  sizes="60px"
89
- showTitleAttr={false}
90
89
  alt={item.title}
91
90
  />
92
91
  </div>
@@ -86,7 +86,6 @@ const ContentInEvidenceTemplate = (props) => {
86
86
  className="item-image"
87
87
  loading="eager"
88
88
  sizes="(max-width:425px) 400px, (max-width:767px) 520px, 650px"
89
- showTitleAttr={false}
90
89
  />
91
90
  </Col>
92
91
  )}
@@ -55,9 +55,10 @@ const GridGalleryTemplate = ({
55
55
  )}
56
56
  <div className="grid-gallery-grid">
57
57
  {items.map((item, index) => {
58
- let image = (
59
- <ListingImage item={item} className="" showTitleAttr={false} />
60
- );
58
+ let image = ListingImage({
59
+ item,
60
+ className: '',
61
+ });
61
62
  let scale = null;
62
63
  let hasImage = contentHasImage(item);
63
64
  if (index % 7 === 0 || index % 7 === 6 || index % 7 === 3) {
@@ -114,7 +114,6 @@ const InEvidenceTemplate = (props) => {
114
114
  <ListingImage
115
115
  item={item}
116
116
  sizes="(max-width:320px) 200px, 300px"
117
- showTitleAttr={false}
118
117
  />
119
118
  {item['@type'] === 'Event' && (
120
119
  <CardCalendar start={item.start} end={item.end} />
@@ -68,7 +68,4 @@ test('View renders all fields', async () => {
68
68
 
69
69
  expect(screen.getByText(/Accordion 1/i)).toBeInTheDocument();
70
70
  expect(screen.getByText(/Is this just fantasy/i)).toBeInTheDocument();
71
- expect(
72
- screen.getByRole('link', { name: /Caught in a landside/i }),
73
- ).toBeInTheDocument();
74
71
  });
@@ -54,7 +54,7 @@ export const CardPersona = ({
54
54
  </CardBody>
55
55
  {hasImage && (
56
56
  <div className="card-image card-image-rounded">
57
- <ListingImage item={item} sizes="130px" showTitleAttr={false} />
57
+ <ListingImage item={item} sizes="130px" />
58
58
  </div>
59
59
  )}
60
60
  </div>
@@ -20,6 +20,8 @@ import {
20
20
  submitFeedback,
21
21
  resetSubmitFeedback,
22
22
  getFeedbackThreshold,
23
+ isFeedbackEnabledForRoute,
24
+ getStaticFeedbackRouteTitle,
23
25
  } from 'volto-feedback';
24
26
  import cx from 'classnames';
25
27
  import AnswersStep from './Steps/AnswersStep';
@@ -27,11 +29,17 @@ import CommentsStep from './Steps/CommentsStep';
27
29
  import RTRating from './Steps/Commons/Rating';
28
30
  import { PropTypes } from 'prop-types';
29
31
 
32
+ import 'volto-feedback/components/FeedbackForm/feedback-form.css';
33
+
30
34
  const messages = defineMessages({
31
35
  title: {
32
36
  id: 'feedback_form_title',
33
37
  defaultMessage: 'How clear is the information on this page?',
34
38
  },
39
+ aria_title_feedback: {
40
+ id: 'feedback_form_aria_title',
41
+ defaultMessage: 'Feedback form',
42
+ },
35
43
  yes: {
36
44
  id: 'feedback_form_yes',
37
45
  defaultMessage: 'Yes',
@@ -230,15 +238,26 @@ const FeedbackForm = ({ title, pathname }) => {
230
238
  const sendFormData = () => {
231
239
  if (invalidForm) return;
232
240
  setStep(2);
241
+ let content =
242
+ isFeedbackEnabledForRoute(path) && isCmsUi(path)
243
+ ? getStaticFeedbackRouteTitle(path)
244
+ : path;
245
+ if (typeof content === 'object' && content.id)
246
+ content = intl.formatMessage(content);
233
247
  const data = {
234
248
  ...formData,
235
249
  ...(captcha && { 'g-recaptcha-response': validToken }),
236
250
  answer: getTranslatedQuestion(intl, formData.answer),
251
+ content,
237
252
  };
238
- dispatch(submitFeedback(path, data));
253
+ dispatch(submitFeedback(data));
239
254
  resetFormData();
240
255
  };
241
256
 
257
+ if (!isFeedbackEnabledForRoute(path)) {
258
+ return null;
259
+ }
260
+
242
261
  let action = path?.length > 1 ? path.replace(/\//g, '') : path;
243
262
  if (action?.length > 0) {
244
263
  action = action?.replace(/-/g, '_');
@@ -246,16 +265,16 @@ const FeedbackForm = ({ title, pathname }) => {
246
265
  action = 'homepage';
247
266
  }
248
267
 
249
- if (isCmsUi(path)) {
250
- return null;
251
- }
252
-
253
268
  return (
254
269
  <section className="bg-primary customer-satisfaction">
255
270
  <Container>
256
271
  <Row className="d-flex justify-content-center bg-primary">
257
272
  <Col className="col-12 col-lg-6">
258
- <div className="feedback-form" role="form">
273
+ <div
274
+ className="feedback-form"
275
+ role="form"
276
+ aria-label={intl.formatMessage(messages.aria_title_feedback)}
277
+ >
259
278
  <Card
260
279
  className="shadow card-wrapper py-4 px-4"
261
280
  data-element="feedback"
@@ -13,6 +13,10 @@ const messages = defineMessages({
13
13
  id: 'Cerca',
14
14
  defaultMessage: 'Cerca',
15
15
  },
16
+ searchLabel: {
17
+ id: 'searchLabel',
18
+ defaultMessage: 'Cerca nel sito',
19
+ },
16
20
  });
17
21
 
18
22
  const HeaderSearch = () => {
@@ -21,7 +25,11 @@ const HeaderSearch = () => {
21
25
 
22
26
  return (
23
27
  <>
24
- <div className="it-search-wrapper">
28
+ <div
29
+ className="it-search-wrapper"
30
+ role="search"
31
+ aria-label={intl.formatMessage(messages.searchLabel)}
32
+ >
25
33
  <span className="d-none d-md-block">
26
34
  {intl.formatMessage(messages.search)}
27
35
  </span>
@@ -166,6 +166,10 @@ const messages = defineMessages({
166
166
  id: 'currentActive',
167
167
  defaultMessage: 'attivo',
168
168
  },
169
+ searchLabel: {
170
+ id: 'searchLabel',
171
+ defaultMessage: 'Cerca nel sito',
172
+ },
169
173
  });
170
174
 
171
175
  const SearchModal = ({ closeModal, show }) => {
@@ -334,6 +338,7 @@ const SearchModal = ({ closeModal, show }) => {
334
338
  id="search-modal"
335
339
  isOpen={show}
336
340
  toggle={closeModal}
341
+ role="alertdialog"
337
342
  >
338
343
  <ModalHeader toggle={closeModal}>
339
344
  <Container>
@@ -392,7 +397,11 @@ const SearchModal = ({ closeModal, show }) => {
392
397
  <>
393
398
  <div className="search-filters search-filters-text">
394
399
  <div className="form-group">
395
- <div className="input-group mb-3">
400
+ <div
401
+ className="input-group mb-3"
402
+ role="search"
403
+ aria-label={intl.formatMessage(messages.searchLabel)}
404
+ >
396
405
  <input
397
406
  id="search-text"
398
407
  type="text"
@@ -12,13 +12,20 @@ import {
12
12
  HeaderContent,
13
13
  HeaderRightZone,
14
14
  } from 'design-react-kit';
15
- import { useIntl } from 'react-intl';
15
+ import { defineMessages, useIntl } from 'react-intl';
16
16
  import {
17
17
  getSiteProperty,
18
18
  useHomePath,
19
19
  } from 'design-comuni-plone-theme/helpers';
20
20
  import { SiteProperty } from 'volto-site-settings';
21
21
 
22
+ const messages = defineMessages({
23
+ utilityMenu: {
24
+ id: 'utilityMenu',
25
+ defaultMessage: 'Utility Menu',
26
+ },
27
+ });
28
+
22
29
  const HeaderSlim = () => {
23
30
  const subsite = useSelector((state) => state.subsite?.data);
24
31
  const intl = useIntl();
@@ -45,7 +52,13 @@ const HeaderSlim = () => {
45
52
 
46
53
  const target = subsite ? null : '_blank';
47
54
  return (
48
- <Header small={false} theme="" type="slim" role="navigation">
55
+ <Header
56
+ small={false}
57
+ theme=""
58
+ type="slim"
59
+ role="navigation"
60
+ aria-label={intl.formatMessage(messages.utilityMenu)}
61
+ >
49
62
  <HeaderContent>
50
63
  <HeaderBrand
51
64
  responsive
@@ -7,10 +7,10 @@ import React, { useEffect } from 'react';
7
7
  import cx from 'classnames';
8
8
  import { useDispatch, useSelector } from 'react-redux';
9
9
  import { useLocation } from 'react-router-dom';
10
+ import { useIntl } from 'react-intl';
10
11
  import { Nav, NavItem, NavLink } from 'design-react-kit';
11
12
  import { UniversalLink } from '@plone/volto/components';
12
13
  import { flattenToAppURL } from '@plone/volto/helpers';
13
- import { useIntl } from 'react-intl';
14
14
  import { getSiteProperty } from 'design-comuni-plone-theme/helpers';
15
15
  import { getSlimHeader, getItemsByPath } from 'volto-slimheader';
16
16
 
@@ -9,8 +9,17 @@ import { Link } from 'react-router-dom';
9
9
  import { flattenToAppURL } from '@plone/volto/helpers';
10
10
  import { Nav, NavItem, NavLink } from 'design-react-kit';
11
11
  import { useHomePath } from 'design-comuni-plone-theme/helpers';
12
+ import { defineMessages, useIntl } from 'react-intl';
13
+
14
+ const messages = defineMessages({
15
+ parent_site_menu: {
16
+ id: 'parent_site_menu',
17
+ defaultMessage: 'Main site menu',
18
+ },
19
+ });
12
20
 
13
21
  const ParentSiteMenu = () => {
22
+ const intl = useIntl();
14
23
  const dropdownMenu = useSelector(
15
24
  (state) => state.dropdownMenuNavItems?.result,
16
25
  );
@@ -39,7 +48,11 @@ const ParentSiteMenu = () => {
39
48
  }
40
49
 
41
50
  return subsite && menu ? (
42
- <Nav vertical={false} className="parent-site-menu">
51
+ <Nav
52
+ vertical={false}
53
+ className="parent-site-menu"
54
+ aria-label={intl.formatMessage(messages.parent_site_menu)}
55
+ >
43
56
  {menu.items.map((navitem, id) => (
44
57
  <NavItem tag="li" key={id}>
45
58
  <NavLink