diff --git a/packages/plugin/src/Controllers/ViewController.php b/packages/plugin/src/Controllers/ViewController.php index 71524b7a..02e342b7 100644 --- a/packages/plugin/src/Controllers/ViewController.php +++ b/packages/plugin/src/Controllers/ViewController.php @@ -133,6 +133,7 @@ public function actionTargetTime( 'calendarView' => $calendarView, 'calendarLanguage' => $language, 'calendarOptions' => $calendarOptions, + 'allowEventsToBeModifiedByDragAndDrop' => $this->getSettingsService()->allowEventsToBeModifiedByDragAndDrop(), 'isQuickCreateEnabled' => $this->getSettingsService()->isQuickCreateEnabled(), 'currentSiteId' => $currentSiteId, 'siteMap' => $siteMap, diff --git a/packages/plugin/src/Elements/Event.php b/packages/plugin/src/Elements/Event.php index ccef8d49..e40f75db 100644 --- a/packages/plugin/src/Elements/Event.php +++ b/packages/plugin/src/Elements/Event.php @@ -1383,7 +1383,9 @@ public function jsonSerialize(): array 'handle' => $this->getSite()->handle, 'language' => $this->getSite()->language, ], - 'editable' => $this->isEditable(), + 'canEdit' => $this->isEditable(), + 'startEditable' => $this->isEditable() && Calendar::getInstance()->settings->allowEventsToBeModifiedByDragAndDrop(), + 'durationEditable' => $this->isEditable() && Calendar::getInstance()->settings->allowEventsToBeModifiedByDragAndDrop(), 'enabled' => (bool) $this->enabled, 'backgroundColor' => $this->getCalendar()->color, 'borderColor' => $this->getCalendar()->getDarkerColor(), diff --git a/packages/plugin/src/Models/SettingsModel.php b/packages/plugin/src/Models/SettingsModel.php index f612e036..306be8ff 100644 --- a/packages/plugin/src/Models/SettingsModel.php +++ b/packages/plugin/src/Models/SettingsModel.php @@ -13,6 +13,7 @@ class SettingsModel extends Model public const DEFAULT_ALL_DAY = false; public const DEFAULT_SHOW_MINI_CAL = true; public const DEFAULT_SHOW_DISABLED_EVENTS = true; + public const DEFAULT_ALLOW_EVENTS_TO_BE_MODIFIED_BY_DRAG_AND_DROP = true; public const DEFAULT_VIEW = Calendar::VIEW_MONTH; public const DEFAULT_ALLOW_QUICK_CREATE = true; public const DEFAULT_AUTHORED_EVENT_EDIT_ONLY = false; @@ -36,6 +37,8 @@ class SettingsModel extends Model public null|array|bool $showDisabledEvents = null; + public null|array|bool $allowEventsToBeModifiedByDragAndDrop = null; + public null|array|bool $quickCreateEnabled = null; public ?string $defaultView = null; @@ -93,6 +96,7 @@ public function __construct(array $attributes = []) $this->defaultView = self::DEFAULT_VIEW; $this->guestAccess = null; $this->quickCreateEnabled = self::DEFAULT_ALLOW_QUICK_CREATE; + $this->allowEventsToBeModifiedByDragAndDrop = self::DEFAULT_ALLOW_EVENTS_TO_BE_MODIFIED_BY_DRAG_AND_DROP; $this->showDisabledEvents = self::DEFAULT_SHOW_DISABLED_EVENTS; $this->authoredEventEditOnly = self::DEFAULT_AUTHORED_EVENT_EDIT_ONLY; $this->firstDayOfWeek = self::DEFAULT_FIRST_DAY_OF_WEEK; diff --git a/packages/plugin/src/Resources/js/scripts/calendars/fullcalendar-methods.js b/packages/plugin/src/Resources/js/scripts/calendars/fullcalendar-methods.js index af639dee..7d110d73 100644 --- a/packages/plugin/src/Resources/js/scripts/calendars/fullcalendar-methods.js +++ b/packages/plugin/src/Resources/js/scripts/calendars/fullcalendar-methods.js @@ -1 +1 @@ -!function(e){var t={};function a(n){if(t[n])return t[n].exports;var r=t[n]={i:n,l:!1,exports:{}};return e[n].call(r.exports,r,r.exports,a),r.l=!0,r.exports}a.m=e,a.c=t,a.d=function(e,t,n){a.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(e,t){if(1&t&&(e=a(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(a.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)a.d(n,r,function(t){return e[t]}.bind(null,r));return n},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.p="",a(a.s=0)}([function(e,t,a){"use strict";a.r(t),a.d(t,"renderEvent",(function(){return d})),a.d(t,"today",(function(){return i})),a.d(t,"renderDay",(function(){return s})),a.d(t,"renderView",(function(){return u})),a.d(t,"eventRepositioned",(function(){return f})),a.d(t,"eventDateChange",(function(){return p})),a.d(t,"eventDurationChange",(function(){return m})),a.d(t,"eventClick",(function(){return v})),a.d(t,"getDayViewLink",(function(){return y})),a.d(t,"getEvents",(function(){return b})),a.d(t,"closeAllPopups",(function(){return C})),a.d(t,"enablePopups",(function(){return h})),a.d(t,"getSpinner",(function(){return g}));var n=a(1);function r(e){return function(e){if(Array.isArray(e))return o(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return o(e,t);var a=Object.prototype.toString.call(e).slice(8,-1);"Object"===a&&e.constructor&&(a=e.constructor.name);if("Map"===a||"Set"===a)return Array.from(e);if("Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a))return o(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=new Array(t);a").addClass("fc-color-icon").css("background-color",e.backgroundColor).css("border-color",e.borderColor);$(".fc-content",t).prepend(a)}e.enabled||t.addClass("fc-event-disabled"),t.addClass("fc-color-"+e.textColor);var r=l.data(),o=r.timeFormat,c=r.isMultiSite;Object(n.buildEventPopup)(e,t,o,void 0!==c)}},i=new moment,s=function(e,t){var a=t.parents(".fc-bg:first").siblings(".fc-content-skeleton").find("thead > tr > td:eq("+t.index()+")"),n=y(e),r=$("").attr("href",n).html(a.html());a.html(r)},u=function(e,t){var a=t.parents("#solspace-calendar"),n=new moment(a.data("current-day"));"agendaWeek"===e.name&&$(".fc-day-header.fc-widget-header",t).each((function(){var e=$(this).html(),t=e.split(" ");e=t[0]+" "+t[1]+"";var a=new moment($(this).data("date")),r=y(a),o=$("").attr("href",r).html(e);n.format("YYYYMMDD")===a.format("YYYYMMDD")&&o.addClass("fc-title-today"),$(this).html(o)}));$(".fc-localeButton-button",l).addClass("menubtn btn"),"agendaDay"===e.name&&$("thead.fc-head",t).remove()},f=function(e,t,a,n){var r,o,l;$.ajax({url:Craft.getCpUrl("calendar/events/api/modify-"+e),type:"post",dataType:"json",data:(r={eventId:t.id,siteId:t.site.id,isAllDay:t.allDay,startDate:t.start.toISOString(),endDate:t.end?t.end.toISOString():null,deltaSeconds:parseInt(a.as("seconds"),10)},o=Craft.csrfTokenName,l=Craft.csrfTokenValue,o in r?Object.defineProperty(r,o,{value:l,enumerable:!0,configurable:!0,writable:!0}):r[o]=l,r),success:function(e){e.error?n():t.repeats&&$calendar.fullCalendar("refetchEvents")},error:function(){n()}})},p=function(e,t,a){f("date",e,t,a)},m=function(e,t,a){f("duration",e,t,a)},v=function(e){window.location.href=Craft.getCpUrl("calendar/events/"+e.id+"/"+e.site.handle)},y=function(e){if(e.isValid()){var t=e.format("YYYY"),a=e.format("MM"),n=e.format("DD");return Craft.getCpUrl("calendar/view/day/"+t+"/"+a+"/"+n)}return""},b=function(e,t,a,n){g().fadeIn("fast");var o=$("ul.calendar-list"),l="*";o.length&&(l=$("input:checked",o).map((function(){return $(this).val()})).get().join());var c=$("#solspace-calendar").data().currentSiteId,d=$("form.calendar-filters"),i=[].concat(r(d.serializeArray()),[{name:"rangeStart",value:e.toISOString()},{name:"rangeEnd",value:t.toISOString()},{name:"calendars",value:l},{name:"siteId",value:c},{name:[Craft.csrfTokenName],value:Craft.csrfTokenValue}]);$.ajax({url:Craft.getCpUrl("calendar/month"),data:$.param(i),type:"post",dataType:"json",success:function(e){for(var t=0;t
  • ",{text:e.error}));else if(e.event){var t=e.event;t.allDay&&(t.end=moment(t.end).add(2,"s").utc().format()),$("*[data-calendar-instance]").fullCalendar("renderEvent",t),$("*[data-calendar-instance]").fullCalendar("unselect"),l(a,c)}},error:function(e){var t,a=e.responseJSON;Craft.cp.displayNotification("error",null!==(t=null==a?void 0:a.message)&&void 0!==t?t:Craft.t("app","An error occurred."))},complete:function(){e.prop("disabled",!1).removeClass("disabled"),e.text(Craft.t("app","Save"))}})})),$("button.delete",u).unbind("click").click((function(){return l(a,c)})),setTimeout((function(){$("input[name=title]:first",u).val("").focus().bind("keypress",(function(e){13===(e.which?e.which:e.keyCode)&&$("button.submit",u).trigger("click")}))}),100)}},d=function(e,t,a){var r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(e.calendar){var o=moment(e.start),l=moment(e.end),c="dddd, MMMM D, YYYY";e.allDay?l.subtract(1,"days"):c=c+" ["+Craft.t("calendar","at")+"] "+a;var d=document.createElement("div");d.className="sc-event-popup";var i=document.createElement("div");i.className="sc-event-popup__titlebar",i.innerHTML=''+e.title+'',d.appendChild(i);var s=document.createElement("div");if(s.className="sc-event-popup__body",s.innerHTML+='
    '+e.calendar.name+"
    ",s.innerHTML+='
    "+o.format(c)+'
    "+l.format(c)+"
    ",e.repeats&&(s.innerHTML+='
    '),e.editable){var u='
    ",s.innerHTML+=u}d.appendChild(s);var f=tippy(t[0],{arrow:!0,content:d,placement:"auto",interactive:!0,delay:[500,300],theme:"calendar-event",appendTo:document.body,onShow:function(){if(!window.calendarPopupsEnabled)return!1;e.repeats&&$.ajax({cache:!1,url:Craft.getCpUrl("calendar/events/api/first-occurrence-date"),type:"post",dataType:"json",data:n({eventId:e.id},Craft.csrfTokenName,Craft.csrfTokenValue),success:function(e){if(e.success&&e.event&&e.event.hasOwnProperty("readableRepeatRule")){var t=d.querySelector(".event-repeats");t&&(t.innerHTML=" "+e.event.readableRepeatRule)}}})}});d.querySelector(".sc-event-popup__close").addEventListener("click",(function(){return f.hide()}));var p=d.querySelector(".delete-event");p&&p.addEventListener("click",(function(e){e.preventDefault(),confirm(Craft.t("calendar","Are you sure you want to delete this event?"))&&$.ajax({url:this.href,type:"post",dataType:"json",data:n({eventId:this.dataset.id},Craft.csrfTokenName,Craft.csrfTokenValue),success:function(t){if(!t.error)return $("*[data-calendar-instance]").fullCalendar("removeEvents",e.id),void f.destroy();console.warn(t.error)}})}));var m=d.querySelector(".delete-event-occurrence");m&&m.addEventListener("click",(function(e){e.preventDefault(),confirm(Craft.t("calendar","Are you sure?"))&&$.ajax({url:this.href,type:"post",dataType:"json",data:n({eventId:this.dataset.id,date:this.dataset.date},Craft.csrfTokenName,Craft.csrfTokenValue),success:function(e){if(!e.error)return $("*[data-calendar-instance]").fullCalendar("refetchEvents"),void f.destroy();console.warn(e.error)}})}))}},i=function(e){return new Date(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds())}}]); \ No newline at end of file +!function(e){var t={};function a(n){if(t[n])return t[n].exports;var r=t[n]={i:n,l:!1,exports:{}};return e[n].call(r.exports,r,r.exports,a),r.l=!0,r.exports}a.m=e,a.c=t,a.d=function(e,t,n){a.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(e,t){if(1&t&&(e=a(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(a.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)a.d(n,r,function(t){return e[t]}.bind(null,r));return n},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.p="",a(a.s=1)}([function(e,t,a){"use strict";function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}a.r(t),a.d(t,"showEventCreator",(function(){return d})),a.d(t,"buildEventPopup",(function(){return i})),a.d(t,"hideAllPopups",(function(){return s})),a.d(t,"createDateAsUTC",(function(){return u}));var r=!1,o=$("#solspace-calendar"),l=new Set,c=function(e,t){document.body.removeChild(e),document.body.removeChild(t),$("#event-creator").removeClass("shown").insertAfter($("#solspace-calendar")),$("*[data-calendar-instance]").fullCalendar("unselect"),r=!1},d=function(e,t){if(!r){r=!0;var a=document.createElement("div");a.className="sc-event-creator-backdrop";var l=document.createElement("div");l.className="sc-event-creator-modal";var d=document.createElement("div");d.className="sc-event-creator-modal__titlebar",d.innerHTML=""+Craft.t("calendar","New Event")+'',l.appendChild(d),l.appendChild(document.getElementById("event-creator")),document.body.appendChild(a),document.body.appendChild(l),a.addEventListener("click",(function(){return c(a,l)})),l.querySelector(".sc-event-creator-modal__close").addEventListener("click",(function(){return c(a,l)}));var i=o.data().currentSiteId,s=$("#event-creator"),f=$('input[name="startDate[date]"]',s),p=$('input[name="startDate[time]"]',s),m=$('input[name="endDate[date]"]',s),v=$('input[name="endDate[time]"]',s);$("ul.errors",s).empty();var y=e.utc().format("HHmmss"),b=t.utc().format("HHmmss"),C=!1;y===b&&"000000"===b&&(t.subtract(1,"seconds"),C=!0);var h=u(e.toDate()),g=u(t.toDate());s.addClass("shown"),f.datepicker("setDate",h),m.datepicker("setDate",g),p.timepicker("setTime",h),v.timepicker("setTime",g);var D=$("input[name=allDay]"),w=D.parents(".lightswitch:first");$("input",w).val(C?1:""),C?(w.data("lightswitch").turnOn(),$(".timewrapper",s).hide()):(w.data("lightswitch").turnOff(),$(".timewrapper",s).show());var k=p.timepicker("option","timeFormat").replace("h","hh").replace("H","HH").replace("G","H").replace("g","h").replace("A","a").replace("i","mm");$("button.submit",s).unbind("click").click((function(){var e=$(this),t=$("input[name=title]",s).val(),r=$("select[name=calendarId]",s).val(),o=moment(f.datepicker("getDate")),d=moment(p.val().replace(/(a|p)\.(m)\./gi,"$1$2"),k),u=moment(m.datepicker("getDate")),y=moment(v.val().replace(/(a|p)\.(m)\./gi,"$1$2"),k);e.prop("disabled",!0).addClass("disabled"),e.text(Craft.t("app","Saving...")),$.ajax({url:Craft.getCpUrl("calendar/events/api/create"),type:"post",dataType:"json",data:n({siteId:i,startDate:o.format("YYYY-MM-DD")+" "+d.format("HH:mm:ss"),endDate:u.format("YYYY-MM-DD")+" "+y.format("HH:mm:ss"),allDay:D.val(),event:{title:t,calendarId:r}},Craft.csrfTokenName,Craft.csrfTokenValue),success:function(e){if(e.error)$("ul.errors",s).empty().append($("
  • ",{text:e.error}));else if(e.event){var t=e.event;t.allDay&&(t.end=moment(t.end).add(2,"s").utc().format()),$("*[data-calendar-instance]").fullCalendar("renderEvent",t),$("*[data-calendar-instance]").fullCalendar("unselect"),c(a,l)}},error:function(e){var t,a=e.responseJSON;Craft.cp.displayNotification("error",null!==(t=null==a?void 0:a.message)&&void 0!==t?t:Craft.t("app","An error occurred."))},complete:function(){e.prop("disabled",!1).removeClass("disabled"),e.text(Craft.t("app","Save"))}})})),$("button.delete",s).unbind("click").click((function(){return c(a,l)})),setTimeout((function(){$("input[name=title]:first",s).val("").focus().bind("keypress",(function(e){13===(e.which?e.which:e.keyCode)&&$("button.submit",s).trigger("click")}))}),100)}},i=function(e,t,a){var r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(e.calendar&&window.calendarPopupsEnabled){t[0]._tippy&&t[0]._tippy.destroy();var o=moment(e.start),c=moment(e.end),d="dddd, MMMM D, YYYY";e.allDay?c.subtract(1,"days"):d=d+" ["+Craft.t("calendar","at")+"] "+a;var i=document.createElement("div");i.className="sc-event-popup";var s=document.createElement("div");s.className="sc-event-popup__titlebar",s.innerHTML=''+e.title+'',i.appendChild(s);var u=document.createElement("div");if(u.className="sc-event-popup__body",u.innerHTML+='
    '+e.calendar.name+"
    ",u.innerHTML+='
    "+o.format(d)+'
    "+c.format(d)+"
    ",e.repeats&&(u.innerHTML+='
    '),e.canEdit){var f='",u.innerHTML+=f}i.appendChild(u);var p=tippy(t[0],{arrow:!0,content:i,placement:"auto",interactive:!0,delay:[500,300],theme:"calendar-event",appendTo:document.body,onDestroy:function(){l.delete(p)},onShow:function(){if(!window.calendarPopupsEnabled)return!1;e.repeats&&$.ajax({cache:!1,url:Craft.getCpUrl("calendar/events/api/first-occurrence-date"),type:"post",dataType:"json",data:n({eventId:e.id},Craft.csrfTokenName,Craft.csrfTokenValue),success:function(e){if(e.success&&e.event&&e.event.hasOwnProperty("readableRepeatRule")){var t=i.querySelector(".event-repeats");t&&(t.innerHTML=" "+e.event.readableRepeatRule)}}})}});l.add(p),i.querySelector(".sc-event-popup__close").addEventListener("click",(function(){return p.hide()}));var m=i.querySelector(".delete-event");m&&m.addEventListener("click",(function(e){e.preventDefault(),confirm(Craft.t("calendar","Are you sure you want to delete this event?"))&&$.ajax({url:this.href,type:"post",dataType:"json",data:n({eventId:this.dataset.id},Craft.csrfTokenName,Craft.csrfTokenValue),success:function(t){if(!t.error)return $("*[data-calendar-instance]").fullCalendar("removeEvents",e.id),void p.destroy();console.warn(t.error)}})}));var v=i.querySelector(".delete-event-occurrence");v&&v.addEventListener("click",(function(e){e.preventDefault(),confirm(Craft.t("calendar","Are you sure?"))&&$.ajax({url:this.href,type:"post",dataType:"json",data:n({eventId:this.dataset.id,date:this.dataset.date},Craft.csrfTokenName,Craft.csrfTokenValue),success:function(e){if(!e.error)return $("*[data-calendar-instance]").fullCalendar("refetchEvents"),void p.destroy();console.warn(e.error)}})}))}},s=function(){l.forEach((function(e){return e.destroy()})),l.clear()},u=function(e){return new Date(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds())}},function(e,t,a){"use strict";a.r(t),a.d(t,"renderEvent",(function(){return d})),a.d(t,"today",(function(){return i})),a.d(t,"renderDay",(function(){return s})),a.d(t,"renderView",(function(){return u})),a.d(t,"eventRepositioned",(function(){return f})),a.d(t,"eventDateChange",(function(){return p})),a.d(t,"eventDurationChange",(function(){return m})),a.d(t,"eventClick",(function(){return v})),a.d(t,"getDayViewLink",(function(){return y})),a.d(t,"getEvents",(function(){return b})),a.d(t,"closeAllPopups",(function(){return C})),a.d(t,"enablePopups",(function(){return h})),a.d(t,"getSpinner",(function(){return g}));var n=a(0);function r(e){return function(e){if(Array.isArray(e))return o(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return o(e,t);var a=Object.prototype.toString.call(e).slice(8,-1);"Object"===a&&e.constructor&&(a=e.constructor.name);if("Map"===a||"Set"===a)return Array.from(e);if("Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a))return o(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=new Array(t);a").addClass("fc-color-icon").css("background-color",e.backgroundColor).css("border-color",e.borderColor);$(".fc-content",t).prepend(a)}e.enabled||t.addClass("fc-event-disabled"),t.addClass("fc-color-"+e.textColor);var r=l.data(),o=r.timeFormat,c=r.isMultiSite;Object(n.buildEventPopup)(e,t,o,void 0!==c)}},i=new moment,s=function(e,t){var a=t.parents(".fc-bg:first").siblings(".fc-content-skeleton").find("thead > tr > td:eq("+t.index()+")"),n=y(e),r=$("").attr("href",n).html(a.html());a.html(r)},u=function(e,t){var a=t.parents("#solspace-calendar"),n=new moment(a.data("current-day"));"agendaWeek"===e.name&&$(".fc-day-header.fc-widget-header",t).each((function(){var e=$(this).html(),t=e.split(" ");e=t[0]+" "+t[1]+"";var a=new moment($(this).data("date")),r=y(a),o=$("").attr("href",r).html(e);n.format("YYYYMMDD")===a.format("YYYYMMDD")&&o.addClass("fc-title-today"),$(this).html(o)}));$(".fc-localeButton-button",l).addClass("menubtn btn"),"agendaDay"===e.name&&$("thead.fc-head",t).remove()},f=function(e,t,a,n){var r,o,l;$.ajax({url:Craft.getCpUrl("calendar/events/api/modify-"+e),type:"post",dataType:"json",data:(r={eventId:t.id,siteId:t.site.id,isAllDay:t.allDay,startDate:t.start.toISOString(),endDate:t.end?t.end.toISOString():null,deltaSeconds:parseInt(a.as("seconds"),10)},o=Craft.csrfTokenName,l=Craft.csrfTokenValue,o in r?Object.defineProperty(r,o,{value:l,enumerable:!0,configurable:!0,writable:!0}):r[o]=l,r),success:function(e){e.error?n():t.repeats&&$calendar.fullCalendar("refetchEvents")},error:function(){n()}})},p=function(e,t,a){f("date",e,t,a)},m=function(e,t,a){f("duration",e,t,a)},v=function(e){window.location.href=Craft.getCpUrl("calendar/events/"+e.id+"/"+e.site.handle)},y=function(e){if(e.isValid()){var t=e.format("YYYY"),a=e.format("MM"),n=e.format("DD");return Craft.getCpUrl("calendar/view/day/"+t+"/"+a+"/"+n)}return""},b=function(e,t,a,n){g().fadeIn("fast");var o=$("ul.calendar-list"),l="*";o.length&&(l=$("input:checked",o).map((function(){return $(this).val()})).get().join());var c=$("#solspace-calendar").data().currentSiteId,d=$("form.calendar-filters"),i=[].concat(r(d.serializeArray()),[{name:"rangeStart",value:e.toISOString()},{name:"rangeEnd",value:t.toISOString()},{name:"calendars",value:l},{name:"siteId",value:c},{name:[Craft.csrfTokenName],value:Craft.csrfTokenValue}]);$.ajax({url:Craft.getCpUrl("calendar/month"),data:$.param(i),type:"post",dataType:"json",success:function(e){for(var t=0;t").attr("href",n).html(a.html());a.html(r)},u=function(e,t){var a=t.parents("#solspace-calendar"),n=new moment(a.data("current-day"));"agendaWeek"===e.name&&$(".fc-day-header.fc-widget-header",t).each((function(){var e=$(this).html(),t=e.split(" ");e=t[0]+" "+t[1]+"";var a=new moment($(this).data("date")),r=h(a),l=$("").attr("href",r).html(e);n.format("YYYYMMDD")===a.format("YYYYMMDD")&&l.addClass("fc-title-today"),$(this).html(l)}));$(".fc-localeButton-button",i).addClass("menubtn btn"),"agendaDay"===e.name&&$("thead.fc-head",t).remove()},f=function(e,t,a,n){var r,l,i;$.ajax({url:Craft.getCpUrl("calendar/events/api/modify-"+e),type:"post",dataType:"json",data:(r={eventId:t.id,siteId:t.site.id,isAllDay:t.allDay,startDate:t.start.toISOString(),endDate:t.end?t.end.toISOString():null,deltaSeconds:parseInt(a.as("seconds"),10)},l=Craft.csrfTokenName,i=Craft.csrfTokenValue,l in r?Object.defineProperty(r,l,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[l]=i,r),success:function(e){e.error?n():t.repeats&&$calendar.fullCalendar("refetchEvents")},error:function(){n()}})},p=function(e,t,a){f("date",e,t,a)},v=function(e,t,a){f("duration",e,t,a)},m=function(e){window.location.href=Craft.getCpUrl("calendar/events/"+e.id+"/"+e.site.handle)},h=function(e){if(e.isValid()){var t=e.format("YYYY"),a=e.format("MM"),n=e.format("DD");return Craft.getCpUrl("calendar/view/day/"+t+"/"+a+"/"+n)}return""},y=function(e,t,a,n){g().fadeIn("fast");var l=$("ul.calendar-list"),i="*";l.length&&(i=$("input:checked",l).map((function(){return $(this).val()})).get().join());var o=$("#solspace-calendar").data().currentSiteId,c=$("form.calendar-filters"),d=[].concat(r(c.serializeArray()),[{name:"rangeStart",value:e.toISOString()},{name:"rangeEnd",value:t.toISOString()},{name:"calendars",value:i},{name:"siteId",value:o},{name:[Craft.csrfTokenName],value:Craft.csrfTokenValue}]);$.ajax({url:Craft.getCpUrl("calendar/month"),data:$.param(d),type:"post",dataType:"json",success:function(e){for(var t=0;t
  • ",{text:e.error}));else if(e.event){var t=e.event;t.allDay&&(t.end=moment(t.end).add(2,"s").utc().format()),$("*[data-calendar-instance]").fullCalendar("renderEvent",t),$("*[data-calendar-instance]").fullCalendar("unselect"),i(a,o)}},error:function(e){var t,a=e.responseJSON;Craft.cp.displayNotification("error",null!==(t=null==a?void 0:a.message)&&void 0!==t?t:Craft.t("app","An error occurred."))},complete:function(){e.prop("disabled",!1).removeClass("disabled"),e.text(Craft.t("app","Save"))}})})),$("button.delete",u).unbind("click").click((function(){return i(a,o)})),setTimeout((function(){$("input[name=title]:first",u).val("").focus().bind("keypress",(function(e){13===(e.which?e.which:e.keyCode)&&$("button.submit",u).trigger("click")}))}),100)}},c=function(e,t,a){var r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(e.calendar){var l=moment(e.start),i=moment(e.end),o="dddd, MMMM D, YYYY";e.allDay?i.subtract(1,"days"):o=o+" ["+Craft.t("calendar","at")+"] "+a;var c=document.createElement("div");c.className="sc-event-popup";var d=document.createElement("div");d.className="sc-event-popup__titlebar",d.innerHTML=''+e.title+'',c.appendChild(d);var s=document.createElement("div");if(s.className="sc-event-popup__body",s.innerHTML+='
    '+e.calendar.name+"
    ",s.innerHTML+='
    "+l.format(o)+'
    "+i.format(o)+"
    ",e.repeats&&(s.innerHTML+='
    '),e.editable){var u='
    ",s.innerHTML+=u}c.appendChild(s);var f=tippy(t[0],{arrow:!0,content:c,placement:"auto",interactive:!0,delay:[500,300],theme:"calendar-event",appendTo:document.body,onShow:function(){if(!window.calendarPopupsEnabled)return!1;e.repeats&&$.ajax({cache:!1,url:Craft.getCpUrl("calendar/events/api/first-occurrence-date"),type:"post",dataType:"json",data:n({eventId:e.id},Craft.csrfTokenName,Craft.csrfTokenValue),success:function(e){if(e.success&&e.event&&e.event.hasOwnProperty("readableRepeatRule")){var t=c.querySelector(".event-repeats");t&&(t.innerHTML=" "+e.event.readableRepeatRule)}}})}});c.querySelector(".sc-event-popup__close").addEventListener("click",(function(){return f.hide()}));var p=c.querySelector(".delete-event");p&&p.addEventListener("click",(function(e){e.preventDefault(),confirm(Craft.t("calendar","Are you sure you want to delete this event?"))&&$.ajax({url:this.href,type:"post",dataType:"json",data:n({eventId:this.dataset.id},Craft.csrfTokenName,Craft.csrfTokenValue),success:function(t){if(!t.error)return $("*[data-calendar-instance]").fullCalendar("removeEvents",e.id),void f.destroy();console.warn(t.error)}})}));var v=c.querySelector(".delete-event-occurrence");v&&v.addEventListener("click",(function(e){e.preventDefault(),confirm(Craft.t("calendar","Are you sure?"))&&$.ajax({url:this.href,type:"post",dataType:"json",data:n({eventId:this.dataset.id,date:this.dataset.date},Craft.csrfTokenName,Craft.csrfTokenValue),success:function(e){if(!e.error)return $("*[data-calendar-instance]").fullCalendar("refetchEvents"),void f.destroy();console.warn(e.error)}})}))}},d=function(e){return new Date(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds())}},,function(e,t,a){"use strict";a.r(t);var n=a(0),r=a(1);function l(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var a=e&&("undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"]);if(null==a)return;var n,r,l=[],i=!0,o=!1;try{for(a=a.call(e);!(i=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);i=!0);}catch(e){o=!0,r=e}finally{try{i||null==a.return||a.return()}finally{if(o)throw r}}return l}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return i(e,t);var a=Object.prototype.toString.call(e).slice(8,-1);"Object"===a&&e.constructor&&(a=e.constructor.name);if("Map"===a||"Set"===a)return Array.from(e);if("Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a))return i(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=new Array(t);a",{class:"menu"}).insertAfter(e.currentTarget),r=$("