io-sanita-theme 2.2.0 → 2.2.2

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 (59) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/RELEASE.md +9 -0
  3. package/locales/de/LC_MESSAGES/volto.po +16 -1
  4. package/locales/en/LC_MESSAGES/volto.po +16 -1
  5. package/locales/es/LC_MESSAGES/volto.po +16 -1
  6. package/locales/fr/LC_MESSAGES/volto.po +16 -1
  7. package/locales/it/LC_MESSAGES/volto.po +16 -1
  8. package/locales/volto.pot +17 -2
  9. package/package.json +2 -2
  10. package/src/components/AppExtras/GenericAppExtras.jsx +6 -0
  11. package/src/components/AppExtras/{PageLoader.jsx → PageLoader/PageLoader.jsx} +1 -0
  12. package/src/components/AppExtras/PageLoader/page-loader.scss +11 -0
  13. package/src/components/Blocks/Accordion/Block/ViewBlock.jsx +1 -0
  14. package/src/components/Blocks/CTA/ctaBlock.scss +1 -1
  15. package/src/components/Blocks/Contacts/Block/ViewBlock.jsx +3 -2
  16. package/src/components/Blocks/Hero/StoresButtons.jsx +6 -2
  17. package/src/components/Blocks/Icons/MoreButton.jsx +1 -0
  18. package/src/components/Blocks/Listing/CompleteBlockLinks/CompleteBlockLinksTemplate.jsx +1 -0
  19. package/src/components/Cards/CardGhost/CardGhost.jsx +1 -1
  20. package/src/components/Cards/CardPersona/CardPersona.jsx +5 -1
  21. package/src/components/Cards/CardTaxonomy/CardTaxonomy.jsx +1 -1
  22. package/src/components/Cards/common/CardCategoryTop.jsx +5 -1
  23. package/src/components/GalleryPreview/GalleryPreview.jsx +12 -2
  24. package/src/components/Icon/Icon.jsx +1 -0
  25. package/src/components/LinkMore/LinkMore.jsx +1 -0
  26. package/src/components/LoginAgid/LoginAgidButtons.jsx +14 -2
  27. package/src/components/Pagination/PaginationItem.jsx +2 -2
  28. package/src/components/ScrollToTop/ScrollToTop.jsx +6 -1
  29. package/src/components/Search/Search.jsx +2 -0
  30. package/src/components/Slider/ButtonPlayPause.jsx +6 -3
  31. package/src/components/Slider/NextArrow.jsx +1 -1
  32. package/src/components/Slider/PrevArrow.jsx +1 -1
  33. package/src/components/View/CartellaModulistica/DocRow.jsx +1 -0
  34. package/src/components/View/ComeFarePer/Steps/Steps.jsx +6 -1
  35. package/src/components/View/FAQ/FaqFolder/FaqFolderTree.jsx +1 -1
  36. package/src/components/View/commons/PageHeader/PageHeaderStatoServizio.jsx +2 -2
  37. package/src/components/View/commons/Sharing/Sharing.jsx +2 -4
  38. package/src/components/View/commons/TassonomiaUtenti.jsx +6 -1
  39. package/src/components/Widgets/SearchSections/SearchSections.jsx +15 -1
  40. package/src/components/Widgets/SelectInput/SelectInput.jsx +2 -2
  41. package/src/components/Widgets/SortByWidget/SortByWidget.jsx +7 -1
  42. package/src/components/index.js +1 -4
  43. package/src/components/layout/Footer/FooterNewsletterSubscribe.jsx +7 -1
  44. package/src/components/layout/Footer/FooterSocials.jsx +1 -0
  45. package/src/components/layout/Header/HeaderContacts/HeaderContacts.jsx +6 -1
  46. package/src/components/layout/Header/HeaderSearch/HeaderSearch.jsx +5 -1
  47. package/src/components/layout/Header/HeaderSearch/SearchModal.jsx +6 -1
  48. package/src/components/layout/Header/HeaderSlim/HeaderLogin.jsx +31 -4
  49. package/src/components/layout/Header/SocialHeader.jsx +1 -0
  50. package/src/components/layout/Navigation/CollapseNavigation.jsx +6 -1
  51. package/src/components/layout/Navigation/MegaMenu/MegaMenu.jsx +7 -3
  52. package/src/config/ioSanitaConfig.js +12 -9
  53. package/src/customizations/volto/components/theme/View/View.jsx +4 -2
  54. package/src/theme/_variables.scss +5 -1
  55. package/src/theme/bootstrap-italia/custom/_focus.scss +8 -7
  56. package/src/theme/io-sanita/_buttons.scss +4 -2
  57. package/src/theme/io-sanita/_login.scss +1 -0
  58. package/src/theme/io-sanita/components/layout/_footer.scss +0 -1
  59. package/src/theme/io-sanita/subsites/_common.scss +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # Changelog
2
2
 
