<div class="c-fold">
<div class="c-fold__summary">
<p class="c-fold__summary-text">Non puoi più partire? Puoi annullare questo parcheggio e ottenere un voucher di pari importo fino alle [ore] del [giorno]</p>
<button class="c-button c-button--ghost c-fold__summary-cta js-fr-dialogmodal-open" aria-controls="confirmation-dialog-voucher-request">Annulla ordine</button>
</div>
</div>
<div class="c-dialog js-fr-dialogmodal c-dialog--medium" id="confirmation-dialog-voucher-request">
<div class="c-dialog__inner js-fr-dialogmodal-modal" aria-labelledby="confirmation-dialog-voucher-request-dialog-title">
<div role="document">
<img src="../../images/svgs/stk_MyBLQ.svg" class="c-dialog__img" alt="">
<p class="c-dialog__title" id="confirmation-dialog-voucher-request-dialog-title" aria-hidden="true">Stai annullando un ordine</p>
<div class="c-dialog__text c-dialog__text--centered">
<p>Come riportato nelle <a href="#" target="_blank">condizioni di vendita</a>, <strong>entro 24 ore prima dell’inizio della sosta</strong> acquistata puoi annullare l'ordine e ottenere un voucher digitale parcheggi, di importo pari al parcheggio non usufruito, spendibile entro un anno all'interno del nostro e-commerce, esclusivamente per l’acquisto di parcheggi.</p>
</div>
<div class="u-centered u-mt-space-16">
<button type="button" class="c-button c-button--submit">
Sì, procedo
</button>
<div class="u-mt-space-16"><button type="button" class="c-button c-button--as-link u-color-night-100">
No, non mi interessa
</button></div>
</div>
<button type="button" class="c-dialog__close js-fr-dialogmodal-close" aria-label="Chiudi la modale">
<svg class="c-icon c-icon--32">
<use xlink:href="#ic_close_black_24px"></use>
</svg> </button>
</div>
</div>
</div>
<div class="c-fold{{#if modifier}} {{modifier}}{{/if}}">
<div class="c-fold__summary">
<p class="c-fold__summary-text">{{{ summary-text }}}</p>
<button class="c-button c-button--ghost c-fold__summary-cta js-fr-dialogmodal-open" aria-controls="confirmation-dialog-voucher-request">Annulla ordine</button>
</div>
</div>
{{!-- DIALOG --}}
{{#> @dialog confirmation-dialog }}
<img src="{{ path '/images/svgs/stk_MyBLQ.svg' }}" class="c-dialog__img" alt="">
<p class="c-dialog__title" id="{{ id }}-{{ dialog-labelledby }}" aria-hidden="true">{{ title }}</p>
<div class="c-dialog__text c-dialog__text--centered">
<p>Come riportato nelle <a href="#" target="_blank">condizioni di vendita</a>, <strong>entro 24 ore prima dell’inizio della sosta</strong> acquistata puoi annullare l'ordine e ottenere un voucher digitale parcheggi, di importo pari al parcheggio non usufruito, spendibile entro un anno all'interno del nostro e-commerce, esclusivamente per l’acquisto di parcheggi.</p>
</div>
<div class="u-centered u-mt-space-16">
{{> @button btn-confirm }}
<div class="u-mt-space-16">{{> @button btn-cancel }}</div>
</div>
{{/@dialog}}
{{!-- END DIALOG --}}
{
"summary-text": "Non puoi più partire? Puoi annullare questo parcheggio e ottenere un voucher di pari importo fino alle [ore] del [giorno]",
"upsell-items": [
{
"item": {
"name": "Lavaggio autovettura",
"price-item": [
{
"label": "Prezzo min.",
"value": "8,00 €"
},
{
"label": "Prezzo max.",
"value": "24,00 €"
}
]
}
},
{
"item": {
"name": "Pulitura interni",
"price-item": [
{
"label": "Prezzo max.",
"value": "24,00 €"
}
]
}
}
],
"footer-text": "Il pagamento di questi servizi avverrà solo una volta che ne avrai usufruito. Potrai pagarli presso il Presidio Parcheggi al piano terra del P2, prima del ritiro della tua auto",
"confirmation-dialog": {
"modifier": "c-dialog--medium",
"id": "confirmation-dialog-voucher-request",
"dialog-labelledby": "dialog-title",
"title": "Stai annullando un ordine",
"btn-confirm": {
"name": "default",
"type": "button",
"text": "Sì, procedo",
"modifier": "c-button--submit"
},
"btn-cancel": {
"name": "default",
"type": "button",
"text": "No, non mi interessa",
"modifier": "c-button--as-link u-color-night-100"
}
}
}
.c-fold {
background-color: secondary(basic-white, 100);
padding: remify(16px);
border-radius: 0 0 remify(20px) remify(20px);
color: primary(night, 100);
border: remify(1px) solid primary(night, 20);
border-top: none;
}
.c-fold__summary {
display: flex;
gap: remify(16px);
flex-direction: column;
align-items: flex-start;
@include min-screen(bp(tablet)) {
flex-direction: row;
align-items: center;
justify-content: space-between;
}
}
.c-fold .js-btn-fold-toggle,
.c-fold .c-fold__summary-cta,
.c-fold .c-button--ghost.c-fold__summary-cta {
color: currentColor;
flex-shrink: 0;
@include font-scale(level-1-5, semibold);
padding: remify(4px) remify(12px);
border-radius: remify(8px);
}
.c-fold .c-fold__summary-cta {
padding: 0;
}
.c-fold__details {
display: none;
flex-direction: column;
gap: remify(16px);
margin-top: remify(24px);
@include min-screen(bp(tablet)) {
gap: remify(32px);
margin-top: remify(32px);
}
}
.c-fold__details-items {
display: flex;
flex-direction: column;
gap: remify(16px);
}
.c-fold__summary-text {
color: primary(night, 100);
@include font-scale(level-1-5);
}
.c-fold .c-voucher-main-form {
padding: 0;
}
/*------------------------------------*\
Modifier: c-fold--result
\*------------------------------------*/
.c-fold--result {
.c-fold__summary {
justify-content: initial;
gap: remify(16px) remify(8px);
}
.refund-result {
display: flex;
align-items: center;
gap: remify(4px);
}
}
document.addEventListener('DOMContentLoaded', () => {
// Find all fold containers and set them up
const foldContainers = document.querySelectorAll('.c-fold');
foldContainers.forEach(container => {
// Find the essential parts of the component
const toggleButton = container.querySelector('.js-btn-fold-toggle');
const detailsSection = container.querySelector('.c-fold__details');
// Find the optional close button
const closeButton = container.querySelector('.js-btn-close-fold');
// If there's no toggle button or details section, this isn't a valid fold component
if (!toggleButton || !detailsSection) {
return;
}
// Get button texts from data attributes
const showText = toggleButton.dataset.showText;
const hideText = toggleButton.dataset.hideText;
// --- STATE MANAGEMENT FUNCTIONS ---
const openDetails = () => {
detailsSection.style.display = 'flex';
toggleButton.textContent = hideText;
toggleButton.setAttribute('aria-expanded', 'true');
detailsSection.setAttribute('aria-hidden', 'false');
};
const closeDetails = () => {
detailsSection.style.display = 'none';
toggleButton.textContent = showText;
toggleButton.setAttribute('aria-expanded', 'false');
detailsSection.setAttribute('aria-hidden', 'true');
};
// --- INITIAL STATE ---
// Start with the details section closed
closeDetails();
// --- EVENT LISTENERS ---
// 1. Toggle Button (Open/Close)
const toggleFoldHandler = (event) => {
event.preventDefault();
const isHidden = detailsSection.style.display === 'none';
if (isHidden) {
openDetails();
} else {
closeDetails();
}
};
toggleButton.addEventListener('click', toggleFoldHandler);
toggleButton.addEventListener('keydown', (event) => {
if (event.key === 'Enter' || event.key === ' ') {
toggleFoldHandler(event);
}
});
// 2. Optional Close Button (Close Only)
if (closeButton) {
const closeFoldHandler = (event) => {
event.preventDefault();
closeDetails();
};
closeButton.addEventListener('click', closeFoldHandler);
closeButton.addEventListener('keydown', (event) => {
if (event.key === 'Enter' || event.key === ' ') {
closeFoldHandler(event);
}
});
}
});
});
No notes defined.