1class KVueEvent{constructor(){this.events={};} 2on(eventName,fn){this.events[eventName]=this.events[eventName]||[];this.events[eventName].push(fn);} 3off(eventName){if(this.events[eventName]){for(var i=0;i<this.events[eventName].length;i++){if(this.events[eventName][i]){this.events[eventName].splice(i,1);break;}};}} 4trigger(eventName,data){if(this.events[eventName]){this.events[eventName].forEach(function(fn){fn(data);});}}} 5const ARRAY_TRIGGER=1;const ARRAY_ALWAYS_ADD=2;const ARRAY_ALWAYS_REMOVE=3;var vuetify;if(typeof Vuetify!=='undefined'){vuetify=Vuetify.createVuetify();} 6var delimiters=['${','}$'];var itemsPerChunk=8;var timer=0;var lists=[];document.querySelectorAll("[id$='_list']").forEach(selector=>{let options=Object.assign({},selector.dataset);if(!options.contentType){options.contentType=selector.id.split('_')[0];} 7if(!options.endPoint){options.endPoint=options.contentType;} 8loadList('#'+selector.id,options);});function loadList(elementId,options){var list=Vue.createApp({delimiters:delimiters,endPoint:ROOT_URL+language+'/getjson/list/'+options.endPoint,isAjax:false,isDebugMode:true,postParameters:{},contentType:options.contentType,elements:{data:[],itemsPerChunk:8},data:function(){return{isLoaded:false,mapData:[],searchData:[],filterableElements:[],groupedFilterableElements:{},defaultActiveFilters:[],orderableElements:[],groupedOrderableElements:{},defaultOrderableElements:[],filtereds:[],total:0,totalIds:[],map:{markers:[]},search:{toSearch:'',timer:0,result:[]},loading:{temp:false,def:false},loadedChunks:0,forceUpdateTrigger:0,activeFilters:Vue.reactive({data:{temp:[],def:[]},keys:{temp:[],def:[]},halfCheckedParents:{temp:[],def:[]},sortingType:{temp:{},def:{}},availability:{loading:{temp:false,def:false},occupancies:{number:1,data:[{roomsNumber:1,adultsNumber:2,childrenAges:[]}]},dateFrom:{temp:null,def:null},dateTo:{temp:null,def:null},ids:{temp:null,def:null},isset:false,onlyAvailables:true,hashKey:0,accommodationType:''},filtersNumber:0,query:'',}),map:{isShown:false,markers:[]},editmode:{},multipleRequest:{targetIds:[],isManualSelectionMode:false}}},beforeMount:function(){this.handleFirstScroll();let self=this;this.generalSettings();this.loading.def=true;this.log('(beforeMount): Calling <setData>');this.setData().then((response)=>{self.loading.def=false;self.postFirstLoad();});},mounted:function(){let self=this;this.$bus.on('loaded',()=>{this.createDatePickers();})},watch:{'multipleRequest.targetIds':{handler(newValue,oldValue){let hotelInfoRequestModalForm=document.querySelector('#hotel_info_request_modal_form');if(hotelInfoRequestModalForm){let hotelInfoRequestModal=hotelInfoRequestModalForm.closest('.contentWindow');hotelInfoRequestModal.querySelector('.information-header').classList.remove('d-none');let hotelInfoRequestModalFormTargetIdsField=hotelInfoRequestModalForm.querySelector('[name=targetIds]');if(hotelInfoRequestModalFormTargetIdsField){hotelInfoRequestModalForm.querySelector('[name=targetIds]').value=newValue.join(', ');if(newValue.length===1){hotelInfoRequestModal.querySelector('.send-label-email').textContent=newValue.length+' '+labels['LBL_STRUTTURA'];}else if(newValue.length>1){hotelInfoRequestModal.querySelector('.send-label-email').textContent=newValue.length+' '+labels['LBL_STRUTTURE'];}}}},deep:true},'search.toSearch'(newValue,oldValue){let self=this;if(this.search.toSearch.length<3){this.search.result=[];return;} 9this.search.loading=true;clearTimeout(this.search.timer);this.search.timer=setTimeout(function(){self.getSearchData(self.search.toSearch).then((data)=>{self.search.loading=false;self.search.result=data.data;if(typeof tr!=='undefined'&&tr!==null){let type=self.getTrackingContentType();tr.track('K_filtro_'+type+'_testuale',{event_label:self.toSearch+' - '+self.search.result.length});}})},500);}},computed:{filtersRealTimeResults(){this.log('(filtersRealTimeResults)');this.forceUpdateTrigger;let self=this;let dataResult=this.$options.elements.data;if(this.activeFilters.query!==''){dataResult=dataResult.filter(elem=>eval(self.activeFilters.query));} 10dataResult=this.applyRuntimeChanges(dataResult);let dataResultLength=dataResult.length;if(this.isAjax()){dataResultLength=this.total;} 11return{occurrences:dataResultLength,label:(dataResultLength>0)?labels['LBL_OK_APPLICA_FILTRI']+' ('+dataResultLength+' '+((dataResultLength>1)?labels['LBL_RISULTATI']:labels['LBL_RISULTATO'])+')':labels['LBL_NON_CI_SONO_RISULTATI_PER_I_FILTRI_SELEZIONATI'],data:dataResult};},currentLoadedChunks(){this.log('(currentLoadedChunks)');var result=[];let items=this.clone(this.filtereds);if(!items.length){items=this.getNoResultsElements();} 12if(!this.isAjax()){items=this.getSortedElements(items);} 13let chunks=doChunks(items,this.$options.elements.itemsPerChunk);for(let i=0;i<=this.loadedChunks;i++){if(chunks[i]){result=result.concat(chunks[i]);}} 14return result;},areAllElementsShown(){if(this.isAjax()){return!this.total||this.currentLoadedChunks.length>=this.total;}else{return this.loadedChunks+1>=this.filtereds.length / this.$options.elements.itemsPerChunk;}},isDatesFilterValid(){let dateFrom=this.activeFilters.availability.dateFrom.temp;let dateTo=this.activeFilters.availability.dateTo.temp;return dateFrom&&dateTo;},isAvailabilitiesFiltersActive(){if(this.activeFilters.availability.dateFrom.def&&this.activeFilters.availability.dateTo.def){return true;} 15return false;},rangeSlidersActiveFilters(){let result={};this.activeFilters.data.temp.filter(filter=>filter.type==='range').forEach((activeFilter)=>{result[activeFilter.fieldName]=activeFilter;}) 16return result;},hasSideFilters(){return!!this.filterableElements.find(filterableElement=>filterableElement.group==='specific');}},methods:{getContentType(){return this.$options.contentType;},log(){if(this.$options.isDebugMode){console.log(...arguments);}},postFirstLoad(){this.setDatesFromSession();this.setRoomsDataFromSession();this.generateActiveFiltersFromUrl();this.recalculateFiltersKeys();this.forceUpdateTrigger++;if(this.activeFilters.data.temp.length){this.log('(postFirstLoad): detected filters from URL at first load. Applying them');this.applyFilters();}else{this.applyData();} 17this.$bus.on('loaded',()=>{window.dispatchEvent(new CustomEvent('jsDataLoaded'));this.applyLoadMoreObserver();})},getSortedElements(elements){if(this.isAjax()){return elements;} 18return elements;},addOccupancy(){this.activeFilters.availability.occupancies.data.push({roomsNumber:1,adultsNumber:2,childrenAges:[]});this.activeFilters.availability.occupancies.number++;}
18,removeOccupancy(index){if(typeof this.activeFilters.availability.occupancies.data[index]!=='undefined'){this.activeFilters.availability.occupancies.data.splice(index,1);} 19this.activeFilters.availability.occupancies.number--;},prepareOccupancyChildren(index,newChildrenNumber){index--;if(typeof this.activeFilters.availability.occupancies.data[index]==='undefined'){return;} 20let currentChildrenAges=this.activeFilters.availability.occupancies.data[index].childrenAges.length;if(newChildrenNumber<currentChildrenAges){this.activeFilters.availability.occupancies.data[index].childrenAges=this.activeFilters.availability.occupancies.data[index].childrenAges.slice(0,newChildrenNumber);} 21let newChildren=new Array(newChildrenNumber-this.activeFilters.availability.occupancies.data[index].childrenAges.length).fill(0);this.activeFilters.availability.occupancies.data[index].childrenAges=this.activeFilters.availability.occupancies.data[index].childrenAges.concat(newChildren);},async setHotelsAvailability(){let availabilityFilter=this.activeFilters.data.temp.find(f=>f.category==='dates');if(!availabilityFilter){return;} 22this.log('(setHotelsAvailability): Detected dates filter. Setting availabilities first ('+this.getContentType()+')');let self=this;let accommodationType=this.activeFilters.availability.accommodationType??'';let availabilityData=this.activeFilters.availability;if(availabilityData.occupancies.number===0){return;} 23this.activeFilters.availability.loading.def=true;let dateFrom=new Date(availabilityFilter.data.from);let dateTo=new Date(availabilityFilter.data.to);let postParameters={occupancies:[]};availabilityData.occupancies.data.forEach(occupancy=>
23{postParameters.occupancies.push({"dateFrom":dateFrom.getIsoFormat(),"dateTo":dateTo.getIsoFormat(),'units':parseInt(occupancy.roomsNumber),"nAdults":parseInt(occupancy.adultsNumber),"children":occupancy.childrenAges,"accommodationType":accommodationType});});this.log('(setHotelsAvailability) Calling '+ROOT_URL+'getHotelsAvailability'+' to retrieve available accommodations between '+dateFrom.getIsoFormat()+' and '+dateTo.getIsoFormat());const data=await asynchronousRequest(ROOT_URL+'getHotelsAvailability','POST',postParameters);this.activeFilters.availability.loading.def=false;if(!data.result||!data.result.disponibilita||!data.result.disponibilita.length){this.log('(setHotelsAvailability): Availability request has returned NO results. No elements will be shown in available elements.');this.$options.elements.data=this.$options.elements.data.map(element=>{element.available=false;return element;});this.filterableElements=this.filterableElements.filter(filterGroup=>filterGroup.name!=='mealCode');if(this.isAjax()){this.$options.postParameters.availableIds=[];} 24return[];} 25let activeMealCodeFilters=this.activeFilters.data.temp.filter(activeFilter=>activeFilter.category==='dynamicMealCode').map(activeFilter=>activeFilter.data);if(activeMealCodeFilters.length){data.result.disponibilita=data.result.disponibilita.filter(availabilityElement=>activeMealCodeFilters.includes(availabilityElement.mealCode));} 26let availableIds=data.result.disponibilita.map(availabilty=>availabilty.id);let mealCodes=data.result.disponibilita.map(element=>element.mealCode).unique();self.generateMealCodeFilter(mealCodes);let nightsNumber=diffInDays(dateFrom,dateTo);this.log('(setHotelsAvailability): Availability request has returned some results. This valid IDs will be shown in available elements:',availableIds);if(!this.isAjax()){this.$options.elements.data=this.$options.elements.data.map(element=>{if(availableIds.includes(element.importId)){element.available=dateFrom.getIsoFormat()+''+dateTo.getIsoFormat();}else{element.available=false;} 27return element;});}else{this.$bus.on('postSetData',()=>{this.$options.elements.data=this.$options.elements.data.map(element=>{if(availableIds.includes(element.importId)){let elementAvailability=data.result.disponibilita.find(availability=>availability.id===element.importId);element.available=dateFrom.getIsoFormat()+''+dateTo.getIsoFormat();element.basePrice=elementAvailability.totalPrice;element.basePrice=Math.round(element.basePrice);element.basePricePerNight=Math.round(elementAvailability.totalPrice / nightsNumber);element.availableDescriptiveBasePrice='';if(element.basePricePerNight===0){element.availableDescriptiveBasePrice=labels['LBL_GRATUITO'];}else{element.availableDescriptiveBasePrice=labels['LBL_A_PARTIRE_DA']+' '+element.basePricePerNight+' â¬';} 28element.mealCode=elementAvailability.mealCode;if(element.mealCode){element.mealCodeLabel=labels['LBL_MEALCODE_'+element.mealCode.toUpperCase()]??'LBL_MEALCODE_'+element.mealCode.toUpperCase();}}else{element.available=false;} 29return element;});})} 30if(!this.isLoaded){this.generateActiveFiltersFromUrl();} 31this.forceUpdate();this.$options.postParameters.availableIds=availableIds;},getElementAllAvailableDates(element){let result=[];if(!element.availabilities){return result;} 32element.availabilities.forEach((availability)=>{let allDates=getDatesRange(new Date(availability.dateFrom),new Date(availability.dateTo));if(availability.days.length){try{allDates=allDates.filter(date=>availability.days.includes(date.getDayName('en')));}catch(ex){}} 33result=result.concat(allDates);}) 34return result;},generateMealCodeFilter(mealCodes){let mealCodesFilterableElement={asParentChild:false,data:mealCodes.map(mealCode=>{return{fieldName:'mealCode',key:mealCode,type:'field',value:labels['LBL_MEALCODE_'+mealCode]??mealCode}}),group:'specific',name:'dynamicMealCode',operator:'OR',type:'tag',title:labels['LBL_MEALCODE']};if(!mealCodesFilterableElement.data.length){return;} 35let lastTriggeredFilter=this.activeFilters.data.temp.last();if(lastTriggeredFilter&&lastTriggeredFilter.category==='dynamicMealCode'){return;} 36let existingMealCodeFilter=this.filterableElements.find(filterGroup=>filterGroup.name==='dynamicMealCode');if(existingMealCodeFilter){existingMealCodeFilter.data=mealCodesFilterableElement.data;}else{this.filterableElements.push(mealCodesFilterableElement);} 37this.groupedFilterableElements=this.clone(this.filterableElements).groupBy
37Field('group');},triggerFilter(category,filterObject,options={}){let mode=options.mode??1;let radio=options.radio??false;let categoryLabel=options.categoryLabel??'';let filter={category:category,type:filterObject.type,fieldName:filterObject.fieldName,data:filterObject.key,parent:filterObject.parent,label:filterObject.value,categoryLabel:categoryLabel,operator:filterObject.operator};if(radio){this.unsetFilterCategory(category);this.activeFilters.data.temp.push(filter);}else{this.activeFilters.data.temp.trigger(filter,mode);} 38this.activeFilters.halfCheckedParents.temp.trigger(category+'-'+filterObject.key,3);this.recalculateFiltersKeys();},calculateFiltersNumber(){return Object.keys(this.activeFilters.data.def.groupByField('category')).length;},triggerRecursiveFilter(category,filterObject,options={}){this.triggerFilter(category,filterObject,options);this.triggerChildrenHierarchy(category,filterObject,this.activeFilters.keys.temp.includes(category+'-'+filterObject.key)?2:3);},triggerChildrenHierarchy(category,filterObject,mode){let self=this;if(!filterObject.hasOwnProperty('nodes')){return;} 39filterObject.nodes.forEach(nodeElement=>{nodeElement.data.forEach(node=>{self.triggerFilter(category,node,{mode:mode});self.triggerChildrenHierarchy(category,node,mode);})});},checkAllHierarchy(category,filterObject){if(!filterObject.hasOwnProperty('nodes')){return;} 40let self=this;let totalNodes=0;let checkedNodes=0;filterObject.nodes.forEach(nodeElement=>{nodeElement.data.forEach(node=>{self.checkAllHierarchy(category,node);totalNodes++;if(self.activeFilters.keys.temp.includes(category+'-'+node.key)){checkedNodes++;}})});let halfCheckedMode=3;if(totalNodes===checkedNodes){this.triggerFilter(category,filterObject,{mode:ARRAY_ALWAYS_ADD});}else{this.triggerFilter(category,filterObject,{mode:ARRAY_ALWAYS_REMOVE});if(checkedNodes>0){halfCheckedMode=2;}} 41this.activeFilters.halfCheckedParents.temp.trigger(category+'-'+filterObject.key,halfCheckedMode);this.recalculateFiltersKeys();},triggerDatesFilter(category){if(!this.activeFilters.availability.dateFrom.temp||!this.activeFilters.availability.dateTo.temp){return;} 42let dateFrom=new Date(this.activeFilters.availability.dateFrom.temp);let dateTo=new Date(this.activeFilters.availability.dateTo.temp);
42if(!dateTo.isValid(false)||!dateTo.isValid(false)){return;} 43let filter={category:category,type:'dates',data:{from:dateFrom.getIsoFormat(),to:dateTo.getIsoFormat(),occupancies:this.activeFilters.availability.occupancies}};let occurrence=this.activeFilters.data.temp.findIndex(a=>a.category===category);if(occurrence!==-1){this.activeFilters.data.temp.splice(occurrence,1);} 44this.activeFilters.data.temp.push(filter);},recalculateFiltersKeys(){this.activeFilters.keys.temp=this.activeFilters.data.temp.map(filter=>filter.category+'-'+filter.data);},applyFilters(applyData=true){let self=this;let tempDefValue=applyData?'def':'temp';this.loading[tempDefValue]=true;this.log('(applyFilters): Calling <setData>');this.setData({append:false}).then((response)=>{self.setActiveFiltersQuery();self.forceUpdate();if(response.mapData&&Array.isArray(response.mapData)){self.mapData=response.mapData;} 45if(applyData){self.$nextTick(()=>{self.applyData();})} 46let fakeTimeout=this.isAjax()?0:200;setTimeout(()=>{self.loading[tempDefValue]=false;},fakeTimeout);}).catch((reject)=>{this.log('reject',reject);});},applyData(){this.log('(applyData)');let self=this;this.activeFilters.keys.def=this.clone(this.activeFilters.keys.temp);this.activeFilters.data.def=this.clone(this.activeFilters.data.temp);this.activeFilters.availability.dateFrom.def=this.activeFilters.availability.dateFrom.temp;this.activeFilters.availability.dateTo.def=this.activeFilters.availability.dateTo.temp;this.activeFilters.sortingType.def=Object.assign({},Vue.toRaw(this.activeFilters.sortingType.temp));this.activeFilters.availability.ids.def=this.activeFilters.availability.ids.temp;if(this.isLoaded){this.loadedChunks=0;} 47this.filtereds=this.clone(this.filtersRealTimeResults.data);this.activeFilters.filtersNumber=this.calculateFiltersNumber();if(this.isLoaded){this.generateUrlFromActiveFilters();this.scrollIntoList();} 48this.trackFilters();this.postApplyData();if(!this.isLoaded){this.$nextTick(()=>{this.isLoaded=true;this.$bus.trigger('loaded');WB.loadWeatherSwiper();})}},async getSearchData(searchText){return new Promise(async(resolve,reject)=>{if(!searchText||searchText.length<3){resolve([]);return;} 49if(!this.isAjax()){let notAjaxResult=this.filtereds.filter(f=>{f.score=0;toSearch.forEach(function(v){f.score+=(f.title&&f.title.toLowerCase().includes(v))?2:0;f.score+=(f.shortDescription&&f.shortDescription.toLowerCase().includes(v))?1:0;});return f.score>0;}).sort((a,b)=>b.score-a.score);resolve(notAjaxResult);}else{let postParameters=Object.assign({},this.$options.postParameters);if(!postParameters.activeFilters){postParameters.activeFilters=[];} 50postParameters.activeFilters=postParameters.activeFilters.filter(activeFilter=>!activeFilter.type.includes('search'));postParameters.activeFilters.push({type:'search',data:searchText});postParameters.toSearch=searchText;postParameters.limit=10;const data=await asynchronousRequest(this.$options.endPoint,'POST',postParameters);resolve(data);}})},async trackFilters(all=false){let self=this;let filtersToTrack=this.activeFilters.data.def;if(!all){filtersToTrack=[filtersToTrack.last()];} 51if(filtersToTrack.empty()){return;} 52filtersToTrack=Object.entries(filtersToTrack.groupByField('fieldName'));let trackingContentType=this.getTrackingContentType();let trackingData=[];filtersToTrack.forEach(value=>{let category=value[0];let filters=value[1];filters.forEach(filter=>{let trackingElement={action:'K_filtro_'+trackingContentType,label:filter.data,dimensions:{}};switch(filter.category){case'ES_':trackingElement.action='K_filtro_esperienze_tipologia';break;case'R_':trackingElement.action='K_filtro_'+trackingContentType+'_localita';break;case'AC_':trackingElement.action='K_filtro_alloggi_tipologia';break;case'CL_':trackingElement.action='K_filtro_alloggi_stelle';break;case'R_':trackingElement.action='Località '+trackingContentType;break;default:break;} 53if(trackingElement.action){trackingData.push(trackingElement);}});});trackEvents(trackingData);},async setData(options={}){if(sessionStorage.getItem('events-and-experiencesFiltereds')&&this.$options.endPoint.includes("events-print")){var dataToLoad=JSON.parse(sessionStorage.getItem('events-and-experiencesFiltereds'));this.$options.elements.data=dataToLoad;this.$options.elements.itemsPerChunk=dataToLoad.length;this.$options.isAjax=false;this.$bus.trigger('postSetData');this.postSetData();setTimeout(()=>{window.print();},1000);return this.getElements();} 54let self=this;let append=options.append??false;if(this.isAjax()&&append){this.$options.postParameters.offset+=this.$options.elements.itemsPerChunk;}else{this.$options.postParameters.offset=0;} 55return new Promise(async(resolve,reject)=>{this.log('(setData): calling <preSetData> for pre process hooks');await this.preSetData();if(!this.isAjax()&&this.isLoaded){this.log('(setData): Not AJAX. Calling <postSetData> for post process hooks first');this.$bus.trigger('postSetData');this.postSetData();this.log('(setData): Not AJAX. Resolving');resolve(this.getElements());return;} 56let postParameters=Object.assign({},self.$options.postParameters);if(self.isAjax()&&!self.isLoaded){let loadedChunksFromUrl=getRequestParam
56s(false).loadedChunks;if(loadedChunksFromUrl&&parseInt(loadedChunksFromUrl)>0){postParameters.limit=self.$options.postParameters.limit*(parseInt(loadedChunksFromUrl)+1);self.log('(setData): this is the first load and loadedChunks parameter was found in url with value '+loadedChunksFromUrl+'. Limit goes to '+postParameters.limit);}} 57const data=await asynchronousRequest(self.$options.endPoint,'POST',postParameters);if(!data.data){resolve([]);return;} 58data.data=self.processData(data);if(append){this.addElements(data);}else{this.setElements(data);} 59if(data.filterableElements&&Array.isArray(data.filterableElements)){if(this.filterableElements.length===0){this.filterableElements=data.filterableElements;}else{let dynamicFilterableElements=data.filterableElements.filter(filterableElement=>filterableElement.type.startsWith('dynamic'));dynamicFilterableElements.forEach(dynamicFilterableElement=>{let existingDynamicFilterableElement=this.filterableElements.find(existingFilterableElement=>existingFilterableElement.type===dynamicFilterableElement.type);if(existingDynamicFilterableElement){existingDynamicFilterableElement.data=dynamicFilterableElement.data;}});} 60this.groupedFilterableElements=this.filterableElements.groupByField('group');} 61if(data.orderableElements&&this.orderableElements.length===0){this.orderableElements=data.orderableElements;this.groupedOrderableElements=data.orderableElements.groupByField('group');} 62if(data.defaultActiveFilters&&data.defaultActiveFilters.length>0){this.defaultActiveFilters=data.defaultActiveFilters;} 63this.log('(setData): triggering <postSetData> for post process hooks');this.$bus.trigger('postSetData');this.postSetData();resolve(data);});},processData(data){let elements=this.clone(data.data);switch(this.getContentType()){default:break;} 64return elements;},triggerValidFilters(category,filtersHierarchy,validKeys){let self=this;filtersHierarchy.data.forEach(filterObject=>
64{if(validKeys.includes(String(filterObject.key))){self.triggerRecursiveFilter(category,filterObject,{mode:ARRAY_ALWAYS_ADD,radio:filtersHierarchy.viewType==='radio'});} 65if(filterObject.hasOwnProperty('nodes')){filterObject.nodes.forEach(node=>{self.triggerValidFilters(category,node,validKeys);})} 66self.checkAllHierarchy(category,filterObject);});},generateActiveFiltersFromUrl(){let self=this;Object.entries(getRequestParams(false)).forEach(filter=>{let category=filter[0];if(category==='loadedChunks'&&parseInt(filter[1])>0){self.loadedChunks=parseInt(filter[1]);return;} 67if(category==='map'&&filter[1]==='true'){this.$bus.on('mapMarkersSet',()=>{this.$nextTick(()=>{if(document.querySelector('.showMap')){document.querySelector('.showMap').click();this.log('(generateActiveFiltersFromUrl): detected "map" field in URL and the class is completely loaded. Activating map');}else{this.log('(generateActiveFiltersFromUrl): detected "map" field in URL and the class is completely loaded BUT the button to activate the map was not found.');} 68this.$bus.off('mapMarkersSet',()=>{});});}) 69return;} 70if(this.map.isShown){result.push('map=true');} 71let values=filter[1].split('|');let categoryOccurrence=self.filterableElements.find(f=>f.name==category);if(!categoryOccurrence){return;} 72if(categoryOccurrence.type!=='dates'){values[0]=values[0].slice(values[0].lastIndexOf('-')+1);} 73if(categoryOccurrence.type==='dates'){if(new Date(values[0]).isValid(this.canManageOnlyFutureDates())&&new Date(values[1]).isValid(this.canManageOnlyFutureDates())){self.activeFilters.availability.dateFrom.temp=values[0];self.activeFilters.availability.dateTo.temp=values[1];self.triggerDatesFilter(category);}}else if(categoryOccurrence.type==='range'){if(values.length===2){self.triggerFilter(category,Object.assign(categoryOccurrence.data[0],{key:{min:values[0],max:values[1]}}))}}else if(categoryOccurrence.type==='openToday'){self.triggerFilter('openToday',{type:'openToday',key:'openToday',value:categoryOccurrence.title,operator:categoryOccurrence.operator});}else{self.triggerValidFilters(category,categoryOccurrence,values);}});if(this.activeFilters.data.temp.length===0&&this.defaultActiveFilters&&this.defaultActiveFilters.length>0){this.defaultActiveFilters.forEach(filter=>{this.triggerFilter(filter.category,filter,{radio:false});})}},generateUrlFromActiveFilters(){if(typeof CURRENT_LAYOUT!=='undefined'&&CURRENT_LAYOUT==='homepage'){return;} 74let result=[];let groupedFilters=this.activeFilters.data.def.filter(filter=>!this.activeFilters.keys.def.includes(filter.category+'-'+filter.parent));
74groupedFilters=groupedFilters.groupByField('category');Object.entries(groupedFilters).forEach(element=>{let category=element[0];let filters=element[1];let filterString='';if(filters[0].type==='dates'){filterString=category+'='+filters[0].data.from+'|'+filters[0].data.to;}else if(filters[0].type==='range'){filterString=category+'='+filters[0].data.min+'|'+filters[0].data.max;}else{filterString=category+'='+filters.map(f=>f.data).join('|');} 75result.push(filterString);}) 76if(!this.isAjax()&&this.loadedChunks>0){result.push('loadedChunks='+this.loadedChunks);} 77if(this.map.isShown){result.push('map=true');} 78if(this.getContentType()==='search'&&this.$options.postParameters.searchText){result.push('searchText='+this.$options.postParameters.searchText);} 79result=result.join('&');let currentURL=window.location.pathname;history.replaceState({},"",currentURL);if(result!==''){history.pushState({},'',currentURL+'?'+result);} 80return result;},async getMarkersElements(){return new Promise(async(resolve,reject)=>{if(!this.isAjax()){resolve(this.filtereds);}else{let result=await asynchronousRequest(ROOT_URL+language+'/get-markers-elements/'+options.endPoint,'POST',this.$options.postParameters);resolve(result);}})},setMapMarkers(){this.log('(setMapMarkers)');let self=this;let markers=[];this.getMarkersElements().then((markerableElements)=>{let priority='primary';markerableElements.forEach((element,index)=>{if(!element.latitude||!element.longitude){return;} 81let geoJSONMarker={type:"Feature",properties:{id:"places_"+index,title:element.title,description:this.getPopupDescription(element),urlDetail:element.url,urlIndications:'',priority:priority,mainImage:element.mainImage.url,basePrice:element.basePrice??'',id:element.id,importId:element.importId},geometry:{type:"Point",coordinates:[element.longitude,element.latitude]}} 82geoJSONMarker=self.postCreateMapMarker(element,geoJSONMarker);markers.push(geoJSONMarker);});if(typeof(map)!=='undefined'&&map!==null&&map.loaded()){this.log('(setMapMarkers): map is already loaded. Updating markers');updateMarkers(markers);}else if(typeof(markersOnLoad)!=='undefined'){this.log('(setMapMarkers): map is not loaded yet. Setting onLoad markers');markersOnLoad=markers;} 83this.map.markers=markers;this.$bus.trigger('mapMarkersSet');})},getPopupDescription(element){let result=[];switch(this.getContentType()){case'events':result.push(element.fullDescriptiveDate);break;case'hotels':result.push(element.accommodationType);break;default:break;} 84return result.filter(value=>value).join('<br />');},setActiveFiltersQuery(){if(this.isAjax()){this.activeFilters.query='';return;} 85let self=this;let result=[];let onlyAvailables=this.activeFilters.availability.isset&&this.activeFilters.availability.onlyAvailables;let groupedStandardFilters=this.activeFilters.data.temp.filter(f=>!f.type.startsWith('dynamic')).groupByField('category');buildCondition(groupedStandardFilters);this.$nextTick(()=>{this.setDynamicFilterableElements();let groupedDynamicFilters=this.activeFilters.data.temp.filter(f=>f.type.startsWith('dynamic')).groupByField('category');buildCondition(groupedDynamicFilters);}) 86function buildCondition(groupedFilters){Object.entries(groupedFilters).forEach(elem=>{let operator=' || ';let categoryFilterableElement=self.filterableElements.find(f=>f.name===elem[0]);if(categoryFilterableElement&&categoryFilterableElement.operator==='AND'){operator=' && ';} 87let conditions=[];elem[1].forEach(e=>{switch(e.type){case'tag':case'dynamicTag':conditions.push("elem.tags.includes('"+e.data+"')");break;case'category':conditions.push("elem.parentId == "+e.data);break;case'field':if(self.$options.elements.length&&Object.keys(self.$options.elements.data[0]).includes(e.fieldName)){if(typeof e.data==='boolean'){conditions.push("elem."+e.fieldName+" === "+e.data);}else{conditions.push(`!!String(elem.${e.fieldName} ?? '').match(/${e.data}/)`);}} 88break;case'range':conditions.push("parseInt(elem."+e.fieldName+") >= "+parseInt(e.data.min)+" && parseInt(elem."+e.fieldName+") <= "+parseInt(e.data.max));break;case'dates':let dateFrom=new Date(e.data.from).startOfDay();let dateTo=new Date(e.data.to).endOfDay();let dateFromTimestampMs=dateFrom.getTime();let dateToTimestampMs=dateTo.getTime();let datesRange=getDatesRange(dateFrom,dateTo);try{let datesDays=datesRange.map(d=>d.getDayName('en')).unique();}catch(ex){} 89switch(self.getContentType()){case'experiences':case'events':conditions.push(`elem.dateTimestampMs >= ${dateFromTimestampMs} && elem.dateTimestampMs <= ${dateToTimestampMs}`);break;case'hotels':conditions.push(`elem.available === "${dateFrom.getIsoFormat() + '' + dateTo.getIsoFormat()}"`);break;default:break;} 90break;default:break;}});if(conditions.length>0){result.push('('+conditions.join(operator)+')');}});self.activeFilters.query=result.join(' && ');}},unsetFilterCategory(category){this.activeFilters.data.temp=this.activeFilters.data.temp.filter(a=>a.category!==category);this.recalculateFiltersKeys();},resetAllFilters(options={}){this.log('(resetAllFilters): Resetting filters with these options:',options);let applyFilters=options.applyFilters??true;let applyData=options.applyData??true;let excludeCategories=options.excludeCategories??[];this.activeFilters.data.temp=this.activeFilters.data.temp.filter(f=>excludeCategories.includes(f.category));this.recalculateFiltersKeys();this.setActiveFiltersQuery();this.activeFilters.filtersNumber=this.calculateFiltersNumber();this.activeFilters.sortingType.temp={};this.activeFilters.sortingType.def={};if(!excludeCategories.includes('dates')){this.resetAllDates({applyFilters:false,applyData:applyData});}
91if(applyFilters){this.log('(resetAllFilters): Calling <applyFilters> with parameter applyData ->',applyData);this.applyFilters(applyData);}},resetAllDates(options={}){let applyFilters=options.applyFilters??true;let applyData=options.applyData??true;this.activeFilters.availability.dateFrom.temp=null;this.activeFilters.availability.dateTo.temp=null;this.activeFilters.availability.ids.temp=null;if(applyData){localStorage.removeItem(this.getContentType()+'DateFrom');localStorage.removeItem(this.getContentType()+'DateTo');localStorage.removeItem('dateFrom');localStorage.removeItem('dateTo');localStorage.removeItem('adultsNumber');localStorage.removeItem('roomsNumber');localStorage.removeItem('childrenNumber');localStorage.removeItem('occupancies');localStorage.removeItem('accommodationType');} 92this.activeFilters.availability.occupancies={number:1,data:[{roomsNumber:1,adultsNumber:2,childrenAges:[]}]};this.activeFilters.availability.accommodationType='';this.activeFilters.data.temp=this.activeFilters.data.temp.filter(filter=>filter.type!=='dates'&&filter.category!=='dynamicMealCode');this.filterableElements=this.filterableElements.filter(filterableElement=>filterableElement.name!=='dynamicMealCode');this.groupedFilterableElements=this.clone(this.filterableElements).groupByField('group');let wrapper=document.querySelector('#'+this.getContentType()+'-date-range');let wrapperModal=document.querySelector('#'+this.getContentType()+'-date-range-modal');if(wrapper){wrapper.querySelector('.range-start-date')?.datepicker.setDate({clear:true});wrapper.querySelector('.range-end-date')?.datepicker.setDate({clear:true});} 93if(wrapperModal){wrapperModal.querySelector('.range-start-date')?.datepicker.setDate({clear:true});wrapperModal.querySelector('.range-end-date')?.datepicker.setDate({clear:true});} 94this.activeFilters.availability.isset=false;if(this.$options.postParameters.availableIds){delete this.$options.postParameters.availableIds;} 95if(applyFilters){this.log('(resetAllDates): Calling <applyFilters> with parameter applyData ->',applyData);this.applyFilters(applyData);if(applyData){closeContentWindow();}} 96this.$nextTick(()=>{setTimeout(()=>{inputDateRange('#'+this.getContentType()+'-date-range-inside',{onlyFutureDates:this.canManageOnlyFutureDates()});},500);})},setRoomsDataInSession(){localStorage.setItem('occupancies',JSON.stringify(this.activeFilters.availability.occupancies.data));localStorage.setItem('accommodationType',this.activeFilters.availability.accommodationType);},setRoomsDataFromSession(){let occupancies=localStorage.getItem('occupancies');let accommodationType=localStorage.getItem('accommodationType');if(this.activeFilters.availability.dateFrom.temp&&this.activeFilters.availability.dateTo.temp){if(occupancies){occupancies=JSON.parse(occupancies);this.activeFilters.availability.occupancies.data=occupancies;this.activeFilters.availability.occupancies.number=occupancies.length;} 97if(accommodationType){this.activeFilters.availability.accommodationType=accommodationType;}}},setDatesInSession(){let dateFrom=this.activeFilters.availability.dateFrom.temp;let dateTo=this.activeFilters.availability.dateTo.temp;localStorage.setItem(this.getContentType()+'DateFrom',dateFrom);localStorage.setItem(this.getContentType()+'DateTo',dateTo);localStorage.setItem('dateFrom',dateFrom);localStorage.setItem('dateTo',dateTo);},setDatesFromSession(){let dateFrom=new Date(localStorage[this.getContentType()+'DateFrom']);let dateTo=new Date(localStorage[this.getContentType()+'DateTo']);if(!dateFrom.isValid(this.canManageOnlyFutureDates())||!dateTo.isValid(this.canManageOnlyFutureDates())){localStorage.removeItem(this.getContentType()+'DateFrom');localStorage.removeItem(this.getContentType()+'DateTo');return;} 98this.log('(setDatesFromSession): found dates from session, setting them');this.activeFilters.availability.dateFrom.temp=dateFrom.getIsoFormat();this.activeFilters.availability.dateTo.temp=dateTo.getIsoFormat();let datesFilterableElementOccurrence=this.filterableElements.find(filterableElement=>filterableElement.type==='dates');if(datesFilterableElementOccurrence){this.triggerDatesFilter(datesFilterableElementOccurrence.name);this.$bus.on('loaded',()=>{this.generateUrlFromActiveFilters();})}},createDatePickers(){let self=this;let inputDateRangeWrapper=document.querySelector('#'+this.getContentType()+'-date-range');if(!inputDateRangeWrapper){return;} 99let canManageOnlyFutureDates=this.canManageOnlyFutureDates();let datePickerOptions={inModal:false,onlyFutureDates:canManageOnlyFutureDates};let datesToHighlight=[];datePickerOptions.datesToHighlight=datesToHighlight.map(date=>date.getTime());if(typeof Datepicker==='function'){inputDateRange(inputDateRangeWrapper,datePickerOptions);this.applyDatepicker();}else{window.addEventListener('scriptsLoaded',()=>{inputDateRange(inputDateRangeWrapper,datePickerOptions);this.applyDatepicker();});}},applyDatepicker(){let self=this;let canManageOnlyFutureDates=this.canManageOnlyFutureDates();let dateFrom=this.activeFilters.availability.dateFrom.temp;let dateTo=this.activeFilters.availability.dateTo.temp;if(typeof dateFrom!=='Date'){dateFrom=new Date(dateFrom);} 100if(typeof dateTo!=='Date'){dateTo=new Date(dateTo);} 101if(!dateFrom.isValid(canManageOnlyFutureDates)||!dateTo.isValid(canManageOnlyFutureDates)){dateFrom=null;dateTo=null;} 102let wrapper=document.querySelector('#'+this.getContentType()+'-date-range');let modalWrapper=document.querySelector('#'+this.getContentType()+'-date-range-modal');let wrapperInside=document.querySelector('#'+this.getContentType()+'-date-range-inside');if(wrapper){if(dateFrom&&dateTo){wrapper.querySelector('.range-start-date')?.datepicker.setDate(dateFrom);wrapper.querySelector('.range-end-date')?.datepicker.setDate(dateTo);}else{wrapper.querySelector('.range-start-date')?.datepicker.setDate({clear:true});wrapper.querySelector('.range-end-date')?.datepicker.setDate({clear:true});}} 103if(modalWrapper){if(dateFrom&&dateTo){modalWrapper.querySelector('.range-start-date')?.datepicker.setDate(dateFrom);modalWrapper.querySelector('.range-end-date')?.datepicker.setDate(dateTo);}else{modalWrapper.querySelector('.range-start-date')?.datepicker.setDate({clear:true});modalWrapper.querySelector('.range-end-date')?.datepicker.setDate({clear:true});}} 104if(wrapperInside){if(dateFrom&&dateTo){wrapperInside.querySelector('.range-start-date')?.datepicker.setDate(dateFrom);wrapperInside.querySelector('.range-end-date')?.datepicker.setDate(dateTo);}else{wrapperInside.querySelector('.range-start-date')?.datepicker.setDate({clear:true});wrapperInside.querySelector('.range-end-date')?.datepicker.setDate({clear:true});}}},applyActiveFilters(){this.log('(applyActiveFilters): Restoring "def" filters');let actionTimeout=this.isAjax()?0:500;setTimeout(()=>{this.activeFilters.data.temp=this.clone(this.activeFilters.data.def);this.activeFilters.halfCheckedParents.temp=this.clone(this.activeFilters.halfCheckedParents.def);this.recalculateFiltersKeys();this.activeFilters.sortingType.temp=Object.assign({},Vue.toRaw(this.activeFilters.sortingType.def));this.activeFilters.availability.dateFrom.temp=this.activeFilters.availability.dateFrom.def;this.activeFilters.availability.dateTo.temp=this.activeFilters.availability.dateTo.def;this.activeFilters.availability.ids.temp=this.activeFilters.availability.ids.def;this.search.toSearch='';this.applyDatepicker();this.applyFilters(false);},actionTimeout)},isAjax(){return this.$options.isAjax;},getElements(){return this.$options.elements.data;},setElements(elements){this.$options.elements.data=elements.data;if(this.isAjax()){this.total=elements.total;this.totalIds=elements.totalIds;}else{this.total=elements.data.length;this.totalIds=elements.data.map(a=>a.id);}},addElements(elements){this.$options.elements.data=this.$options.elements.data.concat(elements.data);if(this.isAjax()){this.total=elements.total;}},forceUpdate(){this.forceUpdateTrigger++;},getTrackingContentType(){let type='';switch(this.getContentType()){case'hotels':type='alloggi';break;case'experiences':type='esperienze';break;case'itineraries':type='itinerari';break;case'pois':type='pois';break;case'services':type='servizi';break;case'events':type='eventi';break;case'restaurants':type='ristoranti';break;case'offers':type='offerte';break;case'beaches':type='spiagge';break;default:break;} 105return type;},generalSettings(){if(options.itemsPerChunk){this.$options.elements.itemsPerChunk=parseInt(options.itemsPerChunk);} 106if(options.isAjax==='true'){this.$options.isAjax=true;} 107if(this.isAjax()){this.$options.postParameters.offset=0;this.$options.postParameters.limit=this.$options.elements.itemsPerChunk;
107this.$options.postParameters.isAjax=true;}else{this.$options.postParameters.isAjax=false;} 108if(options.tags){this.$options.postParameters.tags=options.tags.split('|');if(options.tagsOperator){this.$options.postParameters.tagsOperator=options.tagsOperator;}} 109if(options.relatedToId&&options.relatedToDataType){this.$options.postParameters.relatedTo={id:options.relatedToId,dataType:options.relatedToDataType} 110if(options.relatedToFieldName){this.$options.postParameters.relatedTo.fieldName=options.relatedToFieldName;}} 111if(options.filtersConfiguration){this.$options.postParameters.filtersConfiguration=options.filtersConfiguration;} 112if(options.exclude){this.$options.postParameters.exclude=options.exclude;} 113if(options.firstchunk){} 114if(typeof options.asCalendar!=='undefined'){this.$options.postParameters.asCalendar=options.asCalendar;} 115if(options.avoidCache){this.$options.postParameters.avoidCache=true;} 116if(options.id){this.$options.postParameters.id=options.id;} 117if(options.type){this.$options.postParameters.type=options.type;} 118if(options.searchText){this.$options.postParameters.searchText=options.searchText;} 119if(this.getContentType()==='wishlist'){try{let wishlistData=localStorage.getItem('wishlistData');wishlistData=JSON.parse(wishlistData??'[]');this.$options.postParameters.wishlistKeys=wishlistData;}catch(ex){console.log(ex);}} 120if(options.documentId){this.$options.postParameters.documentId=options.documentId;} 121if(options.imagesThumbnail){this.$options.postParameters.imagesThumbnail=options.imagesThumbnail;} 122if(options.offerId){this.$options.postParameters.offerId=parseInt(options.offerId);}},toggleMap(activate=null){if(activate!==null){this.map.isShown=activate;}else{this.map.isShown=!this.map.isShown;} 123if(!this.map.isShown){this.$nextTick(()=>{this.applyLoadMoreObserver();})} 124if(typeof tr!=='undefined'&&tr){let trackingContentType=this.getTrackingContentType();if(this.map.isShown){tr.track('K_mostra_mappa_'+trackingContentType,{event_label:this.map.markers.length});}else{tr.track('K_nascondi_mappa_'+trackingContentType,{event_label:this.map.markers.length});}} 125this.generateUrlFromActiveFilters();},showElementInMap(id){this.toggleMap(true);if(typeof map==='undefined'){return;} 126let elementMarker;if(map===null){document.addEventListener('mapboxMapLoaded',()=>{doShowElementInMap(id);this.scrollIntoList();})}else{doShowElementInMap(id);this.scrollIntoList();} 127function doShowElementInMap(id){if(typeof markers!=='undefined'&&markers.features&&markers.features.length){let elementMarkers=this.clone(markers);elementMarkers.features=elementMarkers.features.filter(marker=>marker.properties.id===id);if(elementMarkers&&elementMarkers.features.length){removeAllPopups();setMapZoom(elementMarkers,{correction:0.001,offset:[0,65]});addPopup(elementMarkers.features[0].geometry.coordinates,elementMarkers.features[0].properties);}}}},scrollIntoList(){let selector=document.getElementById('list_start');if(selector){selector.style.scrollPaddingTop='50px';scrollToElement(selector,{offset:130});}},setDynamicFilterableElements(){if(this.isAjax()){return;} 128let areThereAnyActiveFilters=this.activeFilters.data.temp.filter(activeFilter=>!activeFilter.type.startsWith('dynamic')).length>0;let self=this;let activeCategories=this.activeFilters.data.temp.map(activeFilter=>activeFilter.category);let currentlyActiveTags=this.filtersRealTimeResults.data.map(a=>a.tags).flat().unique();this.filterableElements.forEach(filterableElement=>{if(!filterableElement.type.startsWith('dynamic')){return;} 129if(!filterableElement.originalData){filterableElement.originalData=self.clone(filterableElement.data);} 130if(areThereAnyActiveFilters){if(!filterableElement.triggeredBy||activeCategories.intersect(filterableElement.triggeredBy)){filterableElement.data=[];self.clone(filterableElement.originalData).forEach(f=>{if(currentlyActiveTags.includes(f.key)){filterableElement.data.push(f);}else if(self.activeFilters.keys.temp.includes(filterableElement.name+'-'+f.key)){self.triggerFilter(filterableElement.name,f,{mode:3});}});}}else{filterableElement.data=self.clone(filterableElement.originalData);}})}
130,loadMore(){let self=this;this.loading.def=true;this.log('(loadMore): Calling <setData>');this.setData({append:true}).then(()=>{if(self.isAjax()){self.forceUpdate();self.filtereds=self.clone(self.filtersRealTimeResults.data);} 131self.loadedChunks++;self.generateUrlFromActiveFilters();self.loading.def=false;self.postLoadMore();});},applyLoadMoreObserver(){let self=this;const endOfList=document.querySelector(".end-of-list");if(!endOfList){this.log("(applyLoadMoreObserver): End Of List element not found, no observers will be applied on it");return;} 132if(endOfList.dataset.isObserved){this.log("(applyLoadMoreObserver): End Of List element found but it is already observed, no observers will be applied on it");return;} 133let endOfListObserver=new IntersectionObserver((entries)=>{if(entries[0].intersectionRatio>0){if(!self.areAllElementsShown){self.loadMore();}}});endOfListObserver.unobserve(endOfList);endOfListObserver.observe(endOfList);endOfList.dataset.isObserved=true;this.log("(applyLoadMoreObserver): Applied observer on End Of List element");},async preSetData(){switch(this.getContentType()){case'hotels':await this.setHotelsAvailability();break;default:break;} 134if(this.isAjax()){this.$options.postParameters.tagsPrefixesOperators={};this.filterableElements.forEach(f=>{if(f.name&&f.operator==='AND'){this.$options.postParameters.tagsPrefixesOperators[f.name]=f.operator;}}) 135this.$options.postParameters.activeFilters=this.activeFilters.data.temp.filter(activeFilter=>activeFilter.category!=='dynamicMealCode');this.$options.postParameters.order=this.activeFilters.sortingType.temp;}},async postSetData(){switch(this.getContentType()){case'events':case'events-and-experiences':for(let i=0;i<this.getElements().length;i++){this.$options.elements.data[i].eventDateObject=new Date(this.$options.elements.data[i].dateTimestampMs);} 136this.$options.elements.data=this.getEventsWithFirstOfMonths(this.getElements());break;default:break;}},getNoResultsElements(){return this.getElements();},applyRuntimeChanges(elements){let result=[];switch(this.getContentType()){default:result=elements;break;} 137return result;},postApplyData(){this.setMapMarkers();switch(this.getContentType()){case'hotels':if(this.multipleRequest.targetIds.length===0){this.multipleRequest.isManualSelectionMode=false;} 138if(!this.multipleRequest.isManualSelectionMode){if(this.activeFilters.data.def.length){this.multipleRequest.targetIds=this.isAjax()?this.totalIds:this.filtereds.filter(element=>element.email).map(element=>element.id);}else if(options.tags){this.multipleRequest.targetIds=this.isAjax()?this.totalIds:this.getElements().filter(element=>element.email).map(element=>element.id);}else{this.multipleRequest.targetIds=[];}} 139break;case'webcams':case'meteowebcams':setTimeout(()=>{setPanomaxWebcams();},300) 140break;default:break;} 141if(this.isAvailabilitiesFiltersActive){this.setDatesInSession();this.setRoomsDataInSession();} 142setTimeout(()=>{if(typeof WB!=='undefined'){if(typeof WB.loadAnimation==='function'){WB.loadAnimation();} 143if(typeof WB.loadTooltip==='function'){WB.loadTooltip();}} 144this.trackViewItemList();},300);this.$nextTick(()=>{this.applyLoadMoreObserver();if(typeof tr!=='undefined'&&tr&&typeof tr.applyUtmOnExternalLinks==='function'){this.log('(postApplyData): applying UTM to external links from Tracking.js');tr.applyUtmOnExternalLinks();}else{this.log('(postApplyData): applyUtmOnExternalLinks a Tracking.js method');} 145if(typeof map!=='undefined'&&map){removeAllPopups();}})},postSearch(elements){return elements.slice(0,10);},postCreateMapMarker(element,marker){if(this.getContentType()==='hotels'){marker.properties.additionalClasses='feratel-tosc5';marker.properties.additionalAttributes=`data-feratel="${element.importId}"`;} 146return marker;},postLoadMore(){this.$nextTick(()=>{if(typeof tr!=='undefined'&&tr&&typeof tr.applyUtmOnExternalLinks==='function'){this.log('(postLoadMore): applying UTM to external links from Tracking.js');tr.applyUtmOnExternalLinks();}else if(typeof applyUtmOnExternalLinks==='function'){this.log('(postLoadMore): applying UTM to external links from inline method');applyUtmOnExternalLinks();}else{this.log('(postLoadMore): applyUtmOnExternalLinks is not an inline method or in Tracking.js');}});this.trackViewItemList({isLoadMore:true});setTimeout(()=>{if(typeof WB!=='undefined'){if(typeof WB.loadAnimation==='function'){WB.loadAnimation();}}},300);},canManageOnlyFutureDates(){switch(this.getContentType()){default:return true;break;}},handleFirstScroll(){if(typeof preventAutomaticBrowserInitialScroll==='function'){this.log('(handleFirstScroll): preventing first automatic scroll from browser');preventAutomaticBrowserInitialScroll();} 147['beforeunload','pagehide'].map((eventName)=>{window.addEventListener(eventName,()=>{sessionStorage.setItem(window.location.href+'_last_vertical_offset',window.pageYOffset);})}) 148this.$bus.on('loaded',()=>{try{let memorizedScrollPosition=sessionStorage.getItem(window.location.href+'_last_vertical_offset');let isBackOrForwardOrReload=performance.getEntriesByType('navigation').filter(entry=>entry.type==='back_forward'||entry.type==='reload').length>0;if(isBackOrForwardOrReload&&memorizedScrollPosition){this.log('(handleFirstScroll): navigation type is back, forward or reload and a last position for this page was found. Performing first scroll');setTimeout(()=>{window.scroll(0,parseInt(memorizedScrollPosition));},300);}else{this.log('(handleFirstScroll): navigation type is not back or forward or a last position for this page was not found. Performing first scroll to start of list');}}catch(exception){this.scrollIntoList();}})},clone(element){element=Vue.toRaw(element);let result;if(null==element||"object"!=typeof element)return element;if(element instanceof Date){result=new Date();result.setTime(element.getTime());return result;} 149if(element instanceof Array){result=[];for(var i=0,len=element.length;i<len;i++){result[i]=clone(element[i]);} 150return result;} 151if(element instanceof Object){result={};for(var attr in element){if(element.hasOwnProperty(attr))result[attr]=clone(element[attr]);} 152return result;}},addMultipleRequestElementById(id){let self=this;if(!this.multipleRequest.isManualSelectionMode){this.multipleRequest.isManualSelectionMode=true;this.multipleRequest.targetIds=[];} 153if(this.multipleRequest.targetIds.includes(id)){const index=this.multipleRequest.targetIds.indexOf(id);this.multipleRequest.targetIds.splice(index,1);if(this.multipleRequest.targetIds.length===0){this.setDefaultFilteredMultipleRequestElements();}}else{this.multipleRequest.targetIds.push(id);}}
153,unselectAllMultipleRequestElements(){this.multipleRequest.targetIds=[];this.setDefaultFilteredMultipleRequestElements();},setDefaultFilteredMultipleRequestElements(){if(!this.activeFilters.data.def.length&&!(options.tags||!options.tags.length)){return;} 154if(this.activeFilters.data.def.length){this.multipleRequest.targetIds=this.isAjax()?this.totalIds:this.filtereds.filter(element=>element.email).map(element=>element.id);this.multipleRequest.isManualSelectionMode=false;}else if(options.tags){this.multipleRequest.targetIds=this.isAjax()?this.totalIds:this.getElements().filter(element=>element.email).map(element=>element.id);this.multipleRequest.isManualSelectionMode=false;}},trackViewItemList(options={}){return;if(typeof tr==='undefined'||!tr){return;} 155let self=this;let isLoadMore=options.isLoadMore??false;let holidayPeriod='';let adultsNumber=0;let childrenNumber=0;let nightsNumber=0;if(this.isAvailabilitiesFiltersActive){holidayPeriod=formatDates(this.activeFilters.availability.dateFrom.def,this.activeFilters.availability.dateTo.def);let timeDifference=Math.abs(new Date(this.activeFilters.availability.dateTo.def).getTime()-new Date(this.activeFilters.availability.dateFrom.def).getTime());nightsNumber=Math.ceil(timeDifference /(1000*3600*24));if(this.activeFilters.availability.occupancies.data[0].adultsNumber){adultsNumber=this.activeFilters.availability.occupancies.data[0].adultsNumber;} 156if(this.activeFilters.availability.occupancies.data[0].childrenAges){childrenNumber=this.activeFilters.availability.occupancies.data[0].childrenAges.length;}} 157let elementsToTrack=this.currentLoadedChunks;if(isLoadMore){elementsToTrack=elementsToTrack.slice(-this.$options.postParameters.limit);} 158let elementsNames=elementsToTrack.map(e=>e.title).join(', ');let viewItemListEventParameters={currency:'EUR',event_label:elementsNames,items:elementsToTrack.map((element,index)=>{let result={item_id:element.importId,item_name:element.title.toLowerCase().replaceAll(' ','_'),affiliation:'',coupon:element.mealCode??'',discount:'',index:isLoadMore?index+(self.loadedChunks*self.$options.postParameters.limit):index,item_brand:element.title.toLowerCase().replaceAll(' ','_'),item_category:element.type,item_category2:'',item_category3:'',item_category4:'',item_category5:'',item_list_id:this.getContentType(),item_list_name:this.getContentType(),item_variant:'',price:element.basePrice,location:element.region};if(this.isAvailabilitiesFiltersActive){result.holiday_period=holidayPeriod;result.n_adults=adultsNumber;result.n_children=childrenNumber;result.n_nights=nightsNumber;} 159return result;})};setTimeout(()=>{tr.track('view_item_list',viewItemListEventParameters);},500)},trackSelectItem(element){if(typeof tr==='undefined'||!tr){return;} 160let holidayPeriod='';let adultsNumber=0;let childrenNumber=0;let nightsNumber=0;if(this.isAvailabilitiesFiltersActive){holidayPeriod=formatDates(this.activeFilters.availability.dateFrom.def,this.activeFilters.availability.dateTo.def);let timeDifference=Math.abs(new Date(this.activeFilters.availability.dateTo.def).getTime()-new Date(this.activeFilters.availability.dateFrom.def).getTime());nightsNumber=Math.ceil(timeDifference /(1000*3600*24));if(this.activeFilters.availability.occupancies.data[0].adultsNumber){adultsNumber=this.activeFilters.availability.occupancies.data[0].adultsNumber;} 161if(this.activeFilters.availability.occupancies.data[0].childrenAges){childrenNumber=this.activeFilters.availability.occupancies.data[0].childrenAges.length;}} 162let selectItemListEventParameters={currency:'EUR',event_label:element.title,items:[{item_id:element.importId,item_name:element.title.toLowerCase().replaceAll(' ','_'),affiliation:'',coupon:element.mealCode??'',discount:'',index:0,item_brand:element.title.toLowerCase().replaceAll(' ','_'),item_category:element.type,item_category2:'',item_category3:'',item_category4:'',item_category5:'',item_list_id:this.getContentType(),item_list_name:this.getContentType(),item_variant:'',price:element.availableDescriptiveBasePrice??element.descriptiveBasePrice??element.basePrice,location:element.region}]};if(this.isAvailabilitiesFiltersActive){selectItemListEventParameters.items[0].holiday_period=holidayPeriod;selectItemListEventParameters.items[0].n_adults=adultsNumber;selectItemListEventParameters.items[0].n_children=childrenNumber;selectItemListEventParameters.items[0].n_nights=nightsNumber;} 163tr.track('select_item',selectItemListEventParameters);},triggerFilterByValue(valueToTrigger){let filterGroupToTrigger=this.filterableElements.find(filterableElement=>filterableElement.data.filter(filterData=>filterData.key===valueToTrigger).length>0);if(!filterGroupToTrigger){return;} 164let filterToTrigger=filterGroupToTrigger.data.find(filterData=>filterData.key===valueToTrigger);this.triggerFilter(filterGroupToTrigger.name,filterToTrigger,{mode:ARRAY_ALWAYS_ADD,radio:true});this.applyFilters();},getEventsWithFirstOfMonths(events){if(!events.length){return events;} 165events[0].isFirstOfMonth=true;for(let i=1;i<events.length;i++){try{let previousEventDate=events[i-1].eventDateObject;let currentEventDate=events[i].eventDateObject;if(previousEventDate.getMonth()+previousEventDate.getFullYear()!==currentEventDate.getMonth()+currentEventDate.getFullYear()){events[i].isFirstOfMonth=true;}}catch(ex){}} 166return events;},getTextRangeDates(dateFrom,dateTo){return getTextRangeDates(dateFrom,dateTo);},getSortedObjectKeysByArray(startingObject,sortingArray=[],options={}){return getSortedObjectKeysByArray(startingObject,sortingArray,options);}}});Object.entries({'k-search-select':'KSearchSelect',}
166).forEach(componentData=>{let componentHtmlTag=componentData[0];let componentClassName=componentData[1];try{list.component(componentHtmlTag,eval(componentClassName));}catch(exception){console.log(exception);}}) 167list.config.globalProperties.$bus=new KVueEvent();if(vuetify){list.use(vuetify);} 168lists.push(list.mount(elementId));}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.