1/* @license GPL-2.0-or-later https://www.drupal.org/licensing/faq */ 2const DateTime=easepick.DateTime;function loadPicker(selection){let jsonFile='';if(selection!=='')jsonFile='/'+drupalSettings.path.currentLanguage+'/booking-availability/'+selection;else return initializeEasyPick({});fetch(jsonFile).then((response)=>{if(!response.ok)throw new Error('Network response was not ok');return response.json();}).then((data)=>{initializeEasyPick(data);}).catch((error)=>{initializeEasyPick({});console.error('There was a problem with the fetch operation:',error);});}function loadCalendarData(jsonData){if(Object.keys(jsonData).length===0)return {bookedDates:[],dateInfo:{},firstAvailableDay:null};const bookedDates=[];const dateInfo={};let firstAvailableDay=null;if(!Array.isArray(jsonData)||jsonData.length===0)return {bookedDates:[],dateInfo:{},firstAvailableDay:null};jsonData.forEach((month)=>{month.days.forEach((day)=>{const dateStr=`${month.year}-${String(month.month).padStart(2,'0')}-${String(day.day).padStart(2,'0')}`;dateInfo[dateStr]={available:day.available,active:day.active,arrival:day.arrival,departure:day.departure,minStay:day.minStay,maxStay:day.maxStay,roomCount:day.roomCount,startingPrice:day.startingPrice};if(!day.available||!day.active)bookedDates.push(new DateTime(dateStr,'YYYY-MM-DD'));if(day.available&&day.active&&day.arrival)if(firstAvailableDay==null)firstAvailableDay=new DateTime(dateStr,'YYYY-MM-DD');});});return {bookedDates,dateInfo,firstAvailableDay};}let picker=null;function initializeEasyPick(jsonData){if(picker){picker.clear();picker.destroy();}const {bookedDates,dateInfo,firstAvailableDay}=loadCalendarData(jsonData);picker=new easepick.create({element:"#datepicker",css:["https://cdn.jsdelivr.net/npm/@easepick/[email protected]/dist/index.css","/modules/custom/lab_booking/css/easepick.css?scsp7a"],zIndex:10,lang:datePickerLocale,format:datePickerFormat,grid:2,calendars:datePickerCalendars,date:firstAvailableDay?firstAvailableDay:new Date(),plugins:["RangePlugin","LockPlugin","AmpPlugin"],AmpPlugin:{resetButton:false,darkMode:false},RangePlugin:{tooltipNumber(num){return num-1;},locale:{one:'night',other:'nights'},delimiter:' -- ',elementEnd:'#DateEnd'},LockPlugin:{minDate:firstAvailableDay?firstAvailableDay:new Date(),minDays:2,inseparable:true,selectForward:true,selectBackward:false,filter(date,picked,picker){if(picked.length>=1){if(picked[0].isSame(date,'day')){const adjustedDate=subtractHours(date,-2);const dateStr_1=adjustedDate.toISOString().split('T')[0];const info=dateInfo[dateStr_1];if(info&&info.minStay==-1){}}if(date.isAfter(picked[0])){}}return date.inArray(bookedDates,'[)');}},autoApply:true,setup(picker){picker.on('select',(e)=>{let startDate=picker.getStartDate();let endDate=picker.getEndDate();startInfo=dateInfo[startDate.format("YYYY-MM-DD")];if(startInfo){const diffDays=endDate.diff(startDate,'day');if(startInfo.minStay>0)if(diffDays<startInfo.minStay){alert(Drupal.t('Selezione non valida, durata minima soggiorno @days notti',{'@days':startInfo.minStay}));picker.clear();}if(startInfo.maxStay>0)if(diffDays>startInfo.maxStay){alert(Drupal.t('Selezione non valida, durata massima soggiorno @days notti',{'@days':startInfo.maxStay}));picker.clear();}}endInfo=dateInfo[endDate.format("YYYY-MM-DD")];if(endInfo)if(endInfo.departure===false){alert(Drupal.t('Selezione non valida, data di ripartenza non disponibile'));picker.clear();}submitButtonStatus();});picker.on('preselect',(e)=>{let startDate=picker.getStartDate();const selectedDate=e.detail.start.format('YYYY-MM-DD');const LockPlugin=picker.PluginManager.reloadInstance('LockPlugin');startInfo=dateInfo[selectedDate];if(startInfo){if(startInfo.minStay>0)LockPlugin.options.minDays=startInfo.minStay+1;if(startInfo.maxStay>0)LockPlugin.options.maxDays=startInfo.maxStay+1;}});picker.on('view',(evt)=>{const {view,date,target}=evt.detail;const d=date?date.format('YYYY-MM-DD'):null;if(view==='CalendarDay'&&dateInfo[d])if(`${dateInfo[d].active}`==='true'&&`${dateInfo[d].available}`==='true'){const span=target.querySelector('.day-price')||document.createElement('span');
2span.className='day-price';span.innerHTML=dateInfo[d].startingPrice!==0?`${Math.ceil(dateInfo[d].startingPrice)}â¬`:'â';target.append(span);}});}});}loadPicker('');function test(picker){picker.PluginManager.getInstance("LockPlugin").options.maxDays=3;}function addHours(date,hours){const newDate=new Date(date);newDate.setHours(newDate.getHours()+hours);return newDate;}function subtractHours(date,hours){const newDate=new Date(date);newDate.setHours(newDate.getHours()-hours);return newDate;}; 3var accommodationsModal=document.getElementById('accomodations-modal');var closeButton=document.getElementsByClassName('accomodations__close')[0];const accomodations=document.getElementById('accomodations');if(accomodations)accomodations.addEventListener('click',function(){});var accommodationsRoomsContainer=null;if(accommodationsModal){accommodationsRoomsContainer=accommodationsModal.querySelector('.modal-wrap-rooms[data-accordion="accordion-booking"]');if(accommodationsRoomsContainer){const modalContent=accommodationsRoomsContainer.querySelector('.modal-wrap-rooms__content');if(modalContent)modalContent.addEventListener('change',function(event){if(event.target.matches('.modal-room__col input'))setAccomodationDataOnCloseModal();});}}document.addEventListener('DOMContentLoaded',function(){var addAccomodationsElement=document.querySelector('#addRoom');var removeAccomodationsElement=document.querySelector('#removeRoom');if(!accommodationsModal||!accommodationsRoomsContainer||!addAccomodationsElement||!removeAccomodationsElement)return;removeAccomodationsElement.style.display='none';addAccomodationsElement.addEventListener('click',function(event){event.preventDefault();var rooms=accommodationsRoomsContainer.querySelectorAll('.modal-room');var roomsCount=rooms.length;if(roomsCount>=4)return true;var firstRoom=accommodationsRoomsContainer.querySelector(".modal-room[data-index='1']");if(!firstRoom)return true;var clone=firstRoom.cloneNode(true);var newIndex=roomsCount+1;clone.setAttribute('data-index',newIndex);clone.querySelector('p > span').textContent=newIndex;clone.querySelector("input[name='modalAdults[]']").value=2;clone.querySelector("input[name='modalNewborns[]']").value=0;clone.querySelector("input[name='modalChilds[]']").value=0;var content=accommodationsRoomsContainer.querySelector('.modal-wrap-rooms__content');if(content)content.appendChild(clone);removeAccomodationsElement.style.display='block';setAccomodationDataOnCloseModal();});removeAccomodationsElement.addEventListener('click',function(event){event.preventDefault();var rooms=accommodationsRoomsContainer.querySelectorAll('.modal-room');var roomsCount=rooms.length;if(roomsCount===1){removeAccomodationsElement.style.display='none';return true;}var roomToRemove=accommodationsRoomsContainer.querySelector(".modal-room[data-index='"+roomsCount+"']");if(roomToRemove&&roomToRemove.parentNode)roomToRemove.parentNode.removeChild(roomToRemove);setAccomodationDataOnCloseModal();rooms=accommodationsRoomsContainer.querySelectorAll('.modal-room');roomsCount=rooms.length;if(roomsCount===1)removeAccomodationsElement.style.display='none';else removeAccomodationsElement.style.display='block';});});function setAccomodationDataOnCloseModal(){var modal=document.getElementById('accomodations-modal');var container=document.getElementById('searchRoomsContainer');var hiddenInputs=container.querySelectorAll('input[type="hidden"]');hiddenInputs.forEach(function(input){input.parentNode.removeChild(input);});var rooms=modal.querySelectorAll(".modal-room");var countAdults=0,countChilds=0,countRooms=rooms.length,countRoomChilds;rooms.forEach(function(room){var fields=room.querySelectorAll("input[type='number']");countRoomChilds=0;fields.forEach(function(field){var fieldName=field.getAttribute("name");var fieldValue=field.value;if(fieldName==="modalAdults[]"){countAdults+=parseInt(fieldValue);var hiddenInput=document.createElement("input");hiddenInput.setAttribute("type","hidden");hiddenInput.setAttribute("name","adults[]");hiddenInput.setAttribute("value",fieldValue);container.appendChild(hiddenInput);}if(fieldName==="modalNewborns[]"||fieldName==="modalChilds[]")countRoomChilds+=parseInt(fieldValue);if(fieldName==="modalNewborns[]")for(var i=0;i<fieldValue;i++){var hiddenInput=document.createElement("input");hiddenInput.setAttribute("type","hidden");hiddenInput.setAttribute("name","ages[]");hiddenInput.setAttribute("value","0");container.appendChild(hiddenInput);}if(fieldName==="modalChilds[]")for(var i=0;i<fieldValue;i++){var hiddenInput=document.createElement("input");hiddenInput.setAttribute("type","hidden");hiddenInput.setAttribute("name","ages[]");hiddenInput.setAttribute("value","5");container.appendChild(hiddenInput);}});var childInput=document.createElement("input");childInput.setAttribute("type","hidden");childInput.setAttribute("name","childs[]");childInput.setAttribute("value",countRoomChilds);container.appendChild(childInput);countChilds+=countRoomChilds;});container.querySelector(".searchAdults").textContent=countAdults;container.querySelector(".searchChilds").textContent=countChilds;container.querySelector(".searchRooms").textContent=countRooms;};
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.