{"version":3,"file":"js/68575-fd8a70883dd564e935e2.js","mappings":"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","sources":["webpack://cms-web/./app/frontend/src/blocks/hotels_info_with_filtering_mice/dependencies/offer_highlight/offer_highlight.js","webpack://cms-web/./app/frontend/src/blocks/hotels_info_with_filtering_mice/dependencies/order_results.js","webpack://cms-web/./app/frontend/src/utils/from_object_to_params.js","webpack://cms-web/./app/frontend/src/blocks/hotels_info_with_filtering_mice/dependencies/pagination/pagination_manager.js","webpack://cms-web/./app/frontend/src/blocks/hotels_info_with_filtering_mice/dependencies/pagination/pagination_state.js","webpack://cms-web/./app/frontend/src/blocks/hotels_info_with_filtering_mice/hotels_info_with_filtering_mice.analytics.js","webpack://cms-web/./app/frontend/src/blocks/hotels_info_with_filtering_mice/hotels_info_with_filtering_mice.constants.js","webpack://cms-web/./app/frontend/src/shared/cards/card_init_swiper.js","webpack://cms-web/./app/frontend/src/shared/cards/cards_behavior.js","webpack://cms-web/./app/frontend/src/shared/cards/cards_behavior.analytics.js","webpack://cms-web/./app/frontend/src/blocks/hotels_info_with_filtering_mice/hotels_info_with_filtering_mice.js","webpack://cms-web/./app/frontend/src/blocks/hotels_info_with_filtering_mice/hotels_info_with_filtering_mice_meetings.js","webpack://cms-web/./app/frontend/src/shared/filter_order_panel/filter_order_panel.js","webpack://cms-web/./app/frontend/src/shared/tooltip_for_discounts/tooltip_for_discounts.js"],"sourcesContent":["import { UPDATE_FILTERS_EVENT } from '../filters'\n\nconst HOTELS_INFO_WITH_FILTERING_SELECTOR = '.js-hotels-info-with-filtering'\nconst OFFER_HIGHLIGHT_SELECTOR = '.js-offer-highlight'\n\nexport function init() {\n const block = document.querySelector(HOTELS_INFO_WITH_FILTERING_SELECTOR)\n const highlights = document.querySelectorAll(OFFER_HIGHLIGHT_SELECTOR)\n\n block?.addEventListener(UPDATE_FILTERS_EVENT, () => {\n const filters = document.querySelectorAll('.js-filters-sidebar .js-filter .checked[data-offer-id]')\n\n highlights.forEach(highlight => highlight.classList.remove('offer-highlight--visible'))\n\n if (filters.length === 1) {\n const offerId = filters[0].dataset.offerId\n\n document.querySelector(`.js-offer-highlight[data-offer-id=\"${offerId}\"]`).classList.add('offer-highlight--visible')\n }\n })\n}\n","import { closeLoader, openLoader } from '../../../elements/wait_loading/wait_loading'\nimport { getLazyData } from '../../../utils/get_lazy_data'\n\nimport { dispatchHotelListUpdatedEvent } from './list_events'\nimport { showAvailabilityMessage } from './not_available_message'\nimport { updatePricesInfo } from '../../../shared/update_prices/update_prices'\n\nfunction openSpinner() {\n openLoader()\n}\n\nfunction closeSpinner() {\n closeLoader()\n}\n\nexport function init(PaginationManager) {\n const orderLinks = document.querySelectorAll('.results-order-by .selectable')\n let paginationUpdateEvent\n const IN_RESULTS_PAGE = !!document.querySelector('[data-page-type=\"bookings\"]')\n const AUTO_OFFER_LIST_PRESENT = document.querySelector('.automatic-offer-list')\n\n function updatePage(response) {\n // MOVER A NIVEL DE CONFIG??\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 paginationUpdateEvent = paginationUpdateEvent || new Event('pagination:update')\n paginationUpdateEvent.hotelIDs = response.all_ids_hotel_by_order\n document.dispatchEvent(paginationUpdateEvent)\n\n updatePricesInfo()\n }\n\n function fetchResults() {\n let offer_type = ''\n if (AUTO_OFFER_LIST_PRESENT) {\n offer_type = $('.automatic-offer-list').data('crsOfferType')\n }\n\n let offer_id = ''\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 openSpinner()\n\n getLazyData(url, function (response, isResponseOK) {\n if (!isResponseOK) {\n closeSpinner()\n return\n }\n const data = JSON.parse(response)\n updatePage(data)\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_ecc_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 // NAMESPACE PARA ESTE EVENTO PLS\n const orderResultsEvent = new Event('orderResultsEvent')\n document.dispatchEvent(orderResultsEvent)\n }\n\n // Update currencies as updateDependencies is not being called within this getLazyData\n IB.currencyForm.forceUpdate()\n\n IB.lazyImg.addImgToObserver($('.hotels-info-with-filtering'))\n\n // Add not-availables hotels message\n showAvailabilityMessage()\n\n dispatchHotelListUpdatedEvent()\n })\n }\n\n orderLinks.forEach(link => {\n link.addEventListener('click', function () {\n PaginationManager.updateState({ order: link.dataset.orderType })\n fetchResults()\n })\n })\n}\n","/**\n * From Object to Params\n *\n * Receives an object and returns a string in URL params format\n *\n * @params {object} Object\n * @return {string} paramsString\n */\nexport function fromObjectToParams(obj) {\n const arr = Object.entries(obj)\n let paramsString = arr.reduce((acc, curr) => (acc += `${curr[0]}=${curr[1] || curr[1] === 0 ? curr[1] : ''}&`), '')\n paramsString = paramsString.slice(0, -1) // removes trailing &\n\n return paramsString\n}\n","/*\n * @format\n */\n\nimport _intersection from 'lodash/intersection'\nimport _isEmpty from 'lodash/isEmpty'\n\nimport { getPrefix } from '../../../../core/utils/locale'\nimport { fromObjectToParams } from '../../../../utils/from_object_to_params'\n\nimport {\n DEFAULT_ORDER,\n HOTEL_WITHOUT_PRICE,\n PAGINATION_CONFIG,\n PRICE_ORDER_OPTIONS,\n VALID_ORDER_VALUES,\n} from './pagination_constants'\nimport PAGINATION_STATE from './pagination_state'\n\n//\n// MANAGER CLASS\n//\n// It is a wrapper around PAGINATION_STATE\n//\nexport class PaginationManager {\n constructor(blockName, htmlTagDataset, initialIDs, date = null) {\n // initialize the pagination state\n this.state = PAGINATION_STATE\n\n // sets max resources per page from config data\n this.maxPerPage = PAGINATION_CONFIG[blockName]?.maxResourcesPerPage\n this.setResourceIDs(initialIDs)\n this._setInitialResourceIDs(initialIDs)\n\n // prepares endpoint data, reads the lang prefix, mandatory params and specific param\n this.prefix = this._processPrefix()\n this.controllerAction = PAGINATION_CONFIG[blockName]?.action\n this.mandatoryParams = this._processMandatoryConstantParams(htmlTagDataset)\n this.resourceParam = PAGINATION_CONFIG[blockName]?.resourceParam\n\n this.state.idsToAppend = []\n this.state.idsWithoutPrice = []\n\n if (date != null) {\n this.state.date = date\n }\n }\n\n getResourceIDs() {\n return this.state.resourceIDs.slice()\n }\n\n setResourceIDs(ids) {\n let clonedIDs = ids.slice()\n clonedIDs = this._castToIntArray(clonedIDs)\n this.state.resourceIDs = this._splitInPages(clonedIDs)\n }\n\n getRawResourceIDs() {\n let hotelIDs = this.state.resourceIDs\n .slice()\n .flat()\n .filter(x => !this.state.idsToAppend.includes(x))\n const idsToAppend = this.state.idsToAppend.filter(x => this.state.resourceIDs.slice().flat().includes(x))\n if (idsToAppend.length) hotelIDs = hotelIDs.concat(idsToAppend)\n return hotelIDs\n }\n\n setIdsToAppend(idsToAppend) {\n this.state.idsToAppend = idsToAppend || []\n }\n setIdsWithoutPrice(idsWithoutPrice) {\n this.state.idsWithoutPrice = idsWithoutPrice || []\n }\n\n getIdsToAppend() {\n return this.state.idsToAppend\n }\n\n setMaxPerPage(callerBlockName) {\n this.maxPerPage = PAGINATION_CONFIG[callerBlockName]?.maxResourcesPerPage\n }\n\n getCurrentPage() {\n return this.state.currentPage\n }\n\n setCurrentPage(page) {\n this.state.currentPage = page\n }\n\n getOrder() {\n return this.state.order\n }\n\n setOrder(order) {\n if (order === this.state.order) return\n\n if (VALID_ORDER_VALUES.includes(order)) {\n const newOrder = order\n const oldOrder = this.state.order\n this.state.order = newOrder\n this._isPriceOrderCriteria(newOrder) && this._reverseOrder()\n } else {\n console.warn(`Invalid order type: ${order}. Valid types: ${VALID_ORDER_VALUES}`)\n console.warn('Check correct attribute in your options HTML')\n }\n }\n\n setDate(date) {\n this.state.date = date\n }\n\n getDate() {\n return this.state.date\n }\n\n getControllerAction() {\n return this.controllerAction\n }\n\n getUrlWithMandatoryParams() {\n return `${this.prefix}${this.controllerAction}?${this.mandatoryParams}&page=${this.getCurrentPage()}&${this.getOrder()}=true&date=${this.getDate()}`\n }\n\n getEndpoint({ ...customParams } = {}) {\n let url = `${this.getUrlWithMandatoryParams()}&${this.resourceParam}=[${this.getRawResourceIDs()}]`\n url += _isEmpty(customParams) ? '' : `&${fromObjectToParams(customParams)}`\n url += _isEmpty(this.state.idsWithoutPrice) ? '' : `&${HOTEL_WITHOUT_PRICE}=${this.state.idsWithoutPrice}`\n return url\n }\n\n updateState({ ids, order, page = 1 }) {\n ids && this.setResourceIDs(ids)\n order && this.setOrder(order)\n this.setCurrentPage(page)\n }\n\n // Handle with care. Not only will it reset pagination to different IDs\n // but will also change the initialIds variable and that can mess up\n // with ordering options.\n // Useful when:\n // - Obtaining CRS hotels ordered by price.\n //\n forceStateResetTo({ ids, order = DEFAULT_ORDER, page = 1 }) {\n this.updateState({ ids, order, page })\n this._setInitialResourceIDs(ids)\n }\n\n getCurrentPageResourceIDs() {\n return this.state.currentPageResourceIDs\n }\n\n _setInitialResourceIDs(ids) {\n let initialIDs = ids.slice()\n initialIDs = this._castToIntArray(initialIDs)\n this.state.initialResourceIDs = initialIDs\n }\n\n _processPrefix() {\n let prefix = getPrefix() || '/'\n prefix = prefix === '/' ? prefix : `${prefix}/`\n return prefix\n }\n\n _processMandatoryConstantParams(htmlTagDataset) {\n const params = {\n market_id: htmlTagDataset.marketId,\n deviceType: htmlTagDataset.deviceType,\n site: 'iberostar',\n microsite: IB.is_in_microsite ? htmlTagDataset.inMicrosite : '',\n user_level: htmlTagDataset.level,\n }\n\n return fromObjectToParams(params)\n }\n\n _splitInPages(ids) {\n const resourceIds = this._castToIntArray(ids).slice()\n\n const paginatedInArray = []\n while (resourceIds.length) {\n paginatedInArray.push(resourceIds.splice(0, this.maxPerPage))\n }\n\n return paginatedInArray\n }\n\n _castToIntArray(ids) {\n ids = typeof ids === 'string' ? JSON.parse(ids) : ids\n ids = ids.map(id => +id)\n return ids\n }\n\n _isPriceOrderCriteria(order) {\n return PRICE_ORDER_OPTIONS.includes(order)\n }\n\n _reverseOrder() {\n const currentIDs = this.getRawResourceIDs().slice()\n const initialIDs = this.state.initialResourceIDs.slice()\n\n let orderedIDs = []\n if (this.state.order === PRICE_ORDER_OPTIONS[0]) {\n orderedIDs = _intersection(initialIDs, currentIDs)\n orderedIDs = orderedIDs.length ? orderedIDs : currentIDs\n } else {\n orderedIDs = _intersection(initialIDs.reverse(), currentIDs)\n }\n\n this.setResourceIDs(orderedIDs)\n }\n}\n","import { DEFAULT_ORDER } from './pagination_constants';\n\nlet PAGINATION_STATE = new Proxy(\n {\n resourceIDs: [],\n prevResourceIDs: [],\n currentPageResourceIDs: [],\n nextResourceIDs: [],\n currentPage: 1,\n order: DEFAULT_ORDER,\n initialResourceIDs: [],\n idsToAppend: [],\n date: null,\n idsWithoutPrice: []\n },\n {\n get: function (state, field) {\n return state[field];\n },\n set: function (state, field, data) {\n if (field === 'resourceIDs') {\n state.currentPageResourceIDs = data[state.currentPage - 1] || [];\n state.nextResourceIDs = data[state.currentPage];\n state.resourceIDs = data;\n state.currentPage = 1;\n }\n else if (field === 'currentPage') {\n state.currentPage = data;\n if (state.currentPageResourceIDs.length) {\n state.currentPageResourceIDs = state.resourceIDs[state.currentPage - 1] || [];\n state.prevResourceIDs = state.resourceIDs[state.currentPage - 2];\n state.nextResourceIDs = state.resourceIDs[state.currentPage];\n }\n }\n else if (field === 'order' && typeof data === 'string') {\n state.order = data;\n }\n else if (field === 'initialResourceIDs' && typeof data === 'object') {\n state.initialResourceIDs = data;\n }\n else if (field === 'idsToAppend') {\n state.idsToAppend = data;\n }\n else if (field === 'idsWithoutPrice') {\n state.idsWithoutPrice = data;\n }\n else if (field === 'date') {\n state.date = data;\n }\n else {\n console.warn(`Invalid PaginationState: You can not modify property ${field} of type ${typeof data}`);\n }\n\n return state[field];\n }\n }\n);\n\nexport default PAGINATION_STATE;\n","import { sendUtagEvent } from '../../core/analytics/utag_events'\n\nexport function initializeUtagEvents(blockSelector) {\n if (!blockSelector) return\n\n const utagClearHotelsFilters = document.querySelectorAll(`${blockSelector} .utag-clear-hotels-filters`)\n const isFhiPage = document.querySelector('html').dataset.fhiTest !== undefined\n const fhiPageType = document.querySelector('html').dataset.fhiTest\n\n utagClearHotelsFilters.forEach(button => {\n button.addEventListener('click', () => {\n sendUtagEvent({\n data: {\n event_name: 'filters',\n event_cat: 'filters destinations',\n event_act: 'clear filters',\n event_lbl: '',\n event_purpose: 'inspiration',\n event_structure: 'body',\n },\n })\n })\n })\n\n document.querySelectorAll(`${blockSelector} .utag-info-photos`).forEach(element => {\n element.addEventListener('click', () => {\n const data = {\n event_name: 'hotel_multimedia',\n event_cat: 'hotel information',\n event_act: 'see photos and videos',\n event_lbl: 'photos',\n event_purpose: 'inspiration',\n event_structure: 'popup',\n }\n\n if (!isFhiPage) {\n sendUtagEvent({ data: { ...data } })\n } else {\n sendUtagEvent({ data: { ...data, page_variation: fhiPageType } })\n }\n })\n })\n}\n","export const FILTERS_IN_PARAMS = [\n 'filter_destinations',\n 'filter_categories',\n 'filter_amenities',\n 'filter_specialties',\n 'filter_offers',\n]\n","/**\n * Swiper Initialization on Cards\n *\n * It is designed for the cards in hotel listings only.\n * If more use cases arise it might be great to import this in cards_behavior.js\n */\n\nimport '../../vendors/swiper/swiper.scss'\n\nimport Swiper from 'swiper'\nimport { Navigation } from 'swiper/modules'\n\nlet touchstartX = 0\nlet touchendX = 0\n\n// Init swiper on first interaction (user clicks over swiper-next button) and load rest of images after that\n$(document).on('click', '.hotel-list .horizontal-card .swiper-button-next.card-image-next', function () {\n const $this = $(this)\n const $card = $this.closest('.swiper-container.card-image')\n\n initSwiper($card)\n})\n// Init swiper on first interaction (drag left) and load rest of images after that\n$(document).on('touchstart mousedown', '.hotel-list .horizontal-card .swiper-slide', function (event) {\n touchstartX = event.pageX ? event.pageX : event.originalEvent.touches[0].clientX\n})\n\n$(document).on('touchend mouseup', '.hotel-list .horizontal-card .swiper-slide', function (event) {\n const $this = $(this)\n const $card = $this.closest('.horizontal-card')\n const $swiperContainer = $card.find('.swiper-container.card-image')\n\n touchendX = event.pageX ? event.pageX : event.originalEvent.changedTouches[0].pageX\n\n if (touchendX < touchstartX) {\n // swiped left\n initSwiper($swiperContainer)\n } else if (touchendX > touchstartX) {\n // swiped right\n }\n})\n\nfunction initSwiper($swiperContainer) {\n // If swiper already init returns\n if ($swiperContainer.hasClass('initialized')) return\n $swiperContainer.addClass('initialized')\n // Init swiper\n Swiper.use([Navigation])\n\n const swiperGalleryId = `${new Date().getTime()}`\n $swiperContainer.attr('data-swiper', swiperGalleryId)\n\n const swiperCard = new Swiper(`[data-swiper=\"${swiperGalleryId}\"]`, {\n navigation: {\n nextEl: $swiperContainer.parent().find('.card-image-next').get(0),\n prevEl: $swiperContainer.parent().find('.card-image-prev').get(0),\n },\n preloadImages: false,\n lazy: {\n loadPrevNext: true,\n loadPrevNextAmount: 3,\n },\n })\n\n // Load rest of images\n $swiperContainer.find('.hotel-image.hidden').removeClass('hidden')\n $swiperContainer.find('picture.hotel-image').each(function () {\n IB.lazyImg.loadImg(this)\n })\n\n // Positions slider on second slider (slider inits when user clicks over swiper-next button)\n swiperCard.slideTo(1)\n}\n","/**\n * Cards_behavior.js\n *\n * Title seems quite self explanatory.\n */\n\nimport { initializeUtagEvents } from './cards_behavior.analytics.js'\n\nexport function init(blockSelector) {\n if (!blockSelector) return\n\n // Show more info about the resource in the same card.\n const moreInfoBtns = document.querySelectorAll(`${blockSelector} .info-box-mobile .more-info, ${blockSelector} .card.hotel .more-info`)\n moreInfoBtns.forEach(moreInfoBtn => {\n moreInfoBtn.addEventListener('click', function (event) {\n const el = event.target\n el.classList.toggle('active')\n const infoBox = el.closest('.info-box-container, .card.hotel')?.querySelector('.info-box-services')\n if (infoBox) {\n infoBox.classList.toggle('active')\n }\n })\n })\n\n const horizontalCards = document.querySelectorAll(`${blockSelector} .horizontal-card`)\n horizontalCards.forEach(card => {\n const swiperSlidesCounter = card.querySelectorAll('.swiper-slide')\n\n if (swiperSlidesCounter.length <= 1) return\n\n const sliderControls = card.querySelectorAll('.slider-controls')\n sliderControls.forEach(sliderControl => {\n sliderControl.classList.remove('hidden')\n })\n })\n\n initializeUtagEvents(blockSelector)\n}\n","import { sendUtagEvent } from '../../core/analytics/utag_events'\n\nexport function initializeUtagEvents(blockSelector) {\n if (!blockSelector) return\n\n const infoLinksWithUtagInfoMap = document.querySelectorAll(`${blockSelector} .utag-info-map-link`)\n\n if (infoLinksWithUtagInfoMap) {\n infoLinksWithUtagInfoMap.forEach(infoLink => {\n infoLink.addEventListener('click', () => {\n sendUtagEvent({\n data: {\n event_name: 'hotel_map',\n event_cat: 'hotel information',\n event_act: 'see map',\n event_lbl: '',\n event_purpose: 'inspiration',\n event_structure: 'popup',\n },\n })\n })\n })\n }\n\n const infoLinksWithUtagInfoInformation = document.querySelectorAll(`${blockSelector} .utag-info-information-link`)\n if (infoLinksWithUtagInfoInformation) {\n infoLinksWithUtagInfoInformation.forEach(infoLink => {\n infoLink.addEventListener('click', () => {\n sendUtagEvent({\n data: {\n event_name: 'hotel_services',\n event_cat: 'hotel information',\n event_act: 'see hotel info',\n event_lbl: '',\n event_purpose: 'inspiration',\n event_structure: 'popup',\n },\n })\n })\n })\n }\n\n const infoLinksWithUtagPhotos = document.querySelectorAll(`${blockSelector} .utag-info-photos-link`)\n if (infoLinksWithUtagPhotos) {\n infoLinksWithUtagPhotos.forEach(infoLink => {\n infoLink.addEventListener('click', () => {\n sendUtagEvent({\n data: {\n event_name: 'hotel_multimedia',\n event_cat: 'hotel information',\n event_act: 'see photos and videos',\n event_lbl: 'photos',\n event_purpose: 'inspiration',\n event_structure: 'popup',\n },\n })\n })\n })\n }\n}\n","/**\n * Hotels info with filtering\n */\n\n// TODO: PY05649-832. COMENTADO PARA EVITAR ERROR CON GMAPZ. SE HARÁ UNA NUEVA MEJORA PARA IMPLEMENTAR EL NUEVO HOTELSINFO.\n// import '../../shared/hotels_map_for_filter_mice_page/hotels_map_for_filter_mice_page'\nimport '../../shared/cards/card_init_swiper'\nimport '../../shared/cards/show_discounts'\nimport './hotels_info_with_filtering_mice_meetings'\nimport './dependencies/booking_results'\nimport './dependencies/hotel_card_slider_mobile_gallery'\n\n/* eslint-disable */\nimport { currentDevice } from '../../core/utils/currentDevice'\nimport { init as initCards } from '../../shared/cards/cards_behavior'\nimport { initFilterOrderPanel } from '../../shared/filter_order_panel/filter_order_panel'\nimport { initDiscountTooltips } from '../../shared/tooltip_for_discounts/tooltip_for_discounts'\nimport { updatePricesInfo } from '../../shared/update_prices/update_prices'\nimport { readCookie } from '../../utils/cookie_manager'\nimport { copyToClipboardNew } from '../../utils/copy_to_clipboard'\nimport getRealMarketContent, { dispatchRealMarketContentUpdatedEvent } from '../../utils/get_real_market_content'\nimport { getHotelIDsFromHotelCodes } from '../../utils/hotels_data_bridge'\n\n//TODO: 73371 -> Comentado porque en la página de destinos ya no hay filtros y se ha eliminado todo el JS\n// import {\n// destroy as destroyDestinationsIndex,\n// init as initDestinationsIndex,\n// } from '../destinations_index_packed/destinations_index'\nimport { clearFilters, destroyEvents as destroyFiltersEvents, init as initFilters } from './dependencies/filters'\nimport { HOTEL_LIST_UPDATED_EVENT } from './dependencies/list_events'\nimport { init as initHighlights } from './dependencies/offer_highlight/offer_highlight'\nimport { init as initOrdering } from './dependencies/order_results'\nimport { destroyEvents as destroyPaginationEvents, init as initPagination } from './dependencies/pagination/pagination'\nimport { PaginationManager } from './dependencies/pagination/pagination_manager'\nimport { initializeUtagEvents } from './hotels_info_with_filtering_mice.analytics'\nimport { FILTERS_IN_PARAMS } from './hotels_info_with_filtering_mice.constants'\n\nfunction initializeBlock(blockSelector, blockName) {\n const block = document.querySelector(blockSelector)\n\n if (!block) return\n\n initCards(blockSelector)\n\n let initialHotelIDs = block.dataset && block.dataset.allHotels\n const htmlDataset = document.getElementsByTagName('html')[0].dataset\n const Manager = new PaginationManager(blockName, htmlDataset, initialHotelIDs)\n initPagination(Manager)\n initOrdering(Manager)\n initFilters(Manager)\n initCodeCopyButton()\n\n localStorage.removeItem('filter_hotel_ids')\n createDestHeaderMobile() // will execute only if MQBE is mobile\n initDeps()\n checkTabToShow()\n managePaginationVisibility()\n IB.hotel_card_slider_mobile_gallery.init()\n\n initializeUtagEvents(blockSelector)\n}\n\nexport function init(blockId, blockName, callback) {\n const blockSelector = `[data-block-id=\"${blockId}\"]`\n const block = document.querySelector(blockSelector)\n\n if (!block) return\n\n initializeBlock(blockSelector, blockName)\n\n // Reinitialize hotel cards when html is replaced\n document.addEventListener(HOTEL_LIST_UPDATED_EVENT, () => {\n initCards(blockSelector)\n })\n\n if(callback) callback()\n\n const mainContainer = block.closest('.js-block-layer')\n\n if (!mainContainer) return\n\n // Replace all the html content with the real market html content\n // destroy all previous initializations and reinitialize the block\n const constrainedViewId = block.dataset.constrainedViewId\n\n const urlParams = new URLSearchParams(window.location.search)\n\n // Add filter params to URL so getRealMarketContent can use them\n const additionalParams = Array.from(urlParams.entries())\n .filter(([key]) => FILTERS_IN_PARAMS.includes(key))\n .map(([key, value]) => `${key}=${value}`)\n .join('&')\n getRealMarketContent({ blockId, constrainedViewId, additionalParams })\n .then(response => {\n destroyDestinationsIndex()\n destroyFiltersEvents()\n destroyPaginationEvents()\n\n mainContainer.outerHTML = response.html_replacement\n\n const $block = $(blockSelector)\n\n initDestinationsIndex()\n initializeBlock(blockSelector, blockName)\n IB.lazyImg.addImgToObserver($block)\n\n // Reinit prices after replacement\n updatePricesInfo()\n IB.currencyForm.forceUpdate($block)\n\n if(callback) callback()\n\n const eventBlockName = blockName === 'automatic_offer_list' ? 'automatic-offer-list' : 'hotel-list'\n dispatchRealMarketContentUpdatedEvent({ blockSelector, blockName: eventBlockName })\n })\n .catch(error => {\n // console.warn(error);\n })\n}\n\n/**\n * Initialize dependencies.\n */\nfunction initDeps() {\n if (currentDevice.isMobile || currentDevice.isLikeMobile) {\n initFilterOrderPanel()\n $('[data-mobile-panel]').mobilepanel()\n IB.hotels_filter_map.startHotelsMapMobile()\n }\n\n $('.hotels-info-with-filtering').find('input[type=checkbox], input[type=radio], select').formikation()\n IB.currencyForm.forceUpdate()\n updatePricesInfo()\n initDiscountTooltips()\n $('.hotel-list [data-tooltip]').each(function (index, element) {\n IB.tooltip.init($(element))\n })\n IB.opinionsWidgets.init()\n\n initHighlights()\n}\n\n/**\n * The so called Adverts were originally placed between cards in the listing.\n * The pagination feature in the listing removed this placement.\n * Moved to bottom of the listing, TO DO: create advert in the back and\n * recheck at the end of the feature development.\n */\nfunction manageBanners() {\n let $banners = $('.card-banner')\n let $banner_parent = $($banners[0]).parent()\n let banner_positions = $banners.map(function (index, $value) {\n return $banner_parent.find('> *').index($($value))\n })\n\n $banners.map(function (index, $value) {\n $banner_parent.find('> *:nth-child(' + banner_positions[index] + ')').after($value)\n })\n}\n\n/**\n * Default active tab is \"List\" but we might auto activate\n * the map tab if the show-map-tab is present if we are not\n * in mobile.\n */\nfunction checkTabToShow() {\n if (!currentDevice.isMobile || !currentDevice.isLikeMobile) {\n let show_map_tab = $('.wrapper.hotels-info-with-filtering').data('show-map-tab')\n if (show_map_tab === 1) {\n $('.tabs-menu > li a.hotel-map-link').click()\n $('#hotels-filter-map').css('display', 'block')\n $('.filtering-container .pagination').css('display', 'none')\n $('.filtering-container .offer-dates-legend').css('display', 'none')\n }\n }\n}\n\n/**\n * Clones desktop destination-index-header, changes IDs to prevent\n * duplicates and sets aria-selected to false as no tab is selected upfront.\n */\nfunction createDestHeaderMobile() {\n if ((currentDevice.isMobile || currentDevice.isLikeMobile)) {\n let $clone_destination_header = $('.destination-index-header').first().clone(true, true)\n let $mobile_sticky_container = $('.mobile-sticky-container')\n if ($mobile_sticky_container.length) {\n $clone_destination_header.find('[role=\"tab\"]').each(function () {\n // replace ids with -sticky string to avoid duplicated id's\n if ($(this).attr('id')) {\n $(this).attr('id', $(this).attr('id') + '-sticky')\n }\n // on mobile, we don't have any tab selected at first, so we set all aria-selected to false\n if ($(this).attr('aria-selected')) {\n $(this).attr('aria-selected', false)\n }\n })\n $clone_destination_header.addClass('js-mobile-destination-index-header')\n $mobile_sticky_container.append($clone_destination_header)\n }\n }\n}\n\n\nfunction managePaginationVisibility() {\n let $links = $('.actions.tabs-menu li a')\n\n $links.each(function () {\n $(this).click(function (event) {\n event.preventDefault()\n if ($(this).hasClass('hotel-list-link')) {\n $('.filtering-container .pagination').css('display', 'block')\n $('.filtering-container .offer-dates-legend').css('display', 'block')\n } else {\n $('.filtering-container .pagination').css('display', 'none')\n $('.filtering-container .offer-dates-legend').css('display', 'none')\n }\n })\n })\n}\n\nexport function simulateOfferInputCheckWithClick(offerId) {\n const isChecked = document.querySelector(`.js-filter-block [data-offer-id=\"${offerId}\"] > input:checked`)\n if (isChecked) return\n\n clearFilters(null, false)\n\n document.querySelector(`.js-filter-block [data-offer-id=\"${offerId}\"]`).click()\n}\n\nexport function openOfferBlockInHotelsInfoFilters() {\n const offersFilterBlockTitle = document.querySelector('.js-filters-sidebar [data-filter-type=\"offer-filters\"] .js-filter-title:not(.active)')\n const buttonApplyFilterMobile = document.querySelector('.js-apply-filters')\n\n if (currentDevice.isMobile || currentDevice.isLikeMobile) {\n setTimeout(() => {\n buttonApplyFilterMobile?.click()\n }, 1000);\n } else {\n offersFilterBlockTitle?.click()\n }\n}\n\nfunction initCodeCopyButton() {\n // Copy promo code\n const codeCopyButtons = document.querySelectorAll('.offer-highlight .js-copy-to-clipboard')\n if (codeCopyButtons.length){\n codeCopyButtons.forEach(button => {\n button.addEventListener('click', function (event) {\n const content = event.target\n const promocode = content.dataset.promocode\n const textCopiedTraslation = content.dataset.translations\n copyToClipboardNew(promocode).then(() => {\n content.innerText = textCopiedTraslation\n content.classList.remove('show-icon')\n setTimeout(() => {\n content.innerText = promocode\n content.classList.add('show-icon')\n }, 3000)\n })\n })\n });\n }\n}\n","function init() {\n 'use strict'\n const $hotels_info_with_filtering = $('.hotels-info-with-filtering.meetings')\n if (!$hotels_info_with_filtering.length) return false\n\n $(document)\n .on('click', '.hotel-list-link', function (event) {\n event.preventDefault()\n\n $('#hotels-filter-map').hide()\n $('.filters-sidebar').removeClass('active')\n\n $('.hotel-map-link').removeClass('disabled')\n $(this).addClass('active')\n $('.current[data-block-list]').removeClass('hidden current')\n })\n // .on('click', '.hotel-map-link', function (event) {\n // event.preventDefault()\n // if ($(this).hasClass('disabled')) return false\n\n // const $hotels_filter_map = $('#hotels-filter-map')\n\n // if (currentDevice.isMobile || !currentDevice.isLikeMobile) {\n // $hotels_filter_map.show()\n\n // $(this).addClass('active')\n // $('.filters-sidebar').removeClass('active')\n // $('[data-block-list]').not('.hidden').addClass('current hidden')\n // $(this).addClass('disabled')\n // }\n\n // if (!$(this).hasClass('map-is-activated')) {\n // IB.hotels_filter_map.init($(this), {\n // type: 'visible',\n // })\n // } else {\n // IB.hotels_filter_map.filterVisible()\n // }\n // })\n\n .on('click', '.filters-sidebar [data-close-panel]', function (event) {\n event.preventDefault()\n\n $('.hotel-list-link').trigger('click')\n })\n\n $(document).on('change', '.hotel-list .card [type=checkbox]', function () {\n $(this).closest('.card').toggleClass('selected')\n })\n}\n\ninit()\n","/* eslint-disable */\nimport on from '../../utils/events_delegation';\n\n/**\n * This module creates the mobile filters panel (filters + order) when needed\n */\n\n// Creating mobile filter panels: filter and order\nimport './order_panel.scss';\nimport _debounce from 'lodash/debounce';\nimport inViewport from '../../utils/inViewport';\nimport { currentDevice } from '../../core/utils/currentDevice';\n\nconst AUTO_OFFER_LIST_PRESENT = document.querySelector('.automatic-offer-list');\n\nconst $document = $(document);\nexport function initFilterOrderPanel() {\n let $hotelsFiltering;\n if ($('.hotels-info-with-filtering').length > 0) {\n $hotelsFiltering = $('.hotels-info-with-filtering');\n } else if ($('.destination-index-container').length > 0) {\n $hotelsFiltering = $('.destination-index-container');\n } else if ($('.hotel-list').length > 0) {\n $hotelsFiltering = $('.hotel-list');\n } else {\n return false;\n }\n\n if ($hotelsFiltering.hasClass('filter-order-panel-initialized')) return false;\n\n let $filtersSidebar = $('.filters-sidebar');\n let $sortLinks = $('.js-sort-links');\n let $footerFilterButtons = $('.js-footer-filter-buttons');\n let $footerFilterButtonsWrapper = $('.js-footer-filter-buttons-wrapper');\n let orderLabel = '';\n let $orderOptions = {};\n\n if ($sortLinks.length) {\n orderLabel = $sortLinks.attr('data-order-label');\n\n // Get order options list\n let $currentOrderType = $sortLinks.find('a.active').attr('data-js-selector');\n\n $orderOptions = $('
' + $mobileText + '
');\n let $panel = $(\n ''\n );\n\n // Append panel components\n if ($sortLinks.length && document.querySelectorAll('.js-order-panel').length == 0) {\n // Order filter panel creation\n let $orderFilterPanel = $('');\n let $orderFilterTitle = $('' + orderLabel + '');\n\n $orderFilterPanel.append($orderFilterTitle, $orderOptions);\n $filtersSidebar.prepend($orderFilterPanel);\n }\n\n if (!document.querySelector('#mobile-filter-panel.ready')) {\n $panel.append($filtersPanelTitle, $filtersSidebar);\n $('body').append($panel);\n }\n\n // Footer buttons\n $footerFilterButtons.find('.js-footer-filter-order').remove();\n } else if ($sortLinks.length) {\n // Remove old panel if exists\n $('#mobile-filter-panel-order')?.remove();\n // Panel with order options only\n let $orderPanelTitle = $('' + orderLabel + '
');\n let $closePanelButton = $('');\n let $applyText = $('.order-list-link').data('mobile-panel-apply');\n let $orderPanelButton = $(\n '' +\n $applyText +\n ''\n );\n let $panelOrder = $(\n ''\n );\n\n $panelOrder.append($orderPanelTitle, $orderOptions, $orderPanelButton, $closePanelButton);\n $('body').append($panelOrder);\n\n // Footer buttons\n $footerFilterButtons.find('.js-footer-filter-filter').remove();\n }\n\n // Apply default order\n if ($sortLinks.length) {\n applyOrder();\n }\n\n //Initialize elements of panel\n $('.filters-panel').find('input[type=checkbox], input[type=radio], select').formikation();\n\n // Footer filter buttons visibility\n let $buttonLabels = $footerFilterButtons.find('.js-footer-filter-label');\n let widthApplied = false;\n let lastScrollTop = 0;\n let delta = 5;\n let windowHeight = $(window).outerHeight();\n let finishLoad = false;\n let filtersBlockVisible = false;\n const $filterButtons = document.querySelector('.js-special-offer-mobile-filter-group');\n\n if ($filterButtons) {\n // Show floating filters if page filters block is not visible\n inViewport(\n $filterButtons,\n element => {\n filtersBlockVisible = element.isIntersecting;\n },\n { threshold: 1 }\n );\n }\n\n $(window).scroll(\n _debounce(() => {\n let windowScrollTop = $(window).scrollTop();\n let hotelsFilteringOffset = $hotelsFiltering.offset();\n let wrapperOffsetBottom = hotelsFilteringOffset.top + $hotelsFiltering.outerHeight() + 40 - windowScrollTop < 0;\n let topReachedFilters = hotelsFilteringOffset.top - 40 - (windowScrollTop + windowHeight) < 0;\n let mustBeVisible = topReachedFilters && !wrapperOffsetBottom && !filtersBlockVisible;\n\n $footerFilterButtonsWrapper.toggleClass('is-active', mustBeVisible);\n\n // Make sure they scroll more than delta\n if (Math.abs(lastScrollTop - windowScrollTop) <= delta) return;\n\n if (windowScrollTop > lastScrollTop) {\n // Scroll Down\n if (!$footerFilterButtons.hasClass('is-collapsed')) {\n let visibilityOffsetBottom = hotelsFilteringOffset.top + 140 - windowScrollTop < 0;\n $footerFilterButtons.toggleClass('is-collapsed', visibilityOffsetBottom);\n }\n } else {\n // Scroll Up\n $footerFilterButtons.removeClass('is-collapsed');\n }\n lastScrollTop = windowScrollTop;\n\n // set default label width\n if (!widthApplied && topReachedFilters && !$footerFilterButtons.hasClass('is-collapsed') && $buttonLabels.length && $buttonLabels.eq(0).outerWidth() !== 0) {\n $buttonLabels.each(function (index, el) {\n let $this = $(this);\n $this.removeAttr('style');\n $this.css('width', $this.outerWidth() + 'px');\n });\n widthApplied = true;\n }\n }, 50)\n );\n\n $hotelsFiltering.addClass('filter-order-panel-initialized')\n}\n\n// MAP panel\n$(document).on('click', '.js-footer-filter-buttons .hotel-map-link', function (event) {\n event.preventDefault();\n if ($(this).hasClass('disabled')) return false;\n\n if (!$(this).hasClass('map-is-activated')) {\n IB.hotels_filter_map.init($(this), {\n type: 'visible',\n });\n } else {\n IB.hotels_filter_map.filterVisible();\n }\n});\n\n// Checks if order filter has been changed by user\n/**\n *\n * @return {boolean} - true if changed, false if not changed\n */\nfunction orderOptionChanged() {\n let $orderOptionList = $('.js-order-option-list');\n\n if (!$orderOptionList.length) return;\n\n let lastOrderFilter = $orderOptionList.attr('data-current-order');\n let selectedOrderFilter = $orderOptionList.find('input:checked').val();\n return lastOrderFilter !== selectedOrderFilter;\n}\n\n/**\n * Sorts list by order option selected\n */\nfunction applyOrder() {\n let $orderOptionList = $('.js-order-option-list');\n\n if (!$orderOptionList.length) return;\n\n let selected_option = $orderOptionList.find('input:checked').val();\n\n if (!selected_option) return;\n\n $orderOptionList.attr('data-current-order', selected_option);\n $orderOptionList.find('label[for=\"' + selected_option + '\"]').click();\n $('[data-js-selector=\"' + selected_option + '\"]').click();\n}\n\n// Events\n// Click on filters apply button\n$document.on('click', '[data-mobile-panel] .js-apply-filters', function () {\n // Apply current selected order filter\n if ($('.js-sort-links').length && orderOptionChanged()) {\n applyOrder();\n }\n});\n\nfunction resetPanel() {\n document.querySelector('.mobile-panel.filters-panel').addEventListener(\n 'transitionend',\n function (event) {\n document.querySelectorAll('.filters-block').forEach(function (item) {\n item.style.display = 'block';\n });\n },\n { once: true }\n );\n}\n\n\ndocument.addEventListener(\"DOMContentLoaded\", function() {\n // Code to be executed when the DOM is fully loaded\n if (AUTO_OFFER_LIST_PRESENT) {\n if (currentDevice.isMobile || currentDevice.isLikeMobile) {\n // Order panel\n //---------------------------------------------------------//\n\n on({\n eventName: 'click',\n selector: '.js-filter-order-only',\n handler() {\n document.querySelectorAll('.filters-block:not(.js-order-panel)').forEach(function (item) {\n item.style.display = 'none';\n });\n },\n })\n\n // No order panel\n //---------------------------------------------------------//\n\n on({\n eventName: 'click',\n selector: '.js-filter-all',\n handler() {\n document.querySelector('.filters-block.js-order-panel').style.display = 'none';\n },\n })\n\n // Reset panel class\n //---------------------------------------------------------//\n\n on({\n eventName: 'click',\n selector: '.js-filters-panel .close-mobile-panel, .bottom-actions',\n handler() {\n resetPanel();\n },\n })\n\n //---------------------------------------------------------//\n }\n }\n\n if ((currentDevice.isMobile || currentDevice.isLikeMobile) && $('.js-order-panel').length) {\n on({\n eventName: 'click',\n selector: '.js-order-panel',\n handler() {\n // Toggle filter\n document.querySelector('.js-order-panel a').classList.toggle('active');\n document.querySelector('.mobile-panel__option-list').classList.toggle('is-hidden');\n },\n })\n }\n});\n","const isFhiPage = document.querySelector('html').dataset.fhiTest !== undefined;\nimport Modal from '../modal/modal'\n\nconst MODAL_MYIB_SELECTOR = 'data-myib-promo-micromodal-trigger'\n\nexport function initDiscountTooltips() {\n if (IB.currentDevice !== 'mobile') {\n initDesktop();\n } else {\n $('[data-discounttooltip]').each(function () {\n let $el = $(this);\n let href = $el.data('desc-html');\n $el.attr('href', href);\n $el.fancybox({\n 'width': 'auto',\n 'height': 'auto',\n 'autoSize': true,\n 'scrolling': 'hidden',\n 'autoDimensions': true,\n 'helpers': {\n 'overlay': {\n 'locked': true\n }\n },\n 'padding': 0,\n 'margin': [10, 10, 10, 10]\n });\n });\n }\n\n // Initialize promo information modals\n Modal.init({\n openTrigger: MODAL_MYIB_SELECTOR,\n onShow: () => {\n if (isFhiPage) return\n ScrollLock.on()\n },\n onClose: () => {\n if (isFhiPage) return\n ScrollLock.off()\n },\n awaitCloseAnimation: true,\n })\n}\n\nfunction initDesktop() {\n let $tooltip = $('[data-discounttooltip]');\n if (!$tooltip.length) return false;\n $tooltip.each(function (index, el) {\n let $this = $(this);\n\n $this.focus(function () {\n $this.trigger('mouseenter');\n });\n $this.blur(function () {\n $this.trigger('mouseleave');\n });\n\n $this.hover(function () {\n let type = $this.data('discounttooltip');\n let desc_html = $this.data('desc-html');\n let position = $this.data('position');\n let $template = $('');\n $template.append('