{"version":3,"file":"js/47942-27cf31aed57db1b7a61e.js","mappings":"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","sources":["webpack://cms-web/./app/frontend/src/blocks/hotels_info_with_filtering_mice/dependencies/hotel_card_slider_mobile_gallery.js","webpack://cms-web/./app/frontend/src/blocks/hotels_info_with_filtering_mice/dependencies/not_available_message.js","webpack://cms-web/./app/frontend/src/blocks/hotels_info_with_filtering_mice/dependencies/pagination/pagination.js","webpack://cms-web/./app/frontend/src/elements/scrollsnap_slider/scrollsnap_slider_nav.js","webpack://cms-web/./app/frontend/src/utils/countdown.js"],"sourcesContent":["import * as SliderNav from '../../../elements/scrollsnap_slider/scrollsnap_slider_nav';\n\n/**\n * Initialize mobile slide gallery with scrollsnap\n */\nfunction init() {\n if (IB.currentDevice === 'mobile') {\n document.querySelectorAll('.hotel-list .ss-slider').forEach(function (elemento) {\n SliderNav.init(elemento, elemento.closest('.slider-container').querySelector('.ss-slider-nav'));\n });\n }\n}\n\nwindow.IB.hotel_card_slider_mobile_gallery = {\n init: init\n};\n","export function showAvailabilityMessage() {\n let hotelWithoutPrice = document.querySelectorAll('.card.horizontal-card.hotel.js-dest-card.result-hotel')\n\n if (hotelWithoutPrice) {\n hotelWithoutPrice = [...hotelWithoutPrice]\n const firstHotelWithoutPrice = hotelWithoutPrice.find(function (hotel) {\n const hasPrice = hotel.querySelector('.btn-floating-fastbooking.btn-primary.js-book-btn.fancybox-iframe-link.availability')\n return hasPrice !== null\n })\n\n const notAvailableMessage = document.querySelector('.hotels-unavailable-msg.hidden')?.cloneNode(true)\n if (firstHotelWithoutPrice && notAvailableMessage) {\n notAvailableMessage.classList.remove('hidden')\n firstHotelWithoutPrice.before(notAvailableMessage)\n }\n }\n}\n","/**\n * Pagination\n *\n * Handles hotels info with filtering pagination.\n *\n */\nimport '../hotel_card_slider_mobile_gallery'\n\nimport { currentDevice } from '../../../../core/utils/currentDevice'\nimport { closeLoader, openLoader } from '../../../../elements/wait_loading/wait_loading'\nimport countdownClock from '../../../../utils/countdown'\nimport { getLazyData } from '../../../../utils/get_lazy_data'\nimport { scrollElementIntoView } from '../../../../utils/scroll_to_element'\nimport { FILTERS_UPDATE_EVENT } from '../filters'\nimport { dispatchHotelListUpdatedEvent } from '../list_events'\nimport { showAvailabilityMessage } from '../not_available_message'\nimport { updatePricesInfo } from '../../../../shared/update_prices/update_prices'\n\nlet handlePaginationUpdate\nlet handleScrollEnd\n\nexport function init(PaginationManager) {\n const textualStartingPosition = document.querySelector('.js-starting-hotel-position')\n const textualEndingPosition = document.querySelector('.js-ending-hotel-position')\n\n const NEXT = document.querySelector('.pagination .next')\n const PREV = document.querySelector('.pagination .prev')\n\n const AUTO_OFFER_LIST_PRESENT = document.querySelector('.automatic-offer-list')\n\n const BLOCK = document.querySelector('.hotels-info-with-filtering')\n let pages_links = document.querySelectorAll('.pagination .js-paginate')\n const MAX_VISIBLE_PAGES = getMaxVisiblePages()\n\n const DEFAULT_ORDER = AUTO_OFFER_LIST_PRESENT ? 'recommended' : 'ascending_price'\n const FILTERS_IN_PARAMS = BLOCK.classList.contains('js-hotels-by-param-filters')\n const IN_RESULTS_PAGE = !!document.querySelector('[data-page-type=\"bookings\"]')\n\n if (FILTERS_IN_PARAMS) {\n PaginationManager.updateState({ ids: BLOCK.dataset.hotelsByFilters })\n dispatchFiltersUpdateEvent()\n }\n\n // If we have more than 2 or 3 pages, show '...' between the first\n // ones and the last page number.\n if (pages_links.length > MAX_VISIBLE_PAGES) {\n insertInitialEllipse()\n }\n\n // If in results page, get the destination textual value\n // from fastbooking and print it in pagination copy\n // and remove any previous crs_prices from different searches\n if (IN_RESULTS_PAGE) {\n sessionStorage.removeItem('crs_prices')\n }\n\n // Attach on clicks for page links and prev/next page buttons\n if (document.querySelector('.filtering-container .pagination')) attachEvents()\n\n handlePaginationUpdate = function (e, PaginationManager) {\n // fetch results when pagination is updated from:\n // the watchJob function in the results page\n // the first time it is called\n if (e.fromCRSPricesSync) {\n e.hotelIDs && PaginationManager.forceStateResetTo({ ids: e.hotelIDs })\n e.hotelIDsWithoutPrice && PaginationManager.setIdsWithoutPrice(e.hotelIDsWithoutPrice)\n\n fetchResults()\n } else {\n e.hotelIDs && PaginationManager.updateState({ ids: e.hotelIDs, page: e.page || 1 })\n updatePaginationHTML()\n }\n }\n\n // Update event\n // Trigered for pagination to restart with hotel IDs\n // instead of page param.\n document.addEventListener('pagination:update', event => {\n handlePaginationUpdate(event, PaginationManager)\n })\n\n // Sends the request to the endpoint and executes the callback to update page\n function fetchResults(hotelIDs) {\n openSpinner()\n let offer_type = ''\n let offer_id = ''\n if (AUTO_OFFER_LIST_PRESENT) {\n offer_type = $('.automatic-offer-list').data('crsOfferType')\n }\n if (document.querySelector('html').dataset['pageType'] === 'offer') {\n offer_id = document.querySelector('html').dataset['resourceId']\n }\n\n const url = PaginationManager.getEndpoint({ for_bookings_page: IN_RESULTS_PAGE, offer_type, offer_id })\n\n getLazyData(url, function (response, isResponseOK) {\n if (!isResponseOK) {\n closeSpinner()\n return\n }\n response = JSON.parse(response)\n updatePage(response)\n updatePaginationHTML()\n IN_RESULTS_PAGE && IB.booking_results.forceCRSprices()\n closeSpinner()\n\n if (response?.utag_add_product_impressions) {\n if (IN_RESULTS_PAGE) {\n IB?.utag_eec_events?.utagLinkProductImpressionPaginationSearch(\n JSON.parse(response['utag_add_product_impressions']),\n PaginationManager.getCurrentPage()\n )\n } else {\n IB?.utag_eec_events?.utagLinkProductImpressionPagination(\n JSON.parse(response['utag_add_product_impressions']),\n PaginationManager.getCurrentPage()\n )\n }\n }\n\n if (AUTO_OFFER_LIST_PRESENT) {\n //Event for reset counters in automatic offers\n // TO DO: Cambiar el nombre de este evento y usar el namespace adecuado.\n const changedPaginationEvent = new Event('changedPaginationEvent')\n document.dispatchEvent(changedPaginationEvent)\n }\n\n setTimeout(function () {\n const params = {\n nodeElement: BLOCK,\n checkScrollEnd: true,\n }\n scrollElementIntoView(params)\n }, 500)\n\n handleScrollEnd = function () {\n // add images in the response to observer,\n // initialize tooltips functionality.\n IB.lazyImg.addImgToObserver($('.hotels-info-with-filtering'))\n }\n\n document.addEventListener('scrollEnd', handleScrollEnd, { once: true })\n\n document.querySelectorAll('.hotel-list [data-tooltip]').forEach(tooltip => {\n IB.tooltip.init($(tooltip))\n })\n IB.currencyForm.forceUpdate()\n updatePricesInfo()\n IB.opinionsWidgets.init()\n IB.hotel_card_slider_mobile_gallery.init()\n\n // Special offers counter update\n AUTO_OFFER_LIST_PRESENT && countdownClock()\n\n // Add not-availables hotels message\n showAvailabilityMessage()\n\n dispatchHotelListUpdatedEvent()\n })\n }\n\n // Fill the hotel list div with the HTML from the results json, updates elements' classes\n function updatePage(response) {\n if (AUTO_OFFER_LIST_PRESENT) {\n document.querySelector('.hotel-list.hotel-list-with-filtering').innerHTML = response.html_replacements\n } else {\n document.querySelector('.hotels-info-with-filtering [data-block-list]').innerHTML = response.html_replacements\n }\n }\n\n function openSpinner() {\n openLoader()\n }\n function closeSpinner() {\n closeLoader()\n }\n\n // Hides page numbers and show ellipsis if too many pages\n function insertInitialEllipse() {\n let ellipse_placed = false\n\n pages_links.forEach((page_link, index) => {\n if (index >= MAX_VISIBLE_PAGES && index < pages_links.length - 1) {\n if (!ellipse_placed) {\n document.querySelectorAll('.pagination .ellipse').forEach(ellipse => ellipse.remove())\n insertEllipse(pages_links[index], 'after')\n ellipse_placed = true\n }\n pages_links[index].classList.add('is-hidden')\n }\n })\n }\n\n function updateEllipses() {\n const current_page = PaginationManager.getCurrentPage()\n\n // First pages (below or equal to MAX VISIBLE PAGES) must always be visible\n // like this example in desktop:\n // < 1 2 3 .. 7 >\n if (current_page === MAX_VISIBLE_PAGES) {\n document.querySelectorAll('.pagination .ellipse').forEach(ellipse => ellipse.remove())\n for (let i = 1; i < MAX_VISIBLE_PAGES; i++) {\n pages_links[i].classList.remove('is-hidden')\n }\n }\n insertInitialEllipse()\n\n // Pages between MAX VISIBLE PAGES and last page\n if (current_page > MAX_VISIBLE_PAGES && current_page < pages_links.length) {\n pages_links.forEach((page_link, index) => {\n // ocultar las paginas de la 1 a la current, sin la 1\n if (index > 0 && index < current_page) {\n page_link.classList.add('is-hidden')\n } else if (index === current_page) {\n // mostramos la anterior y la siguiente a la current en desktop y tablet\n // en móvil sólo la current\n const position_to_show = currentDevice.isMobile || currentDevice.isLikeMobile ? 1 : 2\n\n // limpiar la ellipse inicial y previas de interacción\n document.querySelectorAll('.pagination .ellipse').forEach(ellipse => ellipse.remove())\n\n // elipses\n if (current_page < pages_links.length - position_to_show) {\n insertEllipse(pages_links[current_page], 'after')\n }\n insertEllipse(pages_links[current_page - position_to_show], 'before')\n\n if (currentDevice.isMobile || currentDevice.isLikeMobile) {\n // mostrar sólo la página actual en mobile (además de la primera y última página)\n pages_links[current_page - 1].classList.remove('is-hidden') // actual\n\n // si la siguiente página no es la última, ocultamos\n if (current_page + 1 != pages_links.length) {\n pages_links[current_page].classList.add('is-hidden')\n }\n } else {\n // mostrar la página actual, la siguiente y la anterior en desktop y tablet\n // (además de la primera y última página)\n pages_links[current_page - 1].classList.remove('is-hidden') // actual\n pages_links[current_page].classList.remove('is-hidden') // siguiente\n pages_links[current_page - 2].classList.remove('is-hidden') // anterior\n }\n // ocultar de la siguiente a la current a la penúltima\n } else if (index > current_page && index < pages_links.length - 1) {\n page_link.classList.add('is-hidden')\n }\n })\n if (current_page === pages_links.length) {\n pages_links[0].parentElement\n .querySelectorAll('.js-paginate.is-hidden')\n .forEach(page => page.classList.remove('is-hidden'))\n insertInitialEllipse()\n }\n }\n }\n\n function insertEllipse(element, position) {\n const ellipse = document.createElement('span')\n ellipse.innerHTML = '...'\n\n // adding classes one by one instead of at once because of IE\n ellipse.classList.add('page')\n ellipse.classList.add('ellipse')\n\n if (position === 'after') {\n $(ellipse).insertAfter(element)\n }\n if (position === 'before') {\n $(ellipse).insertBefore(element)\n }\n }\n\n function getMaxVisiblePages() {\n let max_visible_pages = currentDevice.isMobile || currentDevice.isLikeMobile ? 2 : 3\n if (pages_links.length < max_visible_pages) {\n max_visible_pages = pages_links.length\n }\n\n return max_visible_pages\n }\n\n function attachEvents() {\n attachPagesEvent()\n attachArrowsEvents()\n }\n\n function attachPagesEvent() {\n pages_links.forEach(page_link => {\n page_link.addEventListener('click', jumpToPage.bind(this, page_link))\n })\n }\n\n function attachArrowsEvents() {\n NEXT.addEventListener('click', turnNextPage.bind(this))\n PREV.addEventListener('click', backPrevPage.bind(this))\n }\n\n function turnNextPage() {\n PaginationManager.updateState({\n page: PaginationManager.getCurrentPage() + 1,\n })\n\n fetchResults()\n }\n\n function backPrevPage() {\n PaginationManager.updateState({\n page: PaginationManager.getCurrentPage() - 1,\n })\n\n fetchResults()\n }\n\n function jumpToPage(element) {\n const newPage = +element.innerText\n PaginationManager.updateState({ page: +element.innerText })\n\n fetchResults()\n }\n\n function updatePaginationHTML() {\n if (pages_links.length === 0) return\n\n const current_page = PaginationManager.getCurrentPage()\n const pagesParent = pages_links[0].parentNode\n\n const nextPageBtn = pagesParent?.querySelector('.next')\n const nodeToClone = pages_links[0]\n\n nodeToClone.classList.remove('current')\n\n pages_links.forEach(el => el.remove())\n if (pagesParent && pagesParent.querySelector('.ellipse')) {\n pagesParent.querySelector('.ellipse').remove()\n }\n\n for (let i = 1; i <= PaginationManager.getResourceIDs().length; i++) {\n const cloned = nodeToClone.cloneNode(true)\n cloned.innerText = i\n if (i === current_page) {\n cloned.classList.add('current')\n }\n pagesParent?.insertBefore(cloned, nextPageBtn)\n }\n\n pages_links = document.querySelectorAll('.pagination .js-paginate')\n\n if (pages_links.length === 1) {\n NEXT.classList.add('disabled')\n PREV.classList.add('disabled')\n } else if (current_page == pages_links.length) {\n NEXT.classList.add('disabled')\n PREV.classList.remove('disabled')\n } else if (current_page == 1) {\n PREV.classList.add('disabled')\n NEXT.classList.remove('disabled')\n } else {\n NEXT.classList.remove('disabled')\n PREV.classList.remove('disabled')\n }\n\n updateEllipses()\n updatePaginationHotelCount()\n attachPagesEvent()\n togglePaginationBlock(pages_links.length)\n }\n\n /**\n * Hides pagination block when there's only one results pages,\n * otherwise it shows it.\n *\n * @param {Number} numPages Number of results pages\n */\n function togglePaginationBlock(numPages) {\n const paginationBlock = document.querySelector('.pagination')\n\n if (numPages < 2) {\n paginationBlock.classList.add('is-hidden')\n } else {\n paginationBlock.classList.remove('is-hidden')\n }\n }\n\n function updatePaginationHotelCount() {\n const allHotelIDs = PaginationManager.getRawResourceIDs()\n const currentPageHotelIDs = PaginationManager.getCurrentPageResourceIDs()\n\n if (allHotelIDs.length && currentPageHotelIDs.length) {\n const indexOfFirstHotel = allHotelIDs.indexOf(currentPageHotelIDs[0]) + 1\n const indexOfLastHotel = allHotelIDs.indexOf(currentPageHotelIDs.slice(-1)[0]) + 1\n\n textualStartingPosition.innerHTML = indexOfFirstHotel\n textualEndingPosition.innerHTML = indexOfLastHotel\n }\n }\n\n function dispatchFiltersUpdateEvent() {\n // wait for initializations and event loop funcs to finish\n // without waiting, labels cant apply disabled class when\n // using filters in params (this event is called asap then)\n setTimeout(function () {\n document.dispatchEvent(new Event(FILTERS_UPDATE_EVENT))\n }, 0)\n }\n}\n\nexport function destroyEvents() {\n document.removeEventListener('pagination:update', handlePaginationUpdate)\n document.removeEventListener('scrollEnd', handleScrollEnd)\n}\n","import Swiper from 'swiper'\nimport { Navigation, Pagination } from 'swiper/modules'\n\nimport { currentDevice } from '../../core/utils/currentDevice'\n\nexport function init(ss_slider, ss_nav, callback, options = {}) {\n if (!ss_slider) return false\n const slides = ss_slider.querySelectorAll('.js-slide-element')\n const slidesObserver = new IntersectionObserver(observeSlides, options)\n for (let i = 0; i < slides.length; ++i) {\n slidesObserver.observe(slides[i])\n }\n\n function observeSlides(entries) {\n if (entries.length) {\n entries.forEach(function (entry) {\n if (entry.isIntersecting && ss_nav) {\n ss_nav.querySelectorAll('.radio-btn').forEach(function (nav_btn) {\n nav_btn.classList.remove('active')\n })\n callback && callback(entry.target)\n const slide_item = ss_nav.querySelector(`[data-slide-index=\"${entry.target.getAttribute('data-index')}\"]`)\n if (slide_item !== null) slide_item.classList.add('active')\n }\n })\n }\n }\n}\n\nexport function initWithMutation(ss_slider, ss_nav, callback, options = { attributes: true }) {\n const slides = ss_slider.querySelectorAll('.js-slide-element')\n const slidesObserver = new MutationObserver(observeSlides)\n\n function observeSlides(mutations) {\n if (!mutations.length) return\n mutations.forEach(mutation => {\n const { target, attributeName } = mutation\n\n if (attributeName === 'class' && ss_nav) {\n if (!target.classList.contains('active')) return\n\n ss_nav.querySelectorAll('.radio-btn').forEach(function (nav_btn) {\n nav_btn.classList.remove('active')\n })\n callback && callback(target)\n ss_nav.querySelector(`[data-slide-index=\"${target.getAttribute('data-index')}\"]`).classList.add('active')\n }\n })\n }\n\n for (let i = 0; i < slides.length; ++i) {\n slidesObserver.observe(slides[i], options)\n }\n}\n\nexport function carouselModule(block) {\n const carouselContainer = `${block} .carousel-container`\n\n if (!currentDevice.isMobile) {\n Swiper.use([Navigation, Pagination])\n const swiper = new Swiper(carouselContainer, {\n slidesPerView: 1,\n spaceBetween: 0,\n loop: true,\n pagination: {\n el: '.swiper-pagination',\n clickable: true,\n },\n navigation: {\n nextEl: '.swiper-button-next',\n prevEl: '.swiper-button-prev',\n },\n lazyPreloadPrevNext: 3,\n })\n } else {\n const carouselContainerMobile = Array.from(document.querySelectorAll(carouselContainer))\n\n carouselContainerMobile.forEach(carousel => {\n const carouselContent = carousel.querySelectorAll('.carousel')\n const arrItems = Array.from(carousel.querySelectorAll('.carousel__item'))\n const itemsLength = arrItems.length\n\n // Show navigation buttons if more than one photo\n if (itemsLength > 1) {\n // We find out the width of each photo\n const itemsWidth = arrItems.map(arrItem => arrItem.scrollWidth)\n // Sum total width\n const totalItemsWidth = itemsWidth.reduce((a, b) => a + b, 0)\n\n const controlCarousels = carousel.querySelector('.controls-carousel')\n\n controlCarousels.innerHTML = ''\n\n arrItems.forEach((arrItem, index) => {\n // Add template\n controlCarousels.innerHTML += templateNavigationControls()\n // To the first button we add aria-press true so that it is highlighted\n if (index === 0) {\n controlCarousels.querySelector('button').setAttribute('aria-pressed', true)\n }\n })\n\n const buttonsNavigationCarousel = carousel.querySelectorAll('.controls__dot')\n\n buttonsNavigationCarousel.forEach((buttonNavigationCarousel, index) => {\n buttonNavigationCarousel.addEventListener('click', e => {\n e.preventDefault()\n e.stopPropagation()\n setAriaPressed(buttonsNavigationCarousel, index)\n\n const destinoCarrusel = carousel.querySelector('.carousel')\n\n // Calculate total width of photos for scroll scrolling\n const scrollLeft = Math.floor(totalItemsWidth * (index / itemsLength))\n\n smoothScroll(destinoCarrusel, scrollLeft, true)\n })\n })\n\n // If we change the photo, mark the corresponding navigation button.\n carouselContent.forEach(carouselItem => {\n carouselItem.addEventListener(\n 'scroll',\n () => {\n const index = Math.round((carouselItem.scrollLeft / carouselItem.scrollWidth) * itemsLength)\n setAriaPressed(buttonsNavigationCarousel, index)\n },\n 200\n )\n })\n }\n })\n\n // Template HTML\n function templateNavigationControls() {\n return `\n \n `\n }\n\n // Scroll Smooth\n function smoothScroll(node, topOrLeft, horizontal) {\n return node.scrollTo({\n [horizontal ? 'left' : 'top']: topOrLeft,\n behavior: 'smooth',\n })\n }\n\n // Add aria-pressed to false for every navigation item except the one in focus.\n function setAriaPressed(elements, index) {\n elements.forEach((element, i) => {\n element.setAttribute('aria-pressed', !!(i === index))\n })\n }\n IB.lazyImg.loadAllImagesSelector($('.carousel'))\n }\n}\n","/**\n * @param {number} intervalTimer - Refresh interval in milliseconds\n * @param {number} maxDays - Max days who can have the countdown\n * @return {void}\n * @example countdown(1000, 7);\n * ---\n * The referenced tag should contain:\n * data-countdown with the end date and correct date format, example: data-countdown=\"2022-10-13T16:26:00+00:00\"\n * data-display-type with the value \"simple\" or undefined to show the countdown with the format: 1d 23h 59m\n * data-translations with the translations for the countdown, example: data-translations='{\"expired\":\"Expired\",\"days\":\"d\",\"hours\":\"h\",\"minutes\":\"m\",\"seconds\":\"s\"}'\n */\nfunction countdown(intervalTimer = 1000, maxDays = 7) {\n const COUNTDOWN_SELECTOR = '.js-countdown';\n let countdowns = document.querySelectorAll(COUNTDOWN_SELECTOR);\n\n for (let index = 0; index < countdowns.length; index++) {\n\n // Target countdown\n let countdown = countdowns[index];\n let offer = [];\n let diff = [];\n let countDownDate = [];\n\n offer[index] = countdowns[index].dataset.countdown;\n // If no countdown present, don't render countdown\n if (offer[index]) {\n offer[index].replaceAll(/\\b[A-Z]+\\b/g, '');\n countDownDate[index] = offer[index] !== '' ? new Date(offer[index].toString()).getTime() : \"\";\n\n //First execution so there is no initial delay and we can set a longer intervalTimer\n renderCountdown(countdown, countDownDate, diff, index, maxDays);\n // Countdown\n let timer = setInterval(function () {\n renderCountdown(countdown, countDownDate, diff, index, maxDays);\n\n // If the count down is over, write some advice\n if (diff[index] < 0) {\n clearInterval(timer);\n }\n\n //--------------------------------------------------------------------------------//\n\n // Reset countdown on apply filters\n document.addEventListener('appliedFilterResults', function () {\n clearInterval(timer);\n });\n // Reset countdown on change pagination\n document.addEventListener('changedPaginationEvent', function () {\n clearInterval(timer);\n });\n // Reset countdown on chage order results\n document.addEventListener('orderResultsEvent', function () {\n clearInterval(timer);\n });\n\n //--------------------------------------------------------------------------------//\n\n }, (intervalTimer));\n }\n }\n}\n\nfunction renderCountdown(countdown, countDownDate, diff, index, maxDays) {\n // get today's date\n const today = new Date().getTime();\n\n // get the difference\n diff[index] = countDownDate[index] - today;\n\n // If the count down is over, write some advice\n if (diff[index] < 0 && countdown.parentElement) {\n countdown.parentElement.innerHTML = JSON.parse(countdown.dataset.translations).expired;\n return;\n }\n\n // math\n let days = Math.floor(diff[index] / (1000 * 60 * 60 * 24));\n let hours = Math.floor((diff[index] % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));\n let minutes = Math.floor((diff[index] % (1000 * 60 * 60)) / (1000 * 60));\n let seconds = Math.floor((diff[index] % (1000 * 60)) / 1000);\n\n if (days <= maxDays && diff[index] > 0) {\n // display\n if (countdown) {\n let displayType = countdown.dataset.displayType;\n let textToDisplay;\n\n var days_text = JSON.parse(countdown.dataset.translations).days;\n var hours_text = JSON.parse(countdown.dataset.translations).hours;\n var minutes_text = JSON.parse(countdown.dataset.translations).minutes;\n\n var seconds_config = JSON.parse(countdown.dataset.translations).seconds;\n\n if (displayType == 'simple') {\n textToDisplay = `${days}${days_text} ${hours}${hours_text} ${minutes}${minutes_text}`;\n } else {\n textToDisplay = `${days} ${days_text} ${hours} ${hours_text} ${minutes} ${minutes_text}`;\n }\n\n countdown.innerHTML = textToDisplay + \" \" + (seconds_config != undefined ? (seconds + seconds_config) : \"\");\n }\n } else {\n if (days > maxDays) {\n if (countdown) {\n countdown.classList.add('is-hidden');\n if (countdown.parentElement.classList.contains('js-special-offer-counter')) {\n countdown.parentElement.classList.add('is-hidden')\n }\n }\n }\n }\n}\n\nexport default countdown;\n"],"names":["window","IB","hotel_card_slider_mobile_gallery","init","currentDevice","document","querySelectorAll","forEach","elemento","SliderNav","closest","querySelector","showAvailabilityMessage","hotelWithoutPrice","firstHotelWithoutPrice","find","hotel","notAvailableMessage","cloneNode","classList","remove","before","handlePaginationUpdate","handleScrollEnd","PaginationManager","textualStartingPosition","textualEndingPosition","NEXT","PREV","AUTO_OFFER_LIST_PRESENT","BLOCK","pages_links","MAX_VISIBLE_PAGES","max_visible_pages","isMobile","isLikeMobile","length","getMaxVisiblePages","FILTERS_IN_PARAMS","contains","IN_RESULTS_PAGE","fetchResults","hotelIDs","openLoader","offer_type","offer_id","$","data","dataset","url","getEndpoint","for_bookings_page","getLazyData","response","isResponseOK","innerHTML","html_replacements","updatePage","JSON","parse","updatePaginationHTML","booking_results","forceCRSprices","closeSpinner","utag_add_product_impressions","utag_eec_events","utagLinkProductImpressionPaginationSearch","getCurrentPage","utagLinkProductImpressionPagination","changedPaginationEvent","Event","dispatchEvent","setTimeout","params","nodeElement","checkScrollEnd","scrollElementIntoView","lazyImg","addImgToObserver","addEventListener","once","tooltip","currencyForm","forceUpdate","updatePricesInfo","opinionsWidgets","countdownClock","dispatchHotelListUpdatedEvent","closeLoader","insertInitialEllipse","ellipse_placed","page_link","index","ellipse","insertEllipse","add","element","position","createElement","insertAfter","insertBefore","attachPagesEvent","jumpToPage","bind","this","turnNextPage","updateState","page","backPrevPage","innerText","current_page","pagesParent","parentNode","nextPageBtn","nodeToClone","el","i","getResourceIDs","cloned","position_to_show","parentElement","updateEllipses","allHotelIDs","getRawResourceIDs","currentPageHotelIDs","getCurrentPageResourceIDs","indexOfFirstHotel","indexOf","indexOfLastHotel","slice","updatePaginationHotelCount","numPages","paginationBlock","togglePaginationBlock","ids","hotelsByFilters","FILTERS_UPDATE_EVENT","sessionStorage","removeItem","attachArrowsEvents","e","fromCRSPricesSync","forceStateResetTo","hotelIDsWithoutPrice","setIdsWithoutPrice","event","destroyEvents","removeEventListener","ss_slider","ss_nav","callback","options","arguments","undefined","slides","slidesObserver","IntersectionObserver","entries","entry","isIntersecting","nav_btn","target","slide_item","getAttribute","observe","initWithMutation","attributes","MutationObserver","mutations","mutation","attributeName","carouselModule","block","carouselContainer","setAriaPressed","elements","setAttribute","Array","from","carousel","carouselContent","arrItems","itemsLength","totalItemsWidth","map","arrItem","scrollWidth","reduce","a","b","controlCarousels","buttonsNavigationCarousel","buttonNavigationCarousel","preventDefault","stopPropagation","destinoCarrusel","scrollLeft","Math","floor","topOrLeft","horizontal","scrollTo","behavior","carouselItem","round","loadAllImagesSelector","Swiper","use","Navigation","Pagination","slidesPerView","spaceBetween","loop","pagination","clickable","navigation","nextEl","prevEl","lazyPreloadPrevNext","renderCountdown","countdown","countDownDate","diff","maxDays","today","Date","getTime","translations","expired","days","hours","minutes","seconds","textToDisplay","displayType","days_text","hours_text","minutes_text","seconds_config","intervalTimer","countdowns","offer","replaceAll","toString","timer","setInterval","clearInterval"],"sourceRoot":""}