{"version":3,"file":"js/82464-4387f7a76ed80dfecce4.js","mappings":"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","sources":["webpack://cms-web/./app/frontend/src/shared/fastbooking/constants.js","webpack://cms-web/./app/frontend/src/utils/filter_object_properties.js","webpack://cms-web/./app/frontend/src/shared/last_searches/last_searches.js","webpack://cms-web/./app/frontend/src/shared/last_searches/last_searches.analytics.js","webpack://cms-web/./app/frontend/src/shared/last_searches_cards/last_searches_cards.constants.js","webpack://cms-web/./app/frontend/src/shared/last_searches_cards/last_searches_cards.js","webpack://cms-web/./app/frontend/src/vendors/template_engine/template_engine.js"],"sourcesContent":["export const FASTBOOKING_MODE_CHANGE_EVENT = 'fastbooking:mode-change'\nexport const FASTBOOKING_FLIGHT_TAB_CREATED_EVENT = 'fb_tab_created'\nexport const STANDARD_DATE_FORMAT = 'YYYY-MM-DD'\n\nexport const FASTBOOKING_EVENTS = {\n FASTBOOKING_READY: 'fb:ready',\n SET_DESTINATION: 'fb:set-destination',\n SET_PROMOCODE: 'fb:set-promocode',\n HIDE_FASTBOOKING: 'fb:hide-fastbooking',\n SHOW_FASTBOOKING: 'fb:show-fastbooking',\n OPEN_HIDDEN_FASTBOOKING: 'fb:open-Hidden-fastbooking',\n CLOSE_HIDDEN_FASTBOOKING: 'fb:close-Hidden-fastbooking',\n OPEN_DATES: 'fb:open-dates',\n OPEN_OCCUPANCY: 'fb:open-occupancy',\n OPEN_PROMOCODE: 'fb:open-promocode',\n SET_DATES: 'fb:set-dates',\n SET_OCCUPANCY: 'fb:set-occupancy',\n STATE_UPDATED: 'fb:state-updated',\n CLOSE_PANELS: 'fb:close-panels',\n FASTBOOKING_ACTIVE: 'fb:active',\n FASTBOOKING_INACTIVE: 'fb:inactive',\n RESET_PROMOCODE: 'fb:reset-promocode',\n PROMOCODE_IS_VALID: 'fb:promocode-is-valid',\n SET_PANELS_OFFSET_TOP: 'fb:set-panels-offset-top',\n REMOVE_PANELS_OFFSET_TOP: 'fb:remove-panels-offset-top',\n}\n\nexport const IBH_FASTBOOKING_EVENTS = {\n STICKY_FASTBOOKING: 'ibh:fb:sticky',\n NO_STICKY_FASTBOOKING: 'ibh:fb:no-sticky',\n OPEN_STICKY_FASTBOOKING: 'ibh:fb:open',\n CLOSE_STICKY_FASTBOOKING: 'ibh:fb:close',\n SHOW_BANNER: 'ibh:fb:show-banner',\n}\n\nexport const UtagEvents = {\n HotelTab: 'fb:utag:hotel-tab',\n FlightHotelTab: 'fb:utag:flight-hotel-tab',\n Dates: 'fb:utag:dates',\n Destination: 'fb:utag:destination',\n Promocode: 'fb:utag:promocode',\n PromocodeValidation: 'fb:utag:promocode-validation',\n PromocodeFocused: 'fb:utag:promocode-focused',\n Occupancy: 'fb:utag:occupancy',\n ConfirmOccupancy: 'fb:utag:confirm-occupancy',\n FlexibleDates: 'fb:utag:flexible-dates',\n ScrollToFastbookig: 'fb:utag:scroll-to-fastbooking',\n Submit: 'fb:utag:submit',\n AddMoreRooms: 'fb:utag:add-more-rooms',\n}\n\nexport const DESTINATION_TYPES = {\n h: 'hotel',\n d: 'destination',\n s: 'specialty',\n}\n","/**\n * Returns an object that only contains the specified properties from the original object.\n * @param {Object} object - The original object.\n * @param {string[]} properties - An array of strings with the names of the properties to keep.\n * @returns {Object} - A new object that only contains the specified properties from the original object.\n */\nfunction filterObjectProperties(object, properties) {\n return Object.keys(object)\n .filter(property => properties.includes(property))\n .reduce((obj, property) => {\n obj[property] = object[property]\n return obj\n }, {})\n}\n\nexport default filterObjectProperties\n","/**\n * @format\n */\n\nimport dayjs from 'dayjs'\nimport customParseFormat from 'dayjs/plugin/customParseFormat'\nimport isSameOrAfter from 'dayjs/plugin/isSameOrAfter'\n\nimport { fetchLastSearch } from '../../../../frontend/src/shared/last_searches_cards/last_searches_cards'\nimport { readCookie } from '../../../../frontend/src/utils/cookie_manager'\nimport filterObjectProperties from '../../../../frontend/src/utils/filter_object_properties'\n\nimport { initializeUtagEvents } from './last_searches.analytics'\n\ndayjs.extend(customParseFormat)\ndayjs.extend(isSameOrAfter)\ninitializeUtagEvents()\n\nconst LAST_SEARCH_DATE_FORMAT = 'YYYY-MM-DD'\nconst LOCALSTORAGE_SEARCHES_ID = 'last_searches'\nexport const PLACEHOLDER_IMAGE = '../../../images/icons/placeholder-last-search-card.png'\n\nfunction getDates(item, query) {\n let checkInDate = item.check_in_date\n let checkOutDate = item.check_out_date\n\n if (checkInDate?.length > 0 && checkOutDate?.length > 0) {\n if (checkInDate !== '') {\n query['checkInDate'] = checkInDate\n checkInDate = `ci${query['checkInDate'].replaceAll('-', '')}`\n } else checkInDate = null\n if (checkOutDate !== '') {\n query['checkOutDate'] = checkOutDate\n checkOutDate = `co${query['checkOutDate'].replaceAll('-', '')}`\n } else checkOutDate = null\n query['day'] = dayjs().format(LAST_SEARCH_DATE_FORMAT)\n }\n query['datesInfoKey'] = checkInDate && checkOutDate ? [checkInDate, checkOutDate].join('_') : null\n}\n\nfunction getRooms(item, query) {\n query['pax_config'] = []\n const rooms = item.rooms\n\n rooms.forEach(room => {\n const numberAdults = room.number_adults\n const numberKids = room.number_kids\n\n if (numberKids > 0) {\n const childAges = JSON.stringify(room.kidsAges)\n .replace(/[\"\"]/g, '')\n .replace(/[\\[\\]]/g, '')\n .replaceAll(',', '*')\n query['pax_config'].push(`${numberAdults}p${numberKids}-${childAges}`)\n } else {\n query['pax_config'].push(`${numberAdults}p${numberKids}`)\n }\n })\n\n query['pax_config'] = query['pax_config'].join('_')\n}\n\nfunction getPromocode(item, query) {\n let promoCode = item.promoCode\n if (promoCode !== '' || promoCode !== undefined) {\n promoCode = `pc${promoCode}`\n } else promoCode = null\n query['pc'] = promoCode\n}\n\n// function getResident($element, query) {\n// const resident_cookie = readCookie('resident')\n// const $resident = resident_cookie !== null ? '$element.find(`[data-discount*=resident-${resident_cookie}]`)' : null\n// query['resident'] = $resident.length == 1\n// }\n\nfunction createSearchUrl(query) {\n query['search_url'] = []\n query['search_url'].push(query['place_to_go'])\n query['search_url'].push(query['pax_config'])\n\n if (query['datesInfoKey']) {\n query['search_url'].push(query['datesInfoKey'])\n delete query['datesInfoKey']\n }\n\n if (query['promocode']) {\n query['search_url'].push(query['promocode'])\n }\n\n if (query['resident']) {\n query['search_url'].push('resident')\n }\n delete query['resident']\n\n query['search_url'] = query['search_url'].join('_')\n}\n\nexport function queryDefaultValues(item) {\n const query = {}\n query['image'] = ''\n query['image_alt'] = ''\n query['title'] = item.title\n query['description'] = ''\n query['place_title'] = ''\n query['locale'] = document.documentElement.getAttribute('data-js-lang')\n return query\n}\n\nexport function loadDataLastSearches(item) {\n const query = queryDefaultValues(item)\n query['place_to_go'] = item.place_to_go\n if (query['place_to_go']) {\n getDates(item, query)\n getRooms(item, query)\n getPromocode(item, query)\n // getResident( query)\n\n createSearchUrl(query)\n return query\n }\n return null\n}\n\nfunction removeOldSearches(searches) {\n const maxSearches = searches.slice(-3) // max last searches saved: 3\n return maxSearches\n}\n\n/**\n * Determines if a search is valid based on its check in and check out dates.\n * A search is valid if it has no check in date, or if it has a check in date that is the same day or after today,\n * and it has no check out date, or if it has a check out date that is after today.\n *\n * @param {Object} search - The search object containing check in and check out dates.\n * @returns {boolean} - True if the search is valid, false otherwise.\n */\nfunction isSearchValid(search) {\n // valid if has no dates\n if (!search.checkInDate) {\n return true\n }\n\n const today = dayjs()\n const checkInDate = dayjs(search.checkInDate, LAST_SEARCH_DATE_FORMAT)\n const checkInDateIsValid = checkInDate.isSameOrAfter(today, 'day')\n // valid if has no check out date and check in date is valid\n if (!search.checkOutDate) {\n return checkInDateIsValid\n }\n const checkOutDate = dayjs(search.checkOutDate, LAST_SEARCH_DATE_FORMAT)\n // valid if both dates are today or after today\n return checkInDateIsValid && checkOutDate.isAfter(today, 'day')\n}\n\n/**\n * Removes dates in expired searches from an array of search objects.\n *\n * @param {Array} searches - The array of search objects to update.\n * @returns {Array} - The updated array of search objects without dates in expired searches.\n */\nfunction removeDatesFromExpiredSearches(searches) {\n return searches.map(search => {\n if (!isSearchValid(search)) {\n if (Object.prototype.hasOwnProperty.call(search, 'checkInDate')) {\n delete search.checkInDate\n }\n if (Object.prototype.hasOwnProperty.call(search, 'checkOutDate')) {\n delete search.checkOutDate\n }\n }\n\n return search\n })\n}\n\n/**\n * Removes repeated searches from an array of objects.\n * @param {Array} searches - An array of objects representing the searches performed.\n * @returns {Array} - A new array with unique searches.\n */\nfunction removeRepeatedSearches(searches) {\n // Properties that will be used to check if objects are similar\n const propertiesToCompare = ['check_in_date', 'ccheck_out_date', 'place_to_go', 'pax_config']\n // Filters the searches array\n return searches.filter((obj, index, self) => {\n const currentObj = filterObjectProperties(obj, propertiesToCompare)\n // Find the index of the first occurrence of the object in the array\n const firstIndex = self.findIndex(search => {\n const currentSearch = filterObjectProperties(search, propertiesToCompare)\n // Compare the current search object with the current object being filtered\n return JSON.stringify(currentSearch) === JSON.stringify(currentObj)\n })\n // If the index of the first occurrence of the object in the array is equal to the current index, it means it's the first time it appears.\n return index === firstIndex\n })\n}\n\nfunction resetSearchesWith(searches) {\n if (!searches || !searches.length) return\n\n let lastSearches = removeDatesFromExpiredSearches(searches)\n lastSearches = removeRepeatedSearches(lastSearches)\n lastSearches = removeOldSearches(lastSearches)\n\n localStorage.setItem(LOCALSTORAGE_SEARCHES_ID, JSON.stringify(lastSearches))\n}\n\nexport function fillSearches(searches_info, last_searches) {\n const local_last_searches = JSON.parse(last_searches)\n\n local_last_searches.forEach(item => {\n const current_place = JSON.parse(searches_info)[item.place_to_go.toString()]\n\n if (current_place !== undefined) {\n item.title = current_place.search_info_title\n item.description = current_place.search_info_description\n item.image = current_place.search_info_image\n if (current_place.search_info_image_desktop) {\n item.image_desktop = current_place.search_info_image_desktop\n }\n if (current_place.search_info_image_tablet) {\n item.image_tablet = current_place.search_info_image_tablet\n }\n if (current_place.search_info_image_mobile) {\n item.image_mobile = current_place.search_info_image_mobile\n }\n if (current_place.search_info_hotel_category) {\n item.category = current_place.search_info_hotel_category\n }\n if (current_place.search_info_megabanner_description) {\n item.summary = current_place.search_info_megabanner_description\n }\n item.image = item.image === '' ? PLACEHOLDER_IMAGE : item.image\n item.image_alt = current_place.search_info_image_alt\n item.place_title = current_place.search_info_place_title\n item.next_opening = current_place.search_info_next_opening\n item.path = current_place.search_info_path\n item.segmentations = current_place.search_info_hotel_segmentations\n item.locale = document.documentElement.getAttribute('data-js-lang')\n }\n })\n resetSearchesWith(local_last_searches)\n}\n\nexport function getLastSearches({ stringify = false } = {}) {\n let lastSearches\n try {\n lastSearches = localStorage.getItem(LOCALSTORAGE_SEARCHES_ID)\n } catch (e) {\n console.error(e)\n }\n\n if (lastSearches === null) {\n return stringify ? '' : []\n }\n\n return stringify ? lastSearches : JSON.parse(lastSearches)\n}\n\nexport function updateLastSearches(callback) {\n const lang = document.documentElement.getAttribute('data-js-lang')\n\n const last_searches = getLastSearches()\n\n /**\n * Find last searches to update wheter they have missing data\n * or they need to update their locale\n */\n const last_searches_ids = []\n if (last_searches.length > 0) {\n last_searches.forEach(search => {\n if (search.title === '' || search.description === '' || search.image === '' || search.locale !== lang) {\n last_searches_ids.push(search.place_to_go)\n }\n })\n }\n\n if (last_searches_ids.length > 0) {\n fetch(`/${lang}/fetch_last_search/?ids=${last_searches_ids.toString()}¤t_locale=${lang}`)\n .then(response => response.json())\n .then(searches_info => {\n fillSearches(searches_info, JSON.stringify(last_searches))\n if (callback) {\n callback()\n }\n })\n .catch(error => {\n console.error(`Error fetching last searches: ${error}`)\n })\n } else if (callback) {\n callback()\n }\n}\n\nexport function get_last_search() {\n let last_search = {}\n let last_searches\n try {\n last_searches = localStorage.getItem(LOCALSTORAGE_SEARCHES_ID)\n } catch (e) {\n console.error(e)\n }\n if (last_searches === null) {\n last_searches = []\n } else {\n last_searches = JSON.parse(last_searches)\n last_search = last_searches.pop()\n }\n return last_search\n}\n/* eslint-disable */\nfunction save_last_search_shared_by_cookie() {\n const last_searches_shared = readCookie('shared_last_searches')\n if (last_searches_shared !== undefined) {\n const last_search_keys = last_searches_shared.split(',')\n const locale_html = document.documentElement.getAttribute('data-js-lang')\n\n $.ajax({\n dataType: 'JSON',\n type: 'GET',\n url: `/fetch_last_search_shared/?search_keys=${last_search_keys.toString()}`,\n cache: true,\n success(data) {\n const share_searches = JSON.parse(data.share_searches)\n const places_to_go = data.places_to_go\n if (share_searches !== null) {\n $.each(share_searches, function (i, share_search) {\n const search = share_search.info\n let last_searches\n\n if (search !== null) {\n try {\n last_searches = localStorage.getItem(LOCALSTORAGE_SEARCHES_ID)\n } catch (e) {}\n if (last_searches === null) {\n last_searches = []\n } else {\n last_searches = JSON.parse(last_searches)\n }\n\n last_searches = removeRepeatedSearches(last_searches)\n last_searches.push(search)\n last_searches = removeOldSearches(last_searches)\n try {\n localStorage.setItem(LOCALSTORAGE_SEARCHES_ID, JSON.stringify(last_searches))\n last_searches = localStorage.getItem(LOCALSTORAGE_SEARCHES_ID)\n } catch (e) {}\n }\n })\n }\n IB.cookieManager.deleteCookies(['shared_last_searches'])\n const local_last_searches = localStorage.getItem(LOCALSTORAGE_SEARCHES_ID)\n fetchLastSearch(places_to_go, local_last_searches)\n },\n })\n }\n}\n/* eslint-enable */\nfunction cleanLastSearches() {\n let lastSearches = getLastSearches()\n\n if (!lastSearches.length) return\n\n lastSearches = removeDatesFromExpiredSearches(lastSearches)\n lastSearches = removeRepeatedSearches(lastSearches)\n\n try {\n localStorage.setItem(LOCALSTORAGE_SEARCHES_ID, JSON.stringify(lastSearches))\n } catch (e) {\n console.error(e)\n }\n}\n\ncleanLastSearches()\n\nsave_last_search_shared_by_cookie()\n","import { sendUtagEvent } from '../../core/analytics/utag_events'\nimport on from '../../utils/events_delegation'\n\nexport function initializeUtagEvents() {\n on({\n eventName: 'click',\n selector: '.last-search-card a.full-link',\n handler(event) {\n var target = event.target\n\n const event_name = 'last_search'\n const event_cat = 'last search'\n let event_act = ''\n let event_lbl = ''\n let event_purpose = ''\n let event_structure = ''\n\n /* Evento ver las últimas búsquedas */\n if (target.matches('.last-search-card a.full-link, .last-search-card utag-last-search-view-search')) {\n const event_zone =\n target.closest('.main-nav') !== null ||\n target.closest('.main-header-cnt') !== null ||\n target.closest('.panel-content') !== null ||\n target.closest('.burgermenu-panel') !== null ||\n event.target.closest('.main-nav') ||\n event.target.closest('.mobile-last-searches') ||\n document.body.classList.contains('nhp-home')\n ? 'header'\n : 'body'\n event_act = 'see last search'\n event_purpose = 'booking'\n event_structure = event_zone\n event_lbl = event_zone\n }\n\n /* Evento compartir últimas búsquedas */\n if (target.matches('.last-search-card a.shared')) {\n event_act = 'share last search'\n event_lbl =\n event.target.closest('.main-nav') !== null ||\n event.target.closest('.main-header-cnt') !== null ||\n event.target.closest('.panel-content') !== null\n ? 'top menu'\n : 'body'\n\n event_purpose = 'loyalty'\n event_structure = 'body'\n }\n\n /* Evento enviar últimas búsquedas */\n if (target.matches('#shared-search-form .submit')) {\n event_act = 'send last search'\n event_lbl = 'mail'\n event_purpose = 'booking'\n event_structure = 'popup'\n }\n\n if (!event_act.length) return\n sendUtagEvent({\n data: {\n event_name,\n event_cat,\n event_act,\n event_lbl,\n event_purpose,\n event_structure,\n },\n })\n },\n })\n}\n","export const LAST_SEARCHES_LOADED_EVENT = 'last-searches:loaded'\n","/* eslint-disable */\n\nimport '../../vendors/template_engine/template_engine'\nimport Modal from '../../shared/modal/modal'\nimport dayjs from 'dayjs'\nimport customParseFormat from 'dayjs/plugin/customParseFormat'\nimport _filter from 'lodash/filter'\n\nimport { readCookie } from '../../../../frontend/src/utils/cookie_manager'\nimport { currentDevice } from '../../core/utils/currentDevice'\nimport { getPrefix } from '../../core/utils/locale.js'\n//import Fastbooking from '../fastbooking/fastbooking'\nimport { fillSearches, getLastSearches, PLACEHOLDER_IMAGE } from '../last_searches/last_searches'\nimport { STANDARD_DATE_FORMAT } from '../fastbooking/constants.js'\n\nimport { LAST_SEARCHES_LOADED_EVENT } from './last_searches_cards.constants.js'\n\ndayjs.extend(customParseFormat)\n\nif (currentDevice.isMobile) {\n import(`./last_searches_cards_mobile.scss`)\n} else {\n import(`./last_searches_cards.scss`)\n}\n\nfunction init($container, load_last_search_to_fb) {\n const local_last_searches = getLastSearches({ stringify: true })\n let last_search_keys = []\n if (local_last_searches === '') return\n const last_searches = JSON.parse(local_last_searches)\n last_search_keys = lastSearchToUpdate(last_searches)\n\n const last_searches_shared = readCookie('shared_last_searches')\n\n if (last_searches_shared !== undefined) {\n //Stop to prevent double rendering\n return\n }\n if (last_search_keys.length > 0) {\n fetchLastSearch(last_search_keys, local_last_searches)\n } else if (local_last_searches != null && last_searches_shared === undefined) {\n initWithData(local_last_searches, $('.b-last-searches-cards'), load_last_search_to_fb)\n $('.b-last-searches-cards-home').addClass('show')\n }\n}\nfunction _init($container) {\n const local_last_searches = getLastSearches({ stringify: true })\n local_last_searches && initWithData(local_last_searches, $container)\n}\n\nexport function fetchLastSearch(last_search_keys, local_last_searches) {\n if (local_last_searches !== null) $('.b-last-searches-cards-home').addClass('show')\n const locale_html = document.documentElement.getAttribute('data-js-lang')\n $.ajax({\n dataType: 'JSON',\n type: 'GET',\n url: `/${locale_html}/fetch_last_search/?ids=${last_search_keys.toString()}¤t_locale=${document.documentElement.getAttribute(\n 'data-js-lang'\n )}`,\n cache: true,\n success(searches_info) {\n if (last_search_keys.length > 0) {\n if (local_last_searches !== null) $('.b-last-searches-cards-home').addClass('show')\n fillSearches(searches_info, local_last_searches)\n local_last_searches = getLastSearches({ stringify: true })\n } else {\n //DefaultSearches are not shown anymore\n local_last_searches = fillDefaultSearches(searches_info);\n }\n initWithData(local_last_searches, $('.b-last-searches-cards'), true)\n },\n })\n}\n\nfunction lastSearchToUpdate(last_searches) {\n const last_searches_keys = []\n if (last_searches !== null && last_searches !== undefined) {\n $.each(last_searches, function (i, item) {\n try {\n if (\n item.title.length == 0 ||\n item.description.length == 0 ||\n item.image.length == 0 ||\n item.locale != document.documentElement.getAttribute('data-js-lang')\n ) {\n last_searches_keys.push(item.place_to_go)\n }\n } catch (err) {\n // Si tenemos alguna búsqueda antigua sin esos campos los pedimos\n last_searches_keys.push(item.place_to_go)\n }\n })\n }\n return last_searches_keys\n}\n\nfunction initWithData(last_searches, $container, load_last_search_to_fb) {\n let last_searches_formatted = JSON.parse(last_searches)\n last_searches_formatted = last_searches_formatted.length ? last_searches_formatted : getLastSearches()\n if (!last_searches_formatted.length) return\n // Loading last search into fastbooking if page is home\n // FAS PY06114 TODO: Remove if not needed after fastbooking refactor\n //if (load_last_search_to_fb) Fastbooking.loadLastSearch(last_searches_formatted[last_searches_formatted.length - 1])\n buildCards(last_searches_formatted, $container)\n if (IB.lazyImg !== undefined) IB.lazyImg.addImgToObserver($container)\n}\n\nfunction buildCards(searches, $container) {\n const containerRegular = $container.filter(e => !$($container[e]).hasClass('b-last-searches-cards-home'))\n const containerHome = $container.filter(e => $($container[e]).hasClass('b-last-searches-cards-home'))\n const $flexContainerRegular = $(containerRegular).find('.flex-container')\n const $flexContainerHome = $(containerHome).find('.flex-container')\n const date_format = $('html').data('date-format')\n const template = $('#last-search-card-template').html()\n const modal_data = {}\n let linkerParam = ''\n\n try {\n const tracker = ga.getAll()[0]\n linkerParam = tracker.get('linkerParam')\n } catch (err) {}\n searches = _filter(searches, function (o) {\n return o.search_url\n })\n\n\n if (searches.length > 3) {\n searches = searches.slice(Math.max(searches.length - 3, 1))\n\n }\n\n for (let i = searches.length - 1; i >= 0; i--) {\n const checkInDate = searches[i].check_in_date !== null ? searches[i].check_in_date : undefined\n const checkOutDate = searches[i].check_out_date !== null ? searches[i].check_out_date : undefined\n let dates =\n checkInDate !== undefined\n ? checkOutDate !== undefined\n ? `${dayjs(checkInDate, STANDARD_DATE_FORMAT).format(date_format)} - ${dayjs(checkOutDate, STANDARD_DATE_FORMAT).format(date_format)}`\n : dayjs(checkInDate).format(date_format)\n : undefined\n const url_separator = searches[i].search_url.indexOf('?') >= 0 ? '&' : '?'\n\n dates = searches[i].next_opening == true ? $('#next-opening-copy').data('last-search') : dates\n\n let segmentations_html = ''\n const segmentations = searches[i].segmentations\n if (typeof segmentations !== 'undefined') {\n $.each(segmentations, function (i, value) {\n if (value == null) {\n return segmentations_html\n }\n segmentations_html += `
  • ${value.title}
  • `\n })\n }\n\n const templateOptionsRegular = {\n title: searches[i].title,\n image: searches[i].image || PLACEHOLDER_IMAGE,\n image_class: searches[i].image_class,\n image_alt: searches[i].image_alt,\n image_placeholder_class: searches[i].image_placeholder_class,\n url: buildSharedUrl(searches[i].search_url, url_separator, linkerParam),\n index: i,\n dates,\n place_title: searches[i].place_title,\n segmentations: segmentations_html,\n locale: document.documentElement.getAttribute('data-js-lang'),\n utag_title: searches[i].title\n .toLowerCase()\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .replace(/[^\\w\\s]/gi, ''),\n }\n const categoryTag = searches[i].category ? `` : ''\n const templateOptionsHome = {\n ...templateOptionsRegular,\n title: searches[i].place_title ? searches[i].place_title + categoryTag : searches[i].title,\n image: null,\n image_class: null,\n image_alt: null,\n image_placeholder_class: null,\n }\n modal_data[i] = {\n title: searches[i].title,\n image: searches[i].image,\n image_class: searches[i].image_class,\n image_alt: searches[i].image_alt,\n image_placeholder_class: searches[i].image_placeholder_class,\n url: buildSharedUrl(searches[i].search_url, url_separator, linkerParam),\n place_title: searches[i].place_title,\n description: searches[i].description,\n }\n if (searches[i].search_url !== undefined && searches[i].search_url.length > 0) {\n /**\n * When mobile menu shows $flexContainerHome's content is already loaded. This condition prevents\n * content duplication.\n */\n if (\n !$flexContainerRegular[0] ||\n $flexContainerHome[0]?.childElementCount === $flexContainerRegular[0]?.childElementCount\n )\n $flexContainerHome.append(TemplateEngine(template, templateOptionsHome))\n $flexContainerRegular.append(TemplateEngine(template, templateOptionsRegular))\n }\n }\n\n if ($('.last-search-card').length > 0) {\n $container.removeClass('hidden')\n }\n\n activeSharedButton(modal_data)\n\n const searchesLoaded = new Event(LAST_SEARCHES_LOADED_EVENT)\n window.dispatchEvent(searchesLoaded)\n}\n\nfunction buildSharedUrl(search_url, url_separator, linkerParam) {\n return `${window.location.origin + getPrefix()}/shared/${search_url}${url_separator}${linkerParam}`\n}\n\nfunction getMobileOperatingSystem() {\n // Credit: Ryan kulp @ https://www.quora.com/Has-anyone-successfully-preset-body-copy-within-a-tap-to-SMS-link/answer/Ryan-Kulp\n const userAgent = navigator.userAgent || navigator.vendor || window.opera\n\n if (userAgent.match(/iPad/i) || userAgent.match(/iPhone/i) || userAgent.match(/iPod/i)) {\n return 'ios'\n }\n if (userAgent.match(/Android/i)) {\n return 'android'\n }\n return 'non-mobile or unknown'\n}\n\n/**\n *\n * @param element\n * $text_to_copy: can be the inner text or the data-clipboard-text of selector\n $el_to_append: is the element where we append the hidden input from which we get value to copy.\n If element where we click to launch this functionality is a fancybox modal, we must append it to the modal itself.\n If not, we can append it to the body\n */\nfunction copyToClipboard(element) {\n const $text_to_copy = $(element).data('clipboard-text')\n\n if (!$text_to_copy.length) return\n\n const $el_to_append = $(element).closest('.fancybox-container').length\n ? $(element).closest('.fancybox-container')\n : $(body)\n const $temp = $(\"\")\n\n $el_to_append.append($temp)\n $temp.val($text_to_copy).trigger('select')\n document.execCommand('copy')\n $temp.remove()\n}\n\nfunction activeSharedButton(modal_data) {\n const is_mobile = IB.currentDevice === 'mobile'\n\n $('.shared-block .last-search-card, .last-search-card .shared').on('click', function (e) {\n e.preventDefault()\n const $el = $(this).hasClass('shared') ? $(this).closest('.last-search-card') : $(this)\n const $a = $el.find('.shared')\n const $block = $($a[0].hash) // Window template\n const index = $el.data('index')\n\n $('#burgermenu-blocker:visible').trigger('click')\n\n Modal.show('shared-block', {\n onShow: () => {\n const template = $('#modal-desc-card-template').html()\n const data_index = $el.closest('.last-search-card').data('index')\n const data = modal_data[data_index]\n const $desc_cnt = $block.find('.desc-cnt')\n\n $('#shared-block').attr('index', index)\n $desc_cnt.find('.desc-card').remove()\n $block.find('.desc-cnt').append(TemplateEngine(template, data))\n\n $block.find('#shared-subject-title').val(data.title)\n\n $('.shared-block .desc-cnt .desc-card .desc-title .shared-searches-title').closest('.desc-title').hide()\n $('.shared-block .desc-cnt .desc-card .desc.desc-share').hide()\n $('.shared-block .desc-cnt .mobile-title.share-page').hide()\n\n if (!is_mobile) {\n $('.shared-block .social-share-list').show()\n $('.shared-block .form-cnt').hide()\n }\n\n IB.socialShareBuilder.shareTwitter($('.shared-block'), data)\n IB.socialShareBuilder.shareFacebook($('.shared-block'), data)\n IB.socialShareBuilder.shareByEmail($('.shared-block'), data)\n },\n onClose: () => {\n },\n awaitCloseAnimation: true,\n })\n })\n .on('click', '.b-last-searches-cards .last-search-card', function (e) {\n $(this).find('.l-external').trigger('click')\n })\n .on(\n 'click',\n '.b-last-searches-cards .last-search-card .shared, .b-last-searches-cards .last-search-card .l-external',\n function (e) {\n e.stopPropagation()\n }\n )\n .on('click', '.shared-block .mobile-only .js-share-email', function (e) {\n showFormMobile()\n })\n .on('click', '.shared-block .come-back-btn', function () {\n if (IB.currentDevice !== 'mobile') return\n hideFormMobile()\n })\n}\n\nfunction showFormMobile() {\n $('.shared-block').find('.desc-cnt').addClass('hidden')\n $('.shared-block').find('.share-list').hide()\n $('.shared-block').find('.desc-cnt').hide()\n $('.shared-block').find('.share-page').addClass('hidden')\n $('.shared-block').find('.form-cnt').show()\n}\n\nfunction hideFormMobile() {\n $('.shared-block').find('.desc-cnt').removeClass('hidden')\n $('.shared-block').find('.share-list').show()\n $('.shared-block').find('.desc-cnt').show()\n $('.shared-block').find('.share-page').removeClass('hidden')\n $('.shared-block').find('.form-cnt').hide()\n}\n\nwindow.IB.lastSearchesCards = {\n init,\n getMobileOperatingSystem,\n}\n\ndocument.addEventListener('DOMContentLoaded', () => {\n const $b_last_searches_cards = $('.b-last-searches-cards')\n\n if (!$b_last_searches_cards.length) return false\n IB.lastSearchesCards.init($b_last_searches_cards, true)\n})\n","export default function initTemplate(html, options) {\n const re = /{{([^}}]+)?}}/g\n const reExp = /(^( )?(if|for|else|switch|case|break|{|}))(.*)?/g\n let code = 'var r=[];\\n'\n let cursor = 0\n let match\n const add = function (line, js) {\n js\n ? (code += line.match(reExp) ? `${line}\\n` : `r.push(${line});\\n`)\n : (code += line !== '' ? `r.push(\"${line.replace(/\"/g, '\\\\\"')}\");\\n` : '')\n return add\n }\n while ((match = re.exec(html))) {\n add(html.slice(cursor, match.index))(match[1], true)\n cursor = match.index + match[0].length\n }\n add(html.substr(cursor, html.length - cursor))\n code += 'return r.join(\"\");'\n return new Function(code.replace(/[\\r\\t\\n]/g, '')).apply(options)\n}\n\nwindow.TemplateEngine = initTemplate\n"],"names":["STANDARD_DATE_FORMAT","FASTBOOKING_EVENTS","FASTBOOKING_READY","SET_DESTINATION","SET_PROMOCODE","HIDE_FASTBOOKING","SHOW_FASTBOOKING","OPEN_HIDDEN_FASTBOOKING","CLOSE_HIDDEN_FASTBOOKING","OPEN_DATES","OPEN_OCCUPANCY","OPEN_PROMOCODE","SET_DATES","SET_OCCUPANCY","STATE_UPDATED","CLOSE_PANELS","FASTBOOKING_ACTIVE","FASTBOOKING_INACTIVE","RESET_PROMOCODE","PROMOCODE_IS_VALID","SET_PANELS_OFFSET_TOP","REMOVE_PANELS_OFFSET_TOP","IBH_FASTBOOKING_EVENTS","STICKY_FASTBOOKING","NO_STICKY_FASTBOOKING","OPEN_STICKY_FASTBOOKING","CLOSE_STICKY_FASTBOOKING","SHOW_BANNER","UtagEvents","HotelTab","FlightHotelTab","Dates","Destination","Promocode","PromocodeValidation","PromocodeFocused","Occupancy","ConfirmOccupancy","FlexibleDates","ScrollToFastbookig","Submit","AddMoreRooms","object","properties","Object","keys","filter","property","includes","reduce","obj","dayjs","customParseFormat","isSameOrAfter","on","eventName","selector","handler","event","target","event_act","event_lbl","event_purpose","event_structure","matches","event_zone","closest","document","body","classList","contains","length","sendUtagEvent","data","event_name","event_cat","LAST_SEARCH_DATE_FORMAT","LOCALSTORAGE_SEARCHES_ID","PLACEHOLDER_IMAGE","loadDataLastSearches","item","query","title","documentElement","getAttribute","queryDefaultValues","place_to_go","checkInDate","check_in_date","checkOutDate","check_out_date","replaceAll","format","join","getDates","rooms","forEach","room","numberAdults","number_adults","numberKids","number_kids","childAges","JSON","stringify","kidsAges","replace","push","getRooms","promoCode","undefined","getPromocode","createSearchUrl","removeOldSearches","searches","slice","removeDatesFromExpiredSearches","map","search","today","checkInDateIsValid","isAfter","isSearchValid","prototype","hasOwnProperty","call","removeRepeatedSearches","propertiesToCompare","index","self","currentObj","filterObjectProperties","findIndex","currentSearch","fillSearches","searches_info","last_searches","local_last_searches","parse","current_place","toString","search_info_title","description","search_info_description","image","search_info_image","search_info_image_desktop","image_desktop","search_info_image_tablet","image_tablet","search_info_image_mobile","image_mobile","search_info_hotel_category","category","search_info_megabanner_description","summary","image_alt","search_info_image_alt","place_title","search_info_place_title","next_opening","search_info_next_opening","path","search_info_path","segmentations","search_info_hotel_segmentations","locale","lastSearches","localStorage","setItem","resetSearchesWith","getLastSearches","arguments","getItem","e","console","error","updateLastSearches","callback","lang","last_searches_ids","fetch","then","response","json","catch","cleanLastSearches","last_searches_shared","readCookie","last_search_keys","split","$","ajax","dataType","type","url","cache","success","share_searches","places_to_go","each","i","share_search","info","IB","cookieManager","deleteCookies","fetchLastSearch","save_last_search_shared_by_cookie","LAST_SEARCHES_LOADED_EVENT","addClass","locale_html","fillDefaultSearches","initWithData","$container","load_last_search_to_fb","last_searches_formatted","containerRegular","hasClass","containerHome","$flexContainerRegular","find","$flexContainerHome","date_format","template","html","modal_data","linkerParam","ga","getAll","get","err","_filter","o","search_url","Math","max","dates","url_separator","indexOf","segmentations_html","value","class","templateOptionsRegular","image_class","image_placeholder_class","buildSharedUrl","utag_title","toLowerCase","normalize","categoryTag","templateOptionsHome","childElementCount","append","TemplateEngine","removeClass","is_mobile","currentDevice","preventDefault","$el","this","$a","$block","hash","trigger","Modal","show","onShow","data_index","$desc_cnt","attr","remove","val","hide","socialShareBuilder","shareTwitter","shareFacebook","shareByEmail","onClose","awaitCloseAnimation","stopPropagation","activeSharedButton","searchesLoaded","Event","window","dispatchEvent","buildCards","lazyImg","addImgToObserver","location","origin","getPrefix","isMobile","lastSearchesCards","init","last_searches_keys","lastSearchToUpdate","getMobileOperatingSystem","userAgent","navigator","vendor","opera","match","addEventListener","$b_last_searches_cards","initTemplate","options","re","reExp","code","cursor","add","line","js","exec","substr","Function","apply"],"sourceRoot":""}