PageSourceSearch

https://www.contexttravel.com/assets/controllers/availability_cont…898a9823c26e8cdf4b7b87310928bacdd210e322.js

js contexttravel.com collected 2026-10-02 21:25:19 UTC 2,481 bytes, 1 lines download raw bytes

1import{Controller}from"@hotwired/stimulus";export default class extends Controller{static get targets(){return["date","availabilityForm","active","wdaySelector"]}static get values(){return{url:String}}connect(){document.addEventListener("turbo:frame-load",t=>{"expert-availability"===t.target.id&&t.target.scrollIntoView({behavior:"smooth"})})}disconnect(){this._reset()}selectToday(){document.addEventListener("turbo:frame-load",t=>{if("calendar"===t.target.id){const t=this.element.querySelector(".today");this.dateClicked({currentTarget:t,params:{date:t.dataset.availabilityDateParam}})}},{once:!0})}dateClicked({currentTarget:t,params:{date:e}}){const{activeDateBeforeReset:a}=this._reset();a?t===a?(this._deactivateDate(a),this.clearAvailabilityForm()):(this._deactivateDate(a),this._activateDate(t),this._reloadFrameBasedOnDates([e])):(this._activateDate(t),this._reloadFrameBasedOnDates([e]))}toggleDayOfMonth({currentTarget:t,params:{wday:e}}){const{wdayBeforeReset:a}=this._reset();e!==a&&(t.querySelector('input[type="radio"]').checked=!0,this._activateDatesAndReloadFrame(this.element.querySelectorAll(`.day.current-month:not(.past).wday-${e}`),{type:"wday",wday:e}),this.wday=e)}toggleAllMonth(){const{monthActiveBeforeReset:t}=this._reset();t||(this._activateDatesAndReloadFrame(this.element.querySelectorAll(".day.current-month:not(.past)"),{type:"month"}),this.monthActive=!0)}clearAvailabilityForm(){this.availabilityFormTarget.innerHTML="",this.availabilityFormTarget.src=""}_activateDatesAndReloadFrame(t,e={}){const a=[];t.forEach(t=>{this._activateDate(t),a.push(t.dataset.availabilityDateParam)}),this._reloadFrameBasedOnDates(a,e)}_deactivateAll(){this.activeTargets.forEach(t=>this._deactivateDate(t))}_deactivateDate(t){t.classList.remove("active"),delete t.dataset.availabilityTarget}_activateDate(t){t.classList.add("active"),t.dataset.availabilityTarget="active",this.activeDate=t}_reloadFrameBasedOnDates(t,e=[]){const a=new URL(this.urlValue);t.forEach(t=>{a.searchParams.append("dates[]",t)}),Object.keys(e).forEach(t=>{a.searchParams.append(t,e[t])}),this.availabilityFormTarget.src="",this.availabilityFormTarget.src=a,this.availabilityFormTarget.hidden=!1}_reset(){const t={monthActiveBeforeReset:this.monthActive,wdayBeforeReset:this.wday,activeDateBeforeReset:this.activeDate};return this._deactivateAll(),this.clearAvailabilityForm(),this.monthActive=!1,this.wday=null,this.activeDate=null,this.wdaySelectorTargets.forEach(t=>{t.checked=!1}),t}}

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.