UNPKG

vue-cal

Version:

A Vue JS full calendar, no dependency, no BS. :metal:

7 lines (6 loc) 4.45 kB
"use strict";var e=Object.defineProperty,t=(t,l,i)=>((t,l,i)=>l in t?e(t,l,{enumerable:!0,configurable:!0,writable:!0,value:i}):t[l]=i)(t,"symbol"!=typeof l?l+"":l,i) /** * vue-cal v4.10.2 * (c) 2025 Antoni Andre <antoniandre.web@gmail.com> * @license MIT */;Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});let l=null,i=null,a={id:null,date:null},n=!1,r=!0,u={el:null,cell:null,timeout:null};const s={_eid:null,fromVueCal:null,toVueCal:null};exports.DragAndDrop=class{constructor(e){t(this,"_vuecal"),this._vuecal=e}_getEventStart(e){const{timeStep:t,timeCellHeight:l,timeFrom:i,utils:a}=this._vuecal;let{y:n}=a.cell.getPosition(e);return n-=1*e.dataTransfer.getData("cursor-grab-at"),Math.round(n*t/parseInt(l)+i)}_updateEventStartEnd(e,t,l,i){const a=1*l.duration||t.endTimeMinutes-t.startTimeMinutes;let n=Math.max(this._getEventStart(e),0);if(this._vuecal.snapToTime){const e=n+this._vuecal.snapToTime/2;n=e-e%this._vuecal.snapToTime}t.startTimeMinutes=n,t.start=new Date(new Date(i).setMinutes(n)),t.endTimeMinutes=Math.min(n+a,1440),t.end=new Date(new Date(i).setMinutes(t.endTimeMinutes))}eventDragStart(e,t){if(3===e.target.nodeType)return e.preventDefault();e.dataTransfer.dropEffect="move",e.dataTransfer.setData("event",JSON.stringify(t)),e.dataTransfer.setData("cursor-grab-at",e.offsetY);const{clickHoldAnEvent:l}=this._vuecal.domEvents;setTimeout((()=>{l._eid=null,clearTimeout(l.timeoutId),t.deleting=!1}),0),this._vuecal.domEvents.dragAnEvent._eid=t._eid,s._eid=t._eid,s.fromVueCal=this._vuecal._.uid,t.dragging=!0,setTimeout((()=>t.draggingStatic=!0),0),n=!1,a={id:this._vuecal.view.id,date:this._vuecal.view.startDate},r=!0}eventDragEnd(e){this._vuecal.domEvents.dragAnEvent._eid=null,s._eid=null,e.dragging=!1,e.draggingStatic=!1;const{fromVueCal:t,toVueCal:l}=s;l&&t!==l&&this._vuecal.utils.event.deleteAnEvent(e),s.fromVueCal=null,s.toVueCal=null,n&&r&&a.id&&this._vuecal.switchView(a.id,a.date,!0)}cellDragEnter(e,t,l){const i=e.currentTarget;if(!e.currentTarget.contains(e.relatedTarget)){if(i===u.el||!i.className.includes("vuecal__cell-content"))return!1;u.el&&(u.cell.highlighted=!1),u={el:i,cell:t,timeout:clearTimeout(u.timeout)},t.highlighted=!0,["years","year","month"].includes(this._vuecal.view.id)&&(u.timeout=setTimeout((()=>this._vuecal.switchToNarrowerView(l)),2e3))}}cellDragOver(e,t,l,i){e.preventDefault(),t.highlighted=!0,(i||0===i)&&(t.highlightedSplit=i)}cellDragLeave(e,t){e.preventDefault(),e.currentTarget.contains(e.relatedTarget)||(t.highlightedSplit=!1,u.cell===t&&(clearTimeout(u.timeout),u={el:null,cell:null,timeout:null},t.highlighted=!1))}cellDragDrop(e,t,l,i){e.preventDefault(),clearTimeout(u.timeout),u={el:null,cell:null,timeout:null};const a=JSON.parse(e.dataTransfer.getData("event")||"{}");let n,c;if(s.fromVueCal!==this._vuecal._.uid){const{_eid:e,start:t,end:r,duration:u,...s}=a;n=this._vuecal.utils.event.createAnEvent(l,u,{...s,split:i})}else if(n=this._vuecal.view.events.find((e=>e._eid===s._eid)),n||(n=this._vuecal.mutableEvents.find((e=>e._eid===s._eid)),c=!!n),!n){const e=a.endTimeMinutes-a.startTimeMinutes,{start:t,end:r,...u}=a;n=this._vuecal.utils.event.createAnEvent(l,e,{...u,split:i})}const{start:o,split:d}=n;this._updateEventStartEnd(e,n,a,l),c&&this._vuecal.addEventsToView([n]),n.dragging=!1,(i||0===i)&&(n.split=i),t.highlighted=!1,t.highlightedSplit=null,r=!1,s.toVueCal=this._vuecal._.uid;const v={event:this._vuecal.cleanupEvent(n),oldDate:o,newDate:n.start,...(i||0===i)&&{oldSplit:d,newSplit:i},originalEvent:this._vuecal.cleanupEvent(a),external:!s.fromVueCal};this._vuecal.$emit("event-drop",v),this._vuecal.$emit("event-change",{event:v.event,originalEvent:v.originalEvent}),setTimeout((()=>{s._eid&&this.eventDragEnd(n)}),300)}viewSelectorDragEnter(e,t,a){e.currentTarget.contains(e.relatedTarget)||(a.highlightedControl=t,clearTimeout(l),l=setTimeout((()=>{if(["previous","next"].includes(t))this._vuecal[t](),clearInterval(i),i=setInterval(this._vuecal[t],800);else if("today"===t){let e;clearInterval(i),this._vuecal.view.id.includes("year")&&(e=this._vuecal.enabledViews.filter((e=>!e.includes("year")))[0]),this._vuecal.switchView(e||this._vuecal.view.id,new Date((new Date).setHours(0,0,0,0)),!0)}else this._vuecal.switchView(t,null,!0);n=!0}),800))}viewSelectorDragLeave(e,t,a){e.currentTarget.contains(e.relatedTarget)||a.highlightedControl===t&&(a.highlightedControl=null,l&&(l=clearTimeout(l)),i&&(i=clearInterval(i)))}};