3
+ ## [2.2.2](https://github.com/RedTurtle/io-sanita-theme/compare/2.2.1...2.2.2) (2025-02-13)
4
+
5
+ ### Bug Fixes
6
+
7
+ * login input width ([57ea17b](https://github.com/RedTurtle/io-sanita-theme/commit/57ea17be04d89d191ffcfb5963c35c7b8de3a5e3))
8
+
9
+ ## [2.2.1](https://github.com/RedTurtle/io-sanita-theme/compare/2.2.0...2.2.1) (2025-02-12)
10
+
11
+ ### Bug Fixes
12
+
13
+ * a11y focus and enabled PageLoader ([40b83d8](https://github.com/RedTurtle/io-sanita-theme/commit/40b83d8676e82cc60967952cf271a398653b0517))
14
+ * a11y icons ([9214b5c](https://github.com/RedTurtle/io-sanita-theme/commit/9214b5c7788054a947ba134c0cf26cb3ed292b4f))
15
+ * messages ([fb5e06f](https://github.com/RedTurtle/io-sanita-theme/commit/fb5e06ff01def1e6e4bd9f2561981158df3c4eef))
16
+
17
+ ### Maintenance
18
+
19
+ * info ([2d6a299](https://github.com/RedTurtle/io-sanita-theme/commit/2d6a29953b23b20b342343e0d0b8cd743b28079b))
20
+ * updated bootstrap-italia ([995fec8](https://github.com/RedTurtle/io-sanita-theme/commit/995fec8e4e910d964f412a02169823d9deafab11))
21
+ * updated customized theme/View to add AlternatHrefLangs ([70bba5a](https://github.com/RedTurtle/io-sanita-theme/commit/70bba5a54dba2159a3bf1f5193b8d6d974baad21))
22
+
3
23
  ## [2.2.0](https://github.com/RedTurtle/io-sanita-theme/compare/2.1.0...2.2.0) (2025-02-06)
4
24
 
5
25
  ### Features
package/RELEASE.md CHANGED
@@ -41,6 +41,15 @@
41
41
  - ...
42
42
  -->
43
43
 
44
+ ## Versione x.x.x (x/x/x)
45
+
46
+ ### Migliorie
47
+
48
+ - aggiunto il tag <lin rel="canonical"> per tutte le pagine, come suggerito da consulente SEO
49
+ - aggiunta la barra di loading nella parte alta della pagina quando si sta caricando un contenuto
50
+ - a11y - migliorata l'accessibilità del sito per quanto riguarda le icone
51
+ - a11y - migliorato il contrasto del focus sugli elementi con la navigazione da tastiera
52
+
44
53
  ## Versione 2.1.0 (05/02/2025)
45
54
 
46
55
  ### Novità
@@ -321,7 +321,7 @@ msgid "Linkto title"
321
321
  msgstr ""
322
322
 
323
323
  #. Default: "Sto caricando la pagina richiesta..."
324
- #: components/AppExtras/PageLoader
324
+ #: components/AppExtras/PageLoader/PageLoader
325
325
  msgid "Loading page..."
326
326
  msgstr "Seite wird geladen..."
327
327
 
@@ -622,6 +622,11 @@ msgstr ""
622
622
  msgid "Uploading image"
623
623
  msgstr ""
624
624
 
625
+ #. Default: "Utente"
626
+ #: components/layout/Header/HeaderSlim/HeaderLogin
627
+ msgid "User"
628
+ msgstr ""
629
+
625
630
  #. Default: "Vai alla pagina"
626
631
  #: components/layout/Footer/FooterInfos
627
632
  #: components/layout/Footer/FooterNavigation
@@ -2476,6 +2481,16 @@ msgstr ""
2476
2481
  msgid "search"
2477
2482
  msgstr ""
2478
2483
 
2484
+ #. Default: "Nascondi tutte le sezioni"
2485
+ #: components/Widgets/SearchSections/SearchSections
2486
+ msgid "search-hideAllSections"
2487
+ msgstr ""
2488
+
2489
+ #. Default: "Mostra tutte le sezioni"
2490
+ #: components/Widgets/SearchSections/SearchSections
2491
+ msgid "search-showAllSections"
2492
+ msgstr ""
2493
+
2479
2494
  #. Default: "Filtro per Categoria"
2480
2495
  #: components/Blocks/SearchBandi/DefaultFilters
2481
2496
  msgid "searchBlock_categoria_filter"
@@ -316,7 +316,7 @@ msgid "Linkto title"
316
316
  msgstr ""
317
317
 
318
318
  #. Default: "Sto caricando la pagina richiesta..."
319
- #: components/AppExtras/PageLoader
319
+ #: components/AppExtras/PageLoader/PageLoader
320
320
  msgid "Loading page..."
321
321
  msgstr "Loading page..."
322
322
 
@@ -617,6 +617,11 @@ msgstr ""
617
617
  msgid "Uploading image"
618
618
  msgstr ""
619
619
 
620
+ #. Default: "Utente"
621
+ #: components/layout/Header/HeaderSlim/HeaderLogin
622
+ msgid "User"
623
+ msgstr ""
624
+
620
625
  #. Default: "Vai alla pagina"
621
626
  #: components/layout/Footer/FooterInfos
622
627
  #: components/layout/Footer/FooterNavigation
@@ -2471,6 +2476,16 @@ msgstr "Deadline for requests for clarification"
2471
2476
  msgid "search"
2472
2477
  msgstr "Search"
2473
2478
 
2479
+ #. Default: "Nascondi tutte le sezioni"
2480
+ #: components/Widgets/SearchSections/SearchSections
2481
+ msgid "search-hideAllSections"
2482
+ msgstr ""
2483
+
2484
+ #. Default: "Mostra tutte le sezioni"
2485
+ #: components/Widgets/SearchSections/SearchSections
2486
+ msgid "search-showAllSections"
2487
+ msgstr ""
2488
+
2474
2489
  #. Default: "Filtro per Categoria"
2475
2490
  #: components/Blocks/SearchBandi/DefaultFilters
2476
2491
  msgid "searchBlock_categoria_filter"
@@ -323,7 +323,7 @@ msgid "Linkto title"
323
323
  msgstr ""
324
324
 
325
325
  #. Default: "Sto caricando la pagina richiesta..."
326
- #: components/AppExtras/PageLoader
326
+ #: components/AppExtras/PageLoader/PageLoader
327
327
  msgid "Loading page..."
328
328
  msgstr "Cargando página..."
329
329
 
@@ -624,6 +624,11 @@ msgstr ""
624
624
  msgid "Uploading image"
625
625
  msgstr ""
626
626
 
627
+ #. Default: "Utente"
628
+ #: components/layout/Header/HeaderSlim/HeaderLogin
629
+ msgid "User"
630
+ msgstr ""
631
+
627
632
  #. Default: "Vai alla pagina"
628
633
  #: components/layout/Footer/FooterInfos
629
634
  #: components/layout/Footer/FooterNavigation
@@ -2478,6 +2483,16 @@ msgstr ""
2478
2483
  msgid "search"
2479
2484
  msgstr "Búsqueda"
2480
2485
 
2486
+ #. Default: "Nascondi tutte le sezioni"
2487
+ #: components/Widgets/SearchSections/SearchSections
2488
+ msgid "search-hideAllSections"
2489
+ msgstr ""
2490
+
2491
+ #. Default: "Mostra tutte le sezioni"
2492
+ #: components/Widgets/SearchSections/SearchSections
2493
+ msgid "search-showAllSections"
2494
+ msgstr ""
2495
+
2481
2496
  #. Default: "Filtro per Categoria"
2482
2497
  #: components/Blocks/SearchBandi/DefaultFilters
2483
2498
  msgid "searchBlock_categoria_filter"
@@ -323,7 +323,7 @@ msgid "Linkto title"
323
323
  msgstr ""
324
324
 
325
325
  #. Default: "Sto caricando la pagina richiesta..."
326
- #: components/AppExtras/PageLoader
326
+ #: components/AppExtras/PageLoader/PageLoader
327
327
  msgid "Loading page..."
328
328
  msgstr "Chargement des pages..."
329
329
 
@@ -624,6 +624,11 @@ msgstr ""
624
624
  msgid "Uploading image"
625
625
  msgstr ""
626
626
 
627
+ #. Default: "Utente"
628
+ #: components/layout/Header/HeaderSlim/HeaderLogin
629
+ msgid "User"
630
+ msgstr ""
631
+
627
632
  #. Default: "Vai alla pagina"
628
633
  #: components/layout/Footer/FooterInfos
629
634
  #: components/layout/Footer/FooterNavigation
@@ -2478,6 +2483,16 @@ msgstr ""
2478
2483
  msgid "search"
2479
2484
  msgstr "Rechercher"
2480
2485
 
2486
+ #. Default: "Nascondi tutte le sezioni"
2487
+ #: components/Widgets/SearchSections/SearchSections
2488
+ msgid "search-hideAllSections"
2489
+ msgstr ""
2490
+
2491
+ #. Default: "Mostra tutte le sezioni"
2492
+ #: components/Widgets/SearchSections/SearchSections
2493
+ msgid "search-showAllSections"
2494
+ msgstr ""
2495
+
2481
2496
  #. Default: "Filtro per Categoria"
2482
2497
  #: components/Blocks/SearchBandi/DefaultFilters
2483
2498
  msgid "searchBlock_categoria_filter"
@@ -316,7 +316,7 @@ msgid "Linkto title"
316
316
  msgstr ""
317
317
 
318
318
  #. Default: "Sto caricando la pagina richiesta..."
319
- #: components/AppExtras/PageLoader
319
+ #: components/AppExtras/PageLoader/PageLoader
320
320
  msgid "Loading page..."
321
321
  msgstr "Sto caricando la pagina richiesta..."
322
322
 
@@ -617,6 +617,11 @@ msgstr "Carica una nuova immagine"
617
617
  msgid "Uploading image"
618
618
  msgstr "Sto caricando l'immagine"
619
619
 
620
+ #. Default: "Utente"
621
+ #: components/layout/Header/HeaderSlim/HeaderLogin
622
+ msgid "User"
623
+ msgstr ""
624
+
620
625
  #. Default: "Vai alla pagina"
621
626
  #: components/layout/Footer/FooterInfos
622
627
  #: components/layout/Footer/FooterNavigation
@@ -2471,6 +2476,16 @@ msgstr ""
2471
2476
  msgid "search"
2472
2477
  msgstr "Cerca"
2473
2478
 
2479
+ #. Default: "Nascondi tutte le sezioni"
2480
+ #: components/Widgets/SearchSections/SearchSections
2481
+ msgid "search-hideAllSections"
2482
+ msgstr ""
2483
+
2484
+ #. Default: "Mostra tutte le sezioni"
2485
+ #: components/Widgets/SearchSections/SearchSections
2486
+ msgid "search-showAllSections"
2487
+ msgstr ""
2488
+
2474
2489
  #. Default: "Filtro per Categoria"
2475
2490
  #: components/Blocks/SearchBandi/DefaultFilters
2476
2491
  msgid "searchBlock_categoria_filter"
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-06T13:52:44.366Z\n"
4
+ "POT-Creation-Date: 2025-02-12T13:43:16.681Z\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
  "Content-Type: text/plain; charset=utf-8\n"
@@ -318,7 +318,7 @@ msgid "Linkto title"
318
318
  msgstr ""
319
319
 
320
320
  #. Default: "Sto caricando la pagina richiesta..."
321
- #: components/AppExtras/PageLoader
321
+ #: components/AppExtras/PageLoader/PageLoader
322
322
  msgid "Loading page..."
323
323
  msgstr ""
324
324
 
@@ -619,6 +619,11 @@ msgstr ""
619
619
  msgid "Uploading image"
620
620
  msgstr ""
621
621
 
622
+ #. Default: "Utente"
623
+ #: components/layout/Header/HeaderSlim/HeaderLogin
624
+ msgid "User"
625
+ msgstr ""
626
+
622
627
  #. Default: "Vai alla pagina"
623
628
  #: components/layout/Footer/FooterInfos
624
629
  #: components/layout/Footer/FooterNavigation
@@ -2473,6 +2478,16 @@ msgstr ""
2473
2478
  msgid "search"
2474
2479
  msgstr ""
2475
2480
 
2481
+ #. Default: "Nascondi tutte le sezioni"
2482
+ #: components/Widgets/SearchSections/SearchSections
2483
+ msgid "search-hideAllSections"
2484
+ msgstr ""
2485
+
2486
+ #. Default: "Mostra tutte le sezioni"
2487
+ #: components/Widgets/SearchSections/SearchSections
2488
+ msgid "search-showAllSections"
2489
+ msgstr ""
2490
+
2476
2491
  #. Default: "Filtro per Categoria"
2477
2492
  #: components/Blocks/SearchBandi/DefaultFilters
2478
2493
  msgid "searchBlock_categoria_filter"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "io-sanita-theme",
3
- "version": "2.2.0",
3
+ "version": "2.2.2",
4
4
  "description": "io-sanita-theme: Volto add-on",
5
5
  "main": "src/index.js",
6
6
  "license": "MIT",
@@ -84,7 +84,7 @@
84
84
  "@plone-collective/volto-contents-next": "0.5.0",
85
85
  "@plone-collective/volto-sentry": "0.3.1",
86
86
  "@release-it/conventional-changelog": "^9.0.3",
87
- "bootstrap-italia": "2.8.7",
87
+ "bootstrap-italia": "2.9.2",
88
88
  "design-react-kit": "5.0.0-10",
89
89
  "marked": "9.0.0",
90
90
  "react-focus-lock": "2.12.1",
@@ -2,6 +2,8 @@ import React from 'react';
2
2
  import { useSelector } from 'react-redux';
3
3
  import { useLocation } from 'react-router-dom';
4
4
  import { ScrollToTop } from 'io-sanita-theme/components';
5
+ import Helmet from '@plone/volto/helpers/Helmet/Helmet';
6
+ import { toPublicURL } from '@plone/volto/helpers/Url/Url';
5
7
  import { SubsiteLoader } from 'volto-subsites';
6
8
  import config from '@plone/volto/registry';
7
9
 
@@ -17,6 +19,10 @@ const GenericAppExtras = (props) => {
17
19
 
18
20
  return (
19
21
  <>
22
+ <Helmet>
23
+ <link rel="canonical" href={toPublicURL(location.pathname)} />{' '}
24
+ {/** Se impostato un canonlical nei campi SEO della pagina vincerà quello */}
25
+ </Helmet>
20
26
  <ScrollToTop />
21
27
  <SubsiteLoader pathname={location.pathname} />
22
28
  </>
@@ -2,6 +2,7 @@ import React from 'react';
2
2
  import { useSelector } from 'react-redux';
3
3
  import { Progress } from 'design-react-kit';
4
4
  import { useIntl, defineMessages } from 'react-intl';
5
+ import './page-loader.scss';
5
6
 
6
7
  const messages = defineMessages({
7
8
  loadingPage: {
@@ -0,0 +1,11 @@
1
+ .iosanita-page-loader {
2
+ position: fixed;
3
+ z-index: 99999;
4
+ top: 0;
5
+ left: 0;
6
+ width: 100%;
7
+
8
+ .progress {
9
+ min-height: 4px;
10
+ }
11
+ }
@@ -65,6 +65,7 @@ const ViewBlock = ({ data, isOpen, toggle, id, index, titleTag }) => {
65
65
  id={`content-${id}-${index}`}
66
66
  role="region"
67
67
  aria-labelledby={`${id}-${index}`}
68
+ hidden={!isOpen}
68
69
  >
69
70
  <div className="accordion-inner" onFocus={toggle()}>
70
71
  <TextBlockView id={id} data={{ value: data.text }} />
@@ -43,7 +43,7 @@
43
43
  }
44
44
 
45
45
  &.btn-accent.inverted {
46
- &:not(:hover):not(:active):not(:focus) {
46
+ &:not(:hover):not(:active) {
47
47
  background-color: #fff;
48
48
  color: var(--is-accent);
49
49
  .external-link {
@@ -33,6 +33,7 @@ const ViewBlock = ({ data, isOpen, toggle, id, index }) => {
33
33
  className="card-bg rounded subblock-view "
34
34
  noWrapper={false}
35
35
  tag="div"
36
+ tabIndex={0}
36
37
  >
37
38
  <CardBody tag="div">
38
39
  {data.title && <div className="contact-title">{data.title}</div>}
@@ -41,7 +42,7 @@ const ViewBlock = ({ data, isOpen, toggle, id, index }) => {
41
42
  {tel && (
42
43
  <div className="contact-info">
43
44
  <div className="icon-wrapper">
44
- <Icon icon="phone-alt" />
45
+ <Icon icon="phone-alt" title="Tel." />
45
46
  </div>
46
47
  <div className="tel">{tel}</div>
47
48
  </div>
@@ -50,7 +51,7 @@ const ViewBlock = ({ data, isOpen, toggle, id, index }) => {
50
51
  {email && (
51
52
  <div className="contact-info">
52
53
  <div className="icon-wrapper">
53
- <Icon icon="envelope" />
54
+ <Icon icon="envelope" title="E-mail" />
54
55
  </div>
55
56
  <div className="email">{email}</div>
56
57
  </div>
@@ -23,14 +23,18 @@ const StoresButtons = ({ data }) => {
23
23
  {data.playStoreLink && (
24
24
  <Button tag={UniversalLink} href={data.playStoreLink} color="primary">
25
25
  <span>PLAY STORE</span>
26
- <Icon icon="fab google-play" title="Play store" />
26
+ <Icon
27
+ icon="fab google-play"
28
+ title="Play store"
29
+ aria-hidden={true}
30
+ />
27
31
  </Button>
28
32
  )}
29
33
 
30
34
  {data.appStoreLink && (
31
35
  <Button tag={UniversalLink} href={data.appStoreLink} color="primary">
32
36
  <span>APP STORE</span>
33
- <Icon icon="fab apple" title="App store" />
37
+ <Icon icon="fab apple" title="App store" aria-hidden={true} />
34
38
  </Button>
35
39
  )}
36
40
  </div>
@@ -28,6 +28,7 @@ const MoreButton = ({ data, isEditMode }) => {
28
28
  icon="it-arrow-right"
29
29
  className="arrow-icon ms-1"
30
30
  padding={false}
31
+ aria-hidden={true}
31
32
  />
32
33
  </Button>
33
34
  </div>
@@ -80,6 +80,7 @@ const CompleteBlockLinksTemplate = (props) => {
80
80
  title={title}
81
81
  size="xs"
82
82
  className="ms-1 external-link"
83
+ aria-hidden={true}
83
84
  />
84
85
  )}
85
86
  </CardTitle>
@@ -19,7 +19,7 @@ export const CardGhost = ({ item, isEditMode, titleDataElement }) => {
19
19
  >
20
20
  {item.title}
21
21
 
22
- <Icon icon="it-chevron-right" />
22
+ <Icon icon="it-chevron-right" aria-hidden={true} />
23
23
  </UniversalLink>
24
24
  </CardTitle>
25
25
 
@@ -116,7 +116,11 @@ export const CardPersona = ({
116
116
  </div>
117
117
 
118
118
  <AvatarIcon size="xl">
119
- {img ? img : <Icon icon="it-user" color="primary" />}
119
+ {img ? (
120
+ img
121
+ ) : (
122
+ <Icon icon="it-user" color="primary" aria-hidden={true} />
123
+ )}
120
124
  </AvatarIcon>
121
125
  </CardBody>
122
126
  </Card>
@@ -50,7 +50,7 @@ export const CardTaxonomy = ({
50
50
  {title}
51
51
  </UniversalLink>
52
52
  </CardTitle>
53
- {showIcon && <Icon icon={icon} color="accent" />}
53
+ {showIcon && <Icon icon={icon} color="accent" aria-hidden={true} />}
54
54
  </div>
55
55
  </CardBody>
56
56
  </Card>
@@ -40,7 +40,11 @@ const CardCategoryTop = (props) => {
40
40
  <span className="text">{children}</span>
41
41
  );
42
42
  const categoryIcon = iconName && (
43
- <Icon icon={iconName} title={intl.formatMessage(messages.categoryIcon)} />
43
+ <Icon
44
+ icon={iconName}
45
+ title={intl.formatMessage(messages.categoryIcon)}
46
+ aria-hidden={true}
47
+ />
44
48
  );
45
49
 
46
50
  return (
@@ -86,7 +86,12 @@ const GalleryPreview = ({ id, viewIndex, setViewIndex, items }) => {
86
86
  }}
87
87
  className="prev"
88
88
  >
89
- <Icon color="" icon="it-arrow-left" padding={false} />
89
+ <Icon
90
+ color=""
91
+ icon="it-arrow-left"
92
+ padding={false}
93
+ aria-hidden={true}
94
+ />
90
95
  </Button>
91
96
  )}
92
97
 
@@ -106,7 +111,12 @@ const GalleryPreview = ({ id, viewIndex, setViewIndex, items }) => {
106
111
  }}
107
112
  className="next"
108
113
  >
109
- <Icon color="" icon="it-arrow-right" padding={false} />
114
+ <Icon
115
+ color=""
116
+ icon="it-arrow-right"
117
+ padding={false}
118
+ aria-hidden={true}
119
+ />
110
120
  </Button>
111
121
  )}
112
122
  </div>
@@ -12,6 +12,7 @@ import { FontAwesomeIcon } from 'io-sanita-theme/components';
12
12
 
13
13
  const Icon = (props) => {
14
14
  const { icon, className, color, size, padding, ...rest } = props;
15
+
15
16
  if (icon) {
16
17
  const classes = classNames(
17
18
  'icon',
@@ -35,6 +35,7 @@ export const LinkMore = ({
35
35
  icon="it-arrow-right"
36
36
  className="arrow-icon"
37
37
  padding={false}
38
+ aria-hidden={true}
38
39
  />
39
40
  </UniversalLink>
40
41
  </div>
@@ -75,7 +75,13 @@ const SpidButton = ({ spidLoginUrl, qs, intl }) => (
75
75
  size="big"
76
76
  >
77
77
  <span className="rounded-icon">
78
- <Icon color="primary" icon="it-user" padding={false} size="" />
78
+ <Icon
79
+ color="primary"
80
+ icon="it-user"
81
+ padding={false}
82
+ size=""
83
+ aria-hidden={true}
84
+ />
79
85
  </span>
80
86
  <span>{intl.formatMessage(messages.loginSpidButton)}</span>
81
87
  </Button>
@@ -127,7 +133,13 @@ const ArButton = ({ arLoginUrl, intl }) => (
127
133
  <div className="authorized-spid-login mb-4">
128
134
  <LoginButton baseLoginUrl={arLoginUrl}>
129
135
  <span className="rounded-icon">
130
- <Icon color="primary" icon="it-user" padding={false} size="" />
136
+ <Icon
137
+ color="primary"
138
+ icon="it-user"
139
+ padding={false}
140
+ size=""
141
+ aria-hidden={true}
142
+ />
131
143
  </span>
132
144
  <span className="d-none d-lg-block">
133
145
  {intl.formatMessage(messages.loginSpidButton)}
@@ -89,7 +89,7 @@ class PaginationItem extends Component {
89
89
  <>
90
90
  <Icon
91
91
  icon="it-chevron-left"
92
- style={{ ariaHidden: true }}
92
+ aria-hidden={true}
93
93
  color="primary"
94
94
  className={cx({ disabled: isPrevButtonInactive })}
95
95
  title={intl.formatMessage(messages.prevPage)}
@@ -104,7 +104,7 @@ class PaginationItem extends Component {
104
104
  <>
105
105
  <Icon
106
106
  icon="it-chevron-right"
107
- style={{ ariaHidden: true }}
107
+ aria-hidden={true}
108
108
  color="primary"
109
109
  className={cx({ disabled: isForwButtonInactive })}
110
110
  title={intl.formatMessage(messages.nextPage)}
@@ -53,7 +53,12 @@ const ScrollToTop = () => {
53
53
  aria-hidden="true"
54
54
  tabIndex={-1}
55
55
  >
56
- <Icon icon="it-arrow-up" padding={false} size="sm" />
56
+ <Icon
57
+ icon="it-arrow-up"
58
+ padding={false}
59
+ size="sm"
60
+ aria-hidden={true}
61
+ />
57
62
  </Button>
58
63
  </div>
59
64
  )}
@@ -323,6 +323,7 @@ const Search = () => {
323
323
  color="primary"
324
324
  padding={false}
325
325
  size=""
326
+ aria-hidden={true}
326
327
  />
327
328
  </Button>
328
329
  </div>
@@ -383,6 +384,7 @@ const Search = () => {
383
384
  <Icon
384
385
  icon={advFiltersOpen ? 'it-minus' : 'it-plus'}
385
386
  padding
387
+ aria-hidden={true}
386
388
  />
387
389
  {intl.formatMessage(messages.advFilters)}
388
390
  </Button>
@@ -35,10 +35,13 @@ const ButtonPlayPause = ({ onClick, autoplay, showLabel = true, children }) => {
35
35
  key={autoplay ? 'pause' : 'play'}
36
36
  icon={autoplay ? 'pause' : 'play'}
37
37
  title={
38
- autoplay
39
- ? intl.formatMessage(messages.pause)
40
- : intl.formatMessage(messages.play)
38
+ !showLabel
39
+ ? autoplay
40
+ ? intl.formatMessage(messages.pause)
41
+ : intl.formatMessage(messages.play)
42
+ : null
41
43
  }
44
+ aria-hidden={showLabel}
42
45
  />
43
46
  {showLabel && <span>{autoplay ? 'pause' : 'play'}</span>}
44
47
  </button>
@@ -24,7 +24,7 @@ export default function NextArrow(props) {
24
24
  onKeyDown={onKeyDown}
25
25
  id={id}
26
26
  >
27
- <Icon icon="chevron-right" key="chevron-right" title={_title} />
27
+ <Icon icon="chevron-right" key="chevron-right" aria-hidden={true} />
28
28
  <span className="visually-hidden">{_title}</span>
29
29
  </button>
30
30
  );
@@ -26,7 +26,7 @@ export default function PrevArrow(props) {
26
26
  id={id}
27
27
  onKeyDown={onKeyDown}
28
28
  >
29
- <Icon icon="chevron-left" key="chevron-left-prev" title={_title} />
29
+ <Icon icon="chevron-left" key="chevron-left-prev" aria-hidden={true} />
30
30
  <span className="visually-hidden">{_title}</span>
31
31
  </button>
32
32
  );
@@ -156,6 +156,7 @@ const DocRow = ({ doc, items, searchableText, collapsable }) => {
156
156
  icon={itemOpen ? 'it-minus' : 'it-plus'}
157
157
  padding={false}
158
158
  key={itemOpen + id}
159
+ aria-hidden={true}
159
160
  />
160
161
  </button>
161
162
  )}
@@ -106,7 +106,11 @@ const Steps = ({ content, steps = [] }) => {
106
106
  {allOpen
107
107
  ? intl.formatMessage(messages.hide_all)
108
108
  : intl.formatMessage(messages.show_all)}{' '}
109
- <Icon icon={allOpen ? 'it-collapse' : 'it-expand'} size="sm" />
109
+ <Icon
110
+ icon={allOpen ? 'it-collapse' : 'it-expand'}
111
+ size="sm"
112
+ aria-hidden={true}
113
+ />
110
114
  </Button>
111
115
  <Accordion background="active">
112
116
  {steps.map((s, index) => {
@@ -140,6 +144,7 @@ const Steps = ({ content, steps = [] }) => {
140
144
  <Icon
141
145
  icon={isActive() ? 'it-collapse' : 'it-expand'}
142
146
  size="sm"
147
+ aria-hidden={true}
143
148
  />
144
149
  </Button>
145
150
  )}
@@ -23,7 +23,7 @@ const FaqFolderTree = ({ tree }) => {
23
23
  const [itemOpened, setItemOpened] = useState(null);
24
24
  let title = (
25
25
  <UniversalLink item={item}>
26
- {item.icon && <Icon icon={item.icon} />}
26
+ {item.icon && <Icon icon={item.icon} aria-hidden={true} />}
27
27
  {item.title}
28
28
  </UniversalLink>
29
29
  );
@@ -27,9 +27,9 @@ const PageHeaderServizio = ({ content }) => {
27
27
  : intl.formatMessage(messages.service_off)}
28
28
  </Badge>
29
29
  {content.servizio_attivo && (
30
- <spam className="px-2">
30
+ <span className="px-2">
31
31
  {intl.formatMessage(messages.service_available)}
32
- </spam>
32
+ </span>
33
33
  )}
34
34
  </div>
35
35
  ) : null;
@@ -154,8 +154,7 @@ const Sharing = ({ url, title }) => {
154
154
  icon={item.icon}
155
155
  padding={false}
156
156
  size=""
157
- alt={item.title}
158
- title={item.title}
157
+ aria-hidden={true}
159
158
  />
160
159
  <span>{item.title}</span>
161
160
  </Button>
@@ -167,8 +166,7 @@ const Sharing = ({ url, title }) => {
167
166
  icon={item.icon}
168
167
  padding={false}
169
168
  size=""
170
- alt={item.title}
171
- title={item.title}
169
+ aria-hidden={true}
172
170
  />
173
171
  <span>{item.title}</span>
174
172
  </>
@@ -33,7 +33,12 @@ const TassonomiaUtenti = ({ content }) => {
33
33
  //data-element="service-topic"
34
34
  >
35
35
  <Chip color="accent" simple>
36
- <Icon icon="it-user" size="xs" className="icon-accent" />
36
+ <Icon
37
+ icon="it-user"
38
+ size="xs"
39
+ className="icon-accent"
40
+ aria-hidden={true}
41
+ />
37
42
  <ChipLabel>{title}</ChipLabel>
38
43
  </Chip>
39
44
  </UniversalLink>
@@ -5,7 +5,7 @@ import React, { useState, useEffect } from 'react';
5
5
  import cx from 'classnames';
6
6
  import { useIntl, defineMessages } from 'react-intl';
7
7
 
8
- import { Col, FormGroup, Label, Collapse } from 'design-react-kit';
8
+ import { FormGroup, Label, Collapse } from 'design-react-kit';
9
9
  import { Icon, Checkbox } from 'io-sanita-theme/components';
10
10
  import { SearchUtils } from 'io-sanita-theme/helpers';
11
11
 
@@ -14,6 +14,14 @@ const messages = defineMessages({
14
14
  id: 'searchInSection',
15
15
  defaultMessage: 'Cerca nella sezione',
16
16
  },
17
+ hideAllSections: {
18
+ id: 'search-hideAllSections',
19
+ defaultMessage: 'Nascondi tutte le sezioni',
20
+ },
21
+ showAllSections: {
22
+ id: 'search-showAllSections',
23
+ defaultMessage: 'Mostra tutte le sezioni',
24
+ },
17
25
  });
18
26
 
19
27
  export default function SearchSections({
@@ -131,12 +139,18 @@ export default function SearchSections({
131
139
  data-toggle="collapse"
132
140
  aria-expanded={expanded}
133
141
  aria-controls={`section${s.id}Collapse`}
142
+ aria-label={intl.formatMessage(
143
+ expanded
144
+ ? messages.hideAllSections
145
+ : messages.showAllSections,
146
+ )}
134
147
  >
135
148
  <Icon
136
149
  color="primary"
137
150
  icon={expanded ? 'it-collapse' : 'it-expand'}
138
151
  padding={false}
139
152
  className="right"
153
+ aria-hidden={true}
140
154
  />
141
155
  </a>
142
156
  )}
@@ -145,7 +145,7 @@ const DropdownIndicator = injectLazyLibs('reactSelect')((props) => {
145
145
  <components.DropdownIndicator {...props}>
146
146
  <Icon
147
147
  icon="it-arrow-down-triangle"
148
- style={{ ariaHidden: true }}
148
+ aria-hidden={true}
149
149
  title={intl.formatMessage(messages.dropwdown_indicator)}
150
150
  />
151
151
  </components.DropdownIndicator>
@@ -180,7 +180,7 @@ const ClearIndicator = (props) => {
180
180
  >
181
181
  <Icon
182
182
  icon="it-close"
183
- style={{ ariaHidden: true }}
183
+ aria-hidden={true}
184
184
  title={intl.formatMessage(messages.ay11_for_cancel)}
185
185
  />
186
186
  </div>
@@ -88,7 +88,13 @@ const SortByWidget = ({
88
88
  <UncontrolledDropdown className="sort-by-widget">
89
89
  <DropdownToggle color="primary" outline caret className="px-3 px-lg-4">
90
90
  <small>{intl.formatMessage(messages.sort)}</small>{' '}
91
- <Icon color="primary" icon="it-expand" padding={false} size="sm" />
91
+ <Icon
92
+ color="primary"
93
+ icon="it-expand"
94
+ padding={false}
95
+ size="sm"
96
+ aria-hidden={true}
97
+ />
92
98
  </DropdownToggle>
93
99
  <DropdownMenu>
94
100
  {/* <LinkList> */}
@@ -22,10 +22,7 @@ export const LoginAgidButtons = loadable(() =>
22
22
  //layout
23
23
  export SkipLinks from 'io-sanita-theme/components/SkipLinks/SkipLinks';
24
24
  export Breadcrumbs from 'io-sanita-theme/components/Breadcrumbs/Breadcrumbs';
25
- export HandleAnchor from 'io-sanita-theme/components/AppExtras/HandleAnchor';
26
- export GenericAppExtras from 'io-sanita-theme/components/AppExtras/GenericAppExtras';
27
- export SiteSettingsExtras from 'io-sanita-theme/components/AppExtras/SiteSettingsExtras';
28
- export PageLoader from 'io-sanita-theme/components/AppExtras/PageLoader';
25
+
29
26
  export ScrollToTop from 'io-sanita-theme/components/ScrollToTop/ScrollToTop';
30
27
 
31
28
  //Header
@@ -53,7 +53,13 @@ const FooterNewsletterSubscribe = () => {
53
53
  tag="button"
54
54
  icon={false}
55
55
  >
56
- <Icon icon="it-mail" color="white" padding={false} size="" />
56
+ <Icon
57
+ icon="it-mail"
58
+ color="white"
59
+ padding={false}
60
+ size=""
61
+ aria-hidden={true}
62
+ />
57
63
  <span>{intl.formatMessage(messages.subscribe)}</span>
58
64
  </Button>
59
65
  </Form>
@@ -41,6 +41,7 @@ const FooterSocials = () => {
41
41
  padding={false}
42
42
  size="sm"
43
43
  title={social.title}
44
+ aria-hidden={true}
44
45
  />
45
46
  <span className="visually-hidden">{social.title}</span>
46
47
  </a>
@@ -57,7 +57,12 @@ const HeaderContacts = () => {
57
57
  )}
58
58
 
59
59
  {item.icon && (
60
- <Icon icon={item.icon} color="primary" size="sm" />
60
+ <Icon
61
+ icon={item.icon}
62
+ color="primary"
63
+ size="sm"
64
+ aria-hidden={true}
65
+ />
61
66
  )}
62
67
  </Col>
63
68
  );
@@ -44,7 +44,11 @@ const HeaderSearch = ({ className }) => {
44
44
  href="/search"
45
45
  role="button"
46
46
  >
47
- <Icon icon="it-search" title={intl.formatMessage(messages.search)} />
47
+ <Icon
48
+ icon="it-search"
49
+ title={intl.formatMessage(messages.search)}
50
+ aria-hidden={true}
51
+ />
48
52
  </a>
49
53
  </div>
50
54
  <SearchModal
@@ -100,7 +100,12 @@ const SearchModal = ({ closeModal, show }) => {
100
100
  icon
101
101
  className="text-uppercase fw-semibold"
102
102
  >
103
- <Icon color="" icon="it-arrow-left" padding={false} />
103
+ <Icon
104
+ color=""
105
+ icon="it-arrow-left"
106
+ padding={false}
107
+ aria-hidden={true}
108
+ />
104
109
  <span>{intl.formatMessage(messages.closeSearchBack)}</span>
105
110
  </Button>
106
111
  </div>
@@ -41,6 +41,10 @@ const messages = defineMessages({
41
41
  id: 'Logout',
42
42
  defaultMessage: 'Esci',
43
43
  },
44
+ user: {
45
+ id: 'User',
46
+ defaultMessage: 'Utente',
47
+ },
44
48
  });
45
49
 
46
50
  const HeaderLogin = () => {
@@ -96,7 +100,13 @@ const HeaderLogin = () => {
96
100
  }
97
101
  >
98
102
  <span className="rounded-icon">
99
- <Icon color="primary" icon="it-user" padding={false} size="" />
103
+ <Icon
104
+ color="primary"
105
+ icon="it-user"
106
+ padding={false}
107
+ size=""
108
+ aria-hidden={true}
109
+ />
100
110
  </span>
101
111
  <span className="d-none d-lg-block">
102
112
  {intl.formatMessage(messages.loginAreaPersonale)}
@@ -113,12 +123,23 @@ const HeaderLogin = () => {
113
123
  className="btn-icon"
114
124
  >
115
125
  <span className="rounded-icon">
116
- <Icon color="primary" icon="it-user" size="" />
126
+ <Icon
127
+ color="primary"
128
+ icon="it-user"
129
+ size=""
130
+ title={intl.formatMessage(messages.user)}
131
+ />
117
132
  </span>
118
133
  <span className="d-none d-lg-block">
119
134
  {userLogged.fullname || userLogged.username}
120
135
  </span>
121
- <Icon color="" icon="it-expand" padding={false} size="" />
136
+ <Icon
137
+ color=""
138
+ icon="it-expand"
139
+ padding={false}
140
+ size=""
141
+ aria-hidden={true}
142
+ />
122
143
  </DropdownToggle>
123
144
  <DropdownMenu flip tag="div">
124
145
  <Row tag="div">
@@ -140,7 +161,13 @@ const HeaderLogin = () => {
140
161
  }}
141
162
  className="logout"
142
163
  >
143
- <Icon color="" icon="sign-out-alt" size="sm" left />
164
+ <Icon
165
+ color=""
166
+ icon="sign-out-alt"
167
+ size="sm"
168
+ left
169
+ aria-hidden={true}
170
+ />
144
171
  <span>{intl.formatMessage(messages.Logout)}</span>
145
172
  </LinkListItem>
146
173
  </LinkList>
@@ -66,6 +66,7 @@ const SocialHeader = ({ mobile }) => {
66
66
  padding={false}
67
67
  size=""
68
68
  title={social.title}
69
+ aria-hidden={true}
69
70
  />
70
71
  </a>
71
72
  </li>
@@ -72,7 +72,12 @@ const Collapse = ({
72
72
  title={intl.formatMessage(messages.CloseMenu)}
73
73
  onClick={onOverlayClick}
74
74
  >
75
- <Icon color="white" icon="it-close-big" padding={false} />
75
+ <Icon
76
+ color="white"
77
+ icon="it-close-big"
78
+ padding={false}
79
+ aria-hidden={true}
80
+ />
76
81
  </button>
77
82
  </div>
78
83
  )}
@@ -256,7 +256,11 @@ const MegaMenu = ({ item, pathname }) => {
256
256
  className={cx('dropdown-toggle', { active: isItemActive })}
257
257
  >
258
258
  <span dangerouslySetInnerHTML={{ __html: item.title }}></span>
259
- <Icon icon="it-expand" className={cx('', { open: menuStatus })} />
259
+ <Icon
260
+ icon="it-expand"
261
+ className={cx('', { open: menuStatus })}
262
+ aria-hidden={true}
263
+ />
260
264
  </DropdownToggle>
261
265
  <DropdownMenu flip tag="div">
262
266
  <div className="text-end megamenu-close-button">
@@ -273,7 +277,7 @@ const MegaMenu = ({ item, pathname }) => {
273
277
  // https://www.w3.org/WAI/ARIA/apg/patterns/menubar/examples/menubar-navigation/
274
278
  tabIndex="-1"
275
279
  >
276
- <Icon icon="it-close" />
280
+ <Icon icon="it-close" aria-hidden={true} />
277
281
  </Button>
278
282
  </div>
279
283
  <Row>
@@ -384,7 +388,7 @@ const MegaMenu = ({ item, pathname }) => {
384
388
  ? item.showMoreText
385
389
  : intl.formatMessage(messages.view_all)}
386
390
  </span>
387
- <Icon icon="it-arrow-right" />
391
+ <Icon icon="it-arrow-right" aria-hidden={true} />
388
392
  </UniversalLink>
389
393
  </li>
390
394
  </LinkList>
@@ -32,15 +32,12 @@ import bandoSVG from 'io-sanita-theme/icons/bando.svg';
32
32
  import logSVG from 'io-sanita-theme/icons/log.svg';
33
33
 
34
34
  import reducers from 'io-sanita-theme/reducers';
35
- import {
36
- LoginAgid,
37
- HandleAnchor,
38
- GenericAppExtras,
39
- SiteSettingsExtras,
40
- Icon,
41
- FileWidget,
42
- } from 'io-sanita-theme/components';
43
- import { ListingContainer } from 'io-sanita-theme/components/Blocks';
35
+ import { LoginAgid, Icon, FileWidget } from 'io-sanita-theme/components';
36
+ import PageLoader from 'io-sanita-theme/components/AppExtras/PageLoader/PageLoader';
37
+ import TrackFocus from 'io-sanita-theme/components/AppExtras/TrackFocus';
38
+ import HandleAnchor from 'io-sanita-theme/components/AppExtras/HandleAnchor';
39
+ import SiteSettingsExtras from 'io-sanita-theme/components/AppExtras/SiteSettingsExtras';
40
+ import GenericAppExtras from 'io-sanita-theme/components/AppExtras/GenericAppExtras';
44
41
  import { loadables as IoSanitaLoadables } from 'io-sanita-theme/config/loadables';
45
42
  import { registerIOSanitaValidators } from 'io-sanita-theme/config/validators';
46
43
 
@@ -52,6 +49,7 @@ import AggregationPage from 'io-sanita-theme/components/View/AggregationPage/Agg
52
49
  import { applyFarmacieConfig } from './farmacie';
53
50
 
54
51
  import getIoSanitaWidgets from 'io-sanita-theme/config/widgets/widgets';
52
+ import { component } from 'design-react-kit/dist/types/Icon/assets/ItAndroidSquare';
55
53
 
56
54
  export const AGGREGATION_PAGE_ARGOMENTO = '/argomento/';
57
55
  export const AGGREGATION_PAGE_TIPOLOGIA_UTENTE = '/tipologia-utente/';
@@ -215,6 +213,11 @@ export default function applyConfig(config) {
215
213
  match: '',
216
214
  component: SiteSettingsExtras,
217
215
  },
216
+ {
217
+ match: '',
218
+ component: PageLoader,
219
+ },
220
+ { match: '', component: TrackFocus },
218
221
  ],
219
222
  maxFileUploadSize: null,
220
223
 
@@ -19,13 +19,14 @@ import loadable from '@loadable/component';
19
19
  import ContentMetadataTags from '@plone/volto/components/theme/ContentMetadataTags/ContentMetadataTags';
20
20
  import Comments from '@plone/volto/components/theme/Comments/Comments';
21
21
  import Toolbar from '@plone/volto/components/manage/Toolbar/Toolbar';
22
- import Tags from '@plone/volto/components/theme/Tags/Tags';
23
22
  import { listActions } from '@plone/volto/actions/actions/actions';
24
23
  import { getContent } from '@plone/volto/actions/content/content';
25
24
  import BodyClass from '@plone/volto/helpers/BodyClass/BodyClass';
26
25
 
27
26
  import { flattenToAppURL, getBaseUrl } from '@plone/volto/helpers/Url/Url';
28
27
  import { hasApiExpander } from '@plone/volto/helpers/Utils/Utils';
28
+ import { AlternateHrefLangs } from '@plone/volto/components/theme/AlternateHrefLangs/AlternateHrefLangs';
29
+
29
30
  import { getLayoutFieldname } from '@plone/volto/helpers/Content/Content';
30
31
 
31
32
  import config from '@plone/volto/registry';
@@ -288,6 +289,8 @@ class View extends Component {
288
289
  return (
289
290
  <div id="view" tabIndex="-1">
290
291
  <ContentMetadataTags content={this.props.content} />
292
+ <AlternateHrefLangs content={this.props.content} />
293
+
291
294
  {/* Body class if displayName in component is set */}
292
295
  <BodyClass
293
296
  className={
@@ -305,7 +308,6 @@ class View extends Component {
305
308
  history={this.props.history}
306
309
  />
307
310
  <SlotRenderer name="belowContent" content={this.props.content} />
308
-
309
311
  {this.props.content.allow_discussion && (
310
312
  <Comments pathname={this.props.pathname} />
311
313
  )}
@@ -41,7 +41,8 @@ $header-center-text-color: $primary-text !default;
41
41
  $navigation-toggle-button-icon-color: $primary-text !default;
42
42
 
43
43
  //footer
44
- $footer-top-background-asl: $primary-darker !default; // color-ocean-10 --> $primary-a12 //questo perchè su bootstrap-italia la variabile $footer-top-background non è definita come !default
44
+ $footer-top-background: $primary-darker !default;
45
+ $footer-bottom-background: $footer-top-background !default;
45
46
  $footer-main-text-color: $header-center-text-color !default;
46
47
 
47
48
  //nav
@@ -71,6 +72,9 @@ $badge-font-size: 0.778rem !default; // 14px
71
72
  //search
72
73
  $highlight-search: #ff0;
73
74
 
75
+ //focus
76
+ $focus-outline-color: #000;
77
+ $focus-inner-color: #fff;
74
78
  //$color-text-base: #2f475e !default;;
75
79
 
76
80
  // ALERT-BLOCK CUSTOM COLORS
@@ -1,11 +1,12 @@
1
- .skiplinks a:focus:not(.focus--mouse) {
2
- border: 2px solid;
1
+ [tabindex='-1']:focus {
2
+ box-shadow: none !important;
3
3
  }
4
4
 
5
- a.img-wrapper:focus:not(.focus--mouse) {
6
- border: 2px solid;
7
- }
5
+ :focus:not(.focus--mouse),
6
+ %focus {
7
+ outline: 2px solid $focus-outline-color /*$outer-focus-outline*/ !important;
8
+ outline-offset: 2px;
8
9
 
9
- [tabindex='-1']:focus {
10
- box-shadow: none !important;
10
+ border: none !important;
11
+ box-shadow: 0 0 0 2px $focus-inner-color /*$inner-focus-shadow*/ !important;
11
12
  }
@@ -6,7 +6,8 @@
6
6
  .btn.btn-accent {
7
7
  &,
8
8
  &:hover,
9
- &:active {
9
+ &:active,
10
+ :focus {
10
11
  svg {
11
12
  fill: $accent-contrast-text;
12
13
  }
@@ -14,7 +15,8 @@
14
15
  }
15
16
 
16
17
  a.btn.btn-accent {
17
- &:focus-visible {
18
+ &:focus-visible,
19
+ &:focus {
18
20
  color: $accent;
19
21
  }
20
22
 
@@ -15,6 +15,7 @@ body.public-ui {
15
15
  .ui.form input[type='text'],
16
16
  .ui.form input[type='password'] {
17
17
  font-family: $font-family-sans-serif;
18
+ width: 100%;
18
19
  }
19
20
 
20
21
  .ui.form {
@@ -7,7 +7,6 @@ $footer-borders: 1px solid hsla($primary-h, 70.59%, 20%);
7
7
  .public-ui .it-footer-main,
8
8
  .it-footer-small-prints,
9
9
  .public-ui .it-footer-small-prints {
10
- background-color: $footer-top-background-asl !important; //questo perchè su bootstrap-italia la variabile $footer-top-background non è definita come !default
11
10
  &,
12
11
  p,
13
12
  ul {
@@ -1,7 +1,7 @@
1
1
  .subsite-footer {
2
2
  //default bg color as main site
3
3
  padding: 2rem 0;
4
- background-color: $footer-top-background-asl;
4
+ background-color: $footer-top-background;
5
5
  color: $white;
6
6
  border-bottom: $footer-borders;
7
7