1import { i as initSwiper, S as Swiper } from "./chunk-swiper-carousel-CoIKyzd8.js"; 2function filterCarousel() { 3 function elementControl(element, value, slide) { 4 let plainText = value; 5 if (slide.querySelector(element)) { 6 const truncateWords = slide.querySelector(element).dataset.truncatewords; 7 if (truncateWords) { 8 let truncatedValue = value.split(" ").slice(0, truncateWords); 9 plainText = value.replace(/(<([^>]+)>)/gi, ""); 10 if (element != ".js-paragraph") 11 slide.querySelector(element).title = plainText; 12 plainText = plainText.length > truncateWords ? `${truncatedValue.join(" ")}â¦` : plainText; 13 } 14 plainText ? slide.querySelector(element).innerHTML = plainText : slide.querySelector(element).remove(); 15 } 16 } 17 function imageControl(element, value, slide, title = false) { 18 if (slide.querySelector(element)) { 19 if (value) { 20 slide.querySelector(element).src = value; 21 if (title) { 22 slide.querySelector(element).alt = title; 23 } 24 } else { 25 slide.querySelector(element).remove(); 26 } 27 } 28 } 29 function linkControl(element, value, slide) { 30 if (slide.querySelector(element)) { 31 value ? slide.querySelector(element).href = value : slide.querySelector(element).remove(); 32 } 33 } 34 function modalControl(element, value, slide) { 35 if (slide.querySelector(element)) { 36 value ? slide.querySelector(element).dataset.target = value : slide.querySelector(element).remove(); 37 } 38 } 39 function updateBookingButton(element, value, slide) { 40 let button = slide.querySelector(element); 41 if (button) { 42 button.classList.remove("js-reveal-offer"); 43 const now = (/* @__PURE__ */ new Date()).toLocaleDateString("es-ES", { 44 day: "numeric", 45 month: "2-digit", 46 year: "numeric" 47 }); 48 const hotel_name = value.hotel_name != null ? value.hotel_name : value.title; 49 const hotel_code = value.hotel_code != null ? value.hotel_code : value.destination_code; 50 const from_data = value.from_data != null ? value.from_data : false; 51 const to_data = value.to_data != null ? value.to_data : ""; 52 button.dataset.desde = from_data ? from_data : now; 53 button.dataset.hasta = to_data ? to_data : ""; 54 button.dataset.oferta = value.title; 55 button.dataset.hotel = hotel_name ? hotel_name : ""; 56 button.dataset.hotelCod = hotel_code ? hotel_code : ""; 57 button.dataset.codigo = value.code; 58 button.dataset.type = value.type != null ? value.type : ""; 59 button.dataset.url = value.url_bookcore != null ? value.url_bookcore : ""; 60 button.dataset.minimoNoches = value.min_nights != null ? value.min_nights : ""; 61 if (button.dataset.paquete) { 62 if (button.dataset.url) { 63 button.addEventListener("click", function(event) { 64 event.preventDefault(); 65 window.location.href = button.dataset.url; 66 }); 67 } else { 68 button.addEventListener("click", function() { 69 RoiEngineWidget.createPackageModal(this); 70 }); 71 } 72 } else if (button.dataset.codigo && button.dataset.oferta) { 73 button.addEventListener("click", function() { 74 RoiEngineWidget.createOfferModal(this); 75 }); 76 } else if (button.dataset.codigo || button.dataset.hotelCod) { 77 button.addEventListener("click", function() { 78 RoiEngineWidget.createRoomModal(this); 79 }); 80 } 81 } 82 } 83 function navigationControl(carouselItems, element) { 84 let config = JSON.parse(element.dataset.swiperCarouselConfig); 85 const arrows = element.parentNode.querySelector(".js-swiper-arrows"); 86 config.itemsLenght = carouselItems.length; 87 config.itemsVisibleSm = config.items_visible_sm; 88 config.itemsVisibleLg = config.items_visible_lg; 89 if (config.itemsVisibleSm > config.itemsVisibleLg) { 90 config.itemsVisibleSm = config.itemsVisibleLg; 91 } 92 element.dataset.swiperCarouselConfig = JSON.stringify(config); 93 if (arrows) { 94 config.itemsLenght > config.itemsVisibleLg ? arrows.classList.remove("hidden-lg") : arrows.classList.add("hidden-lg"); 95 } 96 } 97 function sortCarousel(carouselItems, element, swp_slide, swp_wrap) { 98 if (carouselInstance) { 99 carouselInstance.destroy(true, true); 100 } 101 swp_wrap.innerHTML = ""; 102 carouselItems = carouselItems.length == 1 && carouselItems[0].hotels != null ? carouselItems[0].hotels : carouselItems;
103 carouselItems.forEach(function(el) { 104 createCard(el, swp_slide, swp_wrap); 105 }); 106 element.classList.add("js-swpCarousel"); 107 navigationControl(carouselItems, element); 108 initSwiper(element); 109 var carouselInstance = Swiper; 110 } 111 function createCard(el, swp_slide, swp_wrap) { 112 let slide = document.createElement("div"); 113 slide.classList.add("swiper-slide"); 114 slide.innerHTML = swp_slide; 115 swp_wrap.appendChild(slide); 116 elementControl(".js-title", el.title, slide); 117 elementControl(".js-subtitle", el.subtitle, slide); 118 el.text = el.text.replace(/(?:\r\n|\r|\n)/g, "<br>"); 119 elementControl(".js-paragraph", el.text, slide); 120 imageControl(".js-img--image", el.images, slide, el.title); 121 if (el.modal_target) { 122 modalControl(".js-sd-modal__button", el.modal_target, slide); 123 } else { 124 linkControl(".js-cta", el.url, slide); 125 } 126 elementControl(".js-price-from", el.from_price, slide); 127 elementControl(".js-price-currency", el.currency, slide); 128 if (!el.from_price) { 129 if (slide.querySelector(".js-actions-from")) { 130 slide.querySelector(".js-actions-from").remove(); 131 } 132 } 133 updateBookingButton(".js-booking-button", el, slide); 134 } 135 function initFilterCarousel(element) { 136 if (element) { 137 const moduleWrap = element.parentNode.parentNode.parentNode; 138 const filters = moduleWrap.querySelectorAll(".js-carousel-filter"); 139 let swpSlide = element.querySelector(".swiper-slide"); 140 let swpWrap = element.querySelector(".swiper-wrapper"); 141 let carouselItems = JSON.parse(element.dataset.carouselItemsJson); 142 swpSlide = swpSlide ? swpSlide.innerHTML : ""; 143 sortCarousel(carouselItems, element, swpSlide, swpWrap); 144 filters.forEach(function(filter) { 145 filter.addEventListener("change", function() { 146 let filteredItem = ""; 147 let filterType = filter.dataset.filterType; 148 let selectedFilterValue = filter.value; 149 const noResults = moduleWrap.querySelector(".js-filter-carousel-andromeda__no-results"); 150 const countryFilter = moduleWrap.querySelector(".js-carousel-filter--country"); 151 const cityFilter = moduleWrap.querySelector(".js-carousel-filter--city"); 152 let cityFilterJson = []; 153 if (cityFilter) { 154 cityFilterJson = JSON.parse(cityFilter.dataset.jsonOptions); 155 } 156 if (noResults) { 157 noResults.classList.remove("filter-carousel-andromeda__no-results--show"); 158 } 159 if (filterType) { 160 filteredItem = carouselItems.filter(function(item) { 161 return selectedFilterValue != "" ? item[filterType] === selectedFilterValue : item[filterType] != selectedFilterValue; 162 }); 163 } 164 if (filterType == "country_code") { 165 if (!cityFilter) 166 return; 167 cityFilterJson.forEach(function(city) { 168 cityFilter.selectedIndex = 0; 169 if (city.country_code === selectedFilterValue || selectedFilterValue === "") { 170 cityFilter.querySelector(`option[value=${city.city_code}]`).style.display = "block"; 171 } else { 172 cityFilter.querySelector(`option[value=${city.city_code}]`).style.display = "none"; 173 } 174 }); 175 } else if (filterType == "city_code" && selectedFilterValue === "" && countryFilter) { 176 filteredItem = carouselItems.filter(function(item) { 177 return countryFilter.value === "" ? item["country_code"] != countryFilter.value : item["country_code"] === countryFilter.value; 178 }); 179 } 180 if (filteredItem.length === 0 && noResults) { 181 noResults.classList.add("filter-carousel-andromeda__no-results--show"); 182 noResults.style.height = `${swpWrap.clientHeight}px`; 183 } 184 sortCarousel(filteredItem, element, swpSlide, swpWrap); 185 }); 186 }); 187 } 188 } 189 const carousel = document.querySelectorAll(".js-filter-carousel"); 190 carousel.forEach(function(element) { 191 initFilterCarousel(element); 192 }); 193} 194export { 195 filterCarousel as f 196}; 197//# sourceMappingURL=chunk-filter_carousel-CFDxL2zq.js.map
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.