vue-cal
Version:
A Vue JS full calendar, no dependency, no BS. :metal:
7 lines (6 loc) • 4.54 kB
JavaScript
var __defProp=Object.defineProperty,__defNormalProp=(e,t,l)=>t in e?__defProp(e,t,{enumerable:!0,configurable:!0,writable:!0,value:l}):e[t]=l,__publicField=(e,t,l)=>__defNormalProp(e,"symbol"!=typeof t?t+"":t,l)
/**
* vue-cal v4.10.2
* (c) 2025 Antoni Andre <antoniandre.web@gmail.com>
* @license MIT
*/;define(["exports"],(function(e){"use strict";let t=null,l=null,i={id:null,date:null},a=!1,n=!0,r={el:null,cell:null,timeout:null};const u={_eid:null,fromVueCal:null,toVueCal:null};e.DragAndDrop=class{constructor(e){__publicField(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,u._eid=t._eid,u.fromVueCal=this._vuecal._.uid,t.dragging=!0,setTimeout((()=>t.draggingStatic=!0),0),a=!1,i={id:this._vuecal.view.id,date:this._vuecal.view.startDate},n=!0}eventDragEnd(e){this._vuecal.domEvents.dragAnEvent._eid=null,u._eid=null,e.dragging=!1,e.draggingStatic=!1;const{fromVueCal:t,toVueCal:l}=u;l&&t!==l&&this._vuecal.utils.event.deleteAnEvent(e),u.fromVueCal=null,u.toVueCal=null,a&&n&&i.id&&this._vuecal.switchView(i.id,i.date,!0)}cellDragEnter(e,t,l){const i=e.currentTarget;if(!e.currentTarget.contains(e.relatedTarget)){if(i===r.el||!i.className.includes("vuecal__cell-content"))return!1;r.el&&(r.cell.highlighted=!1),r={el:i,cell:t,timeout:clearTimeout(r.timeout)},t.highlighted=!0,["years","year","month"].includes(this._vuecal.view.id)&&(r.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,r.cell===t&&(clearTimeout(r.timeout),r={el:null,cell:null,timeout:null},t.highlighted=!1))}cellDragDrop(e,t,l,i){e.preventDefault(),clearTimeout(r.timeout),r={el:null,cell:null,timeout:null};const a=JSON.parse(e.dataTransfer.getData("event")||"{}");let s,c;if(u.fromVueCal!==this._vuecal._.uid){const{_eid:e,start:t,end:n,duration:r,...u}=a;s=this._vuecal.utils.event.createAnEvent(l,r,{...u,split:i})}else if(s=this._vuecal.view.events.find((e=>e._eid===u._eid)),s||(s=this._vuecal.mutableEvents.find((e=>e._eid===u._eid)),c=!!s),!s){const e=a.endTimeMinutes-a.startTimeMinutes,{start:t,end:n,...r}=a;s=this._vuecal.utils.event.createAnEvent(l,e,{...r,split:i})}const{start:o,split:d}=s;this._updateEventStartEnd(e,s,a,l),c&&this._vuecal.addEventsToView([s]),s.dragging=!1,(i||0===i)&&(s.split=i),t.highlighted=!1,t.highlightedSplit=null,n=!1,u.toVueCal=this._vuecal._.uid;const v={event:this._vuecal.cleanupEvent(s),oldDate:o,newDate:s.start,...(i||0===i)&&{oldSplit:d,newSplit:i},originalEvent:this._vuecal.cleanupEvent(a),external:!u.fromVueCal};this._vuecal.$emit("event-drop",v),this._vuecal.$emit("event-change",{event:v.event,originalEvent:v.originalEvent}),setTimeout((()=>{u._eid&&this.eventDragEnd(s)}),300)}viewSelectorDragEnter(e,i,n){e.currentTarget.contains(e.relatedTarget)||(n.highlightedControl=i,clearTimeout(t),t=setTimeout((()=>{if(["previous","next"].includes(i))this._vuecal[i](),clearInterval(l),l=setInterval(this._vuecal[i],800);else if("today"===i){let e;clearInterval(l),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(i,null,!0);a=!0}),800))}viewSelectorDragLeave(e,i,a){e.currentTarget.contains(e.relatedTarget)||a.highlightedControl===i&&(a.highlightedControl=null,t&&(t=clearTimeout(t)),l&&(l=clearInterval(l)))}},Object.defineProperty(e,Symbol.toStringTag,{value:"Module"})}));