<div class="rtds-min-w-0">
<section id="mainSlider" class="rtds-slider splide rtds-slider--homepage" aria-labelledby="mainSliderLabel">
<h2 id="mainSliderLabel" class="rtds-sr-only">Slider contenuti in evidenza</h2>
<div class="rtds-slider__arrows splide__arrows">
<button class="rtds-slider__arrow rtds-slider__arrow--prev splide__arrow splide__arrow--prev">
<svg class="rtds-icon rtds-fill-current rtds-slider__arrow-svg" aria-hidden="true" focusable="false" role="img">
<use href="../../icons.svg#solid--chevron-right" />
</svg>
<span class="rtds-sr-only">Precedente</span>
</button>
<button class="rtds-slider__arrow rtds-slider__arrow--next splide__arrow splide__arrow--next">
<svg class="rtds-icon rtds-fill-current rtds-slider__arrow-svg" aria-hidden="true" focusable="false" role="img">
<use href="../../icons.svg#solid--chevron-right" />
</svg>
<span class="rtds-sr-only">Successiva</span>
</button>
</div>
<div class="rtds-slider__track splide__track">
<ul class="rtds-slider__list splide__list">
<li class="rtds-slider__slide splide__slide rtds-slide is-fullclickable rtds-group/slide" data-slide-title="Celebrazioni dei 450 anni della morte di Cosimo I dei MedicVasari">
<div class="rtds-slide__slide-wrapper rtds-h-full rtds-overflow-hidden rtds-flex rtds-flex-col md:rtds-flex-row">
<div class="rtds-slide_image">
<picture>
<source srcset="../../images/slider-ex.jpg">
<img src="../../images/slider-ex.jpg" alt="" />
</picture>
</div>
<div class="rtds-slide__content-wrapper rtds-flex-1 rtds-z-10 rtds-grid rtds-items-stretch">
<div class="rtds-slide__content
rtds-grid rtds-justify-items-start
rtds-gap-6 rtds-bg-white
">
<div class="rtds-grid rtds-gap-4 lg:rtds-gap-6 2xl:rtds-gap-8 rtds-self-start">
<h3 class="rtds-slide__title">
<a href="#" class="rtds-slide__link">
Celebrazioni dei 450 anni della morte di Cosimo I dei MedicVasari
</a>
</h3>
<div class="rtds-slide__excerpt">
<p>Celebrazioni dei 450 anni della morte di Cosimo I dei MedicVasari anni della morte di Cosimo I dei MedicVasaric anni della morte di Cosimo I</p>
</div>
</div>
</div>
</div>
</div>
</li>
<li class="rtds-slider__slide splide__slide rtds-slide is-fullclickable rtds-group/slide" data-slide-title="Tirocini non curriculari in Toscana">
<div class="rtds-slide__slide-wrapper rtds-h-full rtds-overflow-hidden rtds-flex rtds-flex-col md:rtds-flex-row">
<div class="rtds-slide_image">
<picture>
<source srcset="../../images/slider-ex.jpg">
<img src="../../images/slider-ex.jpg" alt="" />
</picture>
</div>
<div class="rtds-slide__content-wrapper rtds-flex-1 rtds-z-10 rtds-grid rtds-items-stretch">
<div class="rtds-slide__content
rtds-grid rtds-justify-items-start
rtds-gap-6 rtds-bg-white
">
<div class="rtds-grid rtds-gap-4 lg:rtds-gap-6 2xl:rtds-gap-8 rtds-self-start">
<h3 class="rtds-slide__title">
<a href="#" class="rtds-slide__link">
Tirocini non curriculari in Toscana
</a>
</h3>
<div class="rtds-slide__excerpt">
<p>La Regione aumenta il rimborso minimo per tirocinante da 500 a 600 euro mensili.</p>
</div>
</div>
</div>
</div>
</div>
</li>
<li class="rtds-slider__slide splide__slide rtds-slide is-fullclickable rtds-group/slide" data-slide-title="Dì di sì">
<div class="rtds-slide__slide-wrapper rtds-h-full rtds-overflow-hidden rtds-flex rtds-flex-col md:rtds-flex-row">
<div class="rtds-slide_image">
<picture>
<source srcset="../../images/slider-test.jpg">
<img src="../../images/slider-test.jpg" alt="" />
</picture>
</div>
<div class="rtds-slide__content-wrapper rtds-flex-1 rtds-z-10 rtds-grid rtds-items-stretch">
<div class="rtds-slide__content
rtds-grid rtds-justify-items-start
rtds-gap-6 rtds-bg-white
">
<div class="rtds-grid rtds-gap-4 lg:rtds-gap-6 2xl:rtds-gap-8 rtds-self-start">
<h3 class="rtds-slide__title">
<a href="#" class="rtds-slide__link">
Dì di sì
</a>
</h3>
<div class="rtds-slide__excerpt">
<p>Regione Toscana e ISPRO offrono screening oncologici gratuiti e semplici, per individuare precocemente tumori o alterazioni sospette. Chi riceve la lettera d’invito deve solo <strong>dire “sì” e presentarsi all’appuntamento: non serve la ricetta.</strong></p>
</div>
</div>
</div>
</div>
</div>
</li>
<li class="rtds-slider__slide splide__slide rtds-slide is-fullclickable rtds-group/slide" data-slide-title="Giovanisì, il Next Generation Fest il 2 giugno celebra la Repubblica">
<div class="rtds-slide__slide-wrapper rtds-h-full rtds-overflow-hidden rtds-flex rtds-flex-col md:rtds-flex-row">
<div class="rtds-slide_image">
<picture>
<source srcset="../../images/slider-test.jpg">
<img src="../../images/slider-test.jpg" alt="" />
</picture>
</div>
<div class="rtds-slide__content-wrapper rtds-flex-1 rtds-z-10 rtds-grid rtds-justify-items-end ">
<div class="rtds-slide__content
rtds-grid rtds-justify-items-end
rtds-gap-6 rtds-bg-white
">
<div class="rtds-grid rtds-gap-4 lg:rtds-gap-6 2xl:rtds-gap-8 rtds-self-start">
<h3 class="rtds-slide__title">
<a href="#" class="rtds-slide__link">
Giovanisì, il Next Generation Fest il 2 giugno celebra la Repubblica
</a>
</h3>
<div class="rtds-slide__excerpt">
<p>Giovanisì, il Next Generation Fest il 2 giugno celebra la Repubblica</p>
</div>
</div>
</div>
</div>
</div>
</li>
<li class="rtds-slider__slide splide__slide rtds-slide is-fullclickable rtds-group/slide" data-slide-title="Cresci un cucciolo, preparalo a cambiare una vita">
<div class="rtds-slide__slide-wrapper rtds-h-full rtds-overflow-hidden rtds-flex rtds-flex-col md:rtds-flex-row">
<div class="rtds-slide_image">
<picture>
<source srcset="../../images/slider-test.jpg">
<img src="../../images/slider-test.jpg" alt="" />
</picture>
</div>
<div class="rtds-slide__content-wrapper rtds-flex-1 rtds-z-10 rtds-grid rtds-justify-items-end ">
<div class="rtds-slide__content
rtds-grid rtds-justify-items-end
rtds-gap-6 rtds-bg-white
">
<div class="rtds-grid rtds-gap-4 lg:rtds-gap-6 2xl:rtds-gap-8 rtds-self-start">
<h3 class="rtds-slide__title">
<a href="#" class="rtds-slide__link">
Cresci un cucciolo, preparalo a cambiare una vita
</a>
</h3>
<div class="rtds-slide__excerpt">
<p>La Scuola nazionale cani guida per ciechi della Regione Toscana <strong>affida cuccioli a famiglie volontarie per i primi 18 mesi</strong>, aiutandoli a crescere e socializzare.</p>
</div>
</div>
</div>
</div>
</div>
</li>
</ul>
</div>
<ul id="rtSliderPagination" class="rtds-slider__pagination splide__pagination"></ul>
</section>
</div>
<div class="rtds-min-w-0">
<section
id="mainSlider"
class="rtds-slider splide{% block classes %} rtds-slider--homepage{% if classes %} {{ classes }}{% endif %}{% endblock %}"
aria-labelledby="mainSliderLabel"
{% if decorationImage %} style="--slider-decoration-image: url('{{ decorationImage | path }}');"{% endif %}
>
<h2 id="mainSliderLabel" class="rtds-sr-only">{{ label }}</h2>
{# Arrows #}
<div class="rtds-slider__arrows splide__arrows">
<button
class="rtds-slider__arrow rtds-slider__arrow--prev splide__arrow splide__arrow--prev"
>
{% render '@icon', {id: 'solid--chevron-right', classes:
'rtds-slider__arrow-svg', size: ''}, true %}
<span class="rtds-sr-only">Precedente</span>
</button>
<button
class="rtds-slider__arrow rtds-slider__arrow--next splide__arrow splide__arrow--next"
>
{% render '@icon', {id: 'solid--chevron-right', classes:
'rtds-slider__arrow-svg', size: ''}, true %}
<span class="rtds-sr-only">Successiva</span>
</button>
</div>
<div class="rtds-slider__track splide__track">
<ul class="rtds-slider__list splide__list">
{% for slide in slides %}
<li class="rtds-slider__slide splide__slide rtds-slide is-fullclickable rtds-group/slide" data-slide-title="{{ slide.title }}">
<div
class="rtds-slide__slide-wrapper rtds-h-full rtds-overflow-hidden rtds-flex rtds-flex-col md:rtds-flex-row"
>
<div class="rtds-slide_image">
<picture>
<source srcset="{{ slide.imgPath | path }}">
<img
src="{{ slide.imgPath | path }}"
alt="{% if slide.imgAlt %}{{ slide.imgAlt }}{% else %}{% endif %}"
/>
</picture>
</div>
<div
class="rtds-slide__content-wrapper rtds-flex-1 rtds-z-10 rtds-grid{% if slide.centered %} rtds-place-content-center rtds-justify-items-center{% elseif slide.rightAligned %} rtds-justify-items-end {% elseif slide.stretchAligned %} rtds-items-stretch{% else %} rtds-justify-start{% endif %}{% if slide.topAligned %} rtds-items-start {% elseif slide.bottomAligned %} rtds-items-end {% elseif not slide.stretchAligned %} rtds-items-center {% endif %}{% if slidePadding %} {{ slidePadding }}{% endif %}{% if sliderBgColor %} {{ sliderBgColor }}{% endif %}{% if sliderBgOpacity %} {{ sliderBgOpacity }}{% endif %}"
>
<div
class="rtds-slide__content
{% block slideContentClasses %}
rtds-grid{% if slide.centered %} rtds-justify-items-center {% elseif slide.rightAligned %} rtds-justify-items-end{% else %} rtds-justify-items-start{% endif %}
{% if slide.contentWidth %} {{ slide.contentWidth }}{% endif %} rtds-gap-6{% if slide.contentBgColor %} {{ slide.contentBgColor }}{% endif %}{% if slide.contentBgOpacity %} {{ slide.contentBgOpacity }}{% endif %}{% if slide.contentTextColor %} {{ slide.contentTextColor }}{% endif %}
{% endblock slideContentClasses %}"
>
<div class="rtds-grid rtds-gap-4 lg:rtds-gap-6 2xl:rtds-gap-8 rtds-self-start">
<h3 class="rtds-slide__title">
<a href="#" class="rtds-slide__link">
{{ slide.title | safe }}
</a>
</h3>
{% if slide.excerpt %}
<div class="rtds-slide__excerpt">
<p>{{ slide.excerpt | safe }}</p>
</div>
{% endif %}
</div>
{# <div class="rtds-slide__cta-wrapper{% block slideCtaWrapperClasses %} rtds-mt-auto rtds-justify-self-end{% endblock %}">
{% if slide.button.buttonIcon %}
{% render '@button--icon', {span: "true",classes: 'rtds-slide__cta rtds-btn--outlined', label: '', icon: 'mini--arrow-right'}, true %}
{% else %}
{% render '@button', {span: "true",classes: 'rtds-slide__cta', label:''}, true
%}
{% endif %}
</div>#}
</div>
</div>
</div>
</li>
{% endfor %}
</ul>
</div>
<ul id="rtSliderPagination" class="rtds-slider__pagination splide__pagination"></ul>
</section>
</div>
{
"label": "Slider contenuti in evidenza",
"minHeight": "40rem",
"height": "66vh",
"maxHeight": "1000px",
"slides": [
{
"title": "Centered slide Lorem ipsum dolor sit amet, consectetur adipiscing elit, aenean id pretium lacus",
"ctaLabel": "Scopri di più",
"imgPath": "/images/slider-ex.jpg",
"centered": true,
"contentBgColor": "rtds-bg-white",
"contentWidth": "rtds-w-full md:rtds-w-9/12 lg:rtds-w-7/12"
},
{
"title": "Centered slide Lorem ipsum dolor sit amet, consectetur adipiscing elit, aenean id pretium lacus",
"ctaLabel": "Scopri di più",
"imgPath": "/images/feathers.jpg",
"centered": true,
"contentBgColor": "rtds-bg-white",
"contentWidth": "rtds-w-full md:rtds-w-9/12 lg:rtds-w-7/12"
}
]
}
/**
* SLIDER
*
*/
@layer components {
.rtds-slider {
@apply rtds-min-w-0;
}
/*.rtds-slide:where(:not(.is-active.is-visible)) {
@apply xl:rtds-opacity-0 xl:rtds-pointer-events-none;
}*/
.rtds-slide__title {
@apply rtds-text-2xl lg:rtds-text-3xl xl:rtds-text-4xl 1.5xl:rtds-text-5xl rtds-font-bold rtds-leading-[1.1] lg:rtds-leading-[1.1] xl:rtds-leading-[1.1] 2xl:rtds-leading-[1.1];
}
.rtds-slide__link {
@apply rtds-inline-block hover:rtds-underline group-hover/slide:rtds-underline;
}
.rtds-slide__excerpt {
@apply rtds-text-base xl:rtds-text-lg 1.5xl:rtds-text-xl rtds-leading-relaxed xl:rtds-leading-relaxed 1.5xl:rtds-leading-relaxed;
}
.rtds-slide__excerpt p {
@apply rtds-text-[inherit];
}
/* Slider buttons arrows - next/prev */
.rtds-slider__arrow {
@apply rtds-flex rtds-items-center rtds-justify-center rtds-rounded-sm rtds-w-8 rtds-h-auto md:rtds-w-16 lg:rtds-w-20 rtds-background-06 rtds-opacity-100 hover:rtds-background-07 hover:rtds-opacity-100 rtds-top-0 rtds-bottom-0 rtds-transition rtds-translate-y-0;
}
.rtds-slider__arrow:hover:not(:disabled) {
@apply rtds-background-07 rtds-opacity-100;
}
.rtds-slider__arrow svg {
@apply rtds-w-5 rtds-h-5 md:rtds-w-10 md:rtds-h-10 lg:rtds-w-12 lg:rtds-h-12;
}
.rtds-slider__arrow--prev, .rtds-slider__arrow--next {
@apply rtds-z-20;
}
.rtds-slider__arrow--prev {
@apply rtds-left-0;
}
.rtds-slider__arrow--next {
@apply rtds-right-0;
}
.rtds-slider__arrow .rtds-slider__arrow-svg {
@apply rtds-text-white;
}
/* SLIDE */
.rtds-slide_image {
--width-slide-img: 100%;
--width-slide-img-tablet: theme('width.[6/12]');
--width-slide-img-desktop: 60%;
--width-slide-img-wide-desktop: theme('width.[8/12]');
@apply rtds-w-full rtds-h-auto md:rtds-w-[--width-slide-img-tablet] xl:rtds-w-[--width-slide-img-desktop] 2xl:rtds-w-[--width-slide-img-wide-desktop] rtds-object-cover rtds-object-center rtds-transition-all rtds-duration-300 rtds-ease-in-out group-hover/slide:rtds-opacity-85;
}
.rtds-slide_image img {
@apply rtds-aspect-video rtds-w-full rtds-h-full rtds-object-cover rtds-object-center;
}
/* SLIDER HOMEPAGE */
.rtds-slider--homepage {
/* Used in slider.js for dinamic padding */
--slider-padding: theme('spacing.20');
--slider-padding-desktop: theme('spacing.0');
--slider-padding-tablet: theme('spacing.0');
--slider-padding-mobile: theme('spacing.0');
--pagination-height: calc(var(--pagination-height-temp) * 1rem / 16);
@apply rtds-border-b rtds-border-gray-03;
}
.rtds-slider--homepage .rtds-slide_image {
@apply md:rtds-left-0 md:rtds-right-0;
}
.rtds-slider--homepage .rtds-slider__arrow {
/* Uses custom properties defined in slider and used in slider.js */
@apply rtds-w-[--slider-padding-mobile] xs:rtds-w-[--slider-padding-tablet] md:rtds-w-[--slider-padding-desktop] lg:rtds-w-[--slider-padding] rtds-bottom-[--pagination-height];
}
/* Stile base della slide */
.rtds-slider__slide {
@apply rtds-transition-all rtds-duration-300 rtds-ease-in-out rtds-relative rtds-background-05;
}
.rtds-slide__content-wrapper {
@apply rtds-transition-all rtds-duration-300 rtds-ease-in-out rtds-opacity-100;
box-shadow: rgba(100, 100, 111, 0.4) 0px 7px 29px 0px;
}
.rtds-slide__content {
@apply rtds-p-5 md:rtds-p-6 lg:rtds-px-8 xl:rtds-py-8 1.5xl:rtds-py-12 2xl:rtds-py-16;
}
/*.rtds-slide__cta {
@apply rtds-hidden lg:rtds-flex lg:rtds-absolute lg:rtds-bottom-4 lg:rtds-right-4 rtds-opacity-0 rtds-invisible group-hover/slide:rtds-opacity-100 group-hover/slide:rtds-visible rtds-bg-white;
}*/
/*.rtds-slider--homepage .rtds-slide__content {
/*--_slider-decoration-image: var(--slider-decoration-image, url('/images/slider-decoration.svg'));
background-image: var(--_slider-decoration-image);
@apply rtds-pr-10 rtds-bg-no-repeat rtds-bg-right-bottom rtds-bg-auto md:rtds-bg-[size:4rem] lg:rtds-bg-[size:6rem];
}*/
/*.rtds-slider--homepage .rtds-slide__cta {
@apply -rtds-mr-8 md:-rtds-mr-4;
}*/
.rtds-slider__slide.is-prev .rtds-slide__content-wrapper,
.rtds-slider__slide.is-next .rtds-slide__content-wrapper {
@apply rtds-opacity-0 rtds-pointer-events-none;
}
.rtds-slider__slide.is-moving .rtds-slide__content-wrapper,
.rtds-slider__slide.is-active .rtds-slide__content-wrapper,
.rtds-slider__slide.is-active .rtds-slide__slide-wrapper {
@apply rtds-opacity-100;
}
/* Pagination */
.rtds-slider__pagination {
@apply rtds-flex md:rtds-justify-center lg:rtds-justify-start rtds-gap-2 rtds-px-4 lg:rtds-px-0 lg:rtds-gap-6 rtds-overflow-x-auto md:rtds-overflow-x-visible rtds-border-t rtds-border-gray-02 md:rtds-border-t-2 md:rtds-border-secondary-500;
}
.rtds-slider__pagination-item {
@apply rtds-flex rtds-flex-col rtds-py-2 lg:rtds-pt-3 lg:rtds-px-3 lg:rtds-pb-1.5 rtds-flex-grow rtds-basis-12 md:rtds-flex-grow-0 lg:rtds-flex-grow lg:rtds-flex-shrink lg:rtds-max-w-[20%] lg:rtds-basis-[20%] rtds-transition-all rtds-duration-300 rtds-ease-in-out;
}
.rtds-slider__pagination-item.is-current-slide {
@apply rtds-flex-grow-0 rtds-w-8 lg:rtds-w-auto lg:rtds-flex-grow;
}
.rtds-slider__pagination-button {
@apply rtds-relative rtds-flex rtds-items-start rtds-py-2 rtds-text-left rtds-text-base rtds-font-bold rtds-leading-tight rtds-content-02 lg:rtds-pt-0 lg:rtds-h-full lg:rtds-border-b-4 lg:rtds-border-b-transparent;
}
/* Pagination button after decoration */
.rtds-slider__pagination-button:after {
@apply rtds-content-[''] rtds-border-solid rtds-border-t-4 rtds-border-white rtds-transition-all rtds-duration-300 rtds-ease-in-out rtds-w-full rtds-h-4 rtds-bg-secondary-300 lg:rtds-hidden;
}
.rtds-slider__pagination-button:hover {
@apply lg:rtds-content-primary lg:rtds-border-b-current;
}
.rtds-slider__pagination-button:hover:after {
@apply rtds-bg-secondary-700 lg:rtds-bg-transparent;
}
.rtds-slider__pagination-button[aria-selected="true"] {
@apply rtds-bg-white lg:rtds-border-b-current rtds-content-primary after:rtds-bg-secondary-700 after:rtds-border-secondary-700;
}
.rtds-slider__pagination-button-label {
@apply rtds-sr-only lg:rtds-not-sr-only;
}
}
/* MAIN SLIDER SCRIPT
* SPLIDE.JS CUSTOMIZATIONS
*/
function clickableSlide(cards, linkSelector = '.rtds-card__title a') {
Array.prototype.forEach.call(cards, card => {
let down, up;
const link = card.querySelector(linkSelector);
if (!link) return; // Skip se non trova il link
card.style.cursor = 'pointer';
card.onmousedown = (e) => {
// Verifica se è il tasto sinistro (0)
if (e.button === 0) {
down = +new Date();
}
}
card.onmouseup = (e) => {
// Procedi solo se è il tasto sinistro (0)
if (e.button === 0) {
up = +new Date();
if ((up - down) < 200) {
link.click();
}
}
}
});
}
// Funzione per inizializzare lo slider
function initSlider() {
// Verifica l'esistenza dell'elemento #mainSlider
const mainSlider = document.getElementById('mainSlider');
if (!mainSlider) return; // Se non esiste, interrompi l'esecuzione
// Funzione per ottenere il valore della custom property dallo slider con classe rtds-slider--homepage
function getCSSCustomProp(propName) {
const sliderElement = document.querySelector('.rtds-slider--homepage');
return getComputedStyle(sliderElement)
.getPropertyValue(propName)
.trim();
}
// Funzione per calcolare e impostare l'altezza della paginazione
function setPaginationHeight() {
const sliderElement = document.querySelector('.rtds-slider--homepage');
const paginationElement = document.getElementById('rtSliderPagination');
if (paginationElement) {
const paginationHeight = paginationElement.offsetHeight;
// Rimuoviamo 'px' e passiamo solo il numero
sliderElement.style.setProperty('--pagination-height-temp', paginationHeight);
}
}
var splide = new Splide('#mainSlider', {
type: 'loop',
pagination: false,
perPage: 1,
padding: {
left: getCSSCustomProp('--slider-padding'),
right: getCSSCustomProp('--slider-padding')
},
trimSpace: false,
speed: 300,
easing: 'cubic-bezier(0.4, 0, 0.2, 1)',
waitForTransition: true,
drag: false,
focus: 'center',
breakpoints: {
1279: {
type: 'slide',
arrows: false,
padding: {
left: getCSSCustomProp('--slider-padding-desktop'),
right: getCSSCustomProp('--slider-padding-desktop')
}
},
767: {
padding: {
left: getCSSCustomProp('--slider-padding-tablet'),
right: getCSSCustomProp('--slider-padding-tablet')
}
},
576: {
padding: {
left: getCSSCustomProp('--slider-padding-mobile'),
right: getCSSCustomProp('--slider-padding-mobile')
}
}
}
});
// Aggiungiamo gli event listener per gestire la transizione
splide.on('move', function() {
const slides = document.querySelectorAll('.rtds-slider__slide');
slides.forEach(slide => {
slide.classList.add('is-moving');
});
});
splide.on('moved', function() {
// Rimuoviamo la classe dopo un breve delay per permettere la transizione
setTimeout(() => {
const slides = document.querySelectorAll('.rtds-slider__slide');
slides.forEach(slide => {
slide.classList.remove('is-moving');
});
}, 350); // Metà del tempo della transizione totale
});
splide.on('mounted updated refresh', function() {
const totalSlides = splide.length;
const allSlides = document.querySelectorAll('#mainSlider .splide__slide');
allSlides.forEach((slide, index) => {
// Calcoliamo l'indice reale basandoci sull'indice dell'array
const realIndex = (index % totalSlides) + 1;
slide.setAttribute('aria-label', `${realIndex} di ${totalSlides}`);
});
// Calcoliamo l'altezza dopo che lo slider è montato/aggiornato
setPaginationHeight();
});
// Aggiungiamo il listener per il resize della finestra
let resizeTimer;
window.addEventListener('resize', function() {
// Debounce per evitare troppe chiamate durante il resize
clearTimeout(resizeTimer);
resizeTimer = setTimeout(setPaginationHeight, 250);
});
var slides = document.querySelectorAll('#mainSlider .splide__slide');
var paginationContainer = document.getElementById('rtSliderPagination');
paginationContainer.classList.remove('splide__pagination');
paginationContainer.setAttribute('role', 'tablist');
paginationContainer.setAttribute('aria-label', 'Seleziona una slide');
slides.forEach(function(slide, index) {
var slideTitle = slide.getAttribute('data-slide-title');
var button = document.createElement('button');
button.className = 'rtds-slider__pagination-button';
button.setAttribute('type', 'button');
button.setAttribute('aria-label', 'Vai alla slide ' + slideTitle);
button.setAttribute('aria-controls', 'splide__slide' + (index + 1));
button.setAttribute('role', 'tab');
button.setAttribute('aria-selected', index === 0 ? 'true' : 'false');
button.setAttribute('tabindex', index === 0 ? '0' : '-1');
// Creazione dello span per wrappare il testo
var labelSpan = document.createElement('span');
labelSpan.className = 'rtds-slider__pagination-button-label';
labelSpan.textContent = slideTitle;
button.appendChild(labelSpan);
button.addEventListener('click', function() {
splide.go(index);
scrollPaginationButtonIntoView(this);
});
button.addEventListener('keydown', function(e) {
const buttons = paginationContainer.querySelectorAll('button');
let targetButton = null;
const currentIndex = Array.from(buttons).indexOf(button);
switch(e.key) {
case 'ArrowRight':
case 'ArrowDown':
e.preventDefault();
targetButton = buttons[currentIndex + 1] || buttons[0];
break;
case 'ArrowLeft':
case 'ArrowUp':
e.preventDefault();
targetButton = buttons[currentIndex - 1] || buttons[buttons.length - 1];
break;
case 'Home':
e.preventDefault();
targetButton = buttons[0];
break;
case 'End':
e.preventDefault();
targetButton = buttons[buttons.length - 1];
break;
case 'Enter':
case ' ':
e.preventDefault();
scrollPaginationButtonIntoView(this);
break;
}
if (targetButton) {
buttons.forEach(btn => btn.setAttribute('tabindex', '-1'));
targetButton.setAttribute('tabindex', '0');
targetButton.focus();
splide.go(Array.from(buttons).indexOf(targetButton));
scrollPaginationButtonIntoView(targetButton);
}
});
var li = document.createElement('li');
li.setAttribute('role', 'presentation');
li.className = 'rtds-slider__pagination-item';
li.appendChild(button);
paginationContainer.appendChild(li);
});
splide.on('moved', function(newIndex) {
// Logging per debug
console.log('Slide moved to index:', newIndex);
// Selezioniamo direttamente gli elementi li
const paginationItems = document.querySelectorAll('.rtds-slider__pagination-item');
const paginationButtons = paginationContainer.querySelectorAll('.rtds-slider__pagination-button');
// Rimuoviamo la classe da tutti gli elementi
paginationItems.forEach(item => item.classList.remove('is-current-slide'));
// Aggiungiamo la classe solo all'elemento corrente
if (paginationItems[newIndex]) {
paginationItems[newIndex].classList.add('is-current-slide');
}
// Gestiamo i button come prima
paginationButtons.forEach(function(button, index) {
button.setAttribute('aria-selected', index === newIndex ? 'true' : 'false');
button.classList.toggle('is-active', index === newIndex);
button.setAttribute('tabindex', index === newIndex ? '0' : '-1');
});
});
// Aggiungiamo la gestione anche all'evento mounted
splide.on('mounted', function() {
const paginationItems = document.querySelectorAll('.rtds-slider__pagination-item');
const currentIndex = splide.index;
paginationItems.forEach((item, index) => {
item.classList.toggle('is-current-slide', index === currentIndex);
});
});
splide.mount();
// Aggiungi questa funzione dopo la dichiarazione di splide
function scrollPaginationButtonIntoView(button) {
if (window.innerWidth <= 1023) {
button.parentElement.scrollIntoView({
behavior: 'smooth',
block: 'nearest',
inline: 'center'
});
}
}
}
// Inizializza le slide cliccabili
const fullClickableSlides = document.querySelectorAll('.rtds-slide.is-fullclickable');
const linkSelector = '.rtds-slide__link';
clickableSlide(fullClickableSlides, linkSelector);
// Inizializza slider
initSlider();
Istance of Splide.js
Library files:
splide.min.css See resourcesplide.min.js See resource