From a37e98590cd31b2c6be20865af614cef1e99bc24 Mon Sep 17 00:00:00 2001
From: Giulia Ghisini <51911425+giuliaghisini@users.noreply.github.com>
Date: Mon, 8 Apr 2024 12:14:49 +0200
Subject: [PATCH] feat: added appearance SimpleCard and ImageCard to listing
slider template (#512)
* feat: added appearance Card to slider template
* feat: added appearance SimpleCard and ImageCard to listing slider template
* fix: infos
* fix: styles
* chore: splitted cardWithImageAndInEvidence.scss file
* chore: Rename _inevidencetemplate.scss to _inEvidenceTemplate.scss
* fix: avoid items repeat if nSlides is lower than results lenght
* fix: a11y
* fix: slider a11y
* fix: slider tab
* fix: slider a11y
* chore: moved handleSlideKeydown inside slider utils2
* chore: moved useSlider in dedicated file
* fix: only carouse images
* chore: removed console.log
---
RELEASE.md | 4 +
locales/de/LC_MESSAGES/volto.po | 77 ++---
locales/en/LC_MESSAGES/volto.po | 77 ++---
locales/es/LC_MESSAGES/volto.po | 77 ++---
locales/fr/LC_MESSAGES/volto.po | 77 ++---
locales/it/LC_MESSAGES/volto.po | 77 ++---
locales/volto.pot | 79 ++---
.../ItaliaTheme/Blocks/Calendar/Body.jsx | 82 ++----
.../CardWithImage/CardWithImageDefault.jsx | 182 ++++++++++++
.../Blocks/Listing/CardWithImageTemplate.jsx | 180 +-----------
.../Blocks/Listing/Commons/NextArrow.jsx | 10 -
.../Blocks/Listing/Commons/PrevArrow.jsx | 10 -
.../Blocks/Listing/Commons/utils.js | 70 -----
.../Blocks/Listing/PhotogalleryTemplate.jsx | 60 ++--
.../SimpleCard/Card/SimpleCardDefault.jsx | 177 +++++++++++
.../SimpleCard/SimpleCardTemplateDefault.jsx | 178 +-----------
.../Listing/Slider/SlideItemDefault.jsx | 65 +++++
.../Blocks/Listing/SliderTemplate.jsx | 274 ++++--------------
.../ItaliaTheme/Blocks/VideoGallery/Body.jsx | 58 +---
.../ItaliaTheme/Blocks/VideoGallery/Edit.jsx | 5 +-
.../ItaliaTheme/Blocks/VideoGallery/View.jsx | 5 +-
.../ItaliaTheme/Icons/FontAwesomeIcon.jsx | 4 +-
.../ItaliaTheme/Slider/ButtonPlayPause.jsx | 48 +++
.../ItaliaTheme/Slider/CarouselWrapper.jsx | 23 ++
.../ItaliaTheme/Slider/NextArrow.jsx | 31 ++
.../ItaliaTheme/Slider/PrevArrow.jsx | 33 +++
.../ItaliaTheme/Slider/SingleSlideWrapper.jsx | 39 +++
src/components/ItaliaTheme/Slider/slider.js | 203 +++++++++++++
.../ItaliaTheme/View/Commons/Gallery.jsx | 22 +-
.../ItaliaTheme/View/Commons/RenderBlocks.jsx | 27 +-
src/components/ItaliaTheme/index.js | 9 +-
.../ListingOptions/cardWithImageTemplate.js | 20 +-
.../ListingOptions/simpleCardTemplate.js | 51 ++--
.../Blocks/ListingOptions/sliderTemplate.js | 79 ++++-
src/config/Blocks/listingVariations.js | 8 +
.../manage/Blocks/Listing/ListingBody.jsx | 5 +
.../components/manage/Widgets/FileWidget.jsx | 4 +-
...AndInEvidence.scss => _cardWithImage.scss} | 101 ++++---
src/theme/ItaliaTheme/Blocks/_iconBlocks.scss | 13 +-
.../Blocks/_inEvidenceTemplate.scss | 123 ++++++++
.../Blocks/_inevidencetemplate.scss | 34 ---
.../Blocks/_simpleCardTemplate.scss | 132 +++++----
.../ItaliaTheme/Blocks/_sliderTemplate.scss | 81 ++++++
.../ItaliaTheme/Components/_cardPersona.scss | 2 +-
.../ItaliaTheme/Components/_mobileMenu.scss | 2 +-
src/theme/ItaliaTheme/Print/_all_pages.scss | 1 +
src/theme/ItaliaTheme/Print/_uo.scss | 9 +-
src/theme/ItaliaTheme/Views/_common.scss | 4 +
src/theme/site.scss | 4 +-
49 files changed, 1724 insertions(+), 1212 deletions(-)
create mode 100644 src/components/ItaliaTheme/Blocks/Listing/CardWithImage/CardWithImageDefault.jsx
delete mode 100644 src/components/ItaliaTheme/Blocks/Listing/Commons/NextArrow.jsx
delete mode 100644 src/components/ItaliaTheme/Blocks/Listing/Commons/PrevArrow.jsx
create mode 100644 src/components/ItaliaTheme/Blocks/Listing/SimpleCard/Card/SimpleCardDefault.jsx
create mode 100644 src/components/ItaliaTheme/Blocks/Listing/Slider/SlideItemDefault.jsx
create mode 100644 src/components/ItaliaTheme/Slider/ButtonPlayPause.jsx
create mode 100644 src/components/ItaliaTheme/Slider/CarouselWrapper.jsx
create mode 100644 src/components/ItaliaTheme/Slider/NextArrow.jsx
create mode 100644 src/components/ItaliaTheme/Slider/PrevArrow.jsx
create mode 100644 src/components/ItaliaTheme/Slider/SingleSlideWrapper.jsx
create mode 100644 src/components/ItaliaTheme/Slider/slider.js
rename src/theme/ItaliaTheme/Blocks/{_cardWithImageAndInEvidence.scss => _cardWithImage.scss} (65%)
create mode 100644 src/theme/ItaliaTheme/Blocks/_inEvidenceTemplate.scss
delete mode 100644 src/theme/ItaliaTheme/Blocks/_inevidencetemplate.scss
diff --git a/RELEASE.md b/RELEASE.md
index ec8379cdc..430349fb3 100644
--- a/RELEASE.md
+++ b/RELEASE.md
@@ -41,6 +41,10 @@
- ...
-->
+## Versione x.x.x (xx/xx/xxxx)
+
+### Novità
+- Nel template Slider del blocco elenco, ora è possibile scegliere l'aspetto degli elementi dello slider (default: slide semplice con immagine e titolo cliccabile, Card semplice, Card con immagine).
## Versione X.X.X (dd/mm/yyyy)
### Migliorie
diff --git a/locales/de/LC_MESSAGES/volto.po b/locales/de/LC_MESSAGES/volto.po
index a99f1c809..ffccdeeab 100644
--- a/locales/de/LC_MESSAGES/volto.po
+++ b/locales/de/LC_MESSAGES/volto.po
@@ -51,6 +51,7 @@ msgid "Allow Externals"
msgstr ""
#: config/Blocks/ListingOptions/simpleCardTemplate
+#: config/Blocks/ListingOptions/sliderTemplate
# defaultMessage: Aspetto
msgid "Aspetto"
msgstr ""
@@ -75,7 +76,7 @@ msgstr ""
msgid "Block style"
msgstr ""
-#: components/ItaliaTheme/Blocks/Listing/SimpleCard/SimpleCardTemplateDefault
+#: components/ItaliaTheme/Blocks/Listing/SimpleCard/Card/SimpleCardDefault
#: components/ItaliaTheme/Blocks/Listing/SimpleCard/SimpleCardTemplateOneForRow
# defaultMessage: Vedi
msgid "Card detail label"
@@ -459,9 +460,8 @@ msgstr ""
msgid "Path filter filtro"
msgstr ""
-#: components/ItaliaTheme/Blocks/Listing/PhotogalleryTemplate
-#: components/ItaliaTheme/Blocks/Listing/SliderTemplate
-# defaultMessage: Metti in pausa
+#: components/ItaliaTheme/Slider/ButtonPlayPause
+# defaultMessage: Seleziona per mettere in pausa lo slider
msgid "Pause slider"
msgstr "Pause"
@@ -476,9 +476,8 @@ msgstr ""
msgid "Piccolo"
msgstr ""
-#: components/ItaliaTheme/Blocks/Listing/PhotogalleryTemplate
-#: components/ItaliaTheme/Blocks/Listing/SliderTemplate
-# defaultMessage: Play
+#: components/ItaliaTheme/Slider/ButtonPlayPause
+# defaultMessage: Seleziona per riprodurre lo slider
msgid "Play slider"
msgstr ""
@@ -1112,21 +1111,11 @@ msgstr ""
msgid "calendarBlockSidebarTitle"
msgstr ""
-#: components/ItaliaTheme/Blocks/Calendar/Body
-# defaultMessage: Prossimi eventi
-msgid "calendar_next_arrow"
-msgstr ""
-
#: components/ItaliaTheme/Blocks/Calendar/Body
# defaultMessage: Nessun evento disponibile al momento
msgid "calendar_no_results"
msgstr ""
-#: components/ItaliaTheme/Blocks/Calendar/Body
-# defaultMessage: Eventi precedenti
-msgid "calendar_prev_arrow"
-msgstr ""
-
#: components/ItaliaTheme/manage/Widgets/CanaleDigitaleWidget
# defaultMessage: Accedere al servizio
msgid "canale_digitale_widget_title"
@@ -1153,6 +1142,21 @@ msgstr ""
msgid "card_width_image"
msgstr ""
+#: components/ItaliaTheme/Slider/CarouselWrapper
+# defaultMessage: Carosello
+msgid "carousel"
+msgstr ""
+
+#: components/ItaliaTheme/Blocks/Listing/SliderTemplate
+# defaultMessage: Sei attualmente in un carosello, per navigare usa le frecce sinistra e destra
+msgid "carousel-item-aria-label"
+msgstr ""
+
+#: components/ItaliaTheme/Slider/SingleSlideWrapper
+# defaultMessage: Slide
+msgid "carouselSlide"
+msgstr ""
+
#: components/ItaliaTheme/View/CartellaModulisticaView/CartellaModulisticaView
# defaultMessage: Formati scaricabili
msgid "cartellamodulistica_formati_scaricabili"
@@ -2652,6 +2656,7 @@ msgstr ""
msgid "openAccordion"
msgstr ""
+#: components/ItaliaTheme/Blocks/Listing/Slider/SlideItemDefault
#: components/ItaliaTheme/Blocks/Listing/SliderTemplate
# defaultMessage: Apri il link
msgid "openLink"
@@ -2841,7 +2846,7 @@ msgstr ""
msgid "playStoreLink"
msgstr ""
-#: components/ItaliaTheme/Blocks/Listing/SliderTemplate
+#: components/ItaliaTheme/Slider/PrevArrow
# defaultMessage: Precedente
msgid "precedente"
msgstr ""
@@ -2867,7 +2872,7 @@ msgstr ""
msgid "provvedimento_finale"
msgstr ""
-#: components/ItaliaTheme/Blocks/Listing/SimpleCard/SimpleCardTemplateDefault
+#: components/ItaliaTheme/Blocks/Listing/SimpleCard/Card/SimpleCardDefault
#: components/ItaliaTheme/Blocks/Listing/SimpleCard/SimpleCardTemplateOneForRow
# defaultMessage: Data di pubblicazione
msgid "publication_date"
@@ -3701,6 +3706,21 @@ msgstr ""
msgid "slideDot"
msgstr ""
+#: config/Blocks/ListingOptions/sliderTemplate
+# defaultMessage: Qui puoi selezionare, per il template 'Slider', un aspetto diverso da quello di default per gli elementi mostrati nello slider.
+msgid "slider_listing_appearance_description"
+msgstr ""
+
+#: config/Blocks/ListingOptions/sliderTemplate
+# defaultMessage: Card con immagine
+msgid "slider_listing_appearance_imagecard"
+msgstr ""
+
+#: config/Blocks/ListingOptions/sliderTemplate
+# defaultMessage: Card semplice
+msgid "slider_listing_appearance_simplecard"
+msgstr ""
+
#: config/Blocks/ListingOptions/sliderTemplate
# defaultMessage: N° slide da mostrare
msgid "slidesToShow"
@@ -3842,7 +3862,7 @@ msgstr ""
msgid "subjects"
msgstr ""
-#: components/ItaliaTheme/Blocks/Listing/SliderTemplate
+#: components/ItaliaTheme/Slider/NextArrow
# defaultMessage: Successivo
msgid "successivo"
msgstr ""
@@ -4059,7 +4079,7 @@ msgstr ""
msgid "uo_type"
msgstr ""
-#: components/ItaliaTheme/Blocks/Listing/SimpleCard/SimpleCardTemplateDefault
+#: components/ItaliaTheme/Blocks/Listing/SimpleCard/Card/SimpleCardDefault
#: components/ItaliaTheme/Blocks/Listing/SimpleCard/SimpleCardTemplateOneForRow
# defaultMessage: Data di aggiornamento
msgid "update_date"
@@ -4085,21 +4105,6 @@ msgstr ""
msgid "venues"
msgstr ""
-#: components/ItaliaTheme/Blocks/VideoGallery/Body
-# defaultMessage: Prossimo video
-msgid "videogallery_next_arrow"
-msgstr ""
-
-#: components/ItaliaTheme/Blocks/VideoGallery/Body
-# defaultMessage: Video precedente
-msgid "videogallery_prev_arrow"
-msgstr ""
-
-#: components/ItaliaTheme/Blocks/Listing/SliderTemplate
-# defaultMessage: Sei attualmente in un carosello, per navigare usa le frecce sinistra e destra
-msgid "viewImage"
-msgstr ""
-
#: components/ItaliaTheme/Blocks/ArgumentsInEvidence/BottomBody
# defaultMessage: Vedi tutti
msgid "view_all"
diff --git a/locales/en/LC_MESSAGES/volto.po b/locales/en/LC_MESSAGES/volto.po
index c8b7bffef..bf83ff4ab 100644
--- a/locales/en/LC_MESSAGES/volto.po
+++ b/locales/en/LC_MESSAGES/volto.po
@@ -36,6 +36,7 @@ msgid "Allow Externals"
msgstr "Accept external URL to embed"
#: config/Blocks/ListingOptions/simpleCardTemplate
+#: config/Blocks/ListingOptions/sliderTemplate
# defaultMessage: Aspetto
msgid "Aspetto"
msgstr ""
@@ -60,7 +61,7 @@ msgstr ""
msgid "Block style"
msgstr ""
-#: components/ItaliaTheme/Blocks/Listing/SimpleCard/SimpleCardTemplateDefault
+#: components/ItaliaTheme/Blocks/Listing/SimpleCard/Card/SimpleCardDefault
#: components/ItaliaTheme/Blocks/Listing/SimpleCard/SimpleCardTemplateOneForRow
# defaultMessage: Vedi
msgid "Card detail label"
@@ -444,9 +445,8 @@ msgstr "Page"
msgid "Path filter filtro"
msgstr ""
-#: components/ItaliaTheme/Blocks/Listing/PhotogalleryTemplate
-#: components/ItaliaTheme/Blocks/Listing/SliderTemplate
-# defaultMessage: Metti in pausa
+#: components/ItaliaTheme/Slider/ButtonPlayPause
+# defaultMessage: Seleziona per mettere in pausa lo slider
msgid "Pause slider"
msgstr "Pause"
@@ -461,9 +461,8 @@ msgstr ""
msgid "Piccolo"
msgstr ""
-#: components/ItaliaTheme/Blocks/Listing/PhotogalleryTemplate
-#: components/ItaliaTheme/Blocks/Listing/SliderTemplate
-# defaultMessage: Play
+#: components/ItaliaTheme/Slider/ButtonPlayPause
+# defaultMessage: Seleziona per riprodurre lo slider
msgid "Play slider"
msgstr "Play"
@@ -1097,21 +1096,11 @@ msgstr "Navigation path"
msgid "calendarBlockSidebarTitle"
msgstr ""
-#: components/ItaliaTheme/Blocks/Calendar/Body
-# defaultMessage: Prossimi eventi
-msgid "calendar_next_arrow"
-msgstr ""
-
#: components/ItaliaTheme/Blocks/Calendar/Body
# defaultMessage: Nessun evento disponibile al momento
msgid "calendar_no_results"
msgstr ""
-#: components/ItaliaTheme/Blocks/Calendar/Body
-# defaultMessage: Eventi precedenti
-msgid "calendar_prev_arrow"
-msgstr ""
-
#: components/ItaliaTheme/manage/Widgets/CanaleDigitaleWidget
# defaultMessage: Accedere al servizio
msgid "canale_digitale_widget_title"
@@ -1138,6 +1127,21 @@ msgstr "Read more"
msgid "card_width_image"
msgstr ""
+#: components/ItaliaTheme/Slider/CarouselWrapper
+# defaultMessage: Carosello
+msgid "carousel"
+msgstr ""
+
+#: components/ItaliaTheme/Blocks/Listing/SliderTemplate
+# defaultMessage: Sei attualmente in un carosello, per navigare usa le frecce sinistra e destra
+msgid "carousel-item-aria-label"
+msgstr ""
+
+#: components/ItaliaTheme/Slider/SingleSlideWrapper
+# defaultMessage: Slide
+msgid "carouselSlide"
+msgstr ""
+
#: components/ItaliaTheme/View/CartellaModulisticaView/CartellaModulisticaView
# defaultMessage: Formati scaricabili
msgid "cartellamodulistica_formati_scaricabili"
@@ -2637,6 +2641,7 @@ msgstr "Press release number"
msgid "openAccordion"
msgstr "Open the accordion"
+#: components/ItaliaTheme/Blocks/Listing/Slider/SlideItemDefault
#: components/ItaliaTheme/Blocks/Listing/SliderTemplate
# defaultMessage: Apri il link
msgid "openLink"
@@ -2826,7 +2831,7 @@ msgstr "Help text"
msgid "playStoreLink"
msgstr ""
-#: components/ItaliaTheme/Blocks/Listing/SliderTemplate
+#: components/ItaliaTheme/Slider/PrevArrow
# defaultMessage: Precedente
msgid "precedente"
msgstr ""
@@ -2852,7 +2857,7 @@ msgstr "Online procedure"
msgid "provvedimento_finale"
msgstr "Final provision"
-#: components/ItaliaTheme/Blocks/Listing/SimpleCard/SimpleCardTemplateDefault
+#: components/ItaliaTheme/Blocks/Listing/SimpleCard/Card/SimpleCardDefault
#: components/ItaliaTheme/Blocks/Listing/SimpleCard/SimpleCardTemplateOneForRow
# defaultMessage: Data di pubblicazione
msgid "publication_date"
@@ -3686,6 +3691,21 @@ msgstr ""
msgid "slideDot"
msgstr ""
+#: config/Blocks/ListingOptions/sliderTemplate
+# defaultMessage: Qui puoi selezionare, per il template 'Slider', un aspetto diverso da quello di default per gli elementi mostrati nello slider.
+msgid "slider_listing_appearance_description"
+msgstr ""
+
+#: config/Blocks/ListingOptions/sliderTemplate
+# defaultMessage: Card con immagine
+msgid "slider_listing_appearance_imagecard"
+msgstr ""
+
+#: config/Blocks/ListingOptions/sliderTemplate
+# defaultMessage: Card semplice
+msgid "slider_listing_appearance_simplecard"
+msgstr ""
+
#: config/Blocks/ListingOptions/sliderTemplate
# defaultMessage: N° slide da mostrare
msgid "slidesToShow"
@@ -3827,7 +3847,7 @@ msgstr ""
msgid "subjects"
msgstr "Tags"
-#: components/ItaliaTheme/Blocks/Listing/SliderTemplate
+#: components/ItaliaTheme/Slider/NextArrow
# defaultMessage: Successivo
msgid "successivo"
msgstr ""
@@ -4044,7 +4064,7 @@ msgstr "Search for a structure"
msgid "uo_type"
msgstr "Type"
-#: components/ItaliaTheme/Blocks/Listing/SimpleCard/SimpleCardTemplateDefault
+#: components/ItaliaTheme/Blocks/Listing/SimpleCard/Card/SimpleCardDefault
#: components/ItaliaTheme/Blocks/Listing/SimpleCard/SimpleCardTemplateOneForRow
# defaultMessage: Data di aggiornamento
msgid "update_date"
@@ -4070,21 +4090,6 @@ msgstr "Change in balance sheet"
msgid "venues"
msgstr "Venues"
-#: components/ItaliaTheme/Blocks/VideoGallery/Body
-# defaultMessage: Prossimo video
-msgid "videogallery_next_arrow"
-msgstr "Next video"
-
-#: components/ItaliaTheme/Blocks/VideoGallery/Body
-# defaultMessage: Video precedente
-msgid "videogallery_prev_arrow"
-msgstr "Previous video"
-
-#: components/ItaliaTheme/Blocks/Listing/SliderTemplate
-# defaultMessage: Sei attualmente in un carosello, per navigare usa le frecce sinistra e destra
-msgid "viewImage"
-msgstr "You are currently in a carousel, use left and right arrows to navigate"
-
#: components/ItaliaTheme/Blocks/ArgumentsInEvidence/BottomBody
# defaultMessage: Vedi tutti
msgid "view_all"
diff --git a/locales/es/LC_MESSAGES/volto.po b/locales/es/LC_MESSAGES/volto.po
index 23f59429d..244c651f7 100644
--- a/locales/es/LC_MESSAGES/volto.po
+++ b/locales/es/LC_MESSAGES/volto.po
@@ -45,6 +45,7 @@ msgid "Allow Externals"
msgstr "Aceptar URL externa para incrustar"
#: config/Blocks/ListingOptions/simpleCardTemplate
+#: config/Blocks/ListingOptions/sliderTemplate
# defaultMessage: Aspetto
msgid "Aspetto"
msgstr "Yo espero"
@@ -69,7 +70,7 @@ msgstr "Título del bloque..."
msgid "Block style"
msgstr "Estilo de Bloque"
-#: components/ItaliaTheme/Blocks/Listing/SimpleCard/SimpleCardTemplateDefault
+#: components/ItaliaTheme/Blocks/Listing/SimpleCard/Card/SimpleCardDefault
#: components/ItaliaTheme/Blocks/Listing/SimpleCard/SimpleCardTemplateOneForRow
# defaultMessage: Vedi
msgid "Card detail label"
@@ -453,9 +454,8 @@ msgstr ""
msgid "Path filter filtro"
msgstr "Filtrar"
-#: components/ItaliaTheme/Blocks/Listing/PhotogalleryTemplate
-#: components/ItaliaTheme/Blocks/Listing/SliderTemplate
-# defaultMessage: Metti in pausa
+#: components/ItaliaTheme/Slider/ButtonPlayPause
+# defaultMessage: Seleziona per mettere in pausa lo slider
msgid "Pause slider"
msgstr "Pausa"
@@ -470,9 +470,8 @@ msgstr "Camino"
msgid "Piccolo"
msgstr "Pequeño"
-#: components/ItaliaTheme/Blocks/Listing/PhotogalleryTemplate
-#: components/ItaliaTheme/Blocks/Listing/SliderTemplate
-# defaultMessage: Play
+#: components/ItaliaTheme/Slider/ButtonPlayPause
+# defaultMessage: Seleziona per riprodurre lo slider
msgid "Play slider"
msgstr "Reproducir"
@@ -1106,21 +1105,11 @@ msgstr ""
msgid "calendarBlockSidebarTitle"
msgstr "Calendario"
-#: components/ItaliaTheme/Blocks/Calendar/Body
-# defaultMessage: Prossimi eventi
-msgid "calendar_next_arrow"
-msgstr "Próximo"
-
#: components/ItaliaTheme/Blocks/Calendar/Body
# defaultMessage: Nessun evento disponibile al momento
msgid "calendar_no_results"
msgstr "No hay eventos disponibles en este momento"
-#: components/ItaliaTheme/Blocks/Calendar/Body
-# defaultMessage: Eventi precedenti
-msgid "calendar_prev_arrow"
-msgstr "Precedente"
-
#: components/ItaliaTheme/manage/Widgets/CanaleDigitaleWidget
# defaultMessage: Accedere al servizio
msgid "canale_digitale_widget_title"
@@ -1147,6 +1136,21 @@ msgstr "Leer mas"
msgid "card_width_image"
msgstr "Tarjeta con imagen"
+#: components/ItaliaTheme/Slider/CarouselWrapper
+# defaultMessage: Carosello
+msgid "carousel"
+msgstr ""
+
+#: components/ItaliaTheme/Blocks/Listing/SliderTemplate
+# defaultMessage: Sei attualmente in un carosello, per navigare usa le frecce sinistra e destra
+msgid "carousel-item-aria-label"
+msgstr ""
+
+#: components/ItaliaTheme/Slider/SingleSlideWrapper
+# defaultMessage: Slide
+msgid "carouselSlide"
+msgstr ""
+
#: components/ItaliaTheme/View/CartellaModulisticaView/CartellaModulisticaView
# defaultMessage: Formati scaricabili
msgid "cartellamodulistica_formati_scaricabili"
@@ -2646,6 +2650,7 @@ msgstr "Número de comunicado de prensa"
msgid "openAccordion"
msgstr ""
+#: components/ItaliaTheme/Blocks/Listing/Slider/SlideItemDefault
#: components/ItaliaTheme/Blocks/Listing/SliderTemplate
# defaultMessage: Apri il link
msgid "openLink"
@@ -2835,7 +2840,7 @@ msgstr "Texto de ayuda"
msgid "playStoreLink"
msgstr "Enlaces de Play Store"
-#: components/ItaliaTheme/Blocks/Listing/SliderTemplate
+#: components/ItaliaTheme/Slider/PrevArrow
# defaultMessage: Precedente
msgid "precedente"
msgstr ""
@@ -2861,7 +2866,7 @@ msgstr "Trámite informatizado en línea"
msgid "provvedimento_finale"
msgstr "Disposición final"
-#: components/ItaliaTheme/Blocks/Listing/SimpleCard/SimpleCardTemplateDefault
+#: components/ItaliaTheme/Blocks/Listing/SimpleCard/Card/SimpleCardDefault
#: components/ItaliaTheme/Blocks/Listing/SimpleCard/SimpleCardTemplateOneForRow
# defaultMessage: Data di pubblicazione
msgid "publication_date"
@@ -3695,6 +3700,21 @@ msgstr ""
msgid "slideDot"
msgstr ""
+#: config/Blocks/ListingOptions/sliderTemplate
+# defaultMessage: Qui puoi selezionare, per il template 'Slider', un aspetto diverso da quello di default per gli elementi mostrati nello slider.
+msgid "slider_listing_appearance_description"
+msgstr ""
+
+#: config/Blocks/ListingOptions/sliderTemplate
+# defaultMessage: Card con immagine
+msgid "slider_listing_appearance_imagecard"
+msgstr ""
+
+#: config/Blocks/ListingOptions/sliderTemplate
+# defaultMessage: Card semplice
+msgid "slider_listing_appearance_simplecard"
+msgstr ""
+
#: config/Blocks/ListingOptions/sliderTemplate
# defaultMessage: N° slide da mostrare
msgid "slidesToShow"
@@ -3836,7 +3856,7 @@ msgstr "Visibile"
msgid "subjects"
msgstr "Etiquetas"
-#: components/ItaliaTheme/Blocks/Listing/SliderTemplate
+#: components/ItaliaTheme/Slider/NextArrow
# defaultMessage: Successivo
msgid "successivo"
msgstr ""
@@ -4053,7 +4073,7 @@ msgstr "Buscar una estructura"
msgid "uo_type"
msgstr "Tipo"
-#: components/ItaliaTheme/Blocks/Listing/SimpleCard/SimpleCardTemplateDefault
+#: components/ItaliaTheme/Blocks/Listing/SimpleCard/Card/SimpleCardDefault
#: components/ItaliaTheme/Blocks/Listing/SimpleCard/SimpleCardTemplateOneForRow
# defaultMessage: Data di aggiornamento
msgid "update_date"
@@ -4079,21 +4099,6 @@ msgstr "Cambio en el balance"
msgid "venues"
msgstr "Lugares"
-#: components/ItaliaTheme/Blocks/VideoGallery/Body
-# defaultMessage: Prossimo video
-msgid "videogallery_next_arrow"
-msgstr ""
-
-#: components/ItaliaTheme/Blocks/VideoGallery/Body
-# defaultMessage: Video precedente
-msgid "videogallery_prev_arrow"
-msgstr ""
-
-#: components/ItaliaTheme/Blocks/Listing/SliderTemplate
-# defaultMessage: Sei attualmente in un carosello, per navigare usa le frecce sinistra e destra
-msgid "viewImage"
-msgstr "Tu estás actualmente en un carrusel, para navegar usa las flechas izquierda y derecha"
-
#: components/ItaliaTheme/Blocks/ArgumentsInEvidence/BottomBody
# defaultMessage: Vedi tutti
msgid "view_all"
diff --git a/locales/fr/LC_MESSAGES/volto.po b/locales/fr/LC_MESSAGES/volto.po
index e5ca646bd..a4b0c6c92 100644
--- a/locales/fr/LC_MESSAGES/volto.po
+++ b/locales/fr/LC_MESSAGES/volto.po
@@ -53,6 +53,7 @@ msgid "Allow Externals"
msgstr "Accepter les URL externes pour l'intégration"
#: config/Blocks/ListingOptions/simpleCardTemplate
+#: config/Blocks/ListingOptions/sliderTemplate
# defaultMessage: Aspetto
msgid "Aspetto"
msgstr ""
@@ -77,7 +78,7 @@ msgstr ""
msgid "Block style"
msgstr ""
-#: components/ItaliaTheme/Blocks/Listing/SimpleCard/SimpleCardTemplateDefault
+#: components/ItaliaTheme/Blocks/Listing/SimpleCard/Card/SimpleCardDefault
#: components/ItaliaTheme/Blocks/Listing/SimpleCard/SimpleCardTemplateOneForRow
# defaultMessage: Vedi
msgid "Card detail label"
@@ -461,9 +462,8 @@ msgstr ""
msgid "Path filter filtro"
msgstr ""
-#: components/ItaliaTheme/Blocks/Listing/PhotogalleryTemplate
-#: components/ItaliaTheme/Blocks/Listing/SliderTemplate
-# defaultMessage: Metti in pausa
+#: components/ItaliaTheme/Slider/ButtonPlayPause
+# defaultMessage: Seleziona per mettere in pausa lo slider
msgid "Pause slider"
msgstr "Pause"
@@ -478,9 +478,8 @@ msgstr ""
msgid "Piccolo"
msgstr ""
-#: components/ItaliaTheme/Blocks/Listing/PhotogalleryTemplate
-#: components/ItaliaTheme/Blocks/Listing/SliderTemplate
-# defaultMessage: Play
+#: components/ItaliaTheme/Slider/ButtonPlayPause
+# defaultMessage: Seleziona per riprodurre lo slider
msgid "Play slider"
msgstr "Début"
@@ -1114,21 +1113,11 @@ msgstr ""
msgid "calendarBlockSidebarTitle"
msgstr ""
-#: components/ItaliaTheme/Blocks/Calendar/Body
-# defaultMessage: Prossimi eventi
-msgid "calendar_next_arrow"
-msgstr ""
-
#: components/ItaliaTheme/Blocks/Calendar/Body
# defaultMessage: Nessun evento disponibile al momento
msgid "calendar_no_results"
msgstr ""
-#: components/ItaliaTheme/Blocks/Calendar/Body
-# defaultMessage: Eventi precedenti
-msgid "calendar_prev_arrow"
-msgstr ""
-
#: components/ItaliaTheme/manage/Widgets/CanaleDigitaleWidget
# defaultMessage: Accedere al servizio
msgid "canale_digitale_widget_title"
@@ -1155,6 +1144,21 @@ msgstr ""
msgid "card_width_image"
msgstr ""
+#: components/ItaliaTheme/Slider/CarouselWrapper
+# defaultMessage: Carosello
+msgid "carousel"
+msgstr ""
+
+#: components/ItaliaTheme/Blocks/Listing/SliderTemplate
+# defaultMessage: Sei attualmente in un carosello, per navigare usa le frecce sinistra e destra
+msgid "carousel-item-aria-label"
+msgstr ""
+
+#: components/ItaliaTheme/Slider/SingleSlideWrapper
+# defaultMessage: Slide
+msgid "carouselSlide"
+msgstr ""
+
#: components/ItaliaTheme/View/CartellaModulisticaView/CartellaModulisticaView
# defaultMessage: Formati scaricabili
msgid "cartellamodulistica_formati_scaricabili"
@@ -2654,6 +2658,7 @@ msgstr "Numéro du communiqué de presse"
msgid "openAccordion"
msgstr ""
+#: components/ItaliaTheme/Blocks/Listing/Slider/SlideItemDefault
#: components/ItaliaTheme/Blocks/Listing/SliderTemplate
# defaultMessage: Apri il link
msgid "openLink"
@@ -2843,7 +2848,7 @@ msgstr ""
msgid "playStoreLink"
msgstr ""
-#: components/ItaliaTheme/Blocks/Listing/SliderTemplate
+#: components/ItaliaTheme/Slider/PrevArrow
# defaultMessage: Precedente
msgid "precedente"
msgstr ""
@@ -2869,7 +2874,7 @@ msgstr ""
msgid "provvedimento_finale"
msgstr "Disposition finale"
-#: components/ItaliaTheme/Blocks/Listing/SimpleCard/SimpleCardTemplateDefault
+#: components/ItaliaTheme/Blocks/Listing/SimpleCard/Card/SimpleCardDefault
#: components/ItaliaTheme/Blocks/Listing/SimpleCard/SimpleCardTemplateOneForRow
# defaultMessage: Data di pubblicazione
msgid "publication_date"
@@ -3703,6 +3708,21 @@ msgstr ""
msgid "slideDot"
msgstr ""
+#: config/Blocks/ListingOptions/sliderTemplate
+# defaultMessage: Qui puoi selezionare, per il template 'Slider', un aspetto diverso da quello di default per gli elementi mostrati nello slider.
+msgid "slider_listing_appearance_description"
+msgstr ""
+
+#: config/Blocks/ListingOptions/sliderTemplate
+# defaultMessage: Card con immagine
+msgid "slider_listing_appearance_imagecard"
+msgstr ""
+
+#: config/Blocks/ListingOptions/sliderTemplate
+# defaultMessage: Card semplice
+msgid "slider_listing_appearance_simplecard"
+msgstr ""
+
#: config/Blocks/ListingOptions/sliderTemplate
# defaultMessage: N° slide da mostrare
msgid "slidesToShow"
@@ -3844,7 +3864,7 @@ msgstr ""
msgid "subjects"
msgstr "Sujettes"
-#: components/ItaliaTheme/Blocks/Listing/SliderTemplate
+#: components/ItaliaTheme/Slider/NextArrow
# defaultMessage: Successivo
msgid "successivo"
msgstr ""
@@ -4061,7 +4081,7 @@ msgstr "Chercher une structure"
msgid "uo_type"
msgstr "Typologie"
-#: components/ItaliaTheme/Blocks/Listing/SimpleCard/SimpleCardTemplateDefault
+#: components/ItaliaTheme/Blocks/Listing/SimpleCard/Card/SimpleCardDefault
#: components/ItaliaTheme/Blocks/Listing/SimpleCard/SimpleCardTemplateOneForRow
# defaultMessage: Data di aggiornamento
msgid "update_date"
@@ -4087,21 +4107,6 @@ msgstr "Changement de bilan"
msgid "venues"
msgstr "Lieux"
-#: components/ItaliaTheme/Blocks/VideoGallery/Body
-# defaultMessage: Prossimo video
-msgid "videogallery_next_arrow"
-msgstr "Prochaine vidéo"
-
-#: components/ItaliaTheme/Blocks/VideoGallery/Body
-# defaultMessage: Video precedente
-msgid "videogallery_prev_arrow"
-msgstr "Vidéo précédente"
-
-#: components/ItaliaTheme/Blocks/Listing/SliderTemplate
-# defaultMessage: Sei attualmente in un carosello, per navigare usa le frecce sinistra e destra
-msgid "viewImage"
-msgstr ""
-
#: components/ItaliaTheme/Blocks/ArgumentsInEvidence/BottomBody
# defaultMessage: Vedi tutti
msgid "view_all"
diff --git a/locales/it/LC_MESSAGES/volto.po b/locales/it/LC_MESSAGES/volto.po
index f34fb7d60..f62556f56 100644
--- a/locales/it/LC_MESSAGES/volto.po
+++ b/locales/it/LC_MESSAGES/volto.po
@@ -36,6 +36,7 @@ msgid "Allow Externals"
msgstr "Accetta URL esterni per l'embed"
#: config/Blocks/ListingOptions/simpleCardTemplate
+#: config/Blocks/ListingOptions/sliderTemplate
# defaultMessage: Aspetto
msgid "Aspetto"
msgstr "Aspetto"
@@ -60,7 +61,7 @@ msgstr "Titolo del blocco..."
msgid "Block style"
msgstr "Stile del blocco"
-#: components/ItaliaTheme/Blocks/Listing/SimpleCard/SimpleCardTemplateDefault
+#: components/ItaliaTheme/Blocks/Listing/SimpleCard/Card/SimpleCardDefault
#: components/ItaliaTheme/Blocks/Listing/SimpleCard/SimpleCardTemplateOneForRow
# defaultMessage: Vedi
msgid "Card detail label"
@@ -444,9 +445,8 @@ msgstr ""
msgid "Path filter filtro"
msgstr "Filtro"
-#: components/ItaliaTheme/Blocks/Listing/PhotogalleryTemplate
-#: components/ItaliaTheme/Blocks/Listing/SliderTemplate
-# defaultMessage: Metti in pausa
+#: components/ItaliaTheme/Slider/ButtonPlayPause
+# defaultMessage: Seleziona per mettere in pausa lo slider
msgid "Pause slider"
msgstr "Metti in pausa"
@@ -461,9 +461,8 @@ msgstr "Percorso"
msgid "Piccolo"
msgstr "Piccolo"
-#: components/ItaliaTheme/Blocks/Listing/PhotogalleryTemplate
-#: components/ItaliaTheme/Blocks/Listing/SliderTemplate
-# defaultMessage: Play
+#: components/ItaliaTheme/Slider/ButtonPlayPause
+# defaultMessage: Seleziona per riprodurre lo slider
msgid "Play slider"
msgstr "Seleziona per riprodurre"
@@ -1097,21 +1096,11 @@ msgstr ""
msgid "calendarBlockSidebarTitle"
msgstr "Calendario"
-#: components/ItaliaTheme/Blocks/Calendar/Body
-# defaultMessage: Prossimi eventi
-msgid "calendar_next_arrow"
-msgstr "Prossimi eventi"
-
#: components/ItaliaTheme/Blocks/Calendar/Body
# defaultMessage: Nessun evento disponibile al momento
msgid "calendar_no_results"
msgstr "Nessun evento disponibile al momento"
-#: components/ItaliaTheme/Blocks/Calendar/Body
-# defaultMessage: Eventi precedenti
-msgid "calendar_prev_arrow"
-msgstr "Eventi precedenti"
-
#: components/ItaliaTheme/manage/Widgets/CanaleDigitaleWidget
# defaultMessage: Accedere al servizio
msgid "canale_digitale_widget_title"
@@ -1138,6 +1127,21 @@ msgstr "Vedi"
msgid "card_width_image"
msgstr "Card con immagine"
+#: components/ItaliaTheme/Slider/CarouselWrapper
+# defaultMessage: Carosello
+msgid "carousel"
+msgstr ""
+
+#: components/ItaliaTheme/Blocks/Listing/SliderTemplate
+# defaultMessage: Sei attualmente in un carosello, per navigare usa le frecce sinistra e destra
+msgid "carousel-item-aria-label"
+msgstr ""
+
+#: components/ItaliaTheme/Slider/SingleSlideWrapper
+# defaultMessage: Slide
+msgid "carouselSlide"
+msgstr ""
+
#: components/ItaliaTheme/View/CartellaModulisticaView/CartellaModulisticaView
# defaultMessage: Formati scaricabili
msgid "cartellamodulistica_formati_scaricabili"
@@ -2637,6 +2641,7 @@ msgstr "Numero del comunicato stampa"
msgid "openAccordion"
msgstr ""
+#: components/ItaliaTheme/Blocks/Listing/Slider/SlideItemDefault
#: components/ItaliaTheme/Blocks/Listing/SliderTemplate
# defaultMessage: Apri il link
msgid "openLink"
@@ -2826,7 +2831,7 @@ msgstr "Testo di aiuto"
msgid "playStoreLink"
msgstr "PlayStore Link"
-#: components/ItaliaTheme/Blocks/Listing/SliderTemplate
+#: components/ItaliaTheme/Slider/PrevArrow
# defaultMessage: Precedente
msgid "precedente"
msgstr "Precedente"
@@ -2852,7 +2857,7 @@ msgstr "Procedura informatizzata online"
msgid "provvedimento_finale"
msgstr "Provvedimento finale"
-#: components/ItaliaTheme/Blocks/Listing/SimpleCard/SimpleCardTemplateDefault
+#: components/ItaliaTheme/Blocks/Listing/SimpleCard/Card/SimpleCardDefault
#: components/ItaliaTheme/Blocks/Listing/SimpleCard/SimpleCardTemplateOneForRow
# defaultMessage: Data di pubblicazione
msgid "publication_date"
@@ -3686,6 +3691,21 @@ msgstr "Skype"
msgid "slideDot"
msgstr "Vai alla slide {index}"
+#: config/Blocks/ListingOptions/sliderTemplate
+# defaultMessage: Qui puoi selezionare, per il template 'Slider', un aspetto diverso da quello di default per gli elementi mostrati nello slider.
+msgid "slider_listing_appearance_description"
+msgstr ""
+
+#: config/Blocks/ListingOptions/sliderTemplate
+# defaultMessage: Card con immagine
+msgid "slider_listing_appearance_imagecard"
+msgstr ""
+
+#: config/Blocks/ListingOptions/sliderTemplate
+# defaultMessage: Card semplice
+msgid "slider_listing_appearance_simplecard"
+msgstr ""
+
#: config/Blocks/ListingOptions/sliderTemplate
# defaultMessage: N° slide da mostrare
msgid "slidesToShow"
@@ -3827,7 +3847,7 @@ msgstr "Visibile"
msgid "subjects"
msgstr "Tags"
-#: components/ItaliaTheme/Blocks/Listing/SliderTemplate
+#: components/ItaliaTheme/Slider/NextArrow
# defaultMessage: Successivo
msgid "successivo"
msgstr "Successivo"
@@ -4044,7 +4064,7 @@ msgstr "Cerca una struttura"
msgid "uo_type"
msgstr "Tipologia"
-#: components/ItaliaTheme/Blocks/Listing/SimpleCard/SimpleCardTemplateDefault
+#: components/ItaliaTheme/Blocks/Listing/SimpleCard/Card/SimpleCardDefault
#: components/ItaliaTheme/Blocks/Listing/SimpleCard/SimpleCardTemplateOneForRow
# defaultMessage: Data di aggiornamento
msgid "update_date"
@@ -4070,21 +4090,6 @@ msgstr "Variazione situazione patrimoniale"
msgid "venues"
msgstr "Luoghi"
-#: components/ItaliaTheme/Blocks/VideoGallery/Body
-# defaultMessage: Prossimo video
-msgid "videogallery_next_arrow"
-msgstr "Prossimo video"
-
-#: components/ItaliaTheme/Blocks/VideoGallery/Body
-# defaultMessage: Video precedente
-msgid "videogallery_prev_arrow"
-msgstr "Video precedente"
-
-#: components/ItaliaTheme/Blocks/Listing/SliderTemplate
-# defaultMessage: Sei attualmente in un carosello, per navigare usa le frecce sinistra e destra
-msgid "viewImage"
-msgstr "Sei attualmente in un carosello, per navigare usa le frecce sinistra e destra"
-
#: components/ItaliaTheme/Blocks/ArgumentsInEvidence/BottomBody
# defaultMessage: Vedi tutti
msgid "view_all"
diff --git a/locales/volto.pot b/locales/volto.pot
index a4a47e9e8..fb9571d01 100644
--- a/locales/volto.pot
+++ b/locales/volto.pot
@@ -38,6 +38,7 @@ msgid "Allow Externals"
msgstr ""
#: config/Blocks/ListingOptions/simpleCardTemplate
+#: config/Blocks/ListingOptions/sliderTemplate
# defaultMessage: Aspetto
msgid "Aspetto"
msgstr ""
@@ -62,7 +63,7 @@ msgstr ""
msgid "Block style"
msgstr ""
-#: components/ItaliaTheme/Blocks/Listing/SimpleCard/SimpleCardTemplateDefault
+#: components/ItaliaTheme/Blocks/Listing/SimpleCard/Card/SimpleCardDefault
#: components/ItaliaTheme/Blocks/Listing/SimpleCard/SimpleCardTemplateOneForRow
# defaultMessage: Vedi
msgid "Card detail label"
@@ -446,9 +447,8 @@ msgstr ""
msgid "Path filter filtro"
msgstr ""
-#: components/ItaliaTheme/Blocks/Listing/PhotogalleryTemplate
-#: components/ItaliaTheme/Blocks/Listing/SliderTemplate
-# defaultMessage: Metti in pausa
+#: components/ItaliaTheme/Slider/ButtonPlayPause
+# defaultMessage: Seleziona per mettere in pausa lo slider
msgid "Pause slider"
msgstr ""
@@ -463,9 +463,8 @@ msgstr ""
msgid "Piccolo"
msgstr ""
-#: components/ItaliaTheme/Blocks/Listing/PhotogalleryTemplate
-#: components/ItaliaTheme/Blocks/Listing/SliderTemplate
-# defaultMessage: Play
+#: components/ItaliaTheme/Slider/ButtonPlayPause
+# defaultMessage: Seleziona per riprodurre lo slider
msgid "Play slider"
msgstr ""
@@ -1099,21 +1098,11 @@ msgstr ""
msgid "calendarBlockSidebarTitle"
msgstr ""
-#: components/ItaliaTheme/Blocks/Calendar/Body
-# defaultMessage: Prossimi eventi
-msgid "calendar_next_arrow"
-msgstr ""
-
#: components/ItaliaTheme/Blocks/Calendar/Body
# defaultMessage: Nessun evento disponibile al momento
msgid "calendar_no_results"
msgstr ""
-#: components/ItaliaTheme/Blocks/Calendar/Body
-# defaultMessage: Eventi precedenti
-msgid "calendar_prev_arrow"
-msgstr ""
-
#: components/ItaliaTheme/manage/Widgets/CanaleDigitaleWidget
# defaultMessage: Accedere al servizio
msgid "canale_digitale_widget_title"
@@ -1140,6 +1129,21 @@ msgstr ""
msgid "card_width_image"
msgstr ""
+#: components/ItaliaTheme/Slider/CarouselWrapper
+# defaultMessage: Carosello
+msgid "carousel"
+msgstr ""
+
+#: components/ItaliaTheme/Blocks/Listing/SliderTemplate
+# defaultMessage: Sei attualmente in un carosello, per navigare usa le frecce sinistra e destra
+msgid "carousel-item-aria-label"
+msgstr ""
+
+#: components/ItaliaTheme/Slider/SingleSlideWrapper
+# defaultMessage: Slide
+msgid "carouselSlide"
+msgstr ""
+
#: components/ItaliaTheme/View/CartellaModulisticaView/CartellaModulisticaView
# defaultMessage: Formati scaricabili
msgid "cartellamodulistica_formati_scaricabili"
@@ -2639,6 +2643,7 @@ msgstr ""
msgid "openAccordion"
msgstr ""
+#: components/ItaliaTheme/Blocks/Listing/Slider/SlideItemDefault
#: components/ItaliaTheme/Blocks/Listing/SliderTemplate
# defaultMessage: Apri il link
msgid "openLink"
@@ -2828,7 +2833,7 @@ msgstr ""
msgid "playStoreLink"
msgstr ""
-#: components/ItaliaTheme/Blocks/Listing/SliderTemplate
+#: components/ItaliaTheme/Slider/PrevArrow
# defaultMessage: Precedente
msgid "precedente"
msgstr ""
@@ -2854,7 +2859,7 @@ msgstr ""
msgid "provvedimento_finale"
msgstr ""
-#: components/ItaliaTheme/Blocks/Listing/SimpleCard/SimpleCardTemplateDefault
+#: components/ItaliaTheme/Blocks/Listing/SimpleCard/Card/SimpleCardDefault
#: components/ItaliaTheme/Blocks/Listing/SimpleCard/SimpleCardTemplateOneForRow
# defaultMessage: Data di pubblicazione
msgid "publication_date"
@@ -3285,7 +3290,7 @@ msgid "search_startDate"
msgstr ""
#: helpers/Translations/searchBlockExtendedTranslations
-# defaultMessage: Ricerca per: {searchedtext}.
+# defaultMessage: Ricerca per: {searchedtext}.
msgid "searchedFor"
msgstr ""
@@ -3688,6 +3693,21 @@ msgstr ""
msgid "slideDot"
msgstr ""
+#: config/Blocks/ListingOptions/sliderTemplate
+# defaultMessage: Qui puoi selezionare, per il template 'Slider', un aspetto diverso da quello di default per gli elementi mostrati nello slider.
+msgid "slider_listing_appearance_description"
+msgstr ""
+
+#: config/Blocks/ListingOptions/sliderTemplate
+# defaultMessage: Card con immagine
+msgid "slider_listing_appearance_imagecard"
+msgstr ""
+
+#: config/Blocks/ListingOptions/sliderTemplate
+# defaultMessage: Card semplice
+msgid "slider_listing_appearance_simplecard"
+msgstr ""
+
#: config/Blocks/ListingOptions/sliderTemplate
# defaultMessage: N° slide da mostrare
msgid "slidesToShow"
@@ -3829,7 +3849,7 @@ msgstr ""
msgid "subjects"
msgstr ""
-#: components/ItaliaTheme/Blocks/Listing/SliderTemplate
+#: components/ItaliaTheme/Slider/NextArrow
# defaultMessage: Successivo
msgid "successivo"
msgstr ""
@@ -4046,7 +4066,7 @@ msgstr ""
msgid "uo_type"
msgstr ""
-#: components/ItaliaTheme/Blocks/Listing/SimpleCard/SimpleCardTemplateDefault
+#: components/ItaliaTheme/Blocks/Listing/SimpleCard/Card/SimpleCardDefault
#: components/ItaliaTheme/Blocks/Listing/SimpleCard/SimpleCardTemplateOneForRow
# defaultMessage: Data di aggiornamento
msgid "update_date"
@@ -4072,21 +4092,6 @@ msgstr ""
msgid "venues"
msgstr ""
-#: components/ItaliaTheme/Blocks/VideoGallery/Body
-# defaultMessage: Prossimo video
-msgid "videogallery_next_arrow"
-msgstr ""
-
-#: components/ItaliaTheme/Blocks/VideoGallery/Body
-# defaultMessage: Video precedente
-msgid "videogallery_prev_arrow"
-msgstr ""
-
-#: components/ItaliaTheme/Blocks/Listing/SliderTemplate
-# defaultMessage: Sei attualmente in un carosello, per navigare usa le frecce sinistra e destra
-msgid "viewImage"
-msgstr ""
-
#: components/ItaliaTheme/Blocks/ArgumentsInEvidence/BottomBody
# defaultMessage: Vedi tutti
msgid "view_all"
diff --git a/src/components/ItaliaTheme/Blocks/Calendar/Body.jsx b/src/components/ItaliaTheme/Blocks/Calendar/Body.jsx
index dcd033610..cfcbe89ed 100644
--- a/src/components/ItaliaTheme/Blocks/Calendar/Body.jsx
+++ b/src/components/ItaliaTheme/Blocks/Calendar/Body.jsx
@@ -3,8 +3,11 @@ import { useDispatch, useSelector } from 'react-redux';
import { useIntl, defineMessages } from 'react-intl';
import useDeepCompareEffect from 'use-deep-compare-effect';
import {
- FontAwesomeIcon,
ListingLinkMore,
+ CarouselWrapper,
+ SingleSlideWrapper,
+ NextArrow,
+ PrevArrow,
} from 'design-comuni-plone-theme/components/ItaliaTheme';
import { Card, Row, Col, Container, Button } from 'design-react-kit';
import cx from 'classnames';
@@ -28,14 +31,6 @@ const messages = defineMessages({
id: 'calendar_no_results',
defaultMessage: 'Nessun evento disponibile al momento',
},
- calendar_next_arrow: {
- id: 'calendar_next_arrow',
- defaultMessage: 'Prossimi eventi',
- },
- calendar_prev_arrow: {
- id: 'calendar_prev_arrow',
- defaultMessage: 'Eventi precedenti',
- },
});
const copyFields = ['limit', 'query', 'sort_on', 'sort_order', 'depth'];
@@ -169,43 +164,6 @@ const Body = ({ data, block, inEditMode, path, onChangeBlock, reactSlick }) => {
setAdditionalFilters(filters);
};
- const NextArrow = (props) => {
- const { onClick, className } = props;
- return (
-
- );
- };
- const PrevArrow = (props) => {
- const { onClick, className } = props;
- return (
-
- );
- };
-
const settings = {
dots: true,
arrows: true,
@@ -330,19 +288,25 @@ const Body = ({ data, block, inEditMode, path, onChangeBlock, reactSlick }) => {
{calendarResults[block]?.items?.length > 0 ? (
-
- {calendarResults[block].items.map((day, index) => (
-
-
-
- ))}
-
+
+
+ {calendarResults[block].items.map((day, index) => (
+
+
+
+ ))}
+
+
) : inEditMode ? (
{intl.formatMessage(messages.insert_filter)}
diff --git a/src/components/ItaliaTheme/Blocks/Listing/CardWithImage/CardWithImageDefault.jsx b/src/components/ItaliaTheme/Blocks/Listing/CardWithImage/CardWithImageDefault.jsx
new file mode 100644
index 000000000..c21f5b906
--- /dev/null
+++ b/src/components/ItaliaTheme/Blocks/Listing/CardWithImage/CardWithImageDefault.jsx
@@ -0,0 +1,182 @@
+/*
+ * componente per visulizzare un elemento del template 'Card con immagine' del blocco listing con l'aspetto di default.
+ */
+import React from 'react';
+import PropTypes from 'prop-types';
+import cx from 'classnames';
+
+import {
+ Card,
+ CardBody,
+ CardTitle,
+ CardText,
+ Chip,
+ ChipLabel,
+} from 'design-react-kit';
+import { injectLazyLibs } from '@plone/volto/helpers/Loadable/Loadable';
+import { UniversalLink } from '@plone/volto/components';
+import { flattenToAppURL } from '@plone/volto/helpers';
+import { CardCategory } from 'design-comuni-plone-theme/components/ItaliaTheme';
+import {
+ getCalendarDate,
+ getEventRecurrenceMore,
+ getComponentWithFallback,
+} from 'design-comuni-plone-theme/helpers';
+import { getCategory } from 'design-comuni-plone-theme/components/ItaliaTheme/Blocks/Listing/Commons/utils';
+
+import {
+ getItemIcon,
+ CardCalendar,
+ ListingCategory,
+ ListingImage,
+ ListingText,
+ CardPersona,
+} from 'design-comuni-plone-theme/components/ItaliaTheme';
+
+const CardWithImageDefault = (props) => {
+ const {
+ item,
+ index,
+ isEditMode,
+ always_show_image = false,
+ set_four_columns = false,
+ show_type = true,
+ show_section,
+ show_icon = true,
+ show_description = true,
+ show_topics = true,
+ hide_dates = false,
+ natural_image_size = false,
+ id_lighthouse,
+ rrule,
+ } = props;
+
+ const imagesToShow = set_four_columns ? 4 : 3;
+
+ const icon = show_icon ? getItemIcon(item) : null;
+ const date = hide_dates ? null : getCalendarDate(item, rrule.rrulestr);
+ const eventRecurrenceMore = hide_dates
+ ? null
+ : getEventRecurrenceMore(item, isEditMode);
+ const listingText = show_description ? : null;
+
+ const image = ListingImage({ item, showTitleAttr: false });
+
+ const showImage =
+ (index < imagesToShow || always_show_image) && image != null;
+ const category = getCategory(item, show_type, show_section, props);
+ const topics = show_topics ? item.tassonomia_argomenti : null;
+
+ const BlockExtraTags = getComponentWithFallback({
+ name: 'BlockExtraTags',
+ dependencies: ['CardWithImageDefault', item['@type']],
+ }).component;
+
+ return (
+ <>
+ {item['@type'] === 'Persona' ? (
+
+ ) : (
+
+ {/* wrapperClassName="card-overlapping" */}
+ {showImage && (
+
+
+
+ {item['@type'] === 'Event' && (
+
+ )}
+
+
+ )}
+
+ {(icon || category || date) && (
+
+
+
+ )}
+
+
+ {item.title || item.id}
+
+
+ {listingText && (
+ 0,
+ })}
+ >
+ {listingText}
+
+ )}
+
+ {topics?.length > 0 && (
+
+ {topics.map((argument, index) => (
+
+
+ {argument.title}
+
+
+ ))}
+
+ )}
+
+ {eventRecurrenceMore}
+
+
+ )}
+ >
+ );
+};
+
+CardWithImageDefault.propTypes = {
+ item: PropTypes.any.isRequired,
+ isEditMode: PropTypes.bool,
+};
+
+export default injectLazyLibs(['rrule'])(CardWithImageDefault);
diff --git a/src/components/ItaliaTheme/Blocks/Listing/CardWithImageTemplate.jsx b/src/components/ItaliaTheme/Blocks/Listing/CardWithImageTemplate.jsx
index 65e723954..5e7e9dfb0 100644
--- a/src/components/ItaliaTheme/Blocks/Listing/CardWithImageTemplate.jsx
+++ b/src/components/ItaliaTheme/Blocks/Listing/CardWithImageTemplate.jsx
@@ -1,68 +1,28 @@
/*
- * componente per visulizzare un CT "Persona" nei Listing o in aclune pagine
+ * componente per visulizzare i risultati del blocco Listing con il template 'Card con immagine'
*/
import React from 'react';
import PropTypes from 'prop-types';
import cx from 'classnames';
-import {
- Container,
- Row,
- Col,
- Card,
- CardBody,
- CardTitle,
- CardText,
- Chip,
- ChipLabel,
-} from 'design-react-kit';
-import { injectLazyLibs } from '@plone/volto/helpers/Loadable/Loadable';
-import { UniversalLink } from '@plone/volto/components';
-import { flattenToAppURL } from '@plone/volto/helpers';
-import {
- CardCategory,
- ListingLinkMore,
-} from 'design-comuni-plone-theme/components/ItaliaTheme';
-import {
- getCalendarDate,
- getEventRecurrenceMore,
- getComponentWithFallback,
-} from 'design-comuni-plone-theme/helpers';
-import { getCategory } from 'design-comuni-plone-theme/components/ItaliaTheme/Blocks/Listing/Commons/utils';
+import { Container, Row, Col } from 'design-react-kit';
+import { ListingLinkMore } from 'design-comuni-plone-theme/components/ItaliaTheme';
-import {
- getItemIcon,
- CardCalendar,
- ListingCategory,
- ListingImage,
- ListingText,
- CardPersona,
-} from 'design-comuni-plone-theme/components/ItaliaTheme';
+import CardWithImageDefault from 'design-comuni-plone-theme/components/ItaliaTheme/Blocks/Listing/CardWithImage/CardWithImageDefault';
const CardWithImageTemplate = (props) => {
const {
items,
- isEditMode,
title,
linkAlign,
linkTitle,
linkHref,
show_block_bg = false,
- always_show_image = false,
set_four_columns = false,
- show_type = false,
- show_section,
- show_icon = true,
- show_description = true,
- show_topics = true,
- hide_dates = false,
- natural_image_size = false,
- id_lighthouse,
linkmore_id_lighthouse,
titleLine,
- rrule,
} = props;
- const imagesToShow = set_four_columns ? 4 : 3;
+
return (
@@ -82,28 +42,6 @@ const CardWithImageTemplate = (props) => {
)}
{items.map((item, index) => {
- const icon = show_icon ? getItemIcon(item) : null;
- const date = hide_dates
- ? null
- : getCalendarDate(item, rrule.rrulestr);
- const eventRecurrenceMore = hide_dates
- ? null
- : getEventRecurrenceMore(item, isEditMode);
- const listingText = show_description ? (
-
- ) : null;
-
- const image = ListingImage({ item, showTitleAttr: false });
-
- const showImage =
- (index < imagesToShow || always_show_image) && image != null;
- const category = getCategory(item, show_type, show_section, props);
- const topics = show_topics ? item.tassonomia_argomenti : null;
-
- const BlockExtraTags = getComponentWithFallback({
- name: 'BlockExtraTags',
- dependencies: ['CardWithImageTemplate', item['@type']],
- }).component;
const layoutSelected = set_four_columns ? '3' : '4';
return (
@@ -113,111 +51,7 @@ const CardWithImageTemplate = (props) => {
key={item['@id']}
className="col-item mb-3"
>
- {item['@type'] === 'Persona' ? (
-
- ) : (
-
- {/* wrapperClassName="card-overlapping" */}
- {showImage && (
-
-
-
- {item['@type'] === 'Event' && (
-
- )}
-
-
- )}
-
- {(icon || category || date) && (
-
-
-
- )}
-
-
- {item.title || item.id}
-
-
- {listingText && (
- 0,
- })}
- >
- {listingText}
-
- )}
-
- {topics?.length > 0 && (
-
- {topics.map((argument, index) => (
-
-
-
- {argument.title}
-
-
-
- ))}
-
- )}
-
- {eventRecurrenceMore}
-
-
- )}
+
);
})}
@@ -242,4 +76,4 @@ CardWithImageTemplate.propTypes = {
title: PropTypes.string,
};
-export default injectLazyLibs(['rrule'])(CardWithImageTemplate);
+export default CardWithImageTemplate;
diff --git a/src/components/ItaliaTheme/Blocks/Listing/Commons/NextArrow.jsx b/src/components/ItaliaTheme/Blocks/Listing/Commons/NextArrow.jsx
deleted file mode 100644
index 3ac16ee96..000000000
--- a/src/components/ItaliaTheme/Blocks/Listing/Commons/NextArrow.jsx
+++ /dev/null
@@ -1,10 +0,0 @@
-import { Icon } from 'design-comuni-plone-theme/components/ItaliaTheme';
-
-export default function NextArrow(props) {
- const { className, style, onClick } = props;
- return (
-
-
-
- );
-}
diff --git a/src/components/ItaliaTheme/Blocks/Listing/Commons/PrevArrow.jsx b/src/components/ItaliaTheme/Blocks/Listing/Commons/PrevArrow.jsx
deleted file mode 100644
index 1ba29a168..000000000
--- a/src/components/ItaliaTheme/Blocks/Listing/Commons/PrevArrow.jsx
+++ /dev/null
@@ -1,10 +0,0 @@
-import { Icon } from 'design-comuni-plone-theme/components/ItaliaTheme';
-
-export default function PrevArrow(props) {
- const { className, style, onClick } = props;
- return (
-
-
-
- );
-}
diff --git a/src/components/ItaliaTheme/Blocks/Listing/Commons/utils.js b/src/components/ItaliaTheme/Blocks/Listing/Commons/utils.js
index 82282bd32..4889306b4 100644
--- a/src/components/ItaliaTheme/Blocks/Listing/Commons/utils.js
+++ b/src/components/ItaliaTheme/Blocks/Listing/Commons/utils.js
@@ -1,5 +1,3 @@
-import { useRef, useEffect } from 'react';
-
export const getCategory = (item, show_type, show_section, props) => {
let cat = [];
@@ -17,71 +15,3 @@ export const getCategory = (item, show_type, show_section, props) => {
}
return null;
};
-export const visibleSlideTitle = (selector) => {
- // Needed to deal with react-slick duplicating a lot of slides
- // when used in infinite mode. It's an useless and counterproductive
- // thing to do on their part, there are multiple issues opened.
- // The lib is not actually mantained so...
- return Array.from(document.querySelectorAll(selector)).find((e) => {
- const rect = e.getBoundingClientRect();
- return rect.left >= 0 && rect.right <= window.innerWidth;
- });
-};
-
-export const useSlider = (userAutoplay) => {
- const slider = useRef(null);
- const onIntersection = (entries, opt) => {
- entries.forEach((entry) =>
- entry.target.classList.toggle('visible', entry.isIntersecting),
- );
- };
- const observer = new IntersectionObserver(onIntersection, {
- root: null,
- threshold: 0.5,
- });
- if (document.querySelector('.block.listing.slider'))
- observer.observe(document.querySelector('.block.listing.slider'));
- useEffect(() => {
- return () => observer.disconnect();
- // eslint-disable-next-line react-hooks/exhaustive-deps
- }, []);
-
- const focusNext = (currentSlide) => {
- const sliderElement = document.querySelector('.block.listing.slider');
- if (!sliderElement) return;
- const sliderIsVisible = sliderElement.classList.contains('visible');
-
- if (!sliderIsVisible) {
- slider.current.slickPause();
- return;
- }
- const slide = sliderElement.querySelectorAll(
- `a.slide-link[data-slide="${currentSlide}"]`,
- );
-
- if ((userAutoplay && !slide) || (userAutoplay && !slide.length > 0)) return;
-
- // Custom handling of focus for a11y
- const link = visibleSlideTitle(
- `a.slide-link[data-slide="${currentSlide}"]`,
- );
-
- if (!link || document.activeElement === link) {
- return;
- }
- // eslint-disable-next-line no-unused-expressions
- else if (
- // if the focus was already on a slide, move it to the current one
- Array.from(document.querySelectorAll('.slick-slide')).some((el) =>
- el.contains(document.activeElement),
- )
- ) {
- link.focus();
- }
- };
-
- return {
- slider,
- focusNext,
- };
-};
diff --git a/src/components/ItaliaTheme/Blocks/Listing/PhotogalleryTemplate.jsx b/src/components/ItaliaTheme/Blocks/Listing/PhotogalleryTemplate.jsx
index 5380b9362..7a6462e1f 100644
--- a/src/components/ItaliaTheme/Blocks/Listing/PhotogalleryTemplate.jsx
+++ b/src/components/ItaliaTheme/Blocks/Listing/PhotogalleryTemplate.jsx
@@ -4,22 +4,26 @@
import 'slick-carousel/slick/slick.css';
import 'design-comuni-plone-theme/components/slick-carousel/slick/slick-theme.css';
+import React, { useRef, useState } from 'react';
+import { defineMessages, useIntl } from 'react-intl';
+import cx from 'classnames';
+import PropTypes from 'prop-types';
import { Col, Container, Row } from 'design-react-kit';
+
+import { UniversalLink } from '@plone/volto/components';
+import { flattenToAppURL } from '@plone/volto/helpers';
+import { injectLazyLibs } from '@plone/volto/helpers/Loadable/Loadable';
+
import {
ListingImage,
ListingLinkMore,
NextArrow,
PrevArrow,
+ SingleSlideWrapper,
+ CarouselWrapper,
+ ButtonPlayPause,
} from 'design-comuni-plone-theme/components/ItaliaTheme';
-import React, { useRef, useState } from 'react';
-import { defineMessages, useIntl } from 'react-intl';
import { GalleryPreview } from 'design-comuni-plone-theme/components/ItaliaTheme';
-import { Icon } from 'design-comuni-plone-theme/components/ItaliaTheme';
-import PropTypes from 'prop-types';
-import { UniversalLink } from '@plone/volto/components';
-import cx from 'classnames';
-import { flattenToAppURL } from '@plone/volto/helpers';
-import { injectLazyLibs } from '@plone/volto/helpers/Loadable/Loadable';
const messages = defineMessages({
viewImage: {
@@ -30,14 +34,6 @@ const messages = defineMessages({
id: 'gallery_viewPreview',
defaultMessage: "Vedi l'anteprima di",
},
- play: {
- id: 'Play slider',
- defaultMessage: 'Play',
- },
- pause: {
- id: 'Pause slider',
- defaultMessage: 'Metti in pausa',
- },
});
const PhotogalleryTemplate = ({
@@ -116,21 +112,12 @@ const PhotogalleryTemplate = ({
prevArrow: ,
appendDots: (dots) => (
-
-
-
+
+
@@ -162,7 +149,7 @@ const PhotogalleryTemplate = ({
)}
-
+
{items.map((item, i) => {
const image = ListingImage({
@@ -178,11 +165,12 @@ const PhotogalleryTemplate = ({
}px`,
});
return (
-
{!show_image_popup ? (
)}
-
+
);
})}
@@ -231,7 +219,7 @@ const PhotogalleryTemplate = ({
items={items}
/>
) : null}
-
+
{
+ const intl = useIntl();
+
+ moment.locale(intl.locale);
+
+ const {
+ item,
+ isEditMode,
+ show_icon = true,
+ show_section = true,
+ show_type,
+ show_description = true,
+ show_detail_link,
+ detail_link_label,
+ hide_dates,
+ id_lighthouse,
+ rrule,
+ index,
+ } = props;
+
+ const getItemClass = (item) => {
+ let className = null;
+ switch (item['@type']) {
+ case 'News Item':
+ className =
+ item.tipologia_notizia
+ ?.map?.((tipologia) =>
+ tipologia.token.toLowerCase().replace(' ', '_'),
+ )
+ .join(' ') ?? '';
+ break;
+ default:
+ className = null;
+ break;
+ }
+ return className;
+ };
+
+ const icon = show_icon ? getItemIcon(item) : null;
+ const itemTitle = item.title || item.id;
+ const date = hide_dates ? null : getCalendarDate(item, rrule.rrulestr);
+ const eventRecurrenceMore = hide_dates
+ ? null
+ : getEventRecurrenceMore(item, isEditMode);
+ const listingText = show_description ? : null;
+ const category = getCategory(item, show_type, show_section, props);
+ const type = item['@type'];
+
+ const BlockExtraTags = getComponentWithFallback({
+ name: 'BlockExtraTags',
+ dependencies: ['SimpleCardDefault', type],
+ }).component;
+
+ return (
+
+
+ {(icon || category || date) && (
+
+ {category && (
+
+
+
+ )}
+
+ )}
+
+
+ {itemTitle}
+
+
+ {listingText && (
+
+ {listingText}
+ {(type === 'Modulo' || type === 'Documento') && !hide_dates && (
+
+ {item?.effective && (
+
+
+ {intl.formatMessage(messages.publication_date)}:{' '}
+
+ {moment(item.effective).format('DD-MM-YYYY')}
+
+ )}
+ {item?.modified && (
+
+
+ {intl.formatMessage(messages.update_date)}:{' '}
+
+ {moment(item.modified).format('DD-MM-YYYY')}
+
+ )}
+
+ )}
+
+ )}
+
+ {eventRecurrenceMore}
+ {show_detail_link && (
+
+ )}
+
+
+ );
+};
+
+SimpleCardDefault.propTypes = {
+ item: PropTypes.any.isRequired,
+ isEditMode: PropTypes.bool,
+};
+
+export default injectLazyLibs(['rrule'])(SimpleCardDefault);
diff --git a/src/components/ItaliaTheme/Blocks/Listing/SimpleCard/SimpleCardTemplateDefault.jsx b/src/components/ItaliaTheme/Blocks/Listing/SimpleCard/SimpleCardTemplateDefault.jsx
index 6ca1ee7d5..fb713a0e6 100644
--- a/src/components/ItaliaTheme/Blocks/Listing/SimpleCard/SimpleCardTemplateDefault.jsx
+++ b/src/components/ItaliaTheme/Blocks/Listing/SimpleCard/SimpleCardTemplateDefault.jsx
@@ -1,76 +1,25 @@
import React, { useState } from 'react';
import PropTypes from 'prop-types';
-import { defineMessages, useIntl } from 'react-intl';
-import moment from 'moment';
-import { v4 as uuid } from 'uuid';
import cx from 'classnames';
-import {
- Card,
- CardBody,
- CardTitle,
- CardText,
- CardReadMore,
- Button,
- Row,
- Col,
-} from 'design-react-kit';
-import { injectLazyLibs } from '@plone/volto/helpers/Loadable/Loadable';
-import { UniversalLink } from '@plone/volto/components';
-
-import { CardCategory } from 'design-comuni-plone-theme/components/ItaliaTheme';
-import { getCategory } from 'design-comuni-plone-theme/components/ItaliaTheme/Blocks/Listing/Commons/utils';
-import {
- getItemIcon,
- ListingCategory,
- ListingText,
- ListingLinkMore,
-} from 'design-comuni-plone-theme/components/ItaliaTheme';
-import {
- getCalendarDate,
- getEventRecurrenceMore,
- getComponentWithFallback,
-} from 'design-comuni-plone-theme/helpers';
-
-const messages = defineMessages({
- card_detail_label: { id: 'Card detail label', defaultMessage: 'Vedi' },
- publication_date: {
- id: 'publication_date',
- defaultMessage: 'Data di pubblicazione',
- },
- update_date: {
- id: 'update_date',
- defaultMessage: 'Data di aggiornamento',
- },
-});
+import { Button, Row, Col } from 'design-react-kit';
+import { v4 as uuid } from 'uuid';
+import SimpleCardDefault from 'design-comuni-plone-theme/components/ItaliaTheme/Blocks/Listing/SimpleCard/Card/SimpleCardDefault';
+import { ListingLinkMore } from 'design-comuni-plone-theme/components/ItaliaTheme';
const SimpleCardTemplateDefault = (props) => {
- const intl = useIntl();
-
- moment.locale(intl.locale);
-
const {
items,
- isEditMode,
linkTitle,
linkHref,
linkAlign,
titleLine,
- show_icon = true,
- show_section = true,
- show_type,
- show_description = true,
- show_detail_link,
- detail_link_label,
title,
show_block_bg,
- hide_dates,
path_filters,
show_path_filters,
addFilters,
additionalFilters = [],
- id_lighthouse,
linkmore_id_lighthouse,
- rrule,
} = props;
const resultsUID = uuid();
@@ -85,24 +34,6 @@ const SimpleCardTemplateDefault = (props) => {
const [pathFilter, setPathFilter] = useState(currentPathFilter?.[0] || null);
- const getItemClass = (item) => {
- let className = null;
- switch (item['@type']) {
- case 'News Item':
- className =
- item.tipologia_notizia
- ?.map?.((tipologia) =>
- tipologia.token.toLowerCase().replace(' ', '_'),
- )
- .join(' ') ?? '';
- break;
- default:
- className = null;
- break;
- }
- return className;
- };
-
const path_filters_buttons =
show_path_filters && path_filters
? Object.keys(path_filters)
@@ -185,101 +116,9 @@ const SimpleCardTemplateDefault = (props) => {
className="card-wrapper card-teaser-wrapper card-teaser-wrapper-equal card-teaser-block-3 mb-3"
id={resultsUID + '_results'}
>
- {items.map((item, index) => {
- const icon = show_icon ? getItemIcon(item) : null;
- const itemTitle = item.title || item.id;
- const date = hide_dates
- ? null
- : getCalendarDate(item, rrule.rrulestr);
- const eventRecurrenceMore = hide_dates
- ? null
- : getEventRecurrenceMore(item, isEditMode);
- const listingText = show_description ? (
-
- ) : null;
- const category = getCategory(item, show_type, show_section, props);
- const type = item['@type'];
-
- const BlockExtraTags = getComponentWithFallback({
- name: 'BlockExtraTags',
- dependencies: ['SimpleCardTemplateDefault', type],
- }).component;
-
- return (
-
-
- {(icon || category || date) && (
-
- {category && (
-
-
-
- )}
-
- )}
-
-
- {itemTitle}
-
-
- {listingText && (
-
- {listingText}
- {(type === 'Modulo' || type === 'Documento') &&
- !hide_dates && (
-
- {item?.effective && (
-
-
- {intl.formatMessage(messages.publication_date)}:{' '}
-
- {moment(item.effective).format('DD-MM-YYYY')}
-
- )}
- {item?.modified && (
-
-
- {intl.formatMessage(messages.update_date)}:{' '}
-
- {moment(item.modified).format('DD-MM-YYYY')}
-
- )}
-
- )}
-
- )}
-
- {eventRecurrenceMore}
- {show_detail_link && (
-
- )}
-
-
- );
- })}
+ {items.map((item, index) => (
+
+ ))}
{
SimpleCardTemplateDefault.propTypes = {
items: PropTypes.arrayOf(PropTypes.any).isRequired,
- isEditMode: PropTypes.bool,
linkTitle: PropTypes.any,
linkHref: PropTypes.any,
};
-export default injectLazyLibs(['rrule'])(SimpleCardTemplateDefault);
+export default SimpleCardTemplateDefault;
diff --git a/src/components/ItaliaTheme/Blocks/Listing/Slider/SlideItemDefault.jsx b/src/components/ItaliaTheme/Blocks/Listing/Slider/SlideItemDefault.jsx
new file mode 100644
index 000000000..bcd86ac4e
--- /dev/null
+++ b/src/components/ItaliaTheme/Blocks/Listing/Slider/SlideItemDefault.jsx
@@ -0,0 +1,65 @@
+import React from 'react';
+import { defineMessages } from 'react-intl';
+import { UniversalLink } from '@plone/volto/components';
+import { Container } from 'design-react-kit';
+import { Icon } from 'design-comuni-plone-theme/components/ItaliaTheme';
+
+const messages = defineMessages({
+ openLink: {
+ id: 'openLink',
+ defaultMessage: 'Apri il link',
+ },
+});
+const SlideItemDefault = ({
+ item,
+ index,
+ image,
+ show_image_title,
+ full_width,
+ intl,
+ setUserAutoplay,
+ userAutoplay,
+ slider,
+}) => {
+ return (
+
+ {image ? (
+
+ ) : (
+
+ )}
+ {show_image_title && (
+
+
+ {full_width ? (
+
+ {item.title}{' '}
+
+
+ ) : (
+ <>
+ {item.title}{' '}
+
+ >
+ )}
+
+
+ )}
+
+ );
+};
+
+export default SlideItemDefault;
diff --git a/src/components/ItaliaTheme/Blocks/Listing/SliderTemplate.jsx b/src/components/ItaliaTheme/Blocks/Listing/SliderTemplate.jsx
index 832006211..2a9346934 100644
--- a/src/components/ItaliaTheme/Blocks/Listing/SliderTemplate.jsx
+++ b/src/components/ItaliaTheme/Blocks/Listing/SliderTemplate.jsx
@@ -5,43 +5,26 @@ import 'slick-carousel/slick/slick.css';
import 'design-comuni-plone-theme/components/slick-carousel/slick/slick-theme.css';
import { Col, Container, Row } from 'design-react-kit';
import {
- Icon,
ListingImage,
ListingLinkMore,
+ SingleSlideWrapper,
+ CarouselWrapper,
+ ButtonPlayPause,
} from 'design-comuni-plone-theme/components/ItaliaTheme';
-import {
- useSlider,
- visibleSlideTitle,
-} from 'design-comuni-plone-theme/components/ItaliaTheme/Blocks/Listing/Commons/utils';
+import { useSlider } from 'design-comuni-plone-theme/components/ItaliaTheme/Slider/slider';
import React, { useState } from 'react';
import { defineMessages, useIntl } from 'react-intl';
import PropTypes from 'prop-types';
-import { UniversalLink } from '@plone/volto/components';
import cx from 'classnames';
import { injectLazyLibs } from '@plone/volto/helpers/Loadable/Loadable';
+import config from '@plone/volto/registry';
const messages = defineMessages({
- viewImage: {
- id: 'viewImage',
+ carouselItemAriaLabel: {
+ id: 'carousel-item-aria-label',
defaultMessage:
'Sei attualmente in un carosello, per navigare usa le frecce sinistra e destra',
},
- play: {
- id: 'Play slider',
- defaultMessage: 'Seleziona per riprodurre',
- },
- pause: {
- id: 'Pause slider',
- defaultMessage: 'Seleziona per mettere in pausa',
- },
- precedente: {
- id: 'precedente',
- defaultMessage: 'Precedente',
- },
- successivo: {
- id: 'successivo',
- defaultMessage: 'Successivo',
- },
dots: {
id: 'dots',
defaultMessage: 'Navigazione elementi slider',
@@ -56,169 +39,29 @@ const messages = defineMessages({
},
});
-function NextArrow(props) {
- // Custom handling of focus for a11y
- const { className, style, onClick, intl, currentSlide } = props;
- const handleClick = (options) => {
- onClick(options, false);
- };
- const handleKeyboardUsers = (e) => {
- if (e.key === 'Tab' && e.shiftKey) {
- e.stopPropagation();
- e.preventDefault();
-
- const link = visibleSlideTitle(
- `a.slide-link[data-slide="${currentSlide}"]`,
- );
- link && link.focus();
- }
- };
-
- return (
-
- );
-}
-
-function PrevArrow(props) {
- // Custom handling of focus for a11y
- const {
- className,
- style,
- onClick,
- intl,
- focusNext,
- currentSlide,
- slideCount,
- } = props;
- const handleClick = (options) => {
- onClick(options, false);
- };
- const handleKeyboardUsers = (e) => {
- if (e.key === 'Tab' && !e.shiftKey) {
- e.stopPropagation();
- e.preventDefault();
- if (currentSlide < slideCount) {
- const link = visibleSlideTitle(
- `a.slide-link[data-slide="${currentSlide}"]`,
- );
- link && link.focus();
- } else focusNext(0);
- }
- };
- return (
-
- );
-}
+const Slide = (props) => {
+ const intl = useIntl();
+ const { item, index, appearance, appearanceProp, onKeyDown } = props;
-const Slide = ({
- item,
- index,
- image,
- show_image_title,
- full_width,
- intl,
- setUserAutoplay,
- userAutoplay,
- slider,
-}) => {
- const handleKeyboardUsers = (e) => {
- const { key, shiftKey } = e;
- if (key === 'Tab') {
- e.stopPropagation();
- e.preventDefault();
- // Keeping auto pause off for now
- // if (userAutoplay) setUserAutoplay(false);
- // slider.current.slickPause();
- let elementToFocus;
- if (shiftKey) {
- elementToFocus = document.getElementById('sliderPrevArrow');
- } else elementToFocus = document.getElementById('sliderNextArrow');
- elementToFocus.focus();
- }
- };
+ const appearances = config.blocks.blocksConfig.listing.variations.filter(
+ (v) => v.id === 'slider',
+ )[0]?.appearance;
+ const SlideItemAppearance = appearances[appearance] ?? appearances['default'];
return (
-
-
- {image ? (
-
- ) : (
-
- )}
- {show_image_title && (
-
-
- {full_width ? (
-
- {item.title}{' '}
-
-
- ) : (
- <>
- {item.title}{' '}
-
- >
- )}
-
-
- )}
+
+
-
+
);
};
@@ -235,13 +78,28 @@ const SliderTemplate = ({
show_dots = true,
autoplay = false,
autoplay_speed = 2, //seconds
+ slide_appearance = 'default',
reactSlick,
+ block,
+ ...otherProps
}) => {
+ const block_id = block;
const intl = useIntl();
+
const [userAutoplay, setUserAutoplay] = useState(autoplay);
- const nSlidesToShow = parseInt(slidesToShow);
+ const nSlidesToShow =
+ items.length < parseInt(slidesToShow)
+ ? items.length
+ : parseInt(slidesToShow);
const Slider = reactSlick.default;
- const { slider, focusNext } = useSlider(userAutoplay);
+ const {
+ slider,
+ focusSlide,
+ SliderNextArrow,
+ SliderPrevArrow,
+ handleSlideKeydown,
+ } = useSlider(userAutoplay, setUserAutoplay, block_id);
+
const toggleAutoplay = () => {
if (!slider?.current) return;
if (userAutoplay) {
@@ -313,11 +171,11 @@ const SliderTemplate = ({
focusOnSelect: false,
draggable: true,
accessibility: true,
- nextArrow:
,
- prevArrow:
,
+ nextArrow:
,
+ prevArrow:
,
appendDots: renderCustomDots,
// Custom handling of focus for a11y
- afterChange: focusNext,
+ afterChange: focusSlide,
responsive: [
{
breakpoint: 980,
@@ -333,7 +191,9 @@ const SliderTemplate = ({
{title && (
@@ -349,30 +209,11 @@ const SliderTemplate = ({
'full-width': full_width,
})}
>
-
+
{items?.length > nSlidesToShow && (
-
-
-
+
+ {userAutoplay ? 'pause' : 'play'}
+
)}
@@ -383,6 +224,8 @@ const SliderTemplate = ({
sizes: `max-width(991px) 620px, ${1300 / nSlidesToShow}px`,
critical: true,
});
+ const nextIndex = index < items.length - 1 ? index + 1 : null;
+ const prevIndex = index > 0 ? index - 1 : null;
return (
);
})}
-
+
diff --git a/src/components/ItaliaTheme/Blocks/VideoGallery/Body.jsx b/src/components/ItaliaTheme/Blocks/VideoGallery/Body.jsx
index 253f8bd99..0e9e6e0b2 100644
--- a/src/components/ItaliaTheme/Blocks/VideoGallery/Body.jsx
+++ b/src/components/ItaliaTheme/Blocks/VideoGallery/Body.jsx
@@ -7,10 +7,14 @@ import React from 'react';
import PropTypes from 'prop-types';
import { injectLazyLibs } from '@plone/volto/helpers/Loadable/Loadable';
-import { useIntl, defineMessages } from 'react-intl';
-import { Icon } from 'design-comuni-plone-theme/components/ItaliaTheme';
-import { FontAwesomeIcon } from 'design-comuni-plone-theme/components/ItaliaTheme';
-import { Button, Container } from 'design-react-kit';
+
+import {
+ Icon,
+ CarouselWrapper,
+ NextArrow,
+ PrevArrow,
+} from 'design-comuni-plone-theme/components/ItaliaTheme';
+import { Container } from 'design-react-kit';
import { UniversalLink } from '@plone/volto/components';
/**
@@ -19,49 +23,7 @@ import { UniversalLink } from '@plone/volto/components';
* @extends Component
*/
-const messages = defineMessages({
- videogallery_next_arrow: {
- id: 'videogallery_next_arrow',
- defaultMessage: 'Prossimo video',
- },
- videogallery_prev_arrow: {
- id: 'videogallery_prev_arrow',
- defaultMessage: 'Video precedente',
- },
-});
-
const Body = ({ data, children, nItems = 0, reactSlick }) => {
- const intl = useIntl();
-
- const NextArrow = (props) => {
- const { onClick, className } = props;
- return (
-
- );
- };
- const PrevArrow = (props) => {
- const { onClick, className } = props;
- return (
-
- );
- };
-
const Slider = reactSlick.default;
const settings = {
@@ -127,9 +89,9 @@ const Body = ({ data, children, nItems = 0, reactSlick }) => {
)}
diff --git a/src/components/ItaliaTheme/Blocks/VideoGallery/Edit.jsx b/src/components/ItaliaTheme/Blocks/VideoGallery/Edit.jsx
index d9f38912f..ec5b8aebd 100644
--- a/src/components/ItaliaTheme/Blocks/VideoGallery/Edit.jsx
+++ b/src/components/ItaliaTheme/Blocks/VideoGallery/Edit.jsx
@@ -14,6 +14,7 @@ import {
import Sidebar from 'design-comuni-plone-theme/components/ItaliaTheme/Blocks/VideoGallery/Sidebar';
import Body from 'design-comuni-plone-theme/components/ItaliaTheme/Blocks/VideoGallery/Body';
import EditBlock from 'design-comuni-plone-theme/components/ItaliaTheme/Blocks/VideoGallery/Block/EditBlock';
+import { SingleSlideWrapper } from 'design-comuni-plone-theme/components/ItaliaTheme';
const messages = defineMessages({
addItem: {
@@ -51,14 +52,14 @@ class Edit extends SubblocksEdit {
{this.state.subblocks.map((subblock, subindex) => (
-
+
-
+
))}
{this.state.subblocks.length === 0 && (
{this.props.intl.formatMessage(messages.noVideos)}
diff --git a/src/components/ItaliaTheme/Blocks/VideoGallery/View.jsx b/src/components/ItaliaTheme/Blocks/VideoGallery/View.jsx
index effd0cc4c..b427830a0 100644
--- a/src/components/ItaliaTheme/Blocks/VideoGallery/View.jsx
+++ b/src/components/ItaliaTheme/Blocks/VideoGallery/View.jsx
@@ -7,6 +7,7 @@ import React from 'react';
import PropTypes from 'prop-types';
import Body from './Body';
import ViewBlock from './Block/ViewBlock';
+import { SingleSlideWrapper } from 'design-comuni-plone-theme/components/ItaliaTheme';
/**
* View icons blocks class.
@@ -18,9 +19,9 @@ const View = ({ data, block }) => {
{data.subblocks.map((subblock, subindex) => (
-
+
-
+
))}
diff --git a/src/components/ItaliaTheme/Icons/FontAwesomeIcon.jsx b/src/components/ItaliaTheme/Icons/FontAwesomeIcon.jsx
index 6fd082386..203850db3 100644
--- a/src/components/ItaliaTheme/Icons/FontAwesomeIcon.jsx
+++ b/src/components/ItaliaTheme/Icons/FontAwesomeIcon.jsx
@@ -36,8 +36,8 @@ const FontAwesomeIcon = (props) => {
prefixKey === 'fab'
? 'brands'
: prefixKey === 'far'
- ? 'regular'
- : 'solid',
+ ? 'regular'
+ : 'solid',
iconName,
];
};
diff --git a/src/components/ItaliaTheme/Slider/ButtonPlayPause.jsx b/src/components/ItaliaTheme/Slider/ButtonPlayPause.jsx
new file mode 100644
index 000000000..89aaaba43
--- /dev/null
+++ b/src/components/ItaliaTheme/Slider/ButtonPlayPause.jsx
@@ -0,0 +1,48 @@
+import React from 'react';
+import { defineMessages, useIntl } from 'react-intl';
+import { Icon } from 'design-comuni-plone-theme/components/ItaliaTheme';
+const messages = defineMessages({
+ play: {
+ id: 'Play slider',
+ defaultMessage: 'Seleziona per riprodurre lo slider',
+ },
+ pause: {
+ id: 'Pause slider',
+ defaultMessage: 'Seleziona per mettere in pausa lo slider',
+ },
+});
+const ButtonPlayPause = ({ onClick, autoplay, showLabel = true, children }) => {
+ const intl = useIntl();
+
+ return (
+
+
+
+ );
+};
+
+export default ButtonPlayPause;
diff --git a/src/components/ItaliaTheme/Slider/CarouselWrapper.jsx b/src/components/ItaliaTheme/Slider/CarouselWrapper.jsx
new file mode 100644
index 000000000..3f4122d88
--- /dev/null
+++ b/src/components/ItaliaTheme/Slider/CarouselWrapper.jsx
@@ -0,0 +1,23 @@
+import React from 'react';
+import { defineMessages, useIntl } from 'react-intl';
+const messages = defineMessages({
+ carousel: {
+ id: 'carousel',
+ defaultMessage: 'Carosello',
+ },
+});
+const CarouselWrapper = ({ className, children }) => {
+ const intl = useIntl();
+
+ return (
+
+ {children}
+
+ );
+};
+
+export default CarouselWrapper;
diff --git a/src/components/ItaliaTheme/Slider/NextArrow.jsx b/src/components/ItaliaTheme/Slider/NextArrow.jsx
new file mode 100644
index 000000000..abd2e9a71
--- /dev/null
+++ b/src/components/ItaliaTheme/Slider/NextArrow.jsx
@@ -0,0 +1,31 @@
+import React from 'react';
+import { Icon } from 'design-comuni-plone-theme/components/ItaliaTheme';
+import { defineMessages, useIntl } from 'react-intl';
+
+const messages = defineMessages({
+ successivo: {
+ id: 'successivo',
+ defaultMessage: 'Successivo',
+ },
+});
+
+export default function NextArrow(props) {
+ const intl = useIntl();
+ const { className, style, onClick, onKeyDown, title, id } = props;
+ const _title = title ?? intl.formatMessage(messages.successivo);
+ return (
+
+ );
+}
diff --git a/src/components/ItaliaTheme/Slider/PrevArrow.jsx b/src/components/ItaliaTheme/Slider/PrevArrow.jsx
new file mode 100644
index 000000000..185770d34
--- /dev/null
+++ b/src/components/ItaliaTheme/Slider/PrevArrow.jsx
@@ -0,0 +1,33 @@
+import React from 'react';
+import { Icon } from 'design-comuni-plone-theme/components/ItaliaTheme';
+import { defineMessages, useIntl } from 'react-intl';
+
+const messages = defineMessages({
+ precedente: {
+ id: 'precedente',
+ defaultMessage: 'Precedente',
+ },
+});
+
+export default function PrevArrow(props) {
+ const intl = useIntl();
+ const { className, style, onClick, onKeyDown, title, id } = props;
+
+ const _title = title ?? intl.formatMessage(messages.precedente);
+
+ return (
+
+ );
+}
diff --git a/src/components/ItaliaTheme/Slider/SingleSlideWrapper.jsx b/src/components/ItaliaTheme/Slider/SingleSlideWrapper.jsx
new file mode 100644
index 000000000..fe7f48d40
--- /dev/null
+++ b/src/components/ItaliaTheme/Slider/SingleSlideWrapper.jsx
@@ -0,0 +1,39 @@
+import React from 'react';
+import { defineMessages, useIntl } from 'react-intl';
+const messages = defineMessages({
+ carouselSlide: {
+ id: 'carouselSlide',
+ defaultMessage: 'Slide',
+ },
+});
+const SingleSlideWrapper = (props) => {
+ const { className, key, index, children, onKeyDown } = props;
+ const intl = useIntl();
+ const wrapperKey = key ?? 'slide-wrapper-' + index;
+
+ return (
+ {
+ e.preventDefault();
+ e.stopPropagation();
+ }}
+ tabIndex={0}
+ >
+ {children}
+
+ );
+};
+
+export default SingleSlideWrapper;
diff --git a/src/components/ItaliaTheme/Slider/slider.js b/src/components/ItaliaTheme/Slider/slider.js
new file mode 100644
index 000000000..7ccc1b64a
--- /dev/null
+++ b/src/components/ItaliaTheme/Slider/slider.js
@@ -0,0 +1,203 @@
+import { useRef, useEffect } from 'react';
+import {
+ NextArrow,
+ PrevArrow,
+} from 'design-comuni-plone-theme/components/ItaliaTheme';
+
+export const useSlider = (userAutoplay, setUserAutoplay, block_id) => {
+ const slider = useRef(null);
+ const sliderContainer = document.getElementById('outside-slider-' + block_id);
+ const sliderElementSelector = `#slider_${block_id}`;
+ const sliderElement = document.querySelector(sliderElementSelector);
+ const onIntersection = (entries, opt) => {
+ entries.forEach((entry) =>
+ entry.target.classList.toggle('visible', entry.isIntersecting),
+ );
+ };
+ const observer = new IntersectionObserver(onIntersection, {
+ root: null,
+ threshold: 0.5,
+ });
+
+ const setAutoplay = (a) => {
+ setUserAutoplay(a);
+ slider.current.slickPause(a);
+ };
+
+ if (sliderContainer) observer.observe(sliderContainer);
+ useEffect(() => {
+ return () => observer.disconnect();
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, []);
+
+ const focusSlide = (slideIndex) => {
+ if (!sliderElement) return;
+ const sliderIsVisible = sliderContainer?.classList?.contains('visible');
+
+ if (!sliderIsVisible) {
+ setAutoplay(false);
+ return;
+ }
+
+ const slide = document.querySelector(
+ `${sliderElementSelector} .slick-slide[data-index="${slideIndex}"] .it-single-slide-wrapper`,
+ );
+
+ if (userAutoplay && !slide) return;
+
+ if (!slide || document.activeElement === slide) {
+ return;
+ }
+
+ //se c'è l'autoplay e non ho il focus sullo, non faccio il focus sulle slide per non perdere il focus sull'elemento della pagina su cui sono e che sta fuori dallo slider.
+ const focusedSliderElement = Array.from(
+ document.querySelectorAll(sliderElementSelector),
+ ).some((node) => node.contains(document.activeElement));
+
+ if (focusedSliderElement) {
+ slide.focus();
+ }
+ };
+
+ const visibleSlide = (selector) => {
+ // Needed to deal with react-slick duplicating a lot of slides
+ // when used in infinite mode. It's an useless and counterproductive
+ // thing to do on their part, there are multiple issues opened.
+ // The lib is not actually mantained so...
+
+ return Array.from(document.querySelectorAll(selector)).find((e) => {
+ const slick_slide = e.closest('.slick-slide');
+ return !slick_slide.classList.contains('slick-cloned');
+ });
+ };
+
+ const SliderNextArrow = (props) => {
+ // Custom handling of focus for a11y
+ const { className, style, onClick, currentSlide } = props;
+ const handleClick = (options) => {
+ onClick(options, false);
+ };
+ const handleKeyboardUsers = (e) => {
+ if (e.key === 'Tab' && e.shiftKey) {
+ e.stopPropagation();
+ e.preventDefault();
+ setAutoplay(false);
+ const slide = visibleSlide(
+ `${sliderElementSelector} .slick-slide[data-index="${currentSlide}"]`,
+ );
+ slide && slide.focus();
+ }
+ };
+
+ return (
+
+ );
+ };
+
+ const SliderPrevArrow = (props) => {
+ // Custom handling of focus for a11y
+ const { className, style, onClick, currentSlide, slideCount } = props;
+ const handleClick = (options) => {
+ onClick(options, false);
+ };
+ const handleKeyboardUsers = (e) => {
+ if (e.key === 'Tab' && !e.shiftKey) {
+ e.stopPropagation();
+ e.preventDefault();
+
+ setAutoplay(false);
+
+ if (currentSlide < slideCount) {
+ const slide = visibleSlide(
+ `${sliderElementSelector} .slick-slide[data-index="${currentSlide}"]`,
+ );
+
+ slide && slide.focus();
+ }
+ }
+ };
+ return (
+
+ );
+ };
+
+ const handleSlideKeydown = (index, prevIndex, nextIndex) => (e) => {
+ const { key, shiftKey } = e;
+
+ setAutoplay(false);
+
+ if (key === 'Tab') {
+ const slide_selector = `#slider_${block_id} .slick-slide[data-index="${index}"]`;
+
+ const focusableSlideElements = document.querySelectorAll(
+ `${slide_selector} a, ${slide_selector} button, ${slide_selector} [tabindex="0"]`,
+ );
+ const isFirstSlideFocusableElement =
+ e.target === focusableSlideElements[0];
+ const isLastSlideFocusableElement =
+ e.target === focusableSlideElements[focusableSlideElements.length - 1];
+
+ if (
+ (isFirstSlideFocusableElement && shiftKey) ||
+ (isLastSlideFocusableElement && !shiftKey)
+ ) {
+ e.preventDefault();
+ e.stopPropagation();
+ //shift+tab ed è il primo elemento focusabile nella slide, oppure tab ed è l'ultimo elemento focusabile nella slide
+ //go to next/prev slide or to next/prev button.
+ } else {
+ return; //continue doing default bhv of Tab key, to focus next focusable element inside slide.
+ }
+
+ if (shiftKey) {
+ if (prevIndex != null) {
+ slider.current.slickGoTo(prevIndex);
+ } else {
+ document.getElementById('sliderPrevArrow_' + block_id).focus();
+ }
+ } else {
+ if (nextIndex != null) {
+ slider.current.slickGoTo(nextIndex);
+ } else {
+ document.getElementById('sliderNextArrow_' + block_id).focus();
+ }
+ }
+ }
+
+ if (key === 'ArrowRight') {
+ if (nextIndex != null) {
+ e.preventDefault();
+ e.stopPropagation();
+ slider.current.slickGoTo(nextIndex);
+ }
+ }
+ if (key === 'ArrowLeft') {
+ if (prevIndex != null) {
+ e.preventDefault();
+ e.stopPropagation();
+ slider.current.slickGoTo(prevIndex);
+ }
+ }
+ };
+
+ return {
+ slider,
+ focusSlide,
+ visibleSlide,
+ SliderNextArrow,
+ SliderPrevArrow,
+ handleSlideKeydown,
+ };
+};
diff --git a/src/components/ItaliaTheme/View/Commons/Gallery.jsx b/src/components/ItaliaTheme/View/Commons/Gallery.jsx
index fbc12a5ef..788ea3b83 100644
--- a/src/components/ItaliaTheme/View/Commons/Gallery.jsx
+++ b/src/components/ItaliaTheme/View/Commons/Gallery.jsx
@@ -8,7 +8,11 @@ import { resetSearchContent, searchContent } from '@plone/volto/actions';
import { useDispatch, useSelector } from 'react-redux';
import EmbeddedVideo from './EmbeddedVideo';
-import { GalleryPreview } from 'design-comuni-plone-theme/components/ItaliaTheme';
+import {
+ GalleryPreview,
+ SingleSlideWrapper,
+ CarouselWrapper,
+} from 'design-comuni-plone-theme/components/ItaliaTheme';
import PropTypes from 'prop-types';
import { contentFolderHasItems } from 'design-comuni-plone-theme/helpers';
import { UniversalLink } from '@plone/volto/components';
@@ -146,10 +150,10 @@ const Gallery = ({
{title_type === 'h5' && {gallery_title}
}
-
+
{images.map((item, i) => (
-
+
-
+
))}
@@ -191,7 +195,7 @@ const Gallery = ({
setViewIndex={setViewImageIndex}
items={images}
/>
-
+
) : null}
@@ -219,20 +223,20 @@ const Gallery = ({
)}
-
+
{videos.map((item, i) => (
-
+
-
+
))}
-
+
) : null}
diff --git a/src/components/ItaliaTheme/View/Commons/RenderBlocks.jsx b/src/components/ItaliaTheme/View/Commons/RenderBlocks.jsx
index 50ef0cbdc..19647d920 100644
--- a/src/components/ItaliaTheme/View/Commons/RenderBlocks.jsx
+++ b/src/components/ItaliaTheme/View/Commons/RenderBlocks.jsx
@@ -16,6 +16,13 @@ const messages = defineMessages({
defaultMessage: 'Blocco sconosciuto',
},
});
+const Wrapper = ({ block, id, children }) => {
+ return block['@type'] === 'listing' && block.variation === 'slider' ? (
+ {children}
+ ) : (
+ <>{children}>
+ );
+};
/**
* RenderBlocks view component class.
* @function RenderBlocks
@@ -57,15 +64,21 @@ const RenderBlocks = ({
{map(items, (block) => {
const blockType = blockContent[blocksFieldname]?.[block]?.['@type'];
const Block = config.blocks.blocksConfig[blockType]?.['view'] || null;
+
if (Block != null) {
return (
-
+
+
+
);
} else {
return (
diff --git a/src/components/ItaliaTheme/index.js b/src/components/ItaliaTheme/index.js
index 71199cc45..afd0384b3 100644
--- a/src/components/ItaliaTheme/index.js
+++ b/src/components/ItaliaTheme/index.js
@@ -83,11 +83,16 @@ export CardCalendar from 'design-comuni-plone-theme/components/ItaliaTheme/Block
export ListingCategory from 'design-comuni-plone-theme/components/ItaliaTheme/Blocks/Listing/Commons/ListingCategory';
export ListingText from 'design-comuni-plone-theme/components/ItaliaTheme/Blocks/Listing/Commons/ListingText';
export ListingLinkMore from 'design-comuni-plone-theme/components/ItaliaTheme/Blocks/Listing/Commons/ListingLinkMore';
-export NextArrow from 'design-comuni-plone-theme/components/ItaliaTheme/Blocks/Listing/Commons/NextArrow';
-export PrevArrow from 'design-comuni-plone-theme/components/ItaliaTheme/Blocks/Listing/Commons/PrevArrow';
+
export ListingImage, {
getListingImageBackground,
} from 'design-comuni-plone-theme/components/ItaliaTheme/Blocks/Listing/Commons/ListingImage';
+/*Slider*/
+export SingleSlideWrapper from 'design-comuni-plone-theme/components/ItaliaTheme/Slider/SingleSlideWrapper';
+export CarouselWrapper from 'design-comuni-plone-theme/components/ItaliaTheme/Slider/CarouselWrapper';
+export ButtonPlayPause from 'design-comuni-plone-theme/components/ItaliaTheme/Slider/ButtonPlayPause';
+export NextArrow from 'design-comuni-plone-theme/components/ItaliaTheme/Slider/NextArrow';
+export PrevArrow from 'design-comuni-plone-theme/components/ItaliaTheme/Slider/PrevArrow';
/********* ERROR PAGES ********* */
export Unauthorized from 'design-comuni-plone-theme/components/ItaliaTheme/Unauthorized/Unauthorized';
diff --git a/src/config/Blocks/ListingOptions/cardWithImageTemplate.js b/src/config/Blocks/ListingOptions/cardWithImageTemplate.js
index 344c4c35e..76f4d0607 100644
--- a/src/config/Blocks/ListingOptions/cardWithImageTemplate.js
+++ b/src/config/Blocks/ListingOptions/cardWithImageTemplate.js
@@ -38,6 +38,23 @@ export const addCardWithImageTemplateOptions = (
pos = addDefaultOptions(schema, formData, intl, pos);
+ pos = imageCardTemplateOptions(schema, formData, intl, pos);
+
+ return pos;
+};
+
+/*questa funzione è riutilizzabile.
+Serve per fare in modo che le opzioni relative alla visualizzazione di ogni singola card,
+si possano riutilizzare in altre variations del blocco listing, dove appunto viene riutilizzato il componente di visualizzazione dell'elemento.
+Ad esempio, è stato usato anche nella variazione 'slider' per poter mostrare gli elementi con aspetto 'Card con immagine'.*/
+export const imageCardTemplateOptions = (
+ schema,
+ formData,
+ intl,
+ position,
+ hide_fields = [], //array of string
+) => {
+ let pos = position;
pos = templatesOptions(
schema,
formData,
@@ -52,7 +69,7 @@ export const addCardWithImageTemplateOptions = (
'hide_dates',
'show_description',
'show_topics',
- ],
+ ].filter((f) => hide_fields.indexOf(f) < 0),
{
always_show_image: {
default: false,
@@ -72,6 +89,5 @@ export const addCardWithImageTemplateOptions = (
},
pos,
);
-
return pos;
};
diff --git a/src/config/Blocks/ListingOptions/simpleCardTemplate.js b/src/config/Blocks/ListingOptions/simpleCardTemplate.js
index ae82f9320..3d3717ec6 100644
--- a/src/config/Blocks/ListingOptions/simpleCardTemplate.js
+++ b/src/config/Blocks/ListingOptions/simpleCardTemplate.js
@@ -79,28 +79,45 @@ export const addSimpleCardTemplateOptions = (
pos,
);
} else {
- pos = templatesOptions(
+ pos = simpleCardTemplateOptions_appearance_default(
schema,
formData,
intl,
- [
- 'show_icon',
- 'hide_dates',
- 'show_section',
- 'show_type',
- 'show_description',
- 'show_detail_link',
- 'show_path_filters',
- ],
- {
- hide_dates: { default: false },
- show_icon: { default: true },
- show_type: { default: false },
- show_detail_link: { default: false },
- show_path_filters: { default: false },
- },
pos,
);
}
return pos;
};
+
+export const simpleCardTemplateOptions_appearance_default = (
+ schema,
+ formData,
+ intl,
+ position,
+ hide_fields = [], //array of string
+) => {
+ let pos = position;
+ pos = templatesOptions(
+ schema,
+ formData,
+ intl,
+ [
+ 'show_icon',
+ 'hide_dates',
+ 'show_section',
+ 'show_type',
+ 'show_description',
+ 'show_detail_link',
+ 'show_path_filters',
+ ].filter((f) => hide_fields.indexOf(f) < 0),
+ {
+ hide_dates: { default: false },
+ show_icon: { default: true },
+ show_type: { default: false },
+ show_detail_link: { default: false },
+ show_path_filters: { default: false },
+ },
+ pos,
+ );
+ return pos;
+};
diff --git a/src/config/Blocks/ListingOptions/sliderTemplate.js b/src/config/Blocks/ListingOptions/sliderTemplate.js
index f5a09b5ad..5eb3c16a8 100644
--- a/src/config/Blocks/ListingOptions/sliderTemplate.js
+++ b/src/config/Blocks/ListingOptions/sliderTemplate.js
@@ -1,6 +1,8 @@
import { defineMessages } from 'react-intl';
import { addSchemaField } from 'design-comuni-plone-theme/config/Blocks/ListingOptions';
+import { simpleCardTemplateOptions_appearance_default } from 'design-comuni-plone-theme/config/Blocks/ListingOptions/simpleCardTemplate';
+import { imageCardTemplateOptions } from 'design-comuni-plone-theme/config/Blocks/ListingOptions/cardWithImageTemplate';
const messages = defineMessages({
show_full_width: {
@@ -31,8 +33,28 @@ const messages = defineMessages({
id: 'autoplay_speed_description',
defaultMessage: 'La velocità di autoplay deve essere espressa in secondi.',
},
+ appearance: {
+ id: 'Aspetto',
+ defaultMessage: 'Aspetto',
+ },
+ slider_listing_appearance_description: {
+ id: 'slider_listing_appearance_description',
+ defaultMessage:
+ "Qui puoi selezionare, per il template 'Slider', un aspetto diverso da quello di default per gli elementi mostrati nello slider.",
+ },
+ slider_listing_appearance_simplecard: {
+ id: 'slider_listing_appearance_simplecard',
+ defaultMessage: 'Card semplice',
+ },
+ slider_listing_appearance_imagecard: {
+ id: 'slider_listing_appearance_imagecard',
+ defaultMessage: 'Card con immagine',
+ },
});
+export const SliderTemplateAppearance_SIMPLECARD = 'simple_card';
+export const SliderTemplateAppearance_IMAGECARD = 'image_card';
+
export const addSliderTemplateOptions = (
schema,
formData,
@@ -51,16 +73,6 @@ export const addSliderTemplateOptions = (
);
pos++;
- addSchemaField(
- schema,
- 'show_image_title',
- intl.formatMessage(messages.show_image_title),
- null,
- { type: 'boolean', default: true },
- pos,
- );
- pos++;
-
addSchemaField(
schema,
'show_dots',
@@ -91,7 +103,7 @@ export const addSliderTemplateOptions = (
);
pos++;
- pos = addSchemaField(
+ addSchemaField(
schema,
'slidesToShow',
intl.formatMessage(messages.slidesToShow),
@@ -99,5 +111,50 @@ export const addSliderTemplateOptions = (
{ type: 'number', default: 1 },
pos,
);
+ pos++;
+ //appearance options
+
+ let choices = [
+ [
+ SliderTemplateAppearance_SIMPLECARD,
+ intl.formatMessage(messages.slider_listing_appearance_simplecard),
+ ],
+ [
+ SliderTemplateAppearance_IMAGECARD,
+ intl.formatMessage(messages.slider_listing_appearance_imagecard),
+ ],
+ ];
+
+ addSchemaField(
+ schema,
+ 'slide_appearance',
+ intl.formatMessage(messages.appearance),
+ intl.formatMessage(messages.slider_listing_appearance_description),
+ {
+ choices,
+ },
+ pos,
+ );
+ pos++;
+
+ if (formData.slide_appearance === SliderTemplateAppearance_SIMPLECARD) {
+ simpleCardTemplateOptions_appearance_default(schema, formData, intl, pos, [
+ 'show_path_filters',
+ ]);
+ pos++;
+ } else if (formData.slide_appearance === SliderTemplateAppearance_IMAGECARD) {
+ imageCardTemplateOptions(schema, formData, intl, pos, ['set_four_columns']);
+ pos++;
+ } else {
+ addSchemaField(
+ schema,
+ 'show_image_title',
+ intl.formatMessage(messages.show_image_title),
+ null,
+ { type: 'boolean', default: true },
+ pos,
+ );
+ pos++;
+ }
return pos;
};
diff --git a/src/config/Blocks/listingVariations.js b/src/config/Blocks/listingVariations.js
index e91012edd..ba43d28b4 100644
--- a/src/config/Blocks/listingVariations.js
+++ b/src/config/Blocks/listingVariations.js
@@ -26,6 +26,9 @@ import PhotogalleryTemplateSkeleton from 'design-comuni-plone-theme/components/I
import SliderTemplate from 'design-comuni-plone-theme/components/ItaliaTheme/Blocks/Listing/SliderTemplate';
import SliderTemplateSkeleton from 'design-comuni-plone-theme/components/ItaliaTheme/Blocks/Listing/TemplatesSkeletons/SliderTemplateSkeleton';
+import SlideItemDefault from 'design-comuni-plone-theme/components/ItaliaTheme/Blocks/Listing/Slider/SlideItemDefault';
+import SlideItemSimpleCard from 'design-comuni-plone-theme/components/ItaliaTheme/Blocks/Listing/SimpleCard/Card/SimpleCardDefault';
+import SlideItemImageCard from 'design-comuni-plone-theme/components/ItaliaTheme/Blocks/Listing/CardWithImage/CardWithImageDefault';
import GridGalleryTemplate from 'design-comuni-plone-theme/components/ItaliaTheme/Blocks/Listing/GridGalleryTemplate';
import GridGalleryTemplateSkeleton from 'design-comuni-plone-theme/components/ItaliaTheme/Blocks/Listing/TemplatesSkeletons/GridGalleryTemplateSkeleton';
@@ -229,6 +232,11 @@ const italiaListingVariations = [
return schema;
},
cloneData: cloneBlock,
+ appearance: {
+ default: SlideItemDefault,
+ simple_card: SlideItemSimpleCard,
+ image_card: SlideItemImageCard,
+ },
},
{
id: 'gridGalleryTemplate',
diff --git a/src/customizations/volto/components/manage/Blocks/Listing/ListingBody.jsx b/src/customizations/volto/components/manage/Blocks/Listing/ListingBody.jsx
index ea9dd328c..c6b86975d 100644
--- a/src/customizations/volto/components/manage/Blocks/Listing/ListingBody.jsx
+++ b/src/customizations/volto/components/manage/Blocks/Listing/ListingBody.jsx
@@ -5,6 +5,7 @@ CUSTOMIZATIONS:
- 'background class' and 'block class'
- 'background class' and 'block class' logic for search block
- search block integration
+- pass 'block' prop to listing variation
*/
import React from 'react';
import { FormattedMessage, injectIntl } from 'react-intl';
@@ -37,7 +38,9 @@ const ListingBody = React.memo(
loadingQuery,
listingRef,
additionalFilters,
+ block,
} = props;
+
let ListingBodyTemplate;
let templateConfig;
// Legacy support if template is present
@@ -97,6 +100,7 @@ const ListingBody = React.memo(
// Also need to purge title from searchblock schema, it's the name of the listing template used
const listingBodyProps =
variation?.['@type'] !== 'search' ? data : { ...variation, title: '' };
+
return (
{loadingQuery && (
@@ -114,6 +118,7 @@ const ListingBody = React.memo(
{
const imgsrc = value?.download
? `${flattenToAppURL(value?.download)}?id=${Date.now()}`
: null || value?.data
- ? `data:${value['content-type']};${value.encoding},${value.data}`
- : null;
+ ? `data:${value['content-type']};${value.encoding},${value.data}`
+ : null;
/**
* Drop handler
diff --git a/src/theme/ItaliaTheme/Blocks/_cardWithImageAndInEvidence.scss b/src/theme/ItaliaTheme/Blocks/_cardWithImage.scss
similarity index 65%
rename from src/theme/ItaliaTheme/Blocks/_cardWithImageAndInEvidence.scss
rename to src/theme/ItaliaTheme/Blocks/_cardWithImage.scss
index cd85f48ba..6b2104b3c 100644
--- a/src/theme/ItaliaTheme/Blocks/_cardWithImageAndInEvidence.scss
+++ b/src/theme/ItaliaTheme/Blocks/_cardWithImage.scss
@@ -1,5 +1,4 @@
-.block.listing .card-with-image-template,
-.block.listing .in-evidence {
+.block.listing .card-with-image-template {
.col-item {
margin-bottom: 22px;
}
@@ -90,54 +89,80 @@
}
}
-.card-with-image-template {
- .listing-item.card {
- .card-body {
- .category-top {
- color: $caption-text;
- font-size: 0.875rem;
- line-height: 1.313rem;
-
- .text {
- font-weight: 600;
- letter-spacing: 1px;
- }
+.card-with-image-default-item.listing-item.card {
+ .card-body {
+ .category-top {
+ color: $caption-text;
+ font-size: 0.875rem;
+ line-height: 1.313rem;
- .data {
- font-weight: 400;
- letter-spacing: 1.1px;
- }
+ .text {
+ font-weight: 600;
+ letter-spacing: 1px;
+ }
- &.wrap-dates-four-columns {
- flex-wrap: wrap;
+ .data {
+ font-weight: 400;
+ letter-spacing: 1.1px;
+ }
+ }
- .data {
- margin-top: 0.5rem;
- }
+ .card-title {
+ a {
+ color: $link-color;
+ font-size: 1.3rem;
+ font-weight: 700;
+ line-height: 1.75rem;
+ }
+ }
- ::before {
- display: none;
- }
+ .card-text {
+ color: $gray-secondary;
+ font-family: $font-family-sans-serif;
+ font-size: 1rem;
+ line-height: 1.5rem;
+ }
+ }
+
+ .icon {
+ width: 32px;
+ height: 32px;
+ }
+
+ .img-responsive-wrapper {
+ width: inherit;
+
+ .img-responsive {
+ .img-wrapper {
+ display: flex;
+ align-items: center;
+
+ picture {
+ display: flex;
+ width: 100%;
+ height: 100%;
}
- }
- .card-title {
- a {
- color: $link-color;
- font-size: 1.3rem;
- font-weight: 700;
- line-height: 1.75rem;
+ img {
+ margin-right: 0;
}
}
+ }
+
+ &.natural-image-size {
+ .img-responsive {
+ position: static;
+ height: auto;
+ padding: 0;
- .card-text {
- color: $gray-secondary;
- font-family: $font-family-sans-serif;
- font-size: 1rem;
- line-height: 1.5rem;
+ figure.img-wrapper {
+ position: static;
+ margin: 0;
+ }
}
}
}
+
@include media-breakpoint-only(lg) {
.listing-item.card {
.card-body {
diff --git a/src/theme/ItaliaTheme/Blocks/_iconBlocks.scss b/src/theme/ItaliaTheme/Blocks/_iconBlocks.scss
index ecb4c52d4..a086535c6 100644
--- a/src/theme/ItaliaTheme/Blocks/_iconBlocks.scss
+++ b/src/theme/ItaliaTheme/Blocks/_iconBlocks.scss
@@ -24,21 +24,22 @@
z-index: -1;
top: 0;
left: 0;
+ overflow: hidden;
width: 100%;
height: 100%;
- overflow: hidden;
img {
position: absolute;
- min-width: 100%;
- min-height: 100%;
- height: auto;
- width: auto;
top: 50%;
left: 50%;
- transform: translate(-50%, -50%);
+ width: auto;
+ min-width: 100%;
max-width: unset;
+ height: auto;
+ min-height: 100%;
+ transform: translate(-50%, -50%);
}
+
&:after {
position: absolute;
width: 100%;
diff --git a/src/theme/ItaliaTheme/Blocks/_inEvidenceTemplate.scss b/src/theme/ItaliaTheme/Blocks/_inEvidenceTemplate.scss
new file mode 100644
index 000000000..9aba74934
--- /dev/null
+++ b/src/theme/ItaliaTheme/Blocks/_inEvidenceTemplate.scss
@@ -0,0 +1,123 @@
+.block.listing .in-evidence {
+ .col-item {
+ margin-bottom: 22px;
+ }
+
+ .icon {
+ width: 32px;
+ height: 32px;
+ }
+
+ .listing-item {
+ a {
+ display: inline;
+ }
+
+ .img-responsive-wrapper {
+ width: inherit;
+
+ .img-responsive {
+ .img-wrapper {
+ display: flex;
+ align-items: center;
+
+ picture {
+ display: flex;
+ width: 100%;
+ height: 100%;
+ }
+
+ img {
+ margin-right: 0;
+ }
+ }
+ }
+
+ &.natural-image-size {
+ .img-responsive {
+ position: static;
+ height: auto;
+ padding: 0;
+
+ figure.img-wrapper {
+ position: static;
+ margin: 0;
+ }
+ }
+ }
+ }
+
+ .img-link {
+ &:after {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ background-color: transparentize($color: white, $amount: 1);
+ content: '';
+ transition: 0.2s background-color ease;
+ }
+
+ &:hover,
+ &:focus {
+ &:after {
+ background-color: transparentize($color: white, $amount: 0.9);
+ }
+ }
+ }
+
+ .card-title {
+ a {
+ display: inline;
+ width: initial;
+ color: $body-color;
+ text-decoration: none;
+ transition: 0.2s color ease;
+
+ &:hover,
+ &:focus {
+ color: $link-color;
+ text-decoration: underline;
+ }
+ }
+ }
+
+ .event-recurrences-more {
+ bottom: $v-gap * 3;
+ }
+ }
+
+ .in-evidence-cards-wrapper {
+ display: -ms-grid;
+ display: grid;
+ gap: 1.3rem;
+ -ms-grid-columns: 1fr 1.3rem 1fr 1.3rem 1fr;
+ grid-template-columns: 1fr 1fr 1fr;
+ }
+
+ .card-wrapper {
+ &:first-child {
+ grid-column: 1;
+ grid-row: 1 / 3;
+ }
+ }
+
+ // smartphone
+ @media (max-width: 585px) {
+ .in-evidence-cards-wrapper {
+ .card-wrapper {
+ width: 100%;
+ margin: 0px;
+ }
+ display: block;
+ height: 100%;
+ }
+ }
+ // tablet
+ @media (max-width: 1367px) and (min-width: 586px) {
+ .in-evidence-cards-wrapper {
+ grid-template-columns: auto auto;
+ }
+ }
+}
diff --git a/src/theme/ItaliaTheme/Blocks/_inevidencetemplate.scss b/src/theme/ItaliaTheme/Blocks/_inevidencetemplate.scss
deleted file mode 100644
index f8385a780..000000000
--- a/src/theme/ItaliaTheme/Blocks/_inevidencetemplate.scss
+++ /dev/null
@@ -1,34 +0,0 @@
-.in-evidence {
- .in-evidence-cards-wrapper {
- display: -ms-grid;
- display: grid;
- gap: 1.3rem;
- -ms-grid-columns: 1fr 1.3rem 1fr 1.3rem 1fr;
- grid-template-columns: 1fr 1fr 1fr;
- }
-
- .card-wrapper {
- &:first-child {
- grid-column: 1;
- grid-row: 1 / 3;
- }
- }
-
- // smartphone
- @media (max-width: 585px) {
- .in-evidence-cards-wrapper {
- .card-wrapper {
- width: 100%;
- margin: 0px;
- }
- display: block;
- height: 100%;
- }
- }
- // tablet
- @media (max-width: 1367px) and (min-width: 586px) {
- .in-evidence-cards-wrapper {
- grid-template-columns: auto auto;
- }
- }
-}
diff --git a/src/theme/ItaliaTheme/Blocks/_simpleCardTemplate.scss b/src/theme/ItaliaTheme/Blocks/_simpleCardTemplate.scss
index e31e9bb25..fb806c8dc 100644
--- a/src/theme/ItaliaTheme/Blocks/_simpleCardTemplate.scss
+++ b/src/theme/ItaliaTheme/Blocks/_simpleCardTemplate.scss
@@ -21,98 +21,96 @@
content: none;
}
- .card.card-teaser {
- &:after {
- content: none;
- }
+ .link-button {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ margin: 30px 0;
+ }
+}
+
+/*item is reusable in other components*/
- .categoryicon-top .icon {
- width: 32px;
- height: 32px;
- color: $gray-secondary;
- fill: $gray-secondary;
- font-weight: 600;
+.card.card-teaser.simple-card-default-item {
+ .categoryicon-top .icon {
+ width: 32px;
+ height: 32px;
+ color: $gray-secondary;
+ fill: $gray-secondary;
+ font-weight: 600;
+ }
+
+ .card-body {
+ a {
+ display: inline-block; //per avere il bordo tutto unito al focus di un link, ad esempio nelle card
+ &:link,
+ &:visited {
+ text-decoration: none;
+ }
+
+ &:hover,
+ &:active {
+ text-decoration: underline;
+ }
}
- .card-body {
+ .card-title {
+ margin-bottom: 10px;
+
a {
+ @include rem-size(font-size, 24);
+ @include rem-size(line-height, 26);
display: inline-block; //per avere il bordo tutto unito al focus di un link, ad esempio nelle card
- &:link,
- &:visited {
- text-decoration: none;
- }
+ font-weight: 700;
&:hover,
&:active {
text-decoration: underline;
}
}
+ }
- .card-title {
- margin-bottom: 10px;
-
- a {
- @include rem-size(font-size, 24);
- @include rem-size(line-height, 26);
- display: inline-block; //per avere il bordo tutto unito al focus di un link, ad esempio nelle card
- font-weight: 700;
-
- &:hover,
- &:active {
- text-decoration: underline;
- }
- }
- }
-
- .category-top {
- span.text {
- span.text.fw-bold {
- color: $link-color;
- font-size: 0.875rem;
- font-weight: 600 !important;
- letter-spacing: 1px;
- line-height: 1.313rem;
- }
+ .category-top {
+ span.text {
+ span.text.fw-bold {
+ color: $link-color;
+ font-size: 0.875rem;
+ font-weight: 600 !important;
+ letter-spacing: 1px;
+ line-height: 1.313rem;
}
}
+ }
- p.card-text {
- font-size: 1rem;
- line-height: 1.5rem;
+ p.card-text {
+ font-size: 1rem;
+ line-height: 1.5rem;
- div.document-date {
- @include rem-size(font-size, 14);
- }
+ div.document-date {
+ @include rem-size(font-size, 14);
}
}
+ }
- .it-card-footer {
- flex: 1 1 100%;
- align-self: flex-end;
-
- a {
- &:hover,
- &:active {
- text-decoration: underline;
- }
+ .it-card-footer {
+ flex: 1 1 100%;
+ align-self: flex-end;
- &:link,
- &:visited {
- text-decoration: none;
- }
+ a {
+ &:hover,
+ &:active {
+ text-decoration: underline;
}
- .icon {
- min-width: unset;
+ &:link,
+ &:visited {
+ text-decoration: none;
}
}
- }
- .link-button {
- display: flex;
- align-items: center;
- justify-content: center;
- margin: 30px 0;
+ .icon {
+ min-width: unset;
+ }
}
}
diff --git a/src/theme/ItaliaTheme/Blocks/_sliderTemplate.scss b/src/theme/ItaliaTheme/Blocks/_sliderTemplate.scss
index f1919538b..6cb5783ad 100644
--- a/src/theme/ItaliaTheme/Blocks/_sliderTemplate.scss
+++ b/src/theme/ItaliaTheme/Blocks/_sliderTemplate.scss
@@ -146,6 +146,87 @@
margin-bottom: 0;
}
+ &.appearance_simple_card,
+ &.appearance_image_card {
+ .slider-container {
+ .slick-track {
+ align-items: stretch;
+ padding-bottom: 1.5rem;
+
+ .slick-slide {
+ height: auto;
+
+ > div {
+ height: 100%;
+ }
+
+ .it-single-slide-wrapper {
+ height: 100%;
+
+ .slide-wrapper {
+ height: 100%;
+
+ > .card,
+ > .card-wrapper {
+ height: 100%;
+ }
+
+ > .card {
+ margin: 0.5rem 0;
+ }
+
+ .shadow,
+ .card-bg {
+ box-shadow: 0 0.25rem 0.5rem rgba(0, 0, 0, 0.15) !important;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ &.appearance_image_card {
+ .slider-container {
+ .slick-track {
+ align-items: start;
+ }
+
+ .slick-slide {
+ .slide-wrapper {
+ .listing-item {
+ margin-top: 0.5rem;
+
+ .img-responsive-wrapper {
+ .img-wrapper {
+ position: absolute;
+ height: 100%;
+
+ img {
+ min-width: unset !important;
+ min-height: unset !important;
+ }
+ }
+
+ &.natural-image-size {
+ .img-responsive {
+ position: static;
+ height: auto;
+ padding: 0;
+
+ figure.img-wrapper {
+ position: static;
+ margin: 0;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
.slider-container.full-width {
.slick-arrow.slick-prev {
z-index: 1;
diff --git a/src/theme/ItaliaTheme/Components/_cardPersona.scss b/src/theme/ItaliaTheme/Components/_cardPersona.scss
index 9faaf81c7..694945072 100644
--- a/src/theme/ItaliaTheme/Components/_cardPersona.scss
+++ b/src/theme/ItaliaTheme/Components/_cardPersona.scss
@@ -1,9 +1,9 @@
.card-persona.card-flex {
.card-image-wrapper {
display: flex;
+ width: 100%;
flex: 1;
align-items: flex-start;
- width: 100%;
}
.card-body {
diff --git a/src/theme/ItaliaTheme/Components/_mobileMenu.scss b/src/theme/ItaliaTheme/Components/_mobileMenu.scss
index 3b7de2dcf..1cf91bcd2 100644
--- a/src/theme/ItaliaTheme/Components/_mobileMenu.scss
+++ b/src/theme/ItaliaTheme/Components/_mobileMenu.scss
@@ -106,9 +106,9 @@
margin-left: 0;
svg.icon {
- fill: currentColor;
width: 28px;
height: 28px;
+ fill: currentColor;
}
}
}
diff --git a/src/theme/ItaliaTheme/Print/_all_pages.scss b/src/theme/ItaliaTheme/Print/_all_pages.scss
index 83d66ecc0..d36757b40 100644
--- a/src/theme/ItaliaTheme/Print/_all_pages.scss
+++ b/src/theme/ItaliaTheme/Print/_all_pages.scss
@@ -174,6 +174,7 @@
display: none;
}
}
+
.leaflet-container {
break-inside: avoid;
}
diff --git a/src/theme/ItaliaTheme/Print/_uo.scss b/src/theme/ItaliaTheme/Print/_uo.scss
index 98d52c025..f832781a1 100644
--- a/src/theme/ItaliaTheme/Print/_uo.scss
+++ b/src/theme/ItaliaTheme/Print/_uo.scss
@@ -6,14 +6,17 @@
.card-wrapper {
padding-bottom: 0px;
+
&.card-teaser-wrapper {
margin: 0px;
+
&.row,
& {
--bs-gutter-y: 0px !important;
.card {
border: none !important;
+
&.card-big-io-comune .card-body {
padding: 0px !important;
@@ -22,13 +25,13 @@
}
.card-title a {
- font-size: 16px;
display: flex;
+ font-size: 16px;
&::before {
- content: '•';
display: block;
margin-right: 5px;
+ content: '•';
}
}
}
@@ -64,6 +67,7 @@
.card-title {
margin-bottom: 0px !important;
}
+
.card-text {
padding-top: 0px;
}
@@ -76,6 +80,7 @@
}
}
}
+
.mb-3 {
margin-bottom: 6px !important;
}
diff --git a/src/theme/ItaliaTheme/Views/_common.scss b/src/theme/ItaliaTheme/Views/_common.scss
index 229e8dfbe..38a0e67b4 100644
--- a/src/theme/ItaliaTheme/Views/_common.scss
+++ b/src/theme/ItaliaTheme/Views/_common.scss
@@ -77,11 +77,13 @@ picture.volto-image.responsive img.full-width,
left: calc(50% + calc($toolbar-width / 2));
width: calc(100vw - $toolbar-width) !important;
}
+
.has-toolbar.has-sidebar & {
$toolbars-width: calc($toolbar-width + $sidebar-width);
left: calc(50% + calc($toolbars-width / 2));
width: calc(100vw - $toolbars-width) !important;
}
+
.has-toolbar.has-sidebar-collapsed & {
$toolbars-width: calc($toolbar-width + $sidebar-collapsed-width);
left: calc(50% + calc($toolbars-width / 2));
@@ -92,11 +94,13 @@ picture.volto-image.responsive img.full-width,
left: calc(50% + calc($toolbar-collapsed-width / 2));
width: calc(100vw - $toolbar-collapsed-width) !important;
}
+
.has-toolbar-collapsed.has-sidebar & {
$toolbars-width: calc($toolbar-collapsed-width + $sidebar-width);
left: calc(50% + calc($toolbars-width / 2));
width: calc(100vw - $toolbars-width) !important;
}
+
.has-toolbar-collapsed.has-sidebar-collapsed & {
$toolbars-width: calc($toolbar-collapsed-width + $sidebar-collapsed-width);
left: calc(50% + calc($toolbars-width / 2));
diff --git a/src/theme/site.scss b/src/theme/site.scss
index 0334d6208..717ec7c56 100644
--- a/src/theme/site.scss
+++ b/src/theme/site.scss
@@ -54,7 +54,7 @@
@import 'ItaliaTheme/Blocks/iconBlocks';
@import 'ItaliaTheme/Blocks/imageBlock';
@import 'ItaliaTheme/Blocks/searchSections';
-@import 'ItaliaTheme/Blocks/cardWithImageAndInEvidence';
+@import 'ItaliaTheme/Blocks/cardWithImage';
@import 'ItaliaTheme/Blocks/cardWithImageTextBlock';
@import 'ItaliaTheme/Blocks/cardWithSlideUpTextTemplate';
@import 'ItaliaTheme/Blocks/smallblockLinkstemplate';
@@ -62,7 +62,7 @@
@import 'ItaliaTheme/Blocks/squaresImageTemplate';
@import 'ItaliaTheme/Blocks/photogallerytemplate';
@import 'ItaliaTheme/Blocks/sliderTemplate';
-@import 'ItaliaTheme/Blocks/inevidencetemplate';
+@import 'ItaliaTheme/Blocks/inEvidenceTemplate';
@import 'ItaliaTheme/Blocks/contentInEvidenceTemplate';
@import 'ItaliaTheme/Blocks/mapTemplate';
@import 'ItaliaTheme/Blocks/bandiInEvidenceTemplate';