<script>
$.tangible.shortcutNavigation();
// $.tangible.navToolbar();
$.tangible.formFlights();
$.tangible.multiSelect();
// Tab tendine filtri
document.addEventListener('DOMContentLoaded', () => {
var priceTabs = new Tabby('[data-tabs-price]');
var airportTabs = new Tabby('[data-tabs-airport]');
var timeTabs = new Tabby('[data-tabs-time]');
var mobilePriceTabs = new Tabby('[data-mobile-tabs-price]');
var mobileAirportTabs = new Tabby('[data-mobile-tabs-airport]');
var mobileTimeTabs = new Tabby('[data-mobile-tabs-time]');
})
// initialization flatpickr https://flatpickr.js.org/getting-started/
// if browser language is italian, set flatpickr language to italian https://flatpickr.js.org/localization/
var userLang = navigator.language || navigator.userLanguage;
if (userLang == 'it-IT') {
flatpickr.localize(flatpickr.l10ns.it);
}
// gestione abiliata/disabilita plugin mobile/desktop
function flatPickrController() {
var round_trip = flatpickr("#round-trip-desktop.js-flatpickr"),
round_only = flatpickr("#round-desktop.js-flatpickr"),
trip_only = flatpickr("#round-desktop.js-flatpickr"),
mobileBreakPoint = 1024;
// se la viewport è maggiore di 1024 (display input desktop), inizializzo i flatpickr
if ($(window).width() > mobileBreakPoint) {
// flights form - andata/ritorno (desktop)
var round_trip = flatpickr("#round-trip-desktop.js-flatpickr", {
dateFormat: "d F Y",
mode: "range",
minDate: "today",
allowInput: true
});
// flights form - andata (desktop)
var round_only = flatpickr("#round-desktop.js-flatpickr", {
dateFormat: "d F Y",
minDate: "today",
allowInput: true
});
// flights form - ritorno (desktop)
var trip_only = flatpickr("#trip-desktop.js-flatpickr", {
dateFormat: "d F Y",
minDate: "today",
allowInput: true
});
} else {
// disabilita il plugin flatpickr, utilizza input normali
// round_trip.destroy();
round_only.destroy();
trip_only.destroy();
}
}
// al caricamento e al resize, chiama la funzione che abilita o disabilita il plugin
$(window).on('load resize', flatPickrController);
// LOGICA FORM VOLI - set min date
var $round = $("#round-mobile"),
$trip = $("#trip-mobile"),
$today = new Date().toISOString().split("T")[0];
$.merge($round, $trip).attr('min', $today);
// LOGICA FORM VOLI - validazione
$("#trip-mobile, #round-mobile").change(function(e) {
var $roundDate = new Date($round.val()),
$tripDate = new Date($trip.val()),
$roundParse = Date.parse($roundDate),
$noteField = $("#flights-form-note"),
$tripParse = Date.parse($tripDate);
if ($roundParse > $tripParse) {
$noteField.addClass('is-negative');
$noteField.removeClass('u-visuallyhidden');
} else {
$noteField.removeClass('is-negative');
$noteField.addClass('u-visuallyhidden');
}
});
// LOGICA FORM VOLI - mostra/nascondi
// funzione select voli a/r
$("#select-round-trip-selection").change(function() {
console.log("select");
var value = $(this).find("option:selected").attr("value");
var roundDesktopInput = $(".js-round-desktop input"),
roundDesktopLabel = $(".js-round-desktop label"),
tripDesktopInput = $(".js-trip-desktop input"),
tripDesktopLabel = $(".js-trip-desktop label"),
roundDesktopWrapper = $(".js-round-desktop"),
tripDesktopWrapper = $(".js-trip-desktop")
switch (value) {
case "option-2":
// nascondo il campo ritorno
tripDesktopInput.removeAttr("required");
tripDesktopWrapper.hide();
break;
default:
// mostro il campo ritorno
tripDesktopInput.attr("required", "required");
tripDesktopWrapper.show();
}
});
// FIX CHROME ATTRIBUTI REQUIRED
// rimuove e aggiunge gli attributi required per gli input e le select dei form e-commerce
function checkInputVisibility() {
// breakpoint desktop-mobile
var breakPoint = 1024,
mobileInput = $('.c-form__el--mobile input, .c-form__el--mobile select'),
desktopInput = $('.c-form__el--desktop input, .c-form__el--desktop select'),
desktopInputFlightsTrip = $(".js-round-desktop input");
if ($(window).width() > breakPoint) {
desktopInput.attr('required', 'required');
mobileInput.removeAttr('required');
desktopInputFlightsTrip.removeAttr("required");
} else if ($(window).width() < breakPoint) {
desktopInput.removeAttr('required');
mobileInput.attr('required', 'required');
}
}
// al caricamento e al resize della pagina
$(window).on('load resize', checkInputVisibility);
/* ------------------------ /*
TIME SLIDERS
/* ------------------------ */
function initializeSliderTime(sliderID, leftValueID = '', rightValueID = '') {
// Funzioni ausiliarie definite all'interno di initializeSliderTime
function convertToHour(value) {
return Math.floor(value / 60);
}
function convertToMinute(value, hour) {
return value - hour * 60;
}
function formatHoursAndMinutes(hours, minutes) {
if (hours.toString().length == 1) hours = '0' + hours;
if (minutes.toString().length == 1) minutes = '0' + minutes;
return hours + ':' + minutes;
}
var leftValue = document.getElementById(leftValueID),
rightValue = document.getElementById(rightValueID);
var initialStartMinute = 0,
initialEndMinute = 1440,
step = 30;
var slider = document.getElementById(sliderID);
if (slider) {
noUiSlider.create(slider, {
start: [300, 1220],
connect: true,
step: step,
range: {
'min': initialStartMinute,
'max': initialEndMinute
}
});
slider.noUiSlider.on('update', function(values, handle) {
if (handle === 0 && leftValue) {
leftValue.innerHTML = formatHoursAndMinutes(convertToHour(values[0]), convertToMinute(values[0], convertToHour(values[0])));
} else if (rightValue) {
rightValue.innerHTML = formatHoursAndMinutes(convertToHour(values[1]), convertToMinute(values[1], convertToHour(values[1])));
}
});
}
};
initializeSliderTime(
'slider-time-departure-round',
'slider-time-departure-round-left-val',
'slider-time-departure-round-right-val'
);
initializeSliderTime(
'slider-time-arrival-round',
'slider-time-arrival-round-left-val',
'slider-time-arrival-round-right-val'
);
initializeSliderTime(
'slider-time-departure-trip',
'slider-time-departure-trip-left-val',
'slider-time-departure-trip-right-val'
);
initializeSliderTime(
'slider-time-arrival-trip',
'slider-time-arrival-trip-left-val',
'slider-time-arrival-trip-right-val'
);
initializeSliderTime(
'slider-mobile-time-departure-round',
'slider-mobile-time-departure-round-left-val',
'slider-mobile-time-departure-round-right-val'
);
initializeSliderTime(
'slider-mobile-time-arrival-round',
'slider-mobile-time-arrival-round-left-val',
'slider-mobile-time-arrival-round-right-val'
);
initializeSliderTime(
'slider-mobile-time-departure-trip',
'slider-mobile-time-departure-trip-left-val',
'slider-mobile-time-departure-trip-right-val'
);
initializeSliderTime(
'slider-mobile-time-arrival-trip',
'slider-mobile-time-arrival-trip-left-val',
'slider-mobile-time-arrival-trip-right-val'
);
/* ------------------------ /*
END TIME SLIDERS
/* ------------------------ */
/* ------------------------ /*
PRICE SLIDERS
/* ------------------------ */
function initializePriceSlider(sliderID) {
var slider = document.getElementById(sliderID);
if (slider) {
noUiSlider.create(slider, {
start: [100, 600],
connect: true,
tooltips: true,
range: {
'min': 0,
'max': 1000
},
format: wNumb({
thousand: '.',
suffix: ' €'
})
});
}
}
initializePriceSlider('slider-price-round');
initializePriceSlider('slider-price-trip');
initializePriceSlider('slider-mobile-price-round');
initializePriceSlider('slider-mobile-price-trip');
/* ------------------------ /*
END TIME SLIDERS
/* ------------------------ */
// Flight Fares Carousel
$('.c-carousel--flight-fares .owl-carousel').owlCarousel({
loop: false,
responsiveClass: true,
margin: 16,
stageOuterClass: "owl-stage-outer c-carousel__outer",
nav: true,
navText: ['<img src="/images/svgs/carousel-btn-prev.svg">', '<img src="/images/svgs/carousel-btn-next.svg">'],
navContainerClass: "c-carousel__nav",
navClass: ['prev-btn', 'next-btn'],
dotsClass: "c-carousel__dots",
dotClass: "owl-dot c-carousel__dot",
mouseDrag: false,
responsive: {
0: {
items: 1
},
600: {
items: 2
},
1024: {
items: 3
}
}
});
</script>
<script>
$.tangible.shortcutNavigation();
// $.tangible.navToolbar();
$.tangible.formFlights();
$.tangible.multiSelect();
// Tab tendine filtri
document.addEventListener('DOMContentLoaded', () => {
var priceTabs = new Tabby('[data-tabs-price]');
var airportTabs = new Tabby('[data-tabs-airport]');
var timeTabs = new Tabby('[data-tabs-time]');
var mobilePriceTabs = new Tabby('[data-mobile-tabs-price]');
var mobileAirportTabs = new Tabby('[data-mobile-tabs-airport]');
var mobileTimeTabs = new Tabby('[data-mobile-tabs-time]');
})
// initialization flatpickr https://flatpickr.js.org/getting-started/
// if browser language is italian, set flatpickr language to italian https://flatpickr.js.org/localization/
var userLang = navigator.language || navigator.userLanguage;
if (userLang == 'it-IT') {
flatpickr.localize(flatpickr.l10ns.it);
}
// gestione abiliata/disabilita plugin mobile/desktop
function flatPickrController() {
var round_trip = flatpickr("#round-trip-desktop.js-flatpickr"),
round_only = flatpickr("#round-desktop.js-flatpickr"),
trip_only = flatpickr("#round-desktop.js-flatpickr"),
mobileBreakPoint = 1024;
// se la viewport è maggiore di 1024 (display input desktop), inizializzo i flatpickr
if ($(window).width() > mobileBreakPoint) {
// flights form - andata/ritorno (desktop)
var round_trip = flatpickr("#round-trip-desktop.js-flatpickr", {
dateFormat: "d F Y",
mode: "range",
minDate: "today",
allowInput: true
});
// flights form - andata (desktop)
var round_only = flatpickr("#round-desktop.js-flatpickr", {
dateFormat: "d F Y",
minDate: "today",
allowInput: true
});
// flights form - ritorno (desktop)
var trip_only = flatpickr("#trip-desktop.js-flatpickr", {
dateFormat: "d F Y",
minDate: "today",
allowInput: true
});
} else {
// disabilita il plugin flatpickr, utilizza input normali
// round_trip.destroy();
round_only.destroy();
trip_only.destroy();
}
}
// al caricamento e al resize, chiama la funzione che abilita o disabilita il plugin
$(window).on('load resize', flatPickrController);
// LOGICA FORM VOLI - set min date
var $round = $("#round-mobile"),
$trip = $("#trip-mobile"),
$today = new Date().toISOString().split("T")[0];
$.merge($round, $trip).attr('min', $today);
// LOGICA FORM VOLI - validazione
$("#trip-mobile, #round-mobile").change(function (e) {
var $roundDate = new Date($round.val()),
$tripDate = new Date($trip.val()),
$roundParse = Date.parse($roundDate),
$noteField = $("#flights-form-note"),
$tripParse = Date.parse($tripDate);
if ($roundParse > $tripParse) {
$noteField.addClass('is-negative');
$noteField.removeClass('u-visuallyhidden');
} else {
$noteField.removeClass('is-negative');
$noteField.addClass('u-visuallyhidden');
}
});
// LOGICA FORM VOLI - mostra/nascondi
// funzione select voli a/r
$("#select-round-trip-selection").change(function () {
console.log("select");
var value = $(this).find("option:selected").attr("value");
var roundDesktopInput = $(".js-round-desktop input"),
roundDesktopLabel = $(".js-round-desktop label"),
tripDesktopInput = $(".js-trip-desktop input"),
tripDesktopLabel = $(".js-trip-desktop label"),
roundDesktopWrapper = $(".js-round-desktop"),
tripDesktopWrapper = $(".js-trip-desktop")
switch (value) {
case "option-2":
// nascondo il campo ritorno
tripDesktopInput.removeAttr("required");
tripDesktopWrapper.hide();
break;
default:
// mostro il campo ritorno
tripDesktopInput.attr("required", "required");
tripDesktopWrapper.show();
}
});
// FIX CHROME ATTRIBUTI REQUIRED
// rimuove e aggiunge gli attributi required per gli input e le select dei form e-commerce
function checkInputVisibility() {
// breakpoint desktop-mobile
var breakPoint = 1024,
mobileInput = $('.c-form__el--mobile input, .c-form__el--mobile select'),
desktopInput = $('.c-form__el--desktop input, .c-form__el--desktop select'),
desktopInputFlightsTrip = $(".js-round-desktop input");
if ($(window).width() > breakPoint) {
desktopInput.attr('required', 'required');
mobileInput.removeAttr('required');
desktopInputFlightsTrip.removeAttr("required");
} else if ($(window).width() < breakPoint) {
desktopInput.removeAttr('required');
mobileInput.attr('required', 'required');
}
}
// al caricamento e al resize della pagina
$(window).on('load resize', checkInputVisibility);
/* ------------------------ /*
TIME SLIDERS
/* ------------------------ */
function initializeSliderTime(sliderID, leftValueID = '', rightValueID = '') {
// Funzioni ausiliarie definite all'interno di initializeSliderTime
function convertToHour(value) {
return Math.floor(value / 60);
}
function convertToMinute(value, hour) {
return value - hour * 60;
}
function formatHoursAndMinutes(hours, minutes) {
if (hours.toString().length == 1) hours = '0' + hours;
if (minutes.toString().length == 1) minutes = '0' + minutes;
return hours + ':' + minutes;
}
var leftValue = document.getElementById(leftValueID),
rightValue = document.getElementById(rightValueID);
var initialStartMinute = 0,
initialEndMinute = 1440,
step = 30;
var slider = document.getElementById(sliderID);
if (slider) {
noUiSlider.create(slider, {
start: [300, 1220],
connect: true,
step: step,
range: {
'min': initialStartMinute,
'max': initialEndMinute
}
});
slider.noUiSlider.on('update', function (values, handle) {
if (handle === 0 && leftValue) {
leftValue.innerHTML = formatHoursAndMinutes(convertToHour(values[0]), convertToMinute(values[0], convertToHour(values[0])));
} else if (rightValue) {
rightValue.innerHTML = formatHoursAndMinutes(convertToHour(values[1]), convertToMinute(values[1], convertToHour(values[1])));
}
});
}
};
initializeSliderTime(
'slider-time-departure-round',
'slider-time-departure-round-left-val',
'slider-time-departure-round-right-val'
);
initializeSliderTime(
'slider-time-arrival-round',
'slider-time-arrival-round-left-val',
'slider-time-arrival-round-right-val'
);
initializeSliderTime(
'slider-time-departure-trip',
'slider-time-departure-trip-left-val',
'slider-time-departure-trip-right-val'
);
initializeSliderTime(
'slider-time-arrival-trip',
'slider-time-arrival-trip-left-val',
'slider-time-arrival-trip-right-val'
);
initializeSliderTime(
'slider-mobile-time-departure-round',
'slider-mobile-time-departure-round-left-val',
'slider-mobile-time-departure-round-right-val'
);
initializeSliderTime(
'slider-mobile-time-arrival-round',
'slider-mobile-time-arrival-round-left-val',
'slider-mobile-time-arrival-round-right-val'
);
initializeSliderTime(
'slider-mobile-time-departure-trip',
'slider-mobile-time-departure-trip-left-val',
'slider-mobile-time-departure-trip-right-val'
);
initializeSliderTime(
'slider-mobile-time-arrival-trip',
'slider-mobile-time-arrival-trip-left-val',
'slider-mobile-time-arrival-trip-right-val'
);
/* ------------------------ /*
END TIME SLIDERS
/* ------------------------ */
/* ------------------------ /*
PRICE SLIDERS
/* ------------------------ */
function initializePriceSlider(sliderID) {
var slider = document.getElementById(sliderID);
if (slider) {
noUiSlider.create(slider, {
start: [100, 600],
connect: true,
tooltips: true,
range: {
'min': 0,
'max': 1000
},
format: wNumb({
thousand: '.',
suffix: ' €'
})
});
}
}
initializePriceSlider('slider-price-round');
initializePriceSlider('slider-price-trip');
initializePriceSlider('slider-mobile-price-round');
initializePriceSlider('slider-mobile-price-trip');
/* ------------------------ /*
END TIME SLIDERS
/* ------------------------ */
// Flight Fares Carousel
$('.c-carousel--flight-fares .owl-carousel').owlCarousel({
loop: false,
responsiveClass: true,
margin: 16,
stageOuterClass: "owl-stage-outer c-carousel__outer",
nav: true,
navText: ['<img src="/images/svgs/carousel-btn-prev.svg">', '<img src="/images/svgs/carousel-btn-next.svg">'],
navContainerClass: "c-carousel__nav",
navClass: ['prev-btn', 'next-btn'],
dotsClass: "c-carousel__dots",
dotClass: "owl-dot c-carousel__dot",
mouseDrag: false,
responsive: {
0: {
items: 1
},
600: {
items: 2
},
1024: {
items: 3
}
}
});
</script>
{
"bodyClass": "u-bg-color-soft-100",
"tablist": {
"hasLoading": true
},
"template-main-class": "c-main--shiftedtop flights-form",
"header": {
"toolbarProgress": {
"showUser": true,
"moleculeProgress": {
"current-step": 2,
"steps": [
{
"text": "Scegli il volo",
"status": "data-step-current"
},
{
"text": "Dati dei passeggeri",
"status": "data-step-incomplete"
},
{
"text": "Dati di pagamento",
"status": "data-step-incomplete"
},
{
"text": "Preventivo",
"status": "data-step-incomplete"
},
{
"text": "Ricevi conferma",
"status": "data-step-incomplete"
}
]
}
}
},
"flights-form": {
"modifier": "c-form--flights-edit o-spotlight__element",
"form-footer": true,
"show-switch": true,
"from": {
"atom-input": {
"value": "Bologna, Guglielmo Marconi [BLQ] (ITALIA)"
}
},
"to": {
"atom-input": {
"value": "Dubai, Al Maktoum Intl [DWC] (EMIRATI ARABI)"
}
},
"button": {
"type": "button",
"text": "Modifica",
"modifier": "c-button--adding js-fr-dialogmodal-open",
"opens-dialog": "dialog-flights-form"
}
},
"modify-search-btn": {
"modifier": "c-button--as-link js-fr-dialogmodal-open",
"type": "button",
"text": "Modifica la ricerca",
"opens-dialog": "dialog-flights-form",
"svg": {
"class": "c-icon c-icon--18",
"symbol": "ic_mode_edit_black_24px"
}
},
"filter-search-btn": {
"modifier": "c-button--as-link js-fr-dialogmodal-open",
"type": "button",
"text": "Filtra la ricerca",
"opens-dialog": "dialog-flight-filters",
"svg": {
"class": "c-icon c-icon--18",
"symbol": "ic-tune-24px"
}
},
"dialog-flights-form": {
"id": "dialog-flights-form",
"title": "Modifica il tuo volo"
},
"highlight-alert": {
"modifier": "c-highlight--emergency c-highlight--grid",
"text": "<p><strong>Non trovi il volo che stai cercando? Contatta il nostro Servizio Clienti al numero <a href=\"tel:0516479697\">051 6479697</a></strong></p><p>(dal lunedì al sabato dalle 09:00 alle 13:00 e dalle 14:00 alle 17:00)</p>"
},
"select-sorting-results": {
"label_id": "select-sorting-results",
"label_message": "Ordina per",
"label_class": "",
"atom-select": {
"id": "select-sorting-results",
"class": "is-inline",
"required": false,
"hasNote": false,
"placeholder": "Seleziona dal menu",
"options": [
{
"value": "option-1",
"text": "Volo più economico"
},
{
"value": "option-2",
"text": "Volo più veloce"
}
]
}
}
}
.l-page-flights-results__search-recap {
grid-column: full;
background-color: primary(sky, 20);
display: none;
@include min-screen(bp(desktop)) {
display: grid;
}
}
.l-page-flights-results__filters-flight {
grid-column: main;
display: none;
@include min-screen(bp(desktop)) {
display: block;
}
}
.l-page-flights-results__sorting {
grid-column: main;
display: flex;
justify-content: space-between;
align-items: center;
margin-block: remify(40px) remify(24px);
@include max-screen(bp(phablet)) {
margin-block: remify(16px) 0;
}
h1 {
@include max-screen(bp(phablet)) {
@include visually-hidden;
}
}
label {
margin-bottom: 0;
}
}
.l-page-flights-results__modify-search {
grid-column: main;
display: flex;
justify-content: space-between;
align-items: center;
gap: remify(16px);
margin-block: remify(16px);
.c-button {
margin-top: 0;
color: primary(night, 120);
font-weight: fw(semibold);
}
@include min-screen(bp(desktop)) {
display: none;
}
}
No notes defined.