{"version":3,"sources":["webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/event-renderer/event-base.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/event-renderer/month.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/event-renderer/timeline-view.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/event-renderer/inline-edit.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/event-renderer/vertical-view.js"],"names":["EventBase","parent","this","slots","isDoubleTapped","prototype","processData","events","timeZonePropChanged","oldTimezone","_this","start","activeView","startDate","end","endDate","fields","eventFields","processed","temp","generateID","resourceCollection","resourceBase","length","id","_loop_1","event_1","this_1","updateEventDateTime","processTimezoneChange","isPrinting","uiStateValues","isPreventTimezone","processTimezone","level","parseInt","toString","field","undefined","recurrenceRule","recurrenceID","crudModule","crudObj","isCrudAction","recurrenceEvent","generateOccurrence","_loop_2","occurrence","app","eventsProcessed","filter","data","startTime","getTime","Guid","generateGuid","push","_i","recurrenceEvent_1","concat","events_1","eventData","isBlock","filterEvents","blockData","_a","blockData_1","eventObj","isAllDay","isDifferentDate","Date","endTime","blockProcessed","getProcessedEvents","eventCollection","eventsData","eventCollection_1","event_2","timezonePropertyChange","notify","processedData","timezoneConvert","startTimezone","endTimezone","timezone","startTz","endTz","tzModule","convert","event","add","remove","isReverse","filterBlockEvents","resourceData","eStart","eEnd","activeViewOptions","group","resources","getGroupIndexFromEvent","lastResourceLevel","blockEvents","blockEvents_1","eventObj_1","isDifferentTime","appointments","resourceTdData","predicate","dataModule","getStartEndQuery","json","executeLocal","where","filterEventsByResource","sortByTime","filterEventsByRange","filteredEvents","e","groupOrder","keys","Object","filteredCollection","every","key","Array","indexOf","appointmentsCollection","eventSettings","sortComparer","fieldMappings_1","sort","a","b","d1","d2","customSorting","sortByDateTime","fieldMapping_1","object1","object2","d3","d4","d5","d6","call","splits","split","sortFn","window","getSmallestMissingNumber","array","large","Math","max","apply","i","splitEventByDay","eventStartTime","eventEndTime","getHours","getMinutes","index","eventLength","count","isSpanned","setHours","getSeconds","splitEvent","dateRender","orgStart","orgEnd","ranges","cStart","slot","currentView","byDate","showWeekend","slotDates","slot_1","s","renderedDates","getRenderedDates","renderedDates_1","date","firstSlot","startIndex","endIndex","hasBreak","isLeft","isRight","cloneEventObject","dateInRange","availSlot","_b","availSlot_1","slot_2","getSelectedEventElements","target","removeSelectedAppointmentClass","selectedElements","isAlreadySelected","element","getAttribute","elementSelector","focusElements","slice","querySelectorAll","focusElements_1","addSelectedAppointments","getSelectedEvents","eventSelect","elementSelect","selectAppointments","isAlreadyAdded","getEventByGuid","selectedAppointments","getSelectedAppointments","cells","preventFocus","removeSelectedClass","focus","focusElement","isFocused","eventWindow","dialogObject","visible","activeEle","document","activeElement","selectedCell","getSelectedCells","contains","activeEventData","keyboardInteractionModule","activeCellsData","selectCells","selectWorkCellByTime","selectedObject","nearestTime","setMinutes","isAllDayAppointment","targetArea","getAllDayRow","getContentTable","queryString","querySelector","getCellDetails","levelIndex","resource","levelName","idField","name","parentField","getIndexFromResourceId","fieldMapping","isFullDay","spannedEventPlacement","addEventListener","on","appointmentBorderRemove","removeEventListener","off","wireAppointmentEvents","isPreventCrud","isReadOnly","isReadonly","eventClick","isAdaptive","readonly","eventTouchClick","eventDoubleClick","resizeModule","wireResizeEvent","dragAndDropModule","wireDragEvent","setTimeout","preventDefault","renderResizeHandler","spanEvent","allowResizing","resizeEdge","resizeHandler","className","appendChild","enableRtl","isTop","isBottom","classList","ctrlKey","metaKey","which","quickPopup","hide","target_1","selectArgs","requestType","trigger","args","cancel","originalEvent","selectEventArgs","eventClickArgs","quickPopupHide","allowInline","inlineArgs","type","openEditor","currentAction","openRecurrenceAlert","guid","getEventById","replace","c","r","random","v","getEventIDType","getEventMaxID","resourceId","eventId","idType","datas","appIds","map","maxId","reduce","isMultiple","eventObject","obj","viewDate","isMaxCount","eventRule","timeZoneDiff","getTimezoneOffset","duration","maxCount","exception","recurrenceException","newTimezone","getLocalTimezoneName","firstDay","firstDayOfWeek","calendarMode","dates","generatedDates","occurrenceCollection","dates_1","clonedObject","getDSTAdjustedTime","setMilliseconds","followingID","occurDate","eventOffset","getDSTDiff","schOffset","startOffset","offset","occurOffset","getParentEvent","isParent","parentEvent","getFollowingEvent","collection","getEventCollections","followObj","follow","parentObj","childObj","followingCollection","followingEvent","getOccurrenceEvent","collections","fields_1","fieldValue","parentApp","shift","isFollowingEvent","parentStart","childStart","isGuid","isFollowing","fieldKey","dataSource","getOccurrencesByID","parentObject","parentObject_1","event_3","getOccurrencesByRange","event_4","getDeletedOccurrences","recurrenceData","deletedOccurrences","exDateString_1","_loop_3","len","edited","this_2","exDate","childObject","time","applyResourceColor","alpha","alphaColor","color","substring","g","getResourceColor","style","createBlockAppointmentElement","record","resIndex","isResourceEventTemplate","templateElement","eventSubject","subject","default","appointmentWrapper","attrs","eventTemplate","appointmentSubject","sanitize","scheduleId","viewName","eventTemplateName","templateId","templateName","getAppointmentTemplate","setWrapperAttributes","cssClass","setAttribute","getReadonlyAttribute","isBlockRange","isBlockAlert","event_5","dataCol","dataCol_1","getFilterEventsList","query","getSeriesEvents","deleteFutureEditEvents","futureEvents","deleteFutureEvent","deleteFutureEditEventList","delId","followingId","startTimeQuery","and","getEditedOccurrences","delEditedEvents","deleteRecurrenceEventList","deleteFutureEditEventList_1","event_6","delEventQuery","or","filteredDates","firstDate","lastDate","minDate","maxDate","isValidEvent","schedule","isHourRange","startHour","endHour","isSameRange","allDayExpandScroll","dateHeader","indentHeight","headerRows","forEach","tdEle","children","ele","top","offsetHeight","height","expand","updateEventMinimumDuration","startEndHours","eventDuration","minimumEventDuration","tempEnd","tempStart","createEventWrapper","tr","levels","colLevels","col","appointmentWrap","groupIndex","innerWrapper","getPageCoordinates","eventArgs","changedTouches","renderSpannedIcon","iconElement","iconLeft","cloneNode","iconRight","iconTop","iconBottom","unWireEvents","appElements","appElements_1","clearEvents","destroy","__extends","extendStatics","d","setPrototypeOf","__proto__","p","hasOwnProperty","__","constructor","create","EVENT_GAP","MonthEvent","_super","renderedEvents","monthHeaderHeight","moreIndicatorHeight","renderType","getPanel","maxHeight","enableMaxHeight","enableIndicator","rowAutoHeight","withIndicator","maxOrIndicator","ignoreWhitespace","removeEventWrapper","appElement","isTimelineView","timeScale","enable","appElement_1","wrap","parentElement","parentNode","renderAppointments","setDragArea","isSpecificResourceEvents","conWrap","scrollTop","left","scrollLeft","sourceEvent","targetEvent","appointmentWrapper_1","removeHeightProperty","wrapper","cellTd","offsetTop","removeChild","eventHeight","virtualScrollModule","isHorizontalScroll","renderResourceEvents","updateFocusedWorkCell","renderEventsHandler","renderDates","workDays","updateBlockElements","cssProperties","getCssProperties","module","getModuleName","isPreventScrollUpdate","scrollPosition","updateVirtualScrollHeight","enablePersistence","showWeekNumber","totalCells_1","weekNumberCells","cell","renderTemplates","resData","eventsList","blockList","eventBase","workCells","totalCells","height_1","clientHeight","cellDetail","getBoundingClientRect","cellWidth","width","cellHeight","getSlotDates","processBlockEvents","eventsList_1","getCssClass","spannedEvents","spannedEvents_1","sDate","getStartTime","getIndex","updateIndicatorIcon","renderEvents","blockSpannedList","isSameDate","isBlockIcon","blockSpannedList_1","blockEvent","spannedEvents_2","renderBlockEvents","isIcon","getEndTime","day","getIndexOfDate","getCellTd","position","getPosition","renderBlockIndicator","diffInDays","appWidth","getEventWidth","appLeft","appRight","appHeight","appTop","getRowTop","blockElement","renderEventElement","blockIndicator","cloneData","getStartHour","getEndHour","actualStartTime","actualEndTime","actualStartHour","actualEndHour","getDate","isGroupAdaptive","renderedResources","sourceRes","resources_1","slotData","noOfDays","hideNonWorkingDays","splice","createAppointmentElement","isCloneElement","localeObj","getConstant","newRecord","getAnnouncementString","appointmentDetails","getEventData","eventLocation","location","appointmentStartTime","innerHTML","getTimeString","appointmentEndTime","innerElement","allDayString","timeString","appTime","appLocation","appendEventIcons","iconClass","overlapCount","Index","enableAppRender","appointmentElement","inlineValue","inlineModule","createInlineAppointmentElement","firstChild","firstElementChild","updateCellHeight","indicator","getMoreIndicatorText","moreIndicatorElement","getMoreIndicatorElement","renderElement","moreIndicatorClick","blockElement_1","offsetParent","round","offsetWidth","getFilteredEvents","getOverlapEvents","appointmentsList","dateTime","appointments_1","appIndex","appLevel","moreArgs","isPopupOpen","getNavigateView","clickArgs","moreArgs_1","moreEventClick","setProperties","selectedDate","changeView","eventType","isAppointment","pop","setMaxEventHeight","wrapperEle","globalize","formatNumber","selector","rows","rows_1","row","headerHeight","BLOCK_INDICATOR_WIDTH","BLOCK_INDICATOR_HEIGHT","TimelineEvent","slotCount","interval","rowIndex","cellTops","eventContainers","dayLength","content","option","slotsPerDay","util","appointments_2","trimStartTime","trimEndTime","getSortComparerIndex","getOverlapSortComparerEvents","appointmentsCollection_1","source","eventDates","currentDate","isDayProcess","top_1","renderApp","conWidth","isWithoutScroll","clientWidth","getFirstChild","adjustAppointments","moreIndicator","appPos","floor","position_1","renderTimelineMoreIndicator","k","position_2","isAlreadyAvail","startDateTime","slotStartTime","slotEndTime","getFilterEvents","appArea","renderedAppCount","right","resourceCell","monthHeader","currentPercentage","apps","parseFloat","td","blockIndicator_1","getNextDay","getPreviousDay","isSameDay","getSameDayEventsWidth","getSpannedEventsWidth","endWidth","startWidth","spannedWidth","startDay","endDay","getAppointmentLeft","slotTd","daySlot","cellIndex","gIndex","indicatorPos","wrapIndex","InlineEdit","inlineEdit","moreWrapper","morePopup","removeInlineAppointmentElement","cellEdit","eventEdit","saveObj","generateEventData","getEventDaysCount","isVertical","dayIndex","getDay","createVerticalViewInline","createMonthViewInline","createTimelineViewInline","inlineSubject","value","subEle","innerText","insertBefore","subjectWrap","prepend","setSelectionRange","daysCount","verticalEvent","initializeValues","allDayElement","allDayElements","allDayLevel","cellTop","renderAllDayEvents","renderNormalEvents","saveObject","monthEvent","monthCellSelector","monthModule","timelineView","workCell","abs","inlineElement","setDefaultValueToObject","setResourceValues","documentClick","inlineCrudActions","addEvent","eventTarget","eventDetails","getEventDetails","saveEvent","inlineData","inlineAppointmentElement","inlineDetails","inline","inlineAppointment","node","VerticalEvent","renderedAllDayEvents","overlapEvents","moreEvents","overlapList","allDayEvents","animation","progress","animationUiUpdate","bind","wrapperElements","isDragging","wrapperElements_1","j","setAllDayRowHeight","expandCollapse","rowExpandCollapse","item","arr","animate","allowVirtualScrolling","toFixed","getHeight","appendEvent","getResourceList","dateCount","getStartCount","length_1","filterEvents_1","setValues","dayCount","spannedData","isSpannedEvent","isWorkDayAvailable","blockTop","blockHeight","contentWrap","getTopValue","getDayIndex","isRender","allDayRowTop","renderedDate","length_2","filterEvents_2","getOverlapIndex","filterEvents_3","resources_2","renderedIndex","dateIndex","firstColumn","currentResources","resourceDateTree","colSpan","findIndex","x","resourceIndex","recordSubject","timeStr","appointmentTime","appointmentLocation","elementId","recurrenceIcon","createMoreIndicator","allDayRow","currentDay","countWrapper","childElementCount","innerCountWrap","countCell","moreCount","workDaysField","currentDates","topValue","isDateRange","isAlreadyRendered","allDayDifference_1","allDayIndex_1","widthAdjustment","appointmentElement_1","allDayRow_1","wIndex_1","eventWrapper_1","length_3","allDayRowHeight","addOrRemoveClass","argsData","tempData","adjustOverlapElements","iconHeight","subjectElement","tempWidth","getEventLeft","tempLeft","diffInMinutes","date_1","appointmentList_1","appointment_1","recordStart_1","recordEnd_1","filterList","val","record_1","length1","length2","eleGuid","enableAllDayScroll","moreEventCount","getEventHeight","eventElement","styles","eventWrapper","rowHeight","isDestroyed"],"mappings":"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","file":"js/chunk-vendors~63a9e380.da130471.4.2.0.js","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable max-len */\nimport { isNullOrUndefined, closest, extend, EventHandler } from '@syncfusion/ej2-base';\nimport { createElement, prepend, append, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { DataManager, Query, Predicate } from '@syncfusion/ej2-data';\nimport { generate, getDateFromRecurrenceDateString } from '../../recurrence-editor/date-generator';\nimport * as util from '../base/util';\nimport * as cls from '../base/css-constant';\nimport * as event from '../base/constant';\n/**\n * EventBase for appointment rendering\n */\nvar EventBase = /** @class */ (function () {\n /**\n * Constructor for EventBase\n *\n * @param {Schedule} parent Accepts the schedule instance\n */\n function EventBase(parent) {\n this.slots = [];\n this.isDoubleTapped = false;\n this.parent = parent;\n }\n EventBase.prototype.processData = function (events, timeZonePropChanged, oldTimezone) {\n var _this = this;\n var start = this.parent.activeView.startDate();\n var end = this.parent.activeView.endDate();\n var fields = this.parent.eventFields;\n var processed = [];\n var temp = 1;\n var generateID = false;\n var resourceCollection = this.parent.resourceBase ? this.parent.resourceBase.resourceCollection : [];\n if (events.length > 0 && isNullOrUndefined(events[0][fields.id])) {\n generateID = true;\n }\n var _loop_1 = function (event_1) {\n if (generateID) {\n event_1[fields.id] = temp++;\n }\n event_1 = this_1.updateEventDateTime(event_1);\n if (timeZonePropChanged) {\n this_1.processTimezoneChange(event_1, oldTimezone);\n }\n else if (!this_1.parent.isPrinting && !this_1.parent.uiStateValues.isPreventTimezone) {\n event_1 = this_1.processTimezone(event_1);\n }\n for (var level = 0; level < resourceCollection.length; level++) {\n if (event_1[resourceCollection[parseInt(level.toString(), 10)].field] === null || event_1[resourceCollection[parseInt(level.toString(), 10)].field] === 0) {\n event_1[resourceCollection[parseInt(level.toString(), 10)].field] = undefined;\n }\n }\n if (!isNullOrUndefined(event_1[fields.recurrenceRule]) && event_1[fields.recurrenceRule] === '') {\n event_1[fields.recurrenceRule] = null;\n }\n if (!isNullOrUndefined(event_1[fields.recurrenceRule]) && isNullOrUndefined(event_1[fields.recurrenceID]) &&\n !(this_1.parent.crudModule && this_1.parent.crudModule.crudObj.isCrudAction)) {\n processed = processed.concat(this_1.generateOccurrence(event_1, null, oldTimezone, true));\n }\n else {\n if (this_1.parent.crudModule && this_1.parent.crudModule.crudObj.isCrudAction) {\n if (!isNullOrUndefined(event_1[fields.recurrenceRule]) && isNullOrUndefined(event_1[fields.recurrenceID])) {\n var recurrenceEvent = this_1.generateOccurrence(event_1, null, oldTimezone, true);\n var _loop_2 = function (occurrence) {\n var app = this_1.parent.eventsProcessed.filter(function (data) {\n return data[fields.startTime].getTime() - occurrence[fields.startTime].getTime() === 0 &&\n data[fields.id] === occurrence[fields.id];\n });\n occurrence.Guid = (app.length > 0) ? app[0].Guid : this_1.generateGuid();\n processed.push(occurrence);\n };\n for (var _i = 0, recurrenceEvent_1 = recurrenceEvent; _i < recurrenceEvent_1.length; _i++) {\n var occurrence = recurrenceEvent_1[_i];\n _loop_2(occurrence);\n }\n }\n else {\n var app = this_1.parent.eventsProcessed.filter(function (data) {\n return data[_this.parent.eventFields.id] === event_1[_this.parent.eventFields.id];\n });\n event_1.Guid = (app.length > 0) ? app[0].Guid : this_1.generateGuid();\n processed.push(event_1);\n }\n }\n else {\n event_1.Guid = this_1.generateGuid();\n processed.push(event_1);\n }\n }\n };\n var this_1 = this;\n for (var _i = 0, events_1 = events; _i < events_1.length; _i++) {\n var event_1 = events_1[_i];\n _loop_1(event_1);\n }\n this.parent.eventsProcessed = [];\n var eventData = processed.filter(function (data) {\n return !data[_this.parent.eventFields.isBlock];\n });\n this.parent.eventsProcessed = this.filterEvents(start, end, eventData);\n var blockData = processed.filter(function (data) {\n return data[_this.parent.eventFields.isBlock];\n });\n for (var _a = 0, blockData_1 = blockData; _a < blockData_1.length; _a++) {\n var eventObj = blockData_1[_a];\n if (eventObj[fields.isAllDay]) {\n var isDifferentDate = util.resetTime(new Date(eventObj[fields.startTime].getTime())) <\n util.resetTime(new Date(eventObj[fields.endTime].getTime()));\n if (!isDifferentDate) {\n eventObj[fields.startTime] = util.resetTime(eventObj[fields.startTime]);\n eventObj[fields.endTime] = util.addDays(util.resetTime(eventObj[fields.endTime]), 1);\n }\n }\n }\n this.parent.blockProcessed = blockData;\n return eventData;\n };\n EventBase.prototype.updateEventDateTime = function (eventData) {\n if (typeof eventData[this.parent.eventFields.startTime] === 'string') {\n eventData[this.parent.eventFields.startTime] = util.getDateFromString(eventData[this.parent.eventFields.startTime]);\n }\n if (typeof eventData[this.parent.eventFields.endTime] === 'string') {\n eventData[this.parent.eventFields.endTime] = util.getDateFromString(eventData[this.parent.eventFields.endTime]);\n }\n return eventData;\n };\n EventBase.prototype.getProcessedEvents = function (eventCollection) {\n if (eventCollection === void 0) { eventCollection = this.parent.eventsData; }\n var processed = [];\n for (var _i = 0, eventCollection_1 = eventCollection; _i < eventCollection_1.length; _i++) {\n var event_2 = eventCollection_1[_i];\n if (!isNullOrUndefined(event_2[this.parent.eventFields.recurrenceRule]) &&\n isNullOrUndefined(event_2[this.parent.eventFields.recurrenceID])) {\n processed = processed.concat(this.generateOccurrence(event_2));\n }\n else {\n processed.push(event_2);\n }\n }\n return processed;\n };\n EventBase.prototype.timezonePropertyChange = function (oldTimezone) {\n var data = this.parent.eventsData.concat(this.parent.blockData);\n var processed = this.processData(data, true, oldTimezone);\n this.parent.notify(event.dataReady, { processedData: processed });\n };\n EventBase.prototype.timezoneConvert = function (eventData) {\n var fields = this.parent.eventFields;\n eventData[fields.startTimezone] = eventData[fields.startTimezone] || eventData[fields.endTimezone];\n eventData[fields.endTimezone] = eventData[fields.endTimezone] || eventData[fields.startTimezone];\n if (this.parent.timezone) {\n var startTz = eventData[fields.startTimezone];\n var endTz = eventData[fields.endTimezone];\n eventData[fields.startTime] = this.parent.tzModule.convert(eventData[fields.startTime], this.parent.timezone, startTz);\n eventData[fields.endTime] = this.parent.tzModule.convert(eventData[fields.endTime], this.parent.timezone, endTz);\n }\n };\n EventBase.prototype.processTimezoneChange = function (event, oldTimezone) {\n var fields = this.parent.eventFields;\n if (event[fields.isAllDay]) {\n return;\n }\n if (oldTimezone && this.parent.timezone) {\n event[fields.startTime] = this.parent.tzModule.convert(event[fields.startTime], oldTimezone, this.parent.timezone);\n event[fields.endTime] = this.parent.tzModule.convert(event[fields.endTime], oldTimezone, this.parent.timezone);\n }\n else if (!oldTimezone && this.parent.timezone) {\n event[fields.startTime] = this.parent.tzModule.add(event[fields.startTime], this.parent.timezone);\n event[fields.endTime] = this.parent.tzModule.add(event[fields.endTime], this.parent.timezone);\n }\n else if (oldTimezone && !this.parent.timezone) {\n event[fields.startTime] = this.parent.tzModule.remove(event[fields.startTime], oldTimezone);\n event[fields.endTime] = this.parent.tzModule.remove(event[fields.endTime], oldTimezone);\n }\n };\n EventBase.prototype.processTimezone = function (event, isReverse) {\n if (isReverse === void 0) { isReverse = false; }\n var fields = this.parent.eventFields;\n if (event[fields.startTimezone] || event[fields.endTimezone]) {\n var startTimezone = event[fields.startTimezone] || event[fields.endTimezone];\n var endTimezone = event[fields.endTimezone] || event[fields.startTimezone];\n if (isReverse) {\n if (this.parent.timezone) {\n event[fields.startTime] = this.parent.tzModule.convert(event[fields.startTime], startTimezone, this.parent.timezone);\n event[fields.endTime] = this.parent.tzModule.convert(event[fields.endTime], endTimezone, this.parent.timezone);\n event[fields.startTime] = this.parent.tzModule.remove(event[fields.startTime], this.parent.timezone);\n event[fields.endTime] = this.parent.tzModule.remove(event[fields.endTime], this.parent.timezone);\n }\n else {\n event[fields.startTime] = this.parent.tzModule.remove(event[fields.startTime], startTimezone);\n event[fields.endTime] = this.parent.tzModule.remove(event[fields.endTime], endTimezone);\n }\n }\n else {\n event[fields.startTime] = this.parent.tzModule.add(event[fields.startTime], startTimezone);\n event[fields.endTime] = this.parent.tzModule.add(event[fields.endTime], endTimezone);\n if (this.parent.timezone) {\n event[fields.startTime] = this.parent.tzModule.convert(event[fields.startTime], startTimezone, this.parent.timezone);\n event[fields.endTime] = this.parent.tzModule.convert(event[fields.endTime], endTimezone, this.parent.timezone);\n }\n }\n }\n else if (this.parent.timezone) {\n if (isReverse) {\n event[fields.startTime] = this.parent.tzModule.remove(event[fields.startTime], this.parent.timezone);\n event[fields.endTime] = this.parent.tzModule.remove(event[fields.endTime], this.parent.timezone);\n }\n else {\n event[fields.startTime] = this.parent.tzModule.add(event[fields.startTime], this.parent.timezone);\n event[fields.endTime] = this.parent.tzModule.add(event[fields.endTime], this.parent.timezone);\n }\n }\n return event;\n };\n EventBase.prototype.filterBlockEvents = function (eventObj) {\n var fields = this.parent.eventFields;\n var eStart = eventObj[fields.startTime];\n var eEnd = eventObj[fields.endTime];\n var resourceData;\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n var data = this.getGroupIndexFromEvent(eventObj);\n resourceData = this.parent.resourceBase.lastResourceLevel[parseInt(data.toString(), 10)];\n }\n var blockEvents = extend([], this.parent.blockProcessed, null, true);\n for (var _i = 0, blockEvents_1 = blockEvents; _i < blockEvents_1.length; _i++) {\n var eventObj_1 = blockEvents_1[_i];\n if (eventObj_1[fields.isAllDay]) {\n var isDifferentTime = eventObj_1[fields.endTime].getTime() >\n util.resetTime(new Date(eventObj_1[fields.endTime].getTime())).getTime();\n if (isDifferentTime) {\n eventObj_1[fields.startTime] = util.resetTime(eventObj_1[fields.startTime]);\n eventObj_1[fields.endTime] = util.addDays(util.resetTime(eventObj_1[fields.endTime]), 1);\n }\n }\n }\n return this.filterEvents(eStart, eEnd, blockEvents, resourceData);\n };\n EventBase.prototype.filterEvents = function (startDate, endDate, appointments, resourceTdData) {\n if (appointments === void 0) { appointments = this.parent.eventsProcessed; }\n var predicate = this.parent.dataModule.getStartEndQuery(startDate, endDate);\n var filter = new DataManager({ json: appointments }).executeLocal(new Query().where(predicate));\n if (resourceTdData) {\n filter = this.filterEventsByResource(resourceTdData, filter);\n }\n return this.sortByTime(filter);\n };\n EventBase.prototype.filterEventsByRange = function (eventCollection, startDate, endDate) {\n var _this = this;\n var filteredEvents = [];\n if (startDate && endDate) {\n filteredEvents = this.filterEvents(startDate, endDate, eventCollection);\n }\n else if (startDate && !endDate) {\n filteredEvents = eventCollection.filter(function (e) { return e[_this.parent.eventFields.startTime] >= startDate; });\n }\n else if (!startDate && endDate) {\n filteredEvents = eventCollection.filter(function (e) { return e[_this.parent.eventFields.endTime] <= endDate; });\n }\n else {\n filteredEvents = eventCollection;\n }\n return this.sortByTime(filteredEvents);\n };\n EventBase.prototype.filterEventsByResource = function (resourceTdData, appointments) {\n if (appointments === void 0) { appointments = this.parent.eventsProcessed; }\n var predicate = {};\n var resourceCollection = this.parent.resourceBase.resourceCollection;\n for (var level = 0; level < resourceCollection.length; level++) {\n predicate[resourceCollection[parseInt(level.toString(), 10)].field] = resourceTdData.groupOrder[parseInt(level.toString(), 10)];\n }\n var keys = Object.keys(predicate);\n var filteredCollection = appointments.filter(function (eventObj) { return keys.every(function (key) {\n if (eventObj[\"\" + key] instanceof Array) {\n return eventObj[\"\" + key].indexOf(predicate[\"\" + key]) > -1;\n }\n else {\n return eventObj[\"\" + key] === predicate[\"\" + key];\n }\n }); });\n return filteredCollection;\n };\n EventBase.prototype.sortByTime = function (appointmentsCollection) {\n if (this.parent.eventSettings.sortComparer && (typeof (this.parent.eventSettings.sortComparer) === 'function' || typeof (this.parent.eventSettings.sortComparer) === 'string')) {\n appointmentsCollection = this.customSorting(appointmentsCollection);\n }\n else {\n var fieldMappings_1 = this.parent.eventFields;\n appointmentsCollection.sort(function (a, b) {\n var d1 = a[fieldMappings_1.startTime];\n var d2 = b[fieldMappings_1.startTime];\n return d1.getTime() - d2.getTime();\n });\n }\n return appointmentsCollection;\n };\n EventBase.prototype.sortByDateTime = function (appointments) {\n if (this.parent.eventSettings.sortComparer && (typeof (this.parent.eventSettings.sortComparer) === 'function' || typeof (this.parent.eventSettings.sortComparer) === 'string')) {\n appointments = this.customSorting(appointments);\n }\n else {\n var fieldMapping_1 = this.parent.eventFields;\n appointments.sort(function (object1, object2) {\n var d3 = object1[fieldMapping_1.startTime];\n var d4 = object2[fieldMapping_1.startTime];\n var d5 = object1[fieldMapping_1.endTime];\n var d6 = object2[fieldMapping_1.endTime];\n var d1 = d5.getTime() - d3.getTime();\n var d2 = d6.getTime() - d4.getTime();\n return (d3.getTime() - d4.getTime() || d2 - d1);\n });\n }\n return appointments;\n };\n EventBase.prototype.customSorting = function (appointments) {\n if (typeof (this.parent.eventSettings.sortComparer) === 'function') {\n return this.parent.eventSettings.sortComparer.call(this.parent, appointments);\n }\n else if (typeof (this.parent.eventSettings.sortComparer) === 'string') {\n var splits = this.parent.eventSettings.sortComparer.split('.');\n var sortFn = void 0;\n if (!isNullOrUndefined(window)) {\n sortFn = window[splits[splits.length - 1]];\n }\n if (sortFn) {\n return sortFn(appointments);\n }\n }\n return appointments;\n };\n EventBase.prototype.getSmallestMissingNumber = function (array) {\n var large = Math.max.apply(Math, array);\n for (var i = 0; i < large; i++) {\n if (array.indexOf(i) === -1) {\n return i;\n }\n }\n return large + 1;\n };\n EventBase.prototype.splitEventByDay = function (event) {\n var eventFields = this.parent.eventFields;\n var data = [];\n var eventStartTime = event[eventFields.startTime];\n var eventEndTime = event[eventFields.endTime];\n var isDifferentDate = util.resetTime(new Date(eventStartTime.getTime())) <\n util.resetTime(new Date(eventEndTime.getTime()));\n if (isDifferentDate) {\n var start = new Date(eventStartTime.getTime());\n var end = util.addDays(util.resetTime(new Date(eventStartTime.getTime())), 1);\n var endDate = (eventEndTime.getHours() === 0 && eventEndTime.getMinutes() === 0) ?\n eventEndTime : util.addDays(eventEndTime, 1);\n var index = 1;\n var eventLength = util.getDaysCount(eventStartTime.getTime(), endDate.getTime());\n while (end <= eventEndTime && start.getTime() !== end.getTime()) {\n var app = extend({}, event);\n app[eventFields.startTime] = start;\n app[eventFields.endTime] = end;\n app.data = { index: index, count: eventLength };\n app.Guid = this.generateGuid();\n app.isSpanned = true;\n data.push(app);\n start = end;\n if ((util.resetTime(new Date(start.getTime())).getTime() === util.resetTime(new Date(eventEndTime.getTime())).getTime())\n && !(end.getTime() === eventEndTime.getTime())) {\n end = new Date(start.getTime());\n end = new Date(end.setHours(eventEndTime.getHours(), eventEndTime.getMinutes(), eventEndTime.getSeconds()));\n }\n else {\n end = util.addDays(util.resetTime(new Date(start.getTime())), 1);\n }\n index++;\n }\n }\n else {\n data.push(event);\n }\n return data;\n };\n EventBase.prototype.splitEvent = function (event, dateRender) {\n var fields = this.parent.eventFields;\n var start = util.resetTime(event[fields.startTime]).getTime();\n var end = util.resetTime(event[fields.endTime]).getTime();\n if (util.getDateInMs(event[fields.endTime]) <= 0) {\n var temp = util.addDays(util.resetTime(event[fields.endTime]), -1).getTime();\n end = start > temp ? start : temp;\n }\n var orgStart = start;\n var orgEnd = end;\n var ranges = [];\n if (start !== end) {\n if (start < dateRender[0].getTime()) {\n start = dateRender[0].getTime();\n }\n if (end > dateRender[dateRender.length - 1].getTime()) {\n end = dateRender[dateRender.length - 1].getTime();\n }\n var cStart = start;\n for (var level = 0; level < this.slots.length; level++) {\n var slot = this.slots[parseInt(level.toString(), 10)];\n if (this.parent.currentView === 'WorkWeek' || this.parent.currentView === 'TimelineWorkWeek'\n || this.parent.activeViewOptions.group.byDate || this.parent.activeViewOptions.showWeekend) {\n var slotDates = [];\n for (var _i = 0, slot_1 = slot; _i < slot_1.length; _i++) {\n var s = slot_1[_i];\n slotDates.push(new Date(s));\n }\n var renderedDates = this.getRenderedDates(slotDates);\n if (!isNullOrUndefined(renderedDates) && renderedDates.length > 0) {\n slot = [];\n for (var _a = 0, renderedDates_1 = renderedDates; _a < renderedDates_1.length; _a++) {\n var date = renderedDates_1[_a];\n slot.push(date.getTime());\n }\n }\n }\n if (typeof (slot) === 'number') {\n var temp = slot;\n slot = [];\n slot.push(temp);\n }\n var firstSlot = slot[0];\n cStart = (cStart <= firstSlot && end >= firstSlot) ? firstSlot : cStart;\n if (cStart > end || firstSlot > end) {\n break;\n }\n if (!this.parent.activeViewOptions.group.byDate && this.parent.activeViewOptions.showWeekend &&\n this.parent.currentView !== 'WorkWeek' && this.parent.currentView !== 'TimelineWorkWeek') {\n var startIndex = slot.indexOf(cStart);\n if (startIndex !== -1) {\n var endIndex = slot.indexOf(end);\n var hasBreak = endIndex !== -1;\n endIndex = hasBreak ? endIndex : slot.length - 1;\n var count = ((endIndex - startIndex) + 1);\n var isLeft = (slot[parseInt(startIndex.toString(), 10)] !== orgStart);\n var isRight = (slot[parseInt(endIndex.toString(), 10)] !== orgEnd);\n ranges.push(this.cloneEventObject(event, slot[parseInt(startIndex.toString(), 10)], slot[parseInt(endIndex.toString(), 10)], count, isLeft, isRight));\n if (hasBreak) {\n break;\n }\n }\n }\n else {\n if (this.dateInRange(cStart, slot[0], slot[slot.length - 1])) {\n var availSlot = [];\n for (var i = 0; i < slot.length; i++) {\n if (this.dateInRange(slot[parseInt(i.toString(), 10)], orgStart, orgEnd)) {\n availSlot.push(slot[parseInt(i.toString(), 10)]);\n }\n }\n if (availSlot.length > 0) {\n if (!this.parent.activeViewOptions.group.byDate) {\n var isLeft = (availSlot[0] !== orgStart);\n var isRight = (availSlot[availSlot.length - 1] !== orgEnd);\n ranges.push(this.cloneEventObject(event, availSlot[0], availSlot[availSlot.length - 1], availSlot.length, isLeft, isRight));\n }\n else {\n for (var _b = 0, availSlot_1 = availSlot; _b < availSlot_1.length; _b++) {\n var slot_2 = availSlot_1[_b];\n ranges.push(this.cloneEventObject(event, slot_2, slot_2, 1, (slot_2 !== orgStart), (slot_2 !== orgEnd)));\n }\n }\n }\n }\n }\n }\n }\n else {\n ranges.push(this.cloneEventObject(event, start, end, 1, false, false));\n }\n return ranges;\n };\n EventBase.prototype.cloneEventObject = function (event, start, end, count, isLeft, isRight) {\n var fields = this.parent.eventFields;\n var e = extend({}, event, null, true);\n var data = { count: count, isLeft: isLeft, isRight: isRight };\n data[fields.startTime] = event[fields.startTime];\n data[fields.endTime] = event[fields.endTime];\n e.data = data;\n e[fields.startTime] = new Date(start);\n e[fields.endTime] = new Date(end);\n return e;\n };\n EventBase.prototype.dateInRange = function (date, start, end) {\n return start <= date && date <= end;\n };\n EventBase.prototype.getSelectedEventElements = function (target) {\n this.removeSelectedAppointmentClass();\n if (this.parent.selectedElements.length <= 0) {\n this.parent.selectedElements.push(target);\n }\n else {\n var isAlreadySelected = this.parent.selectedElements.filter(function (element) {\n return element.getAttribute('data-guid') === target.getAttribute('data-guid');\n });\n if (isAlreadySelected.length <= 0) {\n var elementSelector = 'div[data-guid=\"' + target.getAttribute('data-guid') + '\"]';\n var focusElements = [].slice.call(this.parent.element.querySelectorAll(elementSelector));\n for (var _i = 0, focusElements_1 = focusElements; _i < focusElements_1.length; _i++) {\n var element = focusElements_1[_i];\n this.parent.selectedElements.push(element);\n }\n }\n else {\n var selectedElements = this.parent.selectedElements.filter(function (element) {\n return element.getAttribute('data-guid') !== target.getAttribute('data-guid');\n });\n this.parent.selectedElements = selectedElements;\n }\n }\n if (target && this.parent.selectedElements.length > 0) {\n this.addSelectedAppointments(this.parent.selectedElements, false);\n }\n return this.parent.selectedElements;\n };\n EventBase.prototype.getSelectedEvents = function () {\n var _this = this;\n var eventSelect = [];\n var elementSelect = [];\n var selectAppointments = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_BORDER));\n selectAppointments.filter(function (element) {\n var isAlreadyAdded = eventSelect.filter(function (event) {\n return event.Guid === element.getAttribute('data-guid');\n });\n if (isAlreadyAdded.length === 0) {\n eventSelect.push(_this.getEventByGuid(element.getAttribute('data-guid')));\n }\n elementSelect.push(element);\n });\n return {\n event: eventSelect.length > 1 ? eventSelect : eventSelect[0],\n element: elementSelect.length > 1 ? elementSelect : elementSelect[0]\n };\n };\n EventBase.prototype.removeSelectedAppointmentClass = function () {\n var selectedAppointments = this.getSelectedAppointments();\n removeClass(selectedAppointments, cls.APPOINTMENT_BORDER);\n if (this.parent.currentView === 'Agenda' || this.parent.currentView === 'MonthAgenda') {\n removeClass(selectedAppointments, cls.AGENDA_SELECTED_CELL);\n }\n };\n EventBase.prototype.addSelectedAppointments = function (cells, preventFocus) {\n if (this.parent.currentView !== 'MonthAgenda') {\n this.parent.removeSelectedClass();\n }\n addClass(cells, cls.APPOINTMENT_BORDER);\n if (cells.length > 0 && !preventFocus) {\n cells[cells.length - 1].focus();\n }\n };\n EventBase.prototype.getSelectedAppointments = function () {\n return [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_BORDER + ',.' + cls.APPOINTMENT_CLASS + ':focus'));\n };\n EventBase.prototype.focusElement = function (isFocused) {\n if (this.parent.eventWindow.dialogObject && this.parent.eventWindow.dialogObject.visible) {\n return;\n }\n var activeEle = document.activeElement;\n var selectedCell = this.parent.getSelectedCells();\n if (selectedCell.length > 0 && ((activeEle && (this.parent.element.contains(activeEle) ||\n selectedCell.indexOf(activeEle) !== -1)) || isFocused)) {\n if (this.parent.keyboardInteractionModule) {\n var target = ((!isNullOrUndefined(this.parent.activeCellsData) &&\n this.parent.activeCellsData.element) || selectedCell[selectedCell.length - 1]);\n this.parent.keyboardInteractionModule.selectCells(target instanceof Array, target);\n }\n return;\n }\n var selectedAppointments = this.getSelectedAppointments();\n if (selectedAppointments.length > 0) {\n if (this.parent.activeEventData && this.parent.activeEventData.element && selectedAppointments.indexOf(this.parent.activeEventData.element) > -1) {\n this.parent.activeEventData.element.focus();\n return;\n }\n selectedAppointments[selectedAppointments.length - 1].focus();\n return;\n }\n };\n EventBase.prototype.selectWorkCellByTime = function (eventsData) {\n var target;\n if (this.parent.currentView === 'Agenda' || this.parent.currentView === 'MonthAgenda') {\n return target;\n }\n if (eventsData.length > 0) {\n var selectedObject = eventsData[eventsData.length - 1];\n var eventStartTime = selectedObject[this.parent.eventFields.startTime];\n var nearestTime = new Date(+eventStartTime).setMinutes(0, 0, 0);\n var isAllDay = this.isAllDayAppointment(selectedObject);\n if (this.parent.currentView === 'Month' || isAllDay) {\n nearestTime = new Date(+eventStartTime).setHours(0, 0, 0, 0);\n }\n var targetArea = void 0;\n if (isAllDay && ['Day', 'Week', 'WorkWeek'].indexOf(this.parent.currentView) !== -1) {\n targetArea = this.parent.getAllDayRow();\n }\n else {\n targetArea = this.parent.getContentTable();\n }\n var queryString = '[data-date=\"' + new Date(nearestTime).getTime() + '\"]';\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n queryString += '[data-group-index=\"' + this.getGroupIndexFromEvent(selectedObject) + '\"]';\n }\n target = targetArea.querySelector(queryString);\n if (target) {\n this.parent.activeCellsData = this.parent.getCellDetails(target);\n if (this.parent.keyboardInteractionModule) {\n this.parent.keyboardInteractionModule.selectCells(false, target);\n }\n return target;\n }\n }\n return target;\n };\n EventBase.prototype.getGroupIndexFromEvent = function (eventData) {\n var levelIndex;\n var resource;\n var levelName;\n var idField;\n for (var i = this.parent.resourceBase.resourceCollection.length - 1; i >= 0; i--) {\n var resourceData = eventData[this.parent.resourceBase.resourceCollection[parseInt(i.toString(), 10)].field];\n if (!isNullOrUndefined(resourceData)) {\n resource = this.parent.resourceBase.resourceCollection[parseInt(i.toString(), 10)];\n levelIndex = i;\n levelName = resource.name;\n idField = resource.field;\n break;\n }\n }\n if (isNullOrUndefined(levelName) && isNullOrUndefined(levelIndex)) {\n levelName = this.parent.resourceCollection.slice(-1)[0].name;\n levelIndex = this.parent.resourceCollection.length - 1;\n idField = this.parent.resourceCollection.slice(-1)[0].field;\n resource = this.parent.resourceCollection.filter(function (e, index) {\n if (e.name === levelName) {\n levelIndex = index;\n return e;\n }\n return null;\n })[0];\n }\n var id = ((eventData[\"\" + idField] instanceof Array) ?\n eventData[\"\" + idField][0] : eventData[\"\" + idField]);\n if (levelIndex > 0) {\n var parentField = this.parent.resourceCollection[levelIndex - 1].field;\n return this.parent.resourceBase.getIndexFromResourceId(id, levelName, resource, eventData, parentField);\n }\n else {\n return this.parent.resourceBase.getIndexFromResourceId(id, levelName, resource);\n }\n };\n EventBase.prototype.isAllDayAppointment = function (event) {\n var fieldMapping = this.parent.eventFields;\n var isAllDay = event[fieldMapping.isAllDay];\n var isFullDay = ((util.getUniversalTime(event[fieldMapping.endTime]) - util.getUniversalTime(event[fieldMapping.startTime]))\n / util.MS_PER_DAY) >= 1;\n return (isAllDay || (this.parent.eventSettings.spannedEventPlacement !== 'TimeSlot' && isFullDay)) ? true : false;\n };\n EventBase.prototype.addEventListener = function () {\n this.parent.on(event.documentClick, this.appointmentBorderRemove, this);\n };\n EventBase.prototype.removeEventListener = function () {\n this.parent.off(event.documentClick, this.appointmentBorderRemove);\n };\n EventBase.prototype.appointmentBorderRemove = function (event) {\n var element = event.event.target;\n if (closest(element, '.' + cls.APPOINTMENT_CLASS)) {\n if (this.parent.currentView !== 'MonthAgenda') {\n this.parent.removeSelectedClass();\n }\n }\n else if (!closest(element, '.' + cls.POPUP_OPEN)) {\n this.removeSelectedAppointmentClass();\n this.parent.selectedElements = [];\n }\n };\n EventBase.prototype.wireAppointmentEvents = function (element, event, isPreventCrud) {\n if (isPreventCrud === void 0) { isPreventCrud = false; }\n var isReadOnly = (!isNullOrUndefined(event)) ? event[this.parent.eventFields.isReadonly] : false;\n EventHandler.add(element, 'click', this.eventClick, this);\n if (!this.parent.isAdaptive && !this.parent.activeViewOptions.readonly && !isReadOnly) {\n EventHandler.add(element, 'touchstart', this.eventTouchClick, this);\n EventHandler.add(element, 'dblclick', this.eventDoubleClick, this);\n }\n if (!this.parent.activeViewOptions.readonly && !isReadOnly && !isPreventCrud) {\n if (this.parent.resizeModule) {\n this.parent.resizeModule.wireResizeEvent(element);\n }\n if (this.parent.dragAndDropModule) {\n this.parent.dragAndDropModule.wireDragEvent(element);\n }\n }\n };\n EventBase.prototype.eventTouchClick = function (e) {\n var _this = this;\n setTimeout(function () { return _this.isDoubleTapped = false; }, 250);\n e.preventDefault();\n if (this.isDoubleTapped) {\n this.eventDoubleClick(e);\n }\n else if (!this.isDoubleTapped) {\n this.isDoubleTapped = true;\n this.eventClick(e);\n }\n };\n EventBase.prototype.renderResizeHandler = function (element, spanEvent, isReadOnly) {\n if (!this.parent.resizeModule || !this.parent.allowResizing || this.parent.activeViewOptions.readonly || isReadOnly) {\n return;\n }\n for (var _i = 0, _a = Object.keys(spanEvent); _i < _a.length; _i++) {\n var resizeEdge = _a[_i];\n var resizeHandler = createElement('div', { className: cls.EVENT_RESIZE_CLASS });\n switch (resizeEdge) {\n case 'isLeft':\n if (!spanEvent.isLeft) {\n resizeHandler.appendChild(createElement('div', { className: 'e-left-right-resize' }));\n addClass([resizeHandler], this.parent.enableRtl ? cls.RIGHT_RESIZE_HANDLER : cls.LEFT_RESIZE_HANDLER);\n prepend([resizeHandler], element);\n }\n break;\n case 'isRight':\n if (!spanEvent.isRight) {\n resizeHandler.appendChild(createElement('div', { className: 'e-left-right-resize' }));\n addClass([resizeHandler], this.parent.enableRtl ? cls.LEFT_RESIZE_HANDLER : cls.RIGHT_RESIZE_HANDLER);\n append([resizeHandler], element);\n }\n break;\n case 'isTop':\n if (!spanEvent.isTop) {\n resizeHandler.appendChild(createElement('div', { className: 'e-top-bottom-resize' }));\n addClass([resizeHandler], cls.TOP_RESIZE_HANDLER);\n prepend([resizeHandler], element);\n }\n break;\n case 'isBottom':\n if (!spanEvent.isBottom) {\n resizeHandler.appendChild(createElement('div', { className: 'e-top-bottom-resize' }));\n addClass([resizeHandler], cls.BOTTOM_RESIZE_HANDLER);\n append([resizeHandler], element);\n }\n break;\n }\n }\n };\n EventBase.prototype.eventClick = function (eventData) {\n var _this = this;\n var target = eventData.target;\n if (target.classList.contains(cls.DRAG_CLONE_CLASS) || target.classList.contains(cls.RESIZE_CLONE_CLASS) ||\n target.classList.contains(cls.INLINE_SUBJECT_CLASS)) {\n return;\n }\n if ((eventData.ctrlKey || eventData.metaKey) && eventData.which === 1 && this.parent.keyboardInteractionModule) {\n this.parent.quickPopup.quickPopup.hide();\n this.parent.selectedElements = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_BORDER));\n var target_1 = closest(eventData.target, '.' + cls.APPOINTMENT_CLASS);\n this.getSelectedEventElements(target_1);\n this.activeEventData(eventData, false);\n var selectArgs = {\n data: this.parent.activeEventData.event,\n element: this.parent.activeEventData.element,\n event: eventData, requestType: 'eventSelect'\n };\n this.parent.trigger(event.select, selectArgs);\n var args = extend(this.parent.activeEventData, { cancel: false, originalEvent: eventData });\n this.parent.trigger(event.eventClick, args);\n }\n else {\n this.removeSelectedAppointmentClass();\n this.activeEventData(eventData, true);\n var selectEventArgs = {\n data: this.parent.activeEventData.event,\n element: this.parent.activeEventData.element,\n event: eventData, requestType: 'eventSelect'\n };\n this.parent.trigger(event.select, selectEventArgs);\n var args = extend(this.parent.activeEventData, { cancel: false, originalEvent: eventData });\n this.parent.trigger(event.eventClick, args, function (eventClickArgs) {\n if (eventClickArgs.cancel) {\n _this.removeSelectedAppointmentClass();\n _this.parent.selectedElements = [];\n if (_this.parent.quickPopup) {\n _this.parent.quickPopup.quickPopupHide();\n }\n }\n else {\n if (_this.parent.currentView === 'Agenda' || _this.parent.currentView === 'MonthAgenda') {\n addClass([_this.parent.activeEventData.element], cls.AGENDA_SELECTED_CELL);\n }\n if (_this.parent.allowInline) {\n var inlineArgs = {\n data: eventClickArgs.event,\n element: eventClickArgs.element,\n type: 'Event'\n };\n _this.parent.notify(event.inlineClick, inlineArgs);\n }\n else {\n _this.parent.notify(event.eventClick, eventClickArgs);\n }\n }\n });\n }\n };\n EventBase.prototype.eventDoubleClick = function (e) {\n if (this.parent.quickPopup) {\n this.parent.quickPopup.quickPopupHide(true);\n }\n if (e.type === 'touchstart') {\n this.activeEventData(e, true);\n }\n this.removeSelectedAppointmentClass();\n this.parent.selectedElements = [];\n if (this.parent.activeEventData.element.classList.contains(cls.INLINE_APPOINTMENT_CLASS) ||\n this.parent.activeEventData.element.querySelector('.' + cls.INLINE_SUBJECT_CLASS)) {\n return;\n }\n if (!isNullOrUndefined(this.parent.activeEventData.event) &&\n isNullOrUndefined(this.parent.activeEventData.event[this.parent.eventFields.recurrenceID])) {\n this.parent.eventWindow.openEditor(this.parent.activeEventData.event, 'Save');\n }\n else {\n this.parent.currentAction = 'EditOccurrence';\n this.parent.quickPopup.openRecurrenceAlert();\n }\n };\n EventBase.prototype.getEventByGuid = function (guid) {\n return this.parent.eventsProcessed.filter(function (data) { return data.Guid === guid; })[0];\n };\n EventBase.prototype.getEventById = function (id) {\n var _this = this;\n return this.parent.eventsData.filter(function (data) {\n return data[_this.parent.eventFields.id] === id;\n })[0];\n };\n EventBase.prototype.generateGuid = function () {\n return 'xyxxxxyx-xxxy-yxxx-xyxx-xxyxxxxyyxxx'.replace(/[xy]/g, function (c) {\n var r = Math.random() * 16 | 0;\n var v = (c === 'x') ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n };\n EventBase.prototype.getEventIDType = function () {\n if (this.parent.eventsData.length !== 0) {\n return typeof (this.parent.eventsData[0][this.parent.eventFields.id]);\n }\n if (this.parent.blockData.length !== 0) {\n return typeof (this.parent.blockData[0][this.parent.eventFields.id]);\n }\n return 'string';\n };\n EventBase.prototype.getEventMaxID = function (resourceId) {\n var _this = this;\n if (this.parent.eventsData.length < 1 && this.parent.blockData.length < 1) {\n return 1;\n }\n var eventId;\n var idType = this.getEventIDType();\n if (idType === 'string') {\n eventId = this.generateGuid();\n }\n if (idType === 'number') {\n var datas = this.parent.eventsData.concat(this.parent.blockData);\n var appIds = datas.map(function (event) { return event[_this.parent.eventFields.id]; });\n var maxId = appIds.reduce(function (a, b) { return Math.max(a, b); });\n maxId = isNullOrUndefined(resourceId) ? maxId : maxId + resourceId;\n eventId = maxId + 1;\n }\n return eventId;\n };\n EventBase.prototype.activeEventData = function (eventData, isMultiple) {\n var _this = this;\n var target = closest(eventData.target, '.' + cls.APPOINTMENT_CLASS);\n var guid = target.getAttribute('data-guid');\n if (isMultiple) {\n this.addSelectedAppointments([].slice.call(this.parent.element.querySelectorAll('div[data-guid=\"' + guid + '\"]')), true);\n target.focus();\n }\n var eventObject = this.getEventByGuid(guid);\n if (eventObject && eventObject.isSpanned) {\n eventObject = this.parent.eventsData.filter(function (obj) {\n return obj[_this.parent.eventFields.id] === eventObject[_this.parent.eventFields.id];\n })[0];\n }\n this.parent.activeEventData = { event: eventObject, element: target };\n };\n EventBase.prototype.generateOccurrence = function (event, viewDate, oldTimezone, isMaxCount) {\n var startDate = event[this.parent.eventFields.startTime];\n var endDate = event[this.parent.eventFields.endTime];\n var eventRule = event[this.parent.eventFields.recurrenceRule];\n var timeZoneDiff = endDate.getTimezoneOffset() - startDate.getTimezoneOffset();\n var duration = (endDate.getTime() - startDate.getTime()) - (timeZoneDiff * 60000);\n viewDate = new Date((viewDate || this.parent.activeView.startDate()).getTime() - duration);\n var exception = event[this.parent.eventFields.recurrenceException];\n var maxCount;\n if (this.parent.currentView !== 'Agenda' && isMaxCount) {\n maxCount = util.getDateCount(viewDate, this.parent.activeView.endDate()) + 1;\n }\n var newTimezone = this.parent.timezone || this.parent.tzModule.getLocalTimezoneName();\n var firstDay = this.parent.activeViewOptions.firstDayOfWeek;\n var calendarMode = this.parent.calendarMode;\n var dates = generate(startDate, eventRule, exception, firstDay, maxCount, viewDate, calendarMode, oldTimezone, newTimezone);\n if (this.parent.currentView === 'Agenda' && eventRule.indexOf('COUNT') === -1 && eventRule.indexOf('UNTIL') === -1) {\n if (isNullOrUndefined(event.generatedDates)) {\n event.generatedDates = { start: new Date(dates[0]), end: new Date(dates[dates.length - 1]) };\n }\n else {\n if (dates[0] < event.generatedDates.start.getTime()) {\n event.generatedDates.start = new Date(dates[0]);\n }\n if (dates[dates.length - 1] > event.generatedDates.end.getTime()) {\n event.generatedDates.end = new Date(dates[dates.length - 1]);\n }\n }\n }\n var occurrenceCollection = [];\n for (var _i = 0, dates_1 = dates; _i < dates_1.length; _i++) {\n var date = dates_1[_i];\n var clonedObject = extend({}, event, null, true);\n date = this.getDSTAdjustedTime(date, clonedObject);\n clonedObject[this.parent.eventFields.startTime] = new Date(date);\n clonedObject[this.parent.eventFields.endTime] = new Date(new Date(date).setMilliseconds(duration));\n clonedObject[this.parent.eventFields.recurrenceID] = clonedObject[this.parent.eventFields.id];\n delete clonedObject[this.parent.eventFields.recurrenceException];\n delete clonedObject[this.parent.eventFields.followingID];\n clonedObject.Guid = this.generateGuid();\n occurrenceCollection.push(clonedObject);\n }\n return occurrenceCollection;\n };\n EventBase.prototype.getDSTAdjustedTime = function (date, event) {\n var occurDate = date;\n if (this.parent.timezone &&\n (event[this.parent.eventFields.startTimezone] || event[this.parent.eventFields.endTimezone])) {\n var eventOffset = this.getDSTDiff(event[this.parent.eventFields.startTime], new Date(date), event[this.parent.eventFields.startTimezone]);\n var schOffset = this.getDSTDiff(event[this.parent.eventFields.startTime], new Date(date), this.parent.timezone);\n occurDate = (new Date(date).getTime() - (eventOffset - schOffset) * 60000);\n }\n return occurDate;\n };\n EventBase.prototype.getDSTDiff = function (startDate, occurDate, timezone) {\n var startOffset = this.parent.tzModule.offset(new Date(startDate), timezone);\n var occurOffset = this.parent.tzModule.offset(new Date(occurDate), timezone);\n return startOffset - occurOffset;\n };\n EventBase.prototype.getParentEvent = function (eventObj, isParent) {\n if (isParent === void 0) { isParent = false; }\n var parentEvent;\n do {\n eventObj = this.getFollowingEvent(eventObj);\n if (eventObj) {\n parentEvent = extend({}, eventObj, null, true);\n }\n } while (eventObj && isParent);\n if (isParent && parentEvent) {\n var collection = this.getEventCollections(parentEvent);\n var followObj = collection.follow.slice(-1)[0];\n if (collection.occurrence.length > 0 && !parentEvent[this.parent.eventFields.recurrenceException]) {\n followObj = collection.occurrence.slice(-1)[0];\n }\n if (followObj) {\n parentEvent[this.parent.eventFields.recurrenceRule] = followObj[this.parent.eventFields.recurrenceRule];\n }\n }\n return parentEvent;\n };\n EventBase.prototype.getEventCollections = function (parentObj, childObj) {\n var followingCollection = [];\n var occurrenceCollection = [];\n var followingEvent = parentObj;\n do {\n followingEvent = this.getFollowingEvent(followingEvent, true);\n if (followingEvent) {\n followingCollection.push(followingEvent);\n }\n occurrenceCollection = occurrenceCollection.concat(this.getOccurrenceEvent(followingEvent || parentObj));\n } while (followingEvent);\n var collections = {};\n if (childObj) {\n var fields_1 = this.parent.eventFields;\n collections = {\n follow: followingCollection.filter(function (eventData) {\n return eventData[fields_1.startTime] >= childObj[fields_1.startTime];\n }),\n occurrence: occurrenceCollection.filter(function (eventData) {\n return eventData[fields_1.startTime] >= childObj[fields_1.startTime];\n })\n };\n }\n else {\n collections = { follow: followingCollection, occurrence: occurrenceCollection };\n }\n return collections;\n };\n EventBase.prototype.getFollowingEvent = function (parentObj, isReverse) {\n var fields = this.parent.eventFields;\n var fieldValue;\n if (isReverse) {\n fieldValue = parentObj[fields.id];\n }\n else {\n fieldValue = (parentObj[fields.recurrenceID] || parentObj[fields.followingID]);\n }\n var parentApp = this.parent.eventsData.filter(function (data) {\n return data[isReverse ? fields.followingID : fields.id] === fieldValue;\n });\n return parentApp.shift();\n };\n EventBase.prototype.isFollowingEvent = function (parentObj, childObj) {\n var parentStart = parentObj[this.parent.eventFields.startTime];\n var childStart = childObj[this.parent.eventFields.startTime];\n return parentStart.getHours() === childStart.getHours() && parentStart.getMinutes() === childStart.getMinutes() &&\n parentStart.getSeconds() === childStart.getSeconds();\n };\n EventBase.prototype.getOccurrenceEvent = function (eventObj, isGuid, isFollowing) {\n if (isGuid === void 0) { isGuid = false; }\n if (isFollowing === void 0) { isFollowing = false; }\n var idField = isGuid ? 'Guid' : (isFollowing) ? this.parent.eventFields.followingID : this.parent.eventFields.recurrenceID;\n var fieldKey = isGuid ? 'Guid' : this.parent.eventFields.id;\n var dataSource = isGuid ? this.parent.eventsProcessed : this.parent.eventsData;\n return dataSource.filter(function (data) { return data[\"\" + idField] === eventObj[\"\" + fieldKey]; });\n };\n EventBase.prototype.getOccurrencesByID = function (id) {\n var fields = this.parent.eventFields;\n var occurrenceCollection = [];\n var parentObject = this.parent.eventsData.filter(function (obj) { return obj[fields.id] === id; });\n for (var _i = 0, parentObject_1 = parentObject; _i < parentObject_1.length; _i++) {\n var event_3 = parentObject_1[_i];\n if (!isNullOrUndefined(event_3[fields.recurrenceRule])) {\n occurrenceCollection = occurrenceCollection.concat(this.generateOccurrence(event_3));\n }\n }\n return occurrenceCollection;\n };\n EventBase.prototype.getOccurrencesByRange = function (startTime, endTime) {\n var fields = this.parent.eventFields;\n var occurrenceCollection = [];\n for (var _i = 0, _a = this.parent.eventsData; _i < _a.length; _i++) {\n var event_4 = _a[_i];\n if (!isNullOrUndefined(event_4[fields.recurrenceRule])) {\n occurrenceCollection = occurrenceCollection.concat(this.generateOccurrence(event_4));\n }\n }\n var filter = occurrenceCollection.filter(function (obj) {\n return obj[fields.startTime] >= startTime && obj[fields.endTime] <= endTime && !isNullOrUndefined(obj[fields.recurrenceID]);\n });\n return filter;\n };\n EventBase.prototype.getDeletedOccurrences = function (recurrenceData) {\n var fields = this.parent.eventFields;\n var parentObject;\n var deletedOccurrences = [];\n if (typeof recurrenceData === 'string' || typeof recurrenceData === 'number') {\n parentObject = this.parent.eventsData.filter(function (obj) {\n return obj[fields.id] === recurrenceData;\n })[0];\n }\n else {\n parentObject = extend({}, recurrenceData, null, true);\n }\n if (parentObject[fields.recurrenceException]) {\n var exDateString_1 = parentObject[fields.recurrenceException].split(',');\n var _loop_3 = function (i, len) {\n var edited = this_2.parent.eventsData.filter(function (eventObj) {\n return eventObj[fields.recurrenceID] === parentObject[fields.id] && eventObj[fields.recurrenceException] === exDateString_1[parseInt(i.toString(), 10)];\n });\n if (edited.length === 0) {\n var exDate = getDateFromRecurrenceDateString(exDateString_1[parseInt(i.toString(), 10)]);\n var childObject = extend({}, recurrenceData, null, true);\n childObject[fields.recurrenceID] = parentObject[fields.id];\n delete childObject[fields.followingID];\n childObject[fields.recurrenceException] = exDateString_1[parseInt(i.toString(), 10)];\n var startDate = new Date(exDate.getTime());\n var time = parentObject[fields.endTime].getTime() - parentObject[fields.startTime].getTime();\n var endDate = new Date(startDate.getTime());\n endDate.setMilliseconds(time);\n childObject[fields.startTime] = new Date(startDate.getTime());\n childObject[fields.endTime] = new Date(endDate.getTime());\n deletedOccurrences.push(childObject);\n }\n };\n var this_2 = this;\n for (var i = 0, len = exDateString_1.length; i < len; i++) {\n _loop_3(i, len);\n }\n }\n return deletedOccurrences;\n };\n EventBase.prototype.applyResourceColor = function (element, data, type, index, alpha) {\n if (!this.parent.resourceBase) {\n return;\n }\n var alphaColor = function (color, alpha) {\n color = color.replace('#', '');\n var r = parseInt(color.substring(0, color.length / 3), 16);\n var g = parseInt(color.substring(color.length / 3, 2 * color.length / 3), 16);\n var b = parseInt(color.substring(2 * color.length / 3, 3 * color.length / 3), 16);\n return \"rgba(\" + r + \", \" + g + \", \" + b + \", \" + alpha + \")\";\n };\n // index refers groupOrder\n var color = this.parent.resourceBase.getResourceColor(data, index);\n if (color) {\n element.style[type] = !isNullOrUndefined(alpha) ? alphaColor(color, alpha) : color;\n }\n };\n EventBase.prototype.createBlockAppointmentElement = function (record, resIndex, isResourceEventTemplate) {\n var eventSubject = (record[this.parent.eventFields.subject] || this.parent.eventSettings.fields.subject.default);\n var appointmentWrapper = createElement('div', {\n className: cls.BLOCK_APPOINTMENT_CLASS,\n attrs: {\n 'data-id': 'Appointment_' + record[this.parent.eventFields.id],\n 'aria-disabled': 'true'\n }\n });\n var templateElement;\n if (!isNullOrUndefined(this.parent.activeViewOptions.eventTemplate)) {\n var scheduleId = this.parent.element.id + '_';\n var viewName = this.parent.activeViewOptions.eventTemplateName;\n var templateId = scheduleId + viewName + 'eventTemplate';\n var templateName = 'eventTemplate' + (isResourceEventTemplate &&\n this.parent.currentView.indexOf('Year') === -1 ? '_' + resIndex : '');\n templateElement = this.parent.getAppointmentTemplate()(record, this.parent, templateName, templateId, false);\n }\n else {\n var appointmentSubject = createElement('div', { className: cls.SUBJECT_CLASS });\n this.parent.sanitize(eventSubject, appointmentSubject);\n templateElement = [appointmentSubject];\n }\n append(templateElement, appointmentWrapper);\n this.setWrapperAttributes(appointmentWrapper, resIndex);\n return appointmentWrapper;\n };\n EventBase.prototype.setWrapperAttributes = function (appointmentWrapper, resIndex) {\n if (!isNullOrUndefined(this.cssClass)) {\n addClass([appointmentWrapper], this.cssClass);\n }\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n appointmentWrapper.setAttribute('data-group-index', resIndex.toString());\n }\n };\n EventBase.prototype.getReadonlyAttribute = function (event) {\n return (event[this.parent.eventFields.isReadonly] || this.parent.readonly).toString();\n };\n EventBase.prototype.isBlockRange = function (eventData) {\n var eventCollection = (eventData instanceof Array) ? eventData : [eventData];\n var isBlockAlert = false;\n var fields = this.parent.eventFields;\n for (var _i = 0, _a = eventCollection; _i < _a.length; _i++) {\n var event_5 = _a[_i];\n var dataCol = [];\n if (!isNullOrUndefined(event_5[fields.recurrenceRule]) &&\n (isNullOrUndefined(event_5[fields.recurrenceID]) || event_5[fields.id] === event_5[fields.recurrenceID])) {\n dataCol = this.generateOccurrence(event_5);\n }\n else {\n dataCol.push(event_5);\n }\n for (var _b = 0, dataCol_1 = dataCol; _b < dataCol_1.length; _b++) {\n var data = dataCol_1[_b];\n var filterBlockEvents = this.filterBlockEvents(data);\n if (filterBlockEvents.length > 0) {\n isBlockAlert = true;\n break;\n }\n }\n }\n this.parent.uiStateValues.isBlock = isBlockAlert;\n return isBlockAlert;\n };\n EventBase.prototype.getFilterEventsList = function (dataSource, query) {\n return new DataManager(dataSource).executeLocal(new Query().where(query));\n };\n EventBase.prototype.getSeriesEvents = function (parentEvent, startTime) {\n var fields = this.parent.eventFields;\n startTime = isNullOrUndefined(startTime) ? parentEvent[fields.startTime] : startTime;\n var deleteFutureEditEvents;\n var futureEvents;\n var deleteFutureEditEventList = [];\n var delId = parentEvent[fields.id];\n var followingId = parentEvent[fields.followingID];\n var deleteFutureEvent;\n var startTimeQuery = this.parent.currentAction === 'EditSeries' ? 'greaterthan' : 'greaterthanorequal';\n do {\n deleteFutureEvent = ((new Predicate(fields.followingID, 'equal', delId))).\n and(new Predicate(fields.startTime, startTimeQuery, startTime));\n futureEvents = this.getFilterEventsList(this.parent.eventsData, deleteFutureEvent);\n deleteFutureEditEvents = futureEvents.slice(-1)[0];\n if (!isNullOrUndefined(deleteFutureEditEvents) && deleteFutureEditEvents[fields.id] !== followingId) {\n deleteFutureEditEventList.push(deleteFutureEditEvents);\n delId = deleteFutureEditEvents[fields.id];\n followingId = deleteFutureEditEvents[fields.followingID];\n }\n else {\n followingId = null;\n }\n } while (futureEvents.length === 1 && !isNullOrUndefined(deleteFutureEditEvents[fields.followingID]));\n return deleteFutureEditEventList;\n };\n EventBase.prototype.getEditedOccurrences = function (deleteFutureEditEventList, startTime) {\n var fields = this.parent.eventFields;\n var deleteRecurrenceEventList = [];\n var delEditedEvents;\n for (var _i = 0, deleteFutureEditEventList_1 = deleteFutureEditEventList; _i < deleteFutureEditEventList_1.length; _i++) {\n var event_6 = deleteFutureEditEventList_1[_i];\n var delEventQuery = new Predicate(fields.recurrenceID, 'equal', event_6[fields.id]).\n or(new Predicate(fields.recurrenceID, 'equal', event_6[fields.followingID]).\n and(new Predicate(fields.recurrenceID, 'notequal', undefined)).\n and(new Predicate(fields.recurrenceID, 'notequal', null)));\n if (this.parent.currentAction === 'EditFollowingEvents' || this.parent.currentAction === 'DeleteFollowingEvents') {\n delEventQuery = delEventQuery.and(new Predicate(fields.startTime, 'greaterthanorequal', startTime));\n }\n delEditedEvents = this.getFilterEventsList(this.parent.eventsData, delEventQuery);\n deleteRecurrenceEventList = deleteRecurrenceEventList.concat(delEditedEvents);\n }\n return deleteRecurrenceEventList;\n };\n EventBase.prototype.getRenderedDates = function (dateRender) {\n var firstDate = 0;\n var lastDate = dateRender.length;\n var filteredDates;\n if (dateRender[0] < this.parent.minDate && dateRender[dateRender.length - 1] > this.parent.maxDate) {\n for (var i = 0; i < dateRender.length; i++) {\n if (util.resetTime(dateRender[parseInt(i.toString(), 10)]).getTime() === util.resetTime(new Date(this.parent.minDate)).getTime()) {\n firstDate = i;\n }\n if (util.resetTime(dateRender[parseInt(i.toString(), 10)]).getTime() === util.resetTime(new Date(this.parent.maxDate)).getTime()) {\n lastDate = i;\n }\n }\n filteredDates = dateRender.filter(function (date) { return date >= dateRender[parseInt(firstDate.toString(), 10)] && date <= dateRender[parseInt(lastDate.toString(), 10)]; });\n }\n return filteredDates;\n };\n EventBase.prototype.isValidEvent = function (eventObj, start, end, schedule) {\n var isHourRange = end.getTime() > schedule.startHour.getTime() && start.getTime() < schedule.endHour.getTime();\n var isSameRange = schedule.startHour.getTime() <= start.getTime() &&\n eventObj[this.parent.eventFields.startTime].getTime() >= schedule.startHour.getTime() &&\n eventObj[this.parent.eventFields.endTime].getTime() < schedule.endHour.getTime() && start.getTime() === end.getTime();\n return isHourRange || isSameRange;\n };\n EventBase.prototype.allDayExpandScroll = function (dateHeader) {\n var indentHeight = 0;\n var headerRows = [].slice.call(this.parent.element.querySelectorAll('.' + cls.HEADER_ROW_CLASS));\n headerRows.forEach(function (element) {\n var tdEle = [].slice.call(element.children);\n tdEle.forEach(function (ele) { ele.style.top = indentHeight + 'px'; });\n indentHeight += element.offsetHeight;\n });\n indentHeight = dateHeader.offsetHeight - indentHeight;\n this.parent.element.querySelector('.' + cls.ALLDAY_CELLS_CLASS).style.height = (indentHeight / 12) + 'em';\n if (this.parent.uiStateValues.expand) {\n addClass([dateHeader], cls.ALLDAY_APPOINTMENT_SCROLL);\n }\n else {\n removeClass([dateHeader], cls.ALLDAY_APPOINTMENT_SCROLL);\n }\n };\n EventBase.prototype.updateEventMinimumDuration = function (startEndHours, startTime, endTime) {\n if (startTime.getTime() < endTime.getTime()) {\n var eventDuration = (util.getUniversalTime(endTime) - util.getUniversalTime(startTime)) / util.MS_PER_MINUTE;\n if (eventDuration < this.parent.eventSettings.minimumEventDuration) {\n var tempEnd = new Date(startTime);\n tempEnd.setMinutes(tempEnd.getMinutes() + this.parent.eventSettings.minimumEventDuration);\n endTime = tempEnd;\n if (endTime.getTime() > startEndHours.endHour.getTime()) {\n var tempStart = new Date(startEndHours.endHour.getTime());\n tempStart.setMinutes(tempStart.getMinutes() - this.parent.eventSettings.minimumEventDuration);\n startTime = tempStart;\n endTime = startEndHours.endHour;\n }\n }\n }\n return { startDate: startTime, endDate: endTime };\n };\n EventBase.prototype.createEventWrapper = function (type, index) {\n if (type === void 0) { type = ''; }\n if (index === void 0) { index = 0; }\n var tr = createElement('tr');\n var levels = this.parent.activeView.colLevels.slice(-1)[0];\n for (var i = 0, len = levels.length; i < len; i++) {\n var col = levels[parseInt(i.toString(), 10)];\n var appointmentWrap = createElement('td', {\n className: (type === 'allDay') ? cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS : (type === 'timeIndicator') ?\n cls.TIMELINE_WRAPPER_CLASS : cls.DAY_WRAPPER_CLASS, attrs: { 'data-date': col.date.getTime().toString() }\n });\n if (!isNullOrUndefined(col.groupIndex)) {\n appointmentWrap.setAttribute('data-group-index', col.groupIndex.toString());\n }\n if (type === '') {\n var innerWrapper = createElement('div', {\n id: cls.APPOINTMENT_WRAPPER_CLASS + '-' + index.toString(),\n className: cls.APPOINTMENT_WRAPPER_CLASS\n });\n appointmentWrap.appendChild(innerWrapper);\n }\n tr.appendChild(appointmentWrap);\n index = index + 1;\n }\n return tr;\n };\n EventBase.prototype.getPageCoordinates = function (e) {\n if (isNullOrUndefined(e)) {\n return e;\n }\n var eventArgs = e.event;\n return eventArgs && eventArgs.changedTouches ? eventArgs.changedTouches[0] : e.changedTouches ? e.changedTouches[0] :\n eventArgs || e;\n };\n EventBase.prototype.renderSpannedIcon = function (element, spanEvent) {\n var iconElement = createElement('div', { className: cls.EVENT_INDICATOR_CLASS + ' ' + cls.ICON });\n if (spanEvent.isLeft) {\n var iconLeft = iconElement.cloneNode();\n addClass([iconLeft], cls.EVENT_ICON_LEFT_CLASS);\n prepend([iconLeft], element);\n }\n if (spanEvent.isRight) {\n var iconRight = iconElement.cloneNode();\n addClass([iconRight], cls.EVENT_ICON_RIGHT_CLASS);\n append([iconRight], element);\n }\n if (spanEvent.isTop) {\n var iconTop = iconElement.cloneNode();\n addClass([iconTop], cls.EVENT_ICON_UP_CLASS);\n prepend([iconTop], element);\n }\n if (spanEvent.isBottom) {\n var iconBottom = iconElement.cloneNode();\n addClass([iconBottom], cls.EVENT_ICON_DOWN_CLASS);\n append([iconBottom], element);\n }\n };\n EventBase.prototype.unWireEvents = function () {\n var appElements = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CLASS));\n for (var _i = 0, appElements_1 = appElements; _i < appElements_1.length; _i++) {\n var element = appElements_1[_i];\n EventHandler.clearEvents(element);\n }\n };\n EventBase.prototype.destroy = function () {\n this.unWireEvents();\n this.parent = null;\n };\n return EventBase;\n}());\nexport { EventBase };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { append, prepend, createElement, extend, EventHandler, closest, addClass } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, setStyleAttribute, remove } from '@syncfusion/ej2-base';\nimport { EventBase } from './event-base';\nimport * as cls from '../base/css-constant';\nimport * as events from '../base/constant';\nimport * as util from '../base/util';\nvar EVENT_GAP = 0;\n/**\n * Month view events render\n */\nvar MonthEvent = /** @class */ (function (_super) {\n __extends(MonthEvent, _super);\n function MonthEvent(parent) {\n var _this = _super.call(this, parent) || this;\n _this.renderedEvents = [];\n _this.monthHeaderHeight = 0;\n _this.moreIndicatorHeight = 19;\n _this.renderType = 'day';\n _this.element = _this.parent.activeView.getPanel();\n _this.fields = _this.parent.eventFields;\n _this.maxHeight = _this.parent.eventSettings.enableMaxHeight && !_this.parent.eventSettings.enableIndicator\n && !_this.parent.rowAutoHeight;\n _this.withIndicator = _this.parent.eventSettings.enableMaxHeight && _this.parent.eventSettings.enableIndicator\n && !_this.parent.rowAutoHeight;\n _this.maxOrIndicator = (_this.maxHeight || _this.withIndicator);\n _this.moreIndicatorHeight =\n (_this.parent.rowAutoHeight && _this.parent.eventSettings.ignoreWhitespace) ? 0 : _this.moreIndicatorHeight;\n _this.addEventListener();\n return _this;\n }\n MonthEvent.prototype.removeEventWrapper = function (appElement) {\n if (appElement.length > 0) {\n appElement = (this.parent.currentView === 'Month' || (!this.parent.activeView.isTimelineView() &&\n !this.parent.activeViewOptions.timeScale.enable)) ? appElement : [appElement[0]];\n for (var _i = 0, appElement_1 = appElement; _i < appElement_1.length; _i++) {\n var wrap = appElement_1[_i];\n if (wrap.parentElement && wrap.parentElement.parentNode) {\n remove(wrap.parentElement);\n }\n }\n }\n };\n MonthEvent.prototype.renderAppointments = function () {\n if (this.parent.dragAndDropModule) {\n this.parent.dragAndDropModule.setDragArea();\n }\n this.isResourceEventTemplate = this.parent.isSpecificResourceEvents();\n var conWrap = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n if (this.parent.rowAutoHeight) {\n this.parent.uiStateValues.top = conWrap.scrollTop;\n this.parent.uiStateValues.left = conWrap.scrollLeft;\n }\n var appointmentWrapper = [].slice.call(this.element.querySelectorAll('.' + cls.APPOINTMENT_WRAPPER_CLASS));\n if (this.parent.crudModule && this.parent.crudModule.crudObj.isCrudAction) {\n for (var i = 0, len = this.parent.crudModule.crudObj.sourceEvent.length; i < len; i++) {\n var appElement = [].slice.call(this.element.querySelectorAll('.e-appointment-wrapper ' + '[data-group-index=\"' +\n this.parent.crudModule.crudObj.sourceEvent[parseInt(i.toString(), 10)].groupIndex + '\"]'));\n this.removeEventWrapper(appElement);\n if (this.parent.crudModule.crudObj.targetEvent[parseInt(i.toString(), 10)] &&\n this.parent.crudModule.crudObj.sourceEvent[parseInt(i.toString(), 10)].groupIndex !==\n this.parent.crudModule.crudObj.targetEvent[parseInt(i.toString(), 10)].groupIndex) {\n var ele = [].slice.call(this.element.querySelectorAll('.e-appointment-wrapper ' + '[data-group-index=\"' +\n this.parent.crudModule.crudObj.targetEvent[parseInt(i.toString(), 10)].groupIndex + '\"]'));\n this.removeEventWrapper(ele);\n }\n }\n }\n else {\n for (var _i = 0, appointmentWrapper_1 = appointmentWrapper; _i < appointmentWrapper_1.length; _i++) {\n var wrap = appointmentWrapper_1[_i];\n remove(wrap);\n }\n }\n this.removeHeightProperty(cls.CONTENT_TABLE_CLASS);\n if (!this.element.querySelector('.' + cls.WORK_CELLS_CLASS)) {\n return;\n }\n if (this.parent.currentView === 'Month') {\n var wrapper = createElement('div', { className: cls.APPOINTMENT_WRAPPER_CLASS });\n var cellTd = this.parent.element.querySelector('.' + cls.WORK_CELLS_CLASS);\n cellTd.appendChild(wrapper);\n this.monthHeaderHeight = wrapper.offsetTop - cellTd.offsetTop;\n cellTd.removeChild(wrapper);\n }\n this.eventHeight = util.getElementHeightFromClass(this.element, cls.APPOINTMENT_CLASS);\n var scrollTop = conWrap.scrollTop;\n if (this.parent.rowAutoHeight && this.parent.virtualScrollModule && !this.parent.virtualScrollModule.isHorizontalScroll\n && !isNullOrUndefined(this.parent.currentAction)) {\n conWrap.scrollTop = conWrap.scrollTop - 1;\n }\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n this.renderResourceEvents();\n if (this.parent.virtualScrollModule) {\n this.parent.virtualScrollModule.updateFocusedWorkCell();\n }\n }\n else {\n this.renderEventsHandler(this.parent.activeView.renderDates, this.parent.activeViewOptions.workDays);\n }\n if (this.parent.rowAutoHeight) {\n this.updateBlockElements();\n var data = {\n cssProperties: this.parent.getCssProperties(),\n module: this.parent.getModuleName(),\n isPreventScrollUpdate: true,\n scrollPosition: { left: this.parent.uiStateValues.left, top: this.parent.uiStateValues.top }\n };\n if (this.parent.virtualScrollModule && !this.parent.virtualScrollModule.isHorizontalScroll) {\n if (this.parent.currentAction) {\n conWrap.scrollTop = scrollTop;\n this.parent.currentAction = null;\n }\n else {\n this.parent.virtualScrollModule.updateVirtualScrollHeight();\n }\n }\n if (!this.parent.enablePersistence) {\n this.parent.notify(events.contentReady, {});\n }\n this.parent.notify(events.scrollUiUpdate, data);\n if (this.parent.currentView === 'Month' && this.parent.showWeekNumber) {\n var totalCells_1 = [].slice.call(this.parent.element.querySelectorAll('.e-content-wrap table tr td:first-child'));\n var weekNumberCells = [].slice.call(this.parent.element.querySelectorAll('.' + cls.WEEK_NUMBER_CLASS));\n weekNumberCells.forEach(function (cell, i) {\n var height = totalCells_1[parseInt(i.toString(), 10)].offsetHeight;\n setStyleAttribute(cell, { 'height': height + 'px' });\n });\n this.parent.element.querySelector('.' + cls.WEEK_NUMBER_WRAPPER_CLASS).scrollTop =\n this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS).scrollTop;\n }\n }\n this.parent.renderTemplates();\n };\n MonthEvent.prototype.renderEventsHandler = function (dateRender, workDays, resData) {\n this.renderedEvents = [];\n var eventsList;\n var blockList;\n var resIndex = 0;\n if (resData) {\n resIndex = resData.groupIndex;\n this.cssClass = resData.cssClass;\n this.groupOrder = resData.groupOrder;\n eventsList = this.parent.eventBase.filterEventsByResource(resData, this.parent.eventsProcessed);\n blockList = this.parent.eventBase.filterEventsByResource(resData, this.parent.blockProcessed);\n this.workCells = [].slice.call(this.element.querySelectorAll('.' + cls.WORK_CELLS_CLASS + '[data-group-index=\"' + resIndex + '\"]'));\n }\n else {\n eventsList = this.parent.eventsProcessed;\n blockList = this.parent.blockProcessed;\n this.workCells = [].slice.call(this.element.querySelectorAll('.' + cls.WORK_CELLS_CLASS));\n }\n this.sortByDateTime(eventsList);\n this.sortByDateTime(blockList);\n if (this.parent.currentView === 'Month' && this.parent.rowAutoHeight && this.parent.activeViewOptions.group.resources.length === 0) {\n var totalCells = [].slice.call(this.parent.element.querySelectorAll('.e-content-wrap table tr td:first-child'));\n var height_1 = this.parent.element.querySelector('.' + cls.CONTENT_TABLE_CLASS).clientHeight / totalCells.length;\n totalCells.forEach(function (cell) {\n setStyleAttribute(cell, { 'height': height_1 + 'px' });\n });\n }\n var cellDetail = this.workCells[this.parent.activeView.isTimelineView() ?\n 0 : this.workCells.length - 1].getBoundingClientRect();\n this.cellWidth = cellDetail.width;\n this.cellHeight = cellDetail.height;\n this.dateRender = dateRender;\n var filteredDates = this.getRenderedDates(dateRender);\n this.getSlotDates(workDays || this.parent.activeViewOptions.workDays);\n this.processBlockEvents(blockList, resIndex, resData);\n var events = [];\n for (var _i = 0, eventsList_1 = eventsList; _i < eventsList_1.length; _i++) {\n var event_1 = eventsList_1[_i];\n if (this.parent.resourceBase && !resData) {\n this.cssClass = this.parent.resourceBase.getCssClass(event_1);\n }\n events = events.concat(this.splitEvent(event_1, filteredDates || this.dateRender));\n }\n for (var level = 0; level < this.slots.length; level++) {\n this.renderedEvents = [];\n var slot = this.slots[parseInt(level.toString(), 10)];\n var endDate = util.addDays(new Date(slot[slot.length - 1]), 1);\n var spannedEvents = this.filterEvents(new Date(slot[0]), endDate, events);\n for (var _a = 0, spannedEvents_1 = spannedEvents; _a < spannedEvents_1.length; _a++) {\n var event_2 = spannedEvents_1[_a];\n if (this.maxHeight) {\n var sDate = this.parent.currentView === 'Month' ? event_2[this.fields.startTime] :\n this.getStartTime(event_2, event_2.data);\n if (this.getIndex(sDate) > 0) {\n continue;\n }\n }\n this.updateIndicatorIcon(event_2);\n this.renderEvents(event_2, resIndex, eventsList);\n }\n }\n this.cssClass = null;\n this.groupOrder = null;\n };\n MonthEvent.prototype.processBlockEvents = function (blockEvents, resIndex, resData) {\n for (var _i = 0, blockEvents_1 = blockEvents; _i < blockEvents_1.length; _i++) {\n var event_3 = blockEvents_1[_i];\n if (this.parent.resourceBase && !resData) {\n this.cssClass = this.parent.resourceBase.getCssClass(event_3);\n }\n var blockSpannedList = [];\n if (this.renderType === 'day' && !event_3[this.fields.isAllDay]) {\n var temp = extend({}, event_3, null, true);\n var isSameDate = this.isSameDate(temp[this.fields.startTime], temp[this.fields.endTime]);\n temp.isBlockIcon = isSameDate;\n if (!isSameDate && util.getDateInMs(temp[this.fields.startTime]) > 0) {\n var e = extend({}, event_3, null, true);\n e[this.fields.endTime] = util.addDays(util.resetTime(new Date(event_3[this.fields.startTime] + '')), 1);\n e.isBlockIcon = true;\n temp[this.fields.startTime] = e[this.fields.endTime];\n blockSpannedList.push(e);\n }\n isSameDate = this.isSameDate(temp[this.fields.startTime], temp[this.fields.endTime]);\n if (!isSameDate && util.getDateInMs(temp[this.fields.endTime]) > 0) {\n var e = extend({}, event_3, null, true);\n e[this.fields.startTime] = util.resetTime(new Date(event_3[this.fields.endTime] + ''));\n e.isBlockIcon = true;\n blockSpannedList.push(e);\n temp[this.fields.endTime] = e[this.fields.startTime];\n }\n blockSpannedList.push(temp);\n }\n else {\n blockSpannedList.push(event_3);\n }\n for (var _a = 0, blockSpannedList_1 = blockSpannedList; _a < blockSpannedList_1.length; _a++) {\n var blockEvent = blockSpannedList_1[_a];\n var spannedEvents = this.splitEvent(blockEvent, this.dateRender);\n for (var _b = 0, spannedEvents_2 = spannedEvents; _b < spannedEvents_2.length; _b++) {\n var event_4 = spannedEvents_2[_b];\n this.renderBlockEvents(event_4, resIndex, !!blockEvent.isBlockIcon);\n }\n }\n }\n };\n MonthEvent.prototype.isSameDate = function (start, end) {\n return new Date(+start).setHours(0, 0, 0, 0) === new Date(+end).setHours(0, 0, 0, 0);\n };\n MonthEvent.prototype.renderBlockEvents = function (event, resIndex, isIcon) {\n var eventData = event.data;\n var startTime = this.getStartTime(event, eventData);\n var endTime = this.getEndTime(event, eventData);\n var day = this.parent.getIndexOfDate(this.dateRender, util.resetTime(new Date(startTime.getTime())));\n if (day < 0 || startTime > endTime) {\n return;\n }\n var cellTd = this.getCellTd(day);\n var position = this.getPosition(startTime, endTime, event[this.fields.isAllDay], day);\n if (!isIcon) {\n var diffInDays = eventData.count;\n var appWidth = this.getEventWidth(startTime, endTime, event[this.fields.isAllDay], diffInDays);\n appWidth = (appWidth <= 0) ? this.cellWidth : appWidth;\n var appLeft = (this.parent.enableRtl) ? 0 : position;\n var appRight = (this.parent.enableRtl) ? position : 0;\n var appHeight = this.cellHeight - this.monthHeaderHeight;\n var appTop = this.getRowTop(resIndex);\n var blockElement = this.createBlockAppointmentElement(event, resIndex, this.isResourceEventTemplate);\n setStyleAttribute(blockElement, {\n 'width': appWidth + 'px', 'height': appHeight + 'px', 'left': appLeft + 'px',\n 'right': appRight + 'px', 'top': appTop + 'px'\n });\n this.renderEventElement(event, blockElement, cellTd);\n }\n else {\n this.renderBlockIndicator(cellTd, position, resIndex);\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n MonthEvent.prototype.renderBlockIndicator = function (cellTd, position, resIndex) {\n var blockIndicator = createElement('div', { className: 'e-icons ' + cls.BLOCK_INDICATOR_CLASS });\n if (isNullOrUndefined(cellTd.querySelector('.' + cls.BLOCK_INDICATOR_CLASS))) {\n cellTd.appendChild(blockIndicator);\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n MonthEvent.prototype.getStartTime = function (event, eventData) {\n return event[this.fields.startTime];\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n MonthEvent.prototype.getEndTime = function (event, eventData) {\n return event[this.fields.endTime];\n };\n MonthEvent.prototype.getCellTd = function (day) {\n return this.workCells[parseInt(day.toString(), 10)];\n };\n MonthEvent.prototype.getEventWidth = function (startDate, endDate, isAllDay, count) {\n return count * this.cellWidth - 1;\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n MonthEvent.prototype.getPosition = function (startTime, endTime, isAllDay, day) {\n return 0;\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n MonthEvent.prototype.getRowTop = function (resIndex) {\n return 0;\n };\n MonthEvent.prototype.updateIndicatorIcon = function (event) {\n if (this.parent.currentView.indexOf('Timeline') === -1 || this.parent.currentView === 'TimelineMonth'\n || event[this.fields.isAllDay]) {\n return;\n }\n var cloneData = event.data;\n var start = this.parent.activeView.getStartHour();\n var end = this.parent.activeView.getEndHour();\n var startHour = util.getStartEndHours(event[this.fields.startTime], start, end);\n var endHour = util.getStartEndHours(event[this.fields.endTime], start, end);\n var actualStartTime = cloneData[this.fields.startTime];\n var actualEndTime = cloneData[this.fields.endTime];\n cloneData.isLeft = cloneData.isLeft || actualStartTime.getTime() < startHour.startHour.getTime();\n cloneData.isRight = cloneData.isRight || actualEndTime.getTime() > endHour.endHour.getTime();\n if (util.resetTime(actualStartTime).getTime() !== util.resetTime(actualEndTime).getTime()) {\n var actualStartHour = startHour.startHour;\n var actualEndHour = endHour.endHour;\n var startTime = new Date(util.resetTime(actualStartTime));\n startTime.setHours(actualEndHour.getHours(), actualEndHour.getMinutes(), actualEndHour.getSeconds());\n cloneData.isLeft = cloneData.isLeft || actualStartTime.getTime() >= (actualStartHour.getDate() === startHour.endHour.getDate() ?\n startTime.getTime() : util.addDays(startTime, 1).getTime());\n if (actualEndTime.getTime() !== util.resetTime(actualEndTime).getTime()) {\n var endTime = new Date(util.resetTime(actualEndTime));\n cloneData.isRight = cloneData.isRight || actualEndTime.getTime() <=\n endTime.setHours(actualStartHour.getHours(), actualStartHour.getMinutes(), actualStartHour.getSeconds());\n }\n }\n };\n MonthEvent.prototype.renderResourceEvents = function () {\n var resources = this.parent.uiStateValues.isGroupAdaptive ?\n [this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex]] :\n this.parent.resourceBase.renderedResources;\n if (this.parent.crudModule && this.parent.crudModule.crudObj.isCrudAction) {\n for (var i = 0, len = this.parent.crudModule.crudObj.sourceEvent.length; i < len; i++) {\n var sourceRes = this.parent.crudModule.crudObj.sourceEvent[parseInt(i.toString(), 10)];\n this.renderEventsHandler(sourceRes.renderDates, sourceRes.workDays, sourceRes);\n if (this.parent.crudModule.crudObj.sourceEvent[parseInt(i.toString(), 10)].groupIndex !==\n this.parent.crudModule.crudObj.targetEvent[parseInt(i.toString(), 10)].groupIndex) {\n var target = this.parent.crudModule.crudObj.targetEvent[parseInt(i.toString(), 10)];\n this.renderEventsHandler(target.renderDates, target.workDays, target);\n }\n }\n this.parent.crudModule.crudObj.isCrudAction = false;\n }\n else {\n for (var _i = 0, resources_1 = resources; _i < resources_1.length; _i++) {\n var slotData = resources_1[_i];\n this.renderEventsHandler(slotData.renderDates, slotData.workDays, slotData);\n }\n }\n };\n MonthEvent.prototype.getSlotDates = function (workDays) {\n this.slots = [];\n var dates = this.dateRender.map(function (date) { return +date; });\n var noOfDays = !this.parent.activeViewOptions.showWeekend || (this.parent.activeViewOptions.group.byDate &&\n this.parent.activeViewOptions.group.hideNonWorkingDays) ? workDays.length : util.WEEK_LENGTH;\n while (dates.length > 0) {\n this.slots.push(dates.splice(0, noOfDays));\n }\n };\n MonthEvent.prototype.createAppointmentElement = function (record, resIndex, isCloneElement) {\n if (isCloneElement === void 0) { isCloneElement = false; }\n var eventSubject = (record[this.fields.subject] || this.parent.eventSettings.fields.subject.default ||\n this.parent.localeObj.getConstant('addTitle'));\n var newRecord = extend({}, record, record.data, true);\n var attrs = {\n 'data-id': 'Appointment_' + record[this.fields.id],\n 'role': 'button', 'tabindex': '0',\n 'aria-disabled': this.parent.eventBase.getReadonlyAttribute(record),\n 'aria-label': this.parent.getAnnouncementString(newRecord, eventSubject)\n };\n if (!isCloneElement) {\n attrs['data-guid'] = record.Guid;\n }\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n attrs['data-group-index'] = resIndex.toString();\n }\n var appointmentWrapper = createElement('div', { className: cls.APPOINTMENT_CLASS, attrs: attrs });\n if (!isNullOrUndefined(this.cssClass)) {\n addClass([appointmentWrapper], this.cssClass);\n }\n if (record[this.fields.isReadonly]) {\n addClass([appointmentWrapper], 'e-read-only');\n }\n var appointmentDetails = createElement('div', { className: cls.APPOINTMENT_DETAILS });\n appointmentWrapper.appendChild(appointmentDetails);\n var templateElement;\n var eventData = record.data;\n var eventObj = this.getEventData(record);\n if (!isNullOrUndefined(this.parent.activeViewOptions.eventTemplate)) {\n var scheduleId = this.parent.element.id + '_';\n var viewName = this.parent.activeViewOptions.eventTemplateName;\n var templateId = scheduleId + viewName + 'eventTemplate';\n var eventTemplate = 'eventTemplate' + (this.isResourceEventTemplate ? '_' + resIndex : '');\n templateElement = this.parent.getAppointmentTemplate()(eventObj, this.parent, eventTemplate, templateId, false);\n }\n else {\n var eventLocation = (record[this.fields.location] || this.parent.eventSettings.fields.location.default || '');\n var appointmentSubject = createElement('div', { className: cls.SUBJECT_CLASS });\n this.parent.sanitize((eventSubject + (eventLocation ? '; ' + eventLocation : '')), appointmentSubject);\n var appointmentStartTime = createElement('div', {\n className: cls.APPOINTMENT_TIME + (this.parent.isAdaptive ? ' ' + cls.DISABLE_CLASS : ''),\n innerHTML: this.parent.getTimeString(eventData[this.fields.startTime])\n });\n var appointmentEndTime = createElement('div', {\n className: cls.APPOINTMENT_TIME + (this.parent.isAdaptive ? ' ' + cls.DISABLE_CLASS : ''),\n innerHTML: this.parent.getTimeString(eventData[this.fields.endTime])\n });\n if (this.parent.currentView === 'Month') {\n if (record[this.fields.isAllDay]) {\n templateElement = [appointmentSubject];\n addClass([appointmentSubject], 'e-text-center');\n }\n else if (eventData.count <= 1 && !eventData.isLeft && !eventData.isRight) {\n templateElement = [appointmentStartTime, appointmentSubject];\n }\n else {\n templateElement = [];\n addClass([appointmentSubject], 'e-text-center');\n if (!eventData.isLeft) {\n templateElement.push(appointmentStartTime);\n }\n templateElement.push(appointmentSubject);\n if (!eventData.isRight) {\n templateElement.push(appointmentEndTime);\n }\n }\n }\n else {\n var innerElement = void 0;\n if (record[this.fields.isAllDay]) {\n var allDayString = createElement('div', {\n className: cls.APPOINTMENT_TIME, innerHTML: this.parent.localeObj.getConstant('allDay')\n });\n innerElement = [appointmentSubject, allDayString];\n }\n else {\n var timeString = this.parent.getTimeString(eventData[this.fields.startTime])\n + ' - ' + this.parent.getTimeString(eventData[this.fields.endTime]);\n var appTime = createElement('div', {\n className: cls.APPOINTMENT_TIME + (this.parent.isAdaptive ? ' ' + cls.DISABLE_CLASS : ''), innerHTML: timeString\n });\n var appLocation = createElement('div', { className: cls.LOCATION_CLASS });\n this.parent.sanitize(eventLocation, appLocation);\n innerElement = [appointmentSubject, appTime, appLocation];\n }\n var wrap = createElement('div', { className: 'e-inner-wrap' });\n append(innerElement, wrap);\n templateElement = [wrap];\n }\n }\n append(templateElement, appointmentDetails);\n this.appendEventIcons(record, appointmentDetails);\n this.renderResizeHandler(appointmentWrapper, record.data, record[this.fields.isReadonly]);\n return appointmentWrapper;\n };\n MonthEvent.prototype.appendEventIcons = function (record, appointmentDetails) {\n var eventData = record.data;\n if (!isNullOrUndefined(record[this.fields.recurrenceRule]) || !isNullOrUndefined(record[this.fields.recurrenceID])) {\n var iconClass = (record[this.fields.id] === record[this.fields.recurrenceID]) ?\n cls.EVENT_RECURRENCE_ICON_CLASS : cls.EVENT_RECURRENCE_EDIT_ICON_CLASS;\n appointmentDetails.appendChild(createElement('div', {\n className: cls.ICON + ' ' + iconClass + (this.parent.isAdaptive ? ' ' + cls.DISABLE_CLASS : '')\n }));\n }\n if (eventData.isLeft) {\n var iconLeft = createElement('div', {\n className: cls.EVENT_INDICATOR_CLASS + ' ' + cls.ICON + ' ' + cls.EVENT_ICON_LEFT_CLASS\n });\n prepend([iconLeft], appointmentDetails);\n }\n if (eventData.isRight) {\n var iconRight = createElement('div', {\n className: cls.EVENT_INDICATOR_CLASS + ' ' + cls.ICON + ' ' + cls.EVENT_ICON_RIGHT_CLASS\n });\n append([iconRight], appointmentDetails);\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n MonthEvent.prototype.renderEvents = function (event, resIndex, eventsList) {\n var startTime = event[this.fields.startTime];\n var endTime = event[this.fields.endTime];\n var day = this.parent.getIndexOfDate(this.dateRender, util.resetTime(startTime));\n if ((day < 0) || (startTime.getTime() < this.parent.minDate.getTime()) || (endTime.getTime() > this.parent.maxDate.getTime())) {\n return;\n }\n var overlapCount = this.getIndex(startTime);\n event.Index = overlapCount;\n var diffInDays = event.data.count;\n if (startTime.getTime() <= endTime.getTime()) {\n var appWidth = (diffInDays * this.cellWidth) - 5;\n var cellTd = this.workCells[parseInt(day.toString(), 10)];\n var appTop = (overlapCount * (this.eventHeight + EVENT_GAP));\n var height = this.monthHeaderHeight + ((overlapCount + 1) * (this.eventHeight + EVENT_GAP)) + this.moreIndicatorHeight;\n var enableAppRender = this.maxOrIndicator ? overlapCount < 1 ? true : false : this.cellHeight > height;\n if (this.parent.rowAutoHeight || enableAppRender) {\n this.renderedEvents.push(extend({}, event, null, true));\n var appointmentElement = void 0;\n if (this.inlineValue) {\n appointmentElement = this.parent.inlineModule.createInlineAppointmentElement();\n }\n else {\n appointmentElement = this.createAppointmentElement(event, resIndex);\n }\n this.applyResourceColor(appointmentElement, event, 'backgroundColor', this.groupOrder);\n this.wireAppointmentEvents(appointmentElement, event);\n setStyleAttribute(appointmentElement, { 'width': appWidth + 'px', 'top': appTop + 'px' });\n this.renderEventElement(event, appointmentElement, cellTd);\n if (this.parent.rowAutoHeight) {\n var firstChild = cellTd.parentElement.firstElementChild;\n this.updateCellHeight(firstChild, height);\n }\n }\n else {\n for (var i = 0; i < diffInDays; i++) {\n if (this.workCells[day + i]) {\n var indicator = this.workCells[day + i].querySelector('.' + cls.MORE_INDICATOR_CLASS);\n if (indicator) {\n var count = parseInt(indicator.getAttribute('data-count'), 10) + 1;\n indicator.setAttribute('data-count', count.toString());\n indicator.innerHTML = this.getMoreIndicatorText(count);\n }\n else {\n var startDate = new Date(this.dateRender[day + i].getTime());\n var endDate = util.addDays(this.dateRender[day + i], 1);\n var groupIndex = this.workCells[day + i].getAttribute('data-group-index');\n var moreIndicatorElement = this.getMoreIndicatorElement(1, startDate, endDate);\n if (!isNullOrUndefined(groupIndex)) {\n moreIndicatorElement.setAttribute('data-group-index', groupIndex);\n }\n moreIndicatorElement.style.top = (this.cellHeight - this.monthHeaderHeight - this.moreIndicatorHeight) + 'px';\n moreIndicatorElement.style.width = this.cellWidth - 2 + 'px';\n this.renderElement(this.workCells[day + i], moreIndicatorElement);\n EventHandler.add(moreIndicatorElement, 'click', this.moreIndicatorClick, this);\n }\n }\n }\n }\n }\n };\n MonthEvent.prototype.updateCellHeight = function (cell, height) {\n if ((height > cell.offsetHeight)) {\n setStyleAttribute(cell, { 'height': height + 'px' });\n }\n };\n MonthEvent.prototype.updateBlockElements = function () {\n var blockElement = [].slice.call(this.element.querySelectorAll('.' + cls.BLOCK_APPOINTMENT_CLASS));\n for (var _i = 0, blockElement_1 = blockElement; _i < blockElement_1.length; _i++) {\n var element = blockElement_1[_i];\n var target = closest(element, 'tr');\n this.monthHeaderHeight = element.offsetParent.offsetTop - target.offsetTop;\n element.style.height = ((target.offsetHeight - 1) - this.monthHeaderHeight) + 'px';\n var firstChild = target.firstElementChild;\n var width = Math.round(element.offsetWidth / firstChild.offsetWidth);\n element.style.width = (firstChild.offsetWidth * width) + 'px';\n }\n };\n // eslint-disable-next-line max-len\n MonthEvent.prototype.getFilteredEvents = function (startDate, endDate, groupIndex, eventsList) {\n var filteredEvents;\n if (isNullOrUndefined(groupIndex)) {\n filteredEvents = this.filterEvents(startDate, endDate);\n }\n else {\n var data = this.parent.resourceBase.lastResourceLevel[parseInt(groupIndex, 10)];\n filteredEvents = this.filterEvents(startDate, endDate, isNullOrUndefined(eventsList) ? undefined : eventsList, data);\n }\n return filteredEvents;\n };\n MonthEvent.prototype.getOverlapEvents = function (date, appointments) {\n var appointmentsList = [];\n var dateTime = util.resetTime(date).getTime();\n for (var _i = 0, appointments_1 = appointments; _i < appointments_1.length; _i++) {\n var app = appointments_1[_i];\n if ((util.resetTime(app[this.fields.startTime]).getTime() <= dateTime) &&\n (util.resetTime(app[this.fields.endTime]).getTime() >= dateTime)) {\n appointmentsList.push(app);\n }\n }\n return appointmentsList;\n };\n MonthEvent.prototype.getIndex = function (date) {\n var appIndex = -1;\n var appointments = this.renderedEvents;\n if (appointments.length > 0) {\n var appointmentsList = this.getOverlapEvents(date, appointments);\n var appLevel = appointmentsList.map(function (obj) { return obj.Index; });\n appIndex = (appLevel.length > 0) ? this.getSmallestMissingNumber(appLevel) : 0;\n }\n return (appIndex === -1) ? 0 : appIndex;\n };\n MonthEvent.prototype.moreIndicatorClick = function (event) {\n var _this = this;\n var target = closest(event.target, '.' + cls.MORE_INDICATOR_CLASS);\n var startDate = new Date(parseInt(target.getAttribute('data-start-date'), 10));\n var endDate = new Date(parseInt(target.getAttribute('data-end-date'), 10));\n var groupIndex = target.getAttribute('data-group-index');\n var moreArgs = {\n cancel: false, event: event, element: target, isPopupOpen: true,\n startTime: startDate, endTime: endDate, viewName: this.parent.getNavigateView()\n };\n if (groupIndex) {\n moreArgs.groupIndex = parseInt(groupIndex, 10);\n }\n this.parent.trigger(events.moreEventsClick, moreArgs, function (clickArgs) {\n if (!clickArgs.cancel) {\n if (clickArgs.isPopupOpen) {\n var filteredEvents = _this.getFilteredEvents(startDate, endDate, groupIndex);\n var moreArgs_1 = { date: startDate, event: filteredEvents, element: event.target };\n _this.parent.quickPopup.moreEventClick(moreArgs_1, endDate, groupIndex);\n }\n else {\n _this.parent.setProperties({ selectedDate: startDate }, true);\n _this.parent.changeView(clickArgs.viewName, event);\n }\n }\n });\n };\n MonthEvent.prototype.renderEventElement = function (event, appointmentElement, cellTd) {\n var _this = this;\n var eventType = appointmentElement.classList.contains(cls.BLOCK_APPOINTMENT_CLASS) ? 'blockEvent' : 'event';\n var isAppointment = appointmentElement.classList.contains(cls.APPOINTMENT_CLASS);\n var eventObj = this.getEventData(event);\n var args = { data: eventObj, element: appointmentElement, cancel: false, type: eventType };\n this.parent.trigger(events.eventRendered, args, function (eventArgs) {\n if (eventArgs.cancel) {\n _this.renderedEvents.pop();\n }\n else {\n _this.renderElement(cellTd, appointmentElement, isAppointment);\n }\n });\n };\n MonthEvent.prototype.getEventData = function (event) {\n var eventObj = extend({}, event, null, true);\n eventObj[this.fields.startTime] = event.data[this.fields.startTime];\n eventObj[this.fields.endTime] = event.data[this.fields.endTime];\n return eventObj;\n };\n MonthEvent.prototype.renderElement = function (cellTd, element, isAppointment) {\n if (isAppointment === void 0) { isAppointment = false; }\n if (this.maxOrIndicator && isAppointment) {\n this.setMaxEventHeight(element, cellTd);\n }\n var wrapperEle = cellTd.querySelector('.' + cls.APPOINTMENT_WRAPPER_CLASS);\n if (wrapperEle) {\n wrapperEle.appendChild(element);\n }\n else {\n var wrapper = createElement('div', { className: cls.APPOINTMENT_WRAPPER_CLASS });\n wrapper.appendChild(element);\n cellTd.appendChild(wrapper);\n }\n };\n MonthEvent.prototype.getMoreIndicatorElement = function (count, startDate, endDate) {\n var moreIndicatorElement = createElement('div', {\n className: cls.MORE_INDICATOR_CLASS,\n innerHTML: this.getMoreIndicatorText(count),\n attrs: {\n 'tabindex': '0',\n 'data-count': count.toString(),\n 'data-start-date': startDate.getTime().toString(),\n 'data-end-date': endDate.getTime().toString()\n }\n });\n return moreIndicatorElement;\n };\n MonthEvent.prototype.getMoreIndicatorText = function (count) {\n return '+' + this.parent.globalize.formatNumber(count) + ' ' + (this.parent.isAdaptive ? '' : this.parent.localeObj.getConstant('more'));\n };\n MonthEvent.prototype.removeHeightProperty = function (selector) {\n var rows = [].slice.call(this.element.querySelectorAll('.' + selector + ' tbody tr'));\n for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n var row = rows_1[_i];\n row.firstElementChild.style.height = '';\n }\n };\n MonthEvent.prototype.setMaxEventHeight = function (event, cell) {\n var headerHeight = util.getOuterHeight(cell.querySelector('.' + cls.DATE_HEADER_CLASS));\n var height = (cell.offsetHeight - headerHeight) - (this.maxHeight ? 0 : this.moreIndicatorHeight);\n setStyleAttribute(event, { 'height': height + 'px', 'align-items': 'center' });\n };\n MonthEvent.prototype.destroy = function () {\n this.element = null;\n this.fields = null;\n this.maxHeight = null;\n this.withIndicator = null;\n this.maxOrIndicator = null;\n this.moreIndicatorHeight = null;\n this.removeEventListener();\n _super.prototype.destroy.call(this);\n };\n return MonthEvent;\n}(EventBase));\nexport { MonthEvent };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/* eslint-disable max-len */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { isNullOrUndefined, setStyleAttribute, extend, EventHandler, createElement } from '@syncfusion/ej2-base';\nimport * as cls from '../base/css-constant';\nimport * as util from '../base/util';\nimport { MonthEvent } from './month';\nvar EVENT_GAP = 2;\nvar BLOCK_INDICATOR_WIDTH = 22;\nvar BLOCK_INDICATOR_HEIGHT = 18;\n/**\n * Timeline view events render\n */\nvar TimelineEvent = /** @class */ (function (_super) {\n __extends(TimelineEvent, _super);\n function TimelineEvent(parent, type) {\n var _this = _super.call(this, parent) || this;\n _this.startHour = _this.parent.activeView.getStartHour();\n _this.endHour = _this.parent.activeView.getEndHour();\n _this.slotCount = _this.parent.activeViewOptions.timeScale.slotCount;\n _this.interval = _this.parent.activeViewOptions.timeScale.interval;\n _this.day = 0;\n _this.rowIndex = 0;\n _this.cellTops = [];\n _this.renderType = type;\n _this.eventContainers = [].slice.call(_this.element.querySelectorAll('.' + cls.APPOINTMENT_CONTAINER_CLASS));\n var tr = [].slice.call(_this.element.querySelectorAll('.' + cls.CONTENT_TABLE_CLASS + ' tbody tr'));\n _this.dayLength = tr.length === 0 ? 0 : tr[0].children.length;\n _this.content = _this.parent.element.querySelector('.' + cls.CONTENT_TABLE_CLASS);\n return _this;\n }\n TimelineEvent.prototype.getSlotDates = function () {\n this.slots = [];\n this.slots.push(this.parent.activeView.renderDates.map(function (date) { return +date; }));\n if (this.parent.activeViewOptions.headerRows.length > 0 &&\n this.parent.activeViewOptions.headerRows.slice(-1)[0].option !== 'Hour') {\n this.renderType = 'day';\n this.cellWidth = this.content.offsetWidth / this.dateRender.length;\n this.slotsPerDay = 1;\n }\n else {\n this.slotsPerDay = (this.dayLength / this.dateRender.length);\n }\n };\n TimelineEvent.prototype.getOverlapEvents = function (date, appointments) {\n var appointmentsList = [];\n if (this.renderType === 'day') {\n for (var _i = 0, appointments_1 = appointments; _i < appointments_1.length; _i++) {\n var app = appointments_1[_i];\n if ((util.resetTime(app[this.fields.startTime]).getTime() <= util.resetTime(new Date(date.getTime())).getTime()) &&\n (util.resetTime(app[this.fields.endTime]).getTime() >= util.resetTime(new Date(date.getTime())).getTime())) {\n appointmentsList.push(app);\n }\n }\n }\n else {\n for (var _a = 0, appointments_2 = appointments; _a < appointments_2.length; _a++) {\n var app = appointments_2[_a];\n var eventData = app.data;\n if (eventData.trimStartTime.getTime() <= date.getTime() &&\n eventData.trimEndTime.getTime() > date.getTime()) {\n appointmentsList.push(app);\n }\n }\n }\n return appointmentsList;\n };\n TimelineEvent.prototype.getSortComparerIndex = function (startDate, endDate) {\n var appIndex = -1;\n var appointments = this.renderedEvents;\n if (appointments.length > 0) {\n var appointmentsList = this.getOverlapSortComparerEvents(startDate, endDate, appointments);\n var appLevel = appointmentsList.map(function (obj) { return obj.Index; });\n appIndex = (appLevel.length > 0) ? this.getSmallestMissingNumber(appLevel) : 0;\n }\n return (appIndex === -1) ? 0 : appIndex;\n };\n TimelineEvent.prototype.getOverlapSortComparerEvents = function (startDate, endDate, appointmentsCollection) {\n var appointments = [];\n for (var _i = 0, appointmentsCollection_1 = appointmentsCollection; _i < appointmentsCollection_1.length; _i++) {\n var app = appointmentsCollection_1[_i];\n if (this.renderType === 'day') {\n if ((util.resetTime(app[this.fields.startTime]).getTime() <= util.resetTime(new Date(startDate.getTime())).getTime()) &&\n (util.resetTime(app[this.fields.endTime]).getTime() >= util.resetTime(new Date(startDate.getTime())).getTime())) {\n appointments.push(app);\n }\n }\n else {\n var eventData = app.data;\n if (((eventData.trimStartTime.getTime() <= startDate.getTime()) && (startDate.getTime() < eventData.trimEndTime.getTime())) ||\n ((startDate.getTime() <= eventData.trimStartTime.getTime()) && (eventData.trimStartTime.getTime() < endDate.getTime()))) {\n appointments.push(app);\n }\n }\n }\n return appointments;\n };\n TimelineEvent.prototype.renderResourceEvents = function () {\n this.removeHeightProperty(cls.RESOURCE_COLUMN_TABLE_CLASS);\n var resources = this.parent.uiStateValues.isGroupAdaptive ?\n [this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex]] :\n this.parent.resourceBase.renderedResources;\n if (this.parent.crudModule && this.parent.crudModule.crudObj.isCrudAction) {\n for (var i = 0, len = this.parent.crudModule.crudObj.sourceEvent.length; i < len; i++) {\n var source = this.parent.crudModule.crudObj.sourceEvent[parseInt(i.toString(), 10)];\n this.rowIndex = source.groupIndex;\n this.renderEventsHandler(this.parent.activeView.renderDates, this.parent.activeViewOptions.workDays, source);\n if (this.parent.crudModule.crudObj.targetEvent[parseInt(i.toString(), 10)] && this.parent.crudModule.crudObj.sourceEvent[parseInt(i.toString(), 10)].groupIndex !==\n this.parent.crudModule.crudObj.targetEvent[parseInt(i.toString(), 10)].groupIndex) {\n var target = this.parent.crudModule.crudObj.targetEvent[parseInt(i.toString(), 10)];\n this.rowIndex = target.groupIndex;\n this.renderEventsHandler(this.parent.activeView.renderDates, this.parent.activeViewOptions.workDays, target);\n }\n }\n this.parent.crudModule.crudObj.isCrudAction = false;\n }\n else {\n for (var i = 0; i < resources.length; i++) {\n this.rowIndex = i;\n this.renderEventsHandler(this.parent.activeView.renderDates, this.parent.activeViewOptions.workDays, resources[parseInt(i.toString(), 10)]);\n }\n }\n };\n TimelineEvent.prototype.renderEvents = function (event, resIndex, appointmentsList) {\n var startTime = event[this.fields.startTime];\n var endTime = event[this.fields.endTime];\n if ((startTime.getTime() < this.parent.minDate.getTime()) || (endTime.getTime() > this.parent.maxDate.getTime())) {\n return;\n }\n var eventData = event.data;\n startTime = this.getStartTime(event, eventData);\n endTime = this.getEndTime(event, eventData);\n var startEndHours = util.getStartEndHours(event[this.fields.startTime], this.startHour, this.endHour);\n var eventDates = this.updateEventMinimumDuration(startEndHours, startTime, endTime);\n startTime = eventDates.startDate;\n endTime = eventDates.endDate;\n this.day = this.parent.getIndexOfDate(this.dateRender, util.resetTime(new Date(startTime.getTime())));\n if (this.day < 0) {\n return;\n }\n var cellTd = this.getCellTd();\n var overlapCount = (isNullOrUndefined(this.parent.eventSettings.sortComparer)) ? this.getIndex(startTime) : this.getSortComparerIndex(startTime, endTime);\n event.Index = overlapCount;\n var appHeight = this.eventHeight;\n var diffInDays = eventData.count;\n var eventObj = extend({}, event, null, true);\n eventObj[this.fields.startTime] = eventData[this.fields.startTime];\n eventObj[this.fields.endTime] = eventData[this.fields.endTime];\n var currentDate = util.resetTime(new Date(this.dateRender[this.day].getTime()));\n var schedule = util.getStartEndHours(currentDate, this.startHour, this.endHour);\n var isValidEvent = true;\n if (this.isDayProcess() || eventObj[this.fields.isAllDay]) {\n isValidEvent = true;\n }\n else {\n isValidEvent = this.isValidEvent(eventObj, startTime, endTime, schedule);\n }\n if (startTime <= endTime && isValidEvent) {\n var appWidth = this.getEventWidth(startTime, endTime, event[this.fields.isAllDay], diffInDays);\n appWidth = this.renderType === 'day' ? appWidth - 2 : appWidth;\n var appLeft = 0;\n var appRight = 0;\n var position = this.getPosition(startTime, endTime, event[this.fields.isAllDay], this.day);\n appWidth = (appWidth <= 0) ? this.cellWidth : appWidth; // appWidth 0 when start and end time as same\n this.renderedEvents.push(extend({}, event, null, true));\n if (isNullOrUndefined(this.cellTops[parseInt(resIndex.toString(), 10)])) {\n this.cellTops[parseInt(resIndex.toString(), 10)] = this.getRowTop(resIndex);\n }\n var top_1 = this.cellTops[parseInt(resIndex.toString(), 10)];\n var appTop = (top_1 + (this.maxHeight ? 0 : EVENT_GAP)) + (overlapCount * (appHeight + EVENT_GAP));\n appLeft = (this.parent.enableRtl) ? 0 : position;\n appRight = (this.parent.enableRtl) ? position : 0;\n var height = ((overlapCount + 1) * (appHeight + EVENT_GAP)) + this.moreIndicatorHeight;\n var renderApp = this.maxOrIndicator ? overlapCount < 1 ? true : false : this.cellHeight > height;\n if (this.parent.rowAutoHeight || renderApp) {\n var appointmentElement = void 0;\n if (isNullOrUndefined(this.inlineValue)) {\n appointmentElement = this.createAppointmentElement(event, resIndex);\n }\n else {\n appointmentElement = this.parent.inlineModule.createInlineAppointmentElement();\n }\n this.applyResourceColor(appointmentElement, event, 'backgroundColor', this.groupOrder);\n setStyleAttribute(appointmentElement, {\n 'width': appWidth + 'px', 'left': appLeft + 'px', 'right': appRight + 'px', 'top': appTop + 'px'\n });\n this.wireAppointmentEvents(appointmentElement, event);\n if (this.parent.rowAutoHeight) {\n var conWrap = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n var conWidth = conWrap.getBoundingClientRect().width;\n var isWithoutScroll = conWrap.offsetHeight === conWrap.clientHeight &&\n conWrap.offsetWidth === conWrap.clientWidth;\n this.renderEventElement(event, appointmentElement, cellTd);\n var firstChild = this.getFirstChild(resIndex);\n this.updateCellHeight(firstChild, height);\n if (isWithoutScroll &&\n (conWrap.offsetWidth > conWrap.clientWidth || conWidth !== conWrap.getBoundingClientRect().width)) {\n this.adjustAppointments(conWidth);\n }\n }\n else {\n this.renderEventElement(event, appointmentElement, cellTd);\n }\n }\n else {\n for (var i = 0; i < diffInDays; i++) {\n var moreIndicator = cellTd.querySelector('.' + cls.MORE_INDICATOR_CLASS);\n var appPos = (this.parent.enableRtl) ? appRight : appLeft;\n appPos = (Math.floor(appPos / this.cellWidth) * this.cellWidth);\n var interval = this.interval / this.slotCount;\n var startDate = (this.parent.activeViewOptions.option === 'TimelineMonth' || this.renderType === 'day' || i !== 0) ?\n new Date(this.dateRender[this.day + i].getTime()) : new Date(startTime);\n var endDate = util.addDays(this.dateRender[this.day + i], 1);\n if (this.parent.activeViewOptions.option === 'TimelineMonth' || this.renderType === 'day') {\n var position_1 = this.getPosition(startDate, endDate, event[this.fields.isAllDay], (this.day + i));\n this.renderTimelineMoreIndicator(startTime, startDate, endDate, appHeight, interval, resIndex, appointmentsList, top_1, appLeft, appRight, cellTd, moreIndicator, appPos, position_1);\n }\n else {\n var slotCount = (util.getUniversalTime(endTime) - util.getUniversalTime(startTime)) / util.MS_PER_MINUTE *\n this.slotCount / this.interval;\n for (var k = 0; k < slotCount; k++) {\n startDate = (k === 0) ? new Date(startDate.getTime()) : new Date(startDate.getTime() + (60000 * interval));\n endDate = new Date(startDate.getTime() + (60000 * interval));\n if (endDate.getTime() > endTime.getTime()) {\n break;\n }\n var position_2 = this.getPosition(startDate, endDate, false, (this.day + i));\n if (appPos > position_2) {\n break;\n }\n appPos = position_2;\n this.renderTimelineMoreIndicator(startTime, startDate, endDate, appHeight, interval, resIndex, appointmentsList, top_1, appLeft, appRight, cellTd, moreIndicator, appPos, position_2);\n }\n }\n }\n }\n }\n this.parent.renderTemplates();\n };\n TimelineEvent.prototype.renderTimelineMoreIndicator = function (startTime, startDate, endDate, appHeight, interval, resIndex, appointmentsList, top, appLeft, appRight, cellTd, moreIndicator, appPos, position) {\n appLeft = (this.parent.enableRtl) ? appRight = position : position;\n appPos = (this.parent.enableRtl) ? appRight : appLeft;\n appPos = (Math.round(appPos / this.cellWidth) * this.cellWidth);\n if ((cellTd && isNullOrUndefined(moreIndicator)) ||\n (!this.isAlreadyAvail(appPos, cellTd))) {\n var startDateTime = (this.parent.activeViewOptions.option === 'TimelineMonth' || this.renderType === 'day') ? new Date(+startTime) : startDate;\n var slotStartTime = (new Date(startDateTime.setMinutes(Math.floor(startDateTime.getMinutes() / interval) * interval)));\n var slotEndTime = new Date(slotStartTime.getTime() + (60000 * interval));\n var groupIndex = void 0;\n if (this.parent.activeViewOptions.group.resources.length > 0 && !isNullOrUndefined(resIndex)) {\n groupIndex = resIndex.toString();\n }\n var filterEvents = this.getFilterEvents(startDate, endDate, slotStartTime, slotEndTime, groupIndex, appointmentsList);\n var appArea = this.cellHeight - this.moreIndicatorHeight;\n appHeight = this.withIndicator ? appArea - EVENT_GAP : appHeight;\n var renderedAppCount = Math.floor(appArea / (appHeight + EVENT_GAP));\n var count = (filterEvents.length - renderedAppCount) <= 0 ? 1 : (filterEvents.length - renderedAppCount);\n var moreIndicatorElement = void 0;\n if (this.renderType === 'day') {\n moreIndicatorElement = this.getMoreIndicatorElement(count, startDate, endDate);\n }\n else {\n moreIndicatorElement = this.getMoreIndicatorElement(count, slotStartTime, slotEndTime);\n }\n if (!isNullOrUndefined(groupIndex)) {\n moreIndicatorElement.setAttribute('data-group-index', groupIndex);\n }\n moreIndicatorElement.style.top = top + appArea + 'px';\n moreIndicatorElement.style.width = this.cellWidth + 'px';\n moreIndicatorElement.style.left = ((appLeft / this.cellWidth) * this.cellWidth) + 'px';\n moreIndicatorElement.style.right = ((appRight / this.cellWidth) * this.cellWidth) + 'px';\n this.renderElement(cellTd, moreIndicatorElement);\n EventHandler.add(moreIndicatorElement, 'click', this.moreIndicatorClick, this);\n }\n };\n TimelineEvent.prototype.updateCellHeight = function (cell, height) {\n var cellHeight = cell.style.height === '' ? this.cellHeight : parseInt(cell.style.height, 10);\n if (height > cellHeight) {\n setStyleAttribute(cell, { 'height': height + 'px' });\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n var resourceCell = this.parent.element.querySelector('.' + cls.RESOURCE_COLUMN_TABLE_CLASS + ' ' + 'tbody td[data-group-index=\"' +\n cell.getAttribute('data-group-index') + '\"]');\n if (resourceCell) {\n setStyleAttribute(resourceCell, { 'height': height + 'px' });\n }\n }\n var monthHeader = this.parent.element.querySelector('.e-month-header-wrapper table tr:nth-child(' +\n (cell.parentElement.rowIndex + 1) + ') td');\n if (monthHeader) {\n setStyleAttribute(monthHeader, { 'height': height + 'px' });\n }\n }\n };\n TimelineEvent.prototype.adjustAppointments = function (conWidth) {\n var _this = this;\n var tr = this.parent.element.querySelector('.' + cls.CONTENT_TABLE_CLASS + ' tbody tr');\n this.cellWidth = this.workCells[0].getBoundingClientRect().width;\n var currentPercentage = (this.cellWidth * tr.children.length) / (conWidth / 100);\n var apps = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CLASS));\n apps.forEach(function (app) {\n if (_this.parent.enableRtl && app.style.right !== '0px') {\n app.style.right = ((parseFloat(app.style.right) / 100) * currentPercentage) + 'px';\n }\n else if (app.style.left !== '0px') {\n app.style.left = ((parseFloat(app.style.left) / 100) * currentPercentage) + 'px';\n }\n app.style.width = ((parseFloat(app.style.width) / 100) * currentPercentage) + 'px';\n });\n };\n TimelineEvent.prototype.getFirstChild = function (index) {\n var query = '.' + cls.CONTENT_TABLE_CLASS + ' tbody td';\n var groupIndex = '';\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n groupIndex = '[data-group-index=\"' + index.toString() + '\"]';\n }\n var td = this.parent.element.querySelector(query + groupIndex);\n return td;\n };\n TimelineEvent.prototype.updateBlockElements = function () {\n var blockElement = [].slice.call(this.element.querySelectorAll('.' + cls.BLOCK_APPOINTMENT_CLASS));\n for (var _i = 0, blockElement_1 = blockElement; _i < blockElement_1.length; _i++) {\n var element = blockElement_1[_i];\n var resIndex = parseInt(element.getAttribute('data-group-index'), 10);\n var firstChild = this.getFirstChild(resIndex);\n element.style.height = firstChild.offsetHeight + 'px';\n var width = Math.round(element.offsetWidth / firstChild.offsetWidth);\n element.style.width = (firstChild.offsetWidth * width) + 'px';\n }\n var blockIndicator = [].slice.call(this.element.querySelectorAll('.' + cls.BLOCK_INDICATOR_CLASS));\n for (var _a = 0, blockIndicator_1 = blockIndicator; _a < blockIndicator_1.length; _a++) {\n var element = blockIndicator_1[_a];\n var resIndex = parseInt(element.getAttribute('data-group-index'), 10);\n element.style.top = this.getRowTop(resIndex) +\n this.getFirstChild(resIndex).offsetHeight - BLOCK_INDICATOR_HEIGHT + 'px';\n }\n };\n TimelineEvent.prototype.getStartTime = function (event, eventData) {\n var startTime = event[this.fields.startTime];\n var schedule = util.getStartEndHours(startTime, this.startHour, this.endHour);\n if (this.isDayProcess()) {\n startTime = event[this.fields.startTime];\n }\n else {\n if (schedule.startHour.getTime() >= eventData[this.fields.startTime]) {\n startTime = schedule.startHour;\n }\n else if (schedule.endHour.getTime() <= eventData[this.fields.startTime]) {\n startTime = this.getNextDay(schedule.startHour, eventData);\n }\n else {\n startTime = eventData[this.fields.startTime];\n }\n }\n // To overcome the overflow\n eventData.trimStartTime = (event[this.fields.isAllDay]) ? schedule.startHour : eventData[this.fields.startTime];\n return startTime;\n };\n TimelineEvent.prototype.getNextDay = function (startTime, eventData) {\n var startDate;\n for (var i = 1; i <= this.dateRender.length; i++) {\n startDate = util.addDays(startTime, i);\n if (this.parent.getIndexOfDate(this.dateRender, util.resetTime(new Date(startTime.getTime()))) !== -1) {\n eventData.count = eventData.count - 1;\n return startDate;\n }\n }\n return startDate;\n };\n TimelineEvent.prototype.getEndTime = function (event, eventData) {\n var endTime = event[this.fields.endTime];\n var schedule = util.getStartEndHours(endTime, this.startHour, this.endHour);\n if (this.isDayProcess()) {\n endTime = eventData[this.fields.endTime];\n }\n else {\n endTime = eventData[this.fields.endTime];\n if (schedule.endHour.getTime() <= eventData[this.fields.endTime] || event[this.fields.isAllDay]) {\n endTime = schedule.endHour;\n }\n if (schedule.startHour.getTime() >= eventData[this.fields.endTime].getTime() && !event[this.fields.isAllDay]) {\n endTime = this.getPreviousDay(schedule.startHour, schedule.endHour, eventData);\n }\n }\n // To overcome the overflow\n eventData.trimEndTime = (event[this.fields.isAllDay]) ? schedule.endHour : eventData[this.fields.endTime];\n return endTime;\n };\n TimelineEvent.prototype.getPreviousDay = function (startTime, endTime, eventData) {\n for (var i = 1; i <= this.dateRender.length; i++) {\n var endDate = util.addDays(endTime, -i);\n if (this.parent.getIndexOfDate(this.dateRender, util.resetTime(new Date(startTime.getTime()))) !== -1) {\n endDate = util.resetTime(new Date(endDate.getTime()));\n endDate.setHours(endTime.getHours(), endTime.getMinutes(), endTime.getSeconds());\n var count = eventData.count;\n var actualEndTime = eventData[this.fields.endTime];\n eventData.count = actualEndTime.getHours() !== 0 || actualEndTime.getMinutes() !== 0 ? count - 1 : count;\n return endDate;\n }\n }\n return eventData[this.fields.endTime];\n };\n TimelineEvent.prototype.getEventWidth = function (startDate, endDate, isAllDay, count) {\n if (this.renderType === 'day' || isAllDay) {\n return (count * this.slotsPerDay) * this.cellWidth;\n }\n if (this.isSameDay(startDate, endDate)) {\n return this.getSameDayEventsWidth(startDate, endDate);\n }\n else {\n return this.getSpannedEventsWidth(startDate, endDate, count);\n }\n };\n TimelineEvent.prototype.getSameDayEventsWidth = function (startDate, endDate) {\n return ((util.getUniversalTime(endDate) - util.getUniversalTime(startDate)) /\n util.MS_PER_MINUTE * (this.cellWidth * this.slotCount) / this.interval);\n };\n TimelineEvent.prototype.getSpannedEventsWidth = function (startDate, endDate, diffInDays) {\n var width = (diffInDays * this.slotsPerDay) * this.cellWidth;\n var endWidth;\n var start = util.getStartEndHours(util.resetTime(new Date(startDate.getTime())), this.startHour, this.endHour);\n var startWidth = this.getSameDayEventsWidth(start.startHour, startDate);\n if (this.parent.getIndexOfDate(this.dateRender, util.resetTime(new Date(endDate.getTime()))) === -1) {\n endWidth = 0;\n }\n else {\n var end = util.getStartEndHours(util.resetTime(new Date(endDate.getTime())), this.startHour, this.endHour);\n endWidth = this.getSameDayEventsWidth(endDate, end.endHour);\n endWidth = ((this.slotsPerDay * this.cellWidth) === endWidth) ? 0 : endWidth;\n }\n var spannedWidth = startWidth + endWidth;\n return (width > spannedWidth) ? width - spannedWidth : width - startWidth;\n };\n TimelineEvent.prototype.isSameDay = function (startTime, endTime) {\n var startDay = this.parent.getIndexOfDate(this.dateRender, util.resetTime(new Date(startTime.getTime())));\n var endDay = this.parent.getIndexOfDate(this.dateRender, util.resetTime(new Date(endTime.getTime())));\n return (startDay === endDay);\n };\n TimelineEvent.prototype.getAppointmentLeft = function (schedule, startTime, day) {\n var slotTd = (this.isSameDay(startTime, schedule.startHour)) ?\n ((util.getUniversalTime(startTime) - util.getUniversalTime(schedule.startHour)) /\n (util.MS_PER_MINUTE * this.interval)) * this.slotCount : 0;\n if (day === 0) {\n return slotTd;\n }\n else {\n var daySlot = Math.round((((util.getUniversalTime(schedule.endHour) - util.getUniversalTime(schedule.startHour)) /\n util.MS_PER_MINUTE) / this.interval) * this.slotCount);\n return (daySlot * day) + slotTd;\n }\n };\n TimelineEvent.prototype.getPosition = function (startTime, endTime, isAllDay, day) {\n if (this.renderType === 'day' || isAllDay) {\n return (day * this.slotsPerDay) * this.cellWidth;\n }\n var currentDate = util.resetTime(new Date(this.dateRender[parseInt(day.toString(), 10)].getTime()));\n var schedule = util.getStartEndHours(currentDate, this.startHour, this.endHour);\n var cellIndex;\n if (schedule.endHour.getTime() <= endTime.getTime() && schedule.startHour.getTime() >= startTime.getTime()) {\n cellIndex = this.getAppointmentLeft(schedule, schedule.startHour, day);\n }\n else if (schedule.endHour.getTime() <= endTime.getTime()) {\n cellIndex = this.getAppointmentLeft(schedule, startTime, day);\n }\n else if (schedule.startHour.getTime() >= startTime.getTime()) {\n cellIndex = this.getAppointmentLeft(schedule, schedule.startHour, day);\n }\n else {\n cellIndex = this.getAppointmentLeft(schedule, startTime, day);\n }\n return cellIndex * this.cellWidth;\n };\n TimelineEvent.prototype.getFilterEvents = function (startDate, endDate, startTime, endTime, gIndex, eventsList) {\n if (this.renderType === 'day') {\n return this.getFilteredEvents(startDate, endDate, gIndex, eventsList);\n }\n else {\n return this.getFilteredEvents(startTime, endTime, gIndex, eventsList);\n }\n };\n TimelineEvent.prototype.isAlreadyAvail = function (appPos, cellTd) {\n var moreIndicator = [].slice.call(cellTd.querySelectorAll('.' + cls.MORE_INDICATOR_CLASS));\n for (var i = 0; i < moreIndicator.length; i++) {\n var indicatorPos = void 0;\n if (moreIndicator) {\n indicatorPos = (this.parent.enableRtl) ? moreIndicator[parseInt(i.toString(), 10)].style.right : moreIndicator[parseInt(i.toString(), 10)].style.left;\n }\n if (parseInt(indicatorPos, 10) === Math.floor(appPos)) {\n return true;\n }\n }\n return false;\n };\n TimelineEvent.prototype.getRowTop = function (resIndex) {\n if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {\n return this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS +\n ' ' + 'tbody td[data-group-index=\"' + resIndex.toString() + '\"]').offsetTop;\n }\n return 0;\n };\n TimelineEvent.prototype.getCellTd = function () {\n var wrapIndex = this.parent.uiStateValues.isGroupAdaptive ? 0 : this.rowIndex;\n return this.eventContainers[parseInt(wrapIndex.toString(), 10)];\n };\n TimelineEvent.prototype.renderBlockIndicator = function (cellTd, position, resIndex) {\n // No need to render block icon for Year, Month and Week header rows\n if (this.parent.headerRows.length > 0 &&\n (this.parent.headerRows[this.parent.headerRows.length - 1].option !== 'Hour' ||\n this.parent.headerRows[this.parent.headerRows.length - 1].option !== 'Date')) {\n return;\n }\n position = (Math.floor(position / this.cellWidth) * this.cellWidth) + this.cellWidth - BLOCK_INDICATOR_WIDTH;\n if (!this.isAlreadyAvail(position, cellTd)) {\n var blockIndicator = createElement('div', { className: 'e-icons ' + cls.BLOCK_INDICATOR_CLASS });\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n blockIndicator.setAttribute('data-group-index', resIndex.toString());\n }\n if (this.parent.enableRtl) {\n blockIndicator.style.right = position + 'px';\n }\n else {\n blockIndicator.style.left = position + 'px';\n }\n blockIndicator.style.top = this.getRowTop(resIndex) + this.cellHeight - BLOCK_INDICATOR_HEIGHT + 'px';\n this.renderElement(cellTd, blockIndicator);\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n TimelineEvent.prototype.setMaxEventHeight = function (event, cell) {\n setStyleAttribute(event, {\n 'height': (this.cellHeight - (this.maxHeight ? 0 : EVENT_GAP) - (this.maxHeight ? 0 : this.moreIndicatorHeight)) + 'px'\n });\n };\n TimelineEvent.prototype.isDayProcess = function () {\n if (this.parent.currentView === 'TimelineMonth' || !this.parent.activeViewOptions.timeScale.enable ||\n (this.parent.activeViewOptions.headerRows.length > 0 &&\n this.parent.activeViewOptions.headerRows.slice(-1)[0].option !== 'Hour')) {\n return true;\n }\n return false;\n };\n TimelineEvent.prototype.destroy = function () {\n this.renderType = null;\n this.eventContainers = null;\n this.dayLength = null;\n this.content = null;\n _super.prototype.destroy.call(this);\n this.parent = null;\n };\n return TimelineEvent;\n}(MonthEvent));\nexport { TimelineEvent };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { addClass, createElement, closest, remove, removeClass, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { VerticalEvent } from '../event-renderer/vertical-view';\nimport { MonthEvent } from '../event-renderer/month';\nimport { TimelineEvent } from '../event-renderer/timeline-view';\nimport * as cls from '../base/css-constant';\nimport * as events from '../base/constant';\nimport * as util from '../base/util';\n/**\n * Inline Edit interactions\n */\nvar InlineEdit = /** @class */ (function () {\n function InlineEdit(parent) {\n this.parent = parent;\n this.parent.on(events.inlineClick, this.inlineEdit, this);\n }\n InlineEdit.prototype.inlineEdit = function (args) {\n if (this.parent.quickPopup) {\n this.parent.quickPopup.quickPopupHide();\n }\n if (args.type === 'Cell') {\n var moreWrapper = this.parent.element.querySelector('.' + cls.MORE_POPUP_WRAPPER_CLASS);\n if (moreWrapper && moreWrapper.classList.contains(cls.POPUP_OPEN)) {\n this.parent.quickPopup.morePopup.hide();\n }\n this.removeInlineAppointmentElement();\n this.cellEdit(args);\n }\n else {\n if (this.parent.element.querySelector('.' + cls.INLINE_SUBJECT_CLASS) !==\n args.element.querySelector('.' + cls.INLINE_SUBJECT_CLASS)) {\n this.removeInlineAppointmentElement();\n }\n this.eventEdit(args);\n }\n };\n InlineEdit.prototype.cellEdit = function (args) {\n var saveObj = this.generateEventData();\n var cellIndex = args.element.cellIndex;\n var count = this.getEventDaysCount(saveObj);\n if (count > 1) {\n count = Math.round(count);\n count--;\n cellIndex = cellIndex - count;\n }\n var start = util.resetTime(new Date('' + saveObj[this.parent.eventFields.startTime])).getTime();\n var end = util.resetTime(new Date('' + saveObj[this.parent.eventFields.endTime])).getTime();\n var resIndex = args.groupIndex || 0;\n var isVertical = this.parent.currentView === 'Day' || this.parent.currentView === 'Week' || this.parent.currentView === 'WorkWeek';\n if (this.parent.activeViewOptions.timeScale.enable && isVertical) {\n var dayIndex = saveObj[this.parent.eventFields.startTime].getDay();\n this.createVerticalViewInline(saveObj, dayIndex, resIndex, cellIndex);\n }\n else if (this.parent.currentView === 'Month' || (!this.parent.activeViewOptions.timeScale.enable && isVertical)) {\n this.createMonthViewInline(saveObj, resIndex, start, end);\n }\n else {\n this.createTimelineViewInline(saveObj, start, end, resIndex);\n }\n var inlineSubject = this.parent.element.querySelector('.' + cls.INLINE_SUBJECT_CLASS);\n if (inlineSubject) {\n inlineSubject.focus();\n }\n };\n InlineEdit.prototype.eventEdit = function (args) {\n var inlineSubject = args.element.querySelector('.' + cls.INLINE_SUBJECT_CLASS);\n var subject;\n if (inlineSubject) {\n subject = inlineSubject.value;\n }\n else {\n var subEle = args.element.querySelector('.' + cls.SUBJECT_CLASS);\n if (!isNullOrUndefined(subEle)) {\n addClass([subEle], cls.DISABLE_CLASS);\n subject = subEle.innerText;\n }\n else {\n subject = args.data[this.parent.eventFields.subject];\n }\n inlineSubject = createElement('input', { className: cls.INLINE_SUBJECT_CLASS, attrs: { value: subject } });\n if (closest(args.element, '.' + cls.MORE_POPUP_WRAPPER_CLASS)) {\n args.element.insertBefore(inlineSubject, subEle);\n }\n else if (['Agenda', 'MonthAgenda'].indexOf(this.parent.currentView) > -1) {\n var subjectWrap = args.element.querySelector('.' + cls.SUBJECT_WRAP);\n if (isNullOrUndefined(subjectWrap)) {\n subjectWrap = createElement('div', { className: cls.SUBJECT_WRAP });\n args.element.prepend(subjectWrap);\n }\n subjectWrap.insertBefore(inlineSubject, subjectWrap.firstChild);\n }\n else {\n args.element.querySelector('.e-appointment-details').prepend(inlineSubject);\n }\n inlineSubject.focus();\n }\n inlineSubject.setSelectionRange(subject.length, subject.length);\n };\n InlineEdit.prototype.createVerticalViewInline = function (saveObj, dayIndex, resIndex, daysCount) {\n var _a;\n var count = this.getEventDaysCount(saveObj);\n var verticalEvent = new VerticalEvent(this.parent);\n verticalEvent.initializeValues();\n var index = verticalEvent.dateRender[parseInt(resIndex.toString(), 10)].map(function (date) { return date.getDay(); }).indexOf(dayIndex);\n if (count >= 1) {\n verticalEvent.allDayElement = [].slice.call(this.parent.element.querySelectorAll('.' + cls.ALLDAY_CELLS_CLASS));\n (_a = verticalEvent.slots).push.apply(_a, this.parent.activeView.renderDates.map(function (date) { return +date; }));\n var allDayElements = [].slice.call(this.parent.element.querySelectorAll('.' + cls.ALLDAY_APPOINTMENT_CLASS));\n var allDayLevel = 0;\n if (allDayElements.length > 0) {\n allDayLevel = Math.floor(this.parent.element.querySelector('.' + cls.ALLDAY_ROW_CLASS).getBoundingClientRect().height /\n allDayElements[0].offsetHeight) - 1;\n }\n verticalEvent.allDayLevel = allDayLevel;\n var appHeight = util.getElementHeightFromClass(this.parent.element.querySelector('.' + cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS), cls.APPOINTMENT_CLASS);\n var cellTop = verticalEvent.allDayElement.length > 0 ? verticalEvent.allDayElement[0].offsetTop : 0;\n verticalEvent.renderAllDayEvents(saveObj, index, resIndex, daysCount, this.parent.allowInline, cellTop, appHeight);\n }\n else {\n verticalEvent.renderNormalEvents(saveObj, index, resIndex, daysCount, this.parent.allowInline);\n }\n };\n InlineEdit.prototype.createMonthViewInline = function (saveObj, index, start, end) {\n var count = this.getEventDaysCount(saveObj);\n var saveObject = this.parent.eventBase.cloneEventObject(saveObj, start, end, count, false, false);\n var monthEvent = new MonthEvent(this.parent);\n monthEvent.dateRender = this.parent.activeView.renderDates;\n monthEvent.inlineValue = this.parent.allowInline;\n var renderDates = this.parent.activeView.renderDates;\n var workDays = this.parent.activeViewOptions.workDays;\n var monthCellSelector = '.' + cls.WORK_CELLS_CLASS;\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n monthCellSelector += '[data-group-index=\"' + index + '\"]';\n var resourceData = this.parent.resourceBase.lastResourceLevel[parseInt(index.toString(), 10)];\n renderDates = resourceData.renderDates;\n workDays = resourceData.workDays;\n }\n monthEvent.dateRender = renderDates;\n monthEvent.workCells = [].slice.call(this.parent.element.querySelectorAll(monthCellSelector));\n monthEvent.cellWidth = monthEvent.workCells[0].offsetWidth;\n monthEvent.cellHeight = monthEvent.workCells[0].offsetHeight;\n monthEvent.eventHeight =\n util.getElementHeightFromClass(this.parent.monthModule.element || monthEvent.element, cls.APPOINTMENT_CLASS);\n monthEvent.getSlotDates(workDays);\n var filteredDates = monthEvent.getRenderedDates(renderDates);\n var spannedEvents = monthEvent.splitEvent(saveObject, filteredDates || renderDates);\n for (var _i = 0, spannedEvents_1 = spannedEvents; _i < spannedEvents_1.length; _i++) {\n var eventData = spannedEvents_1[_i];\n monthEvent.renderEvents(eventData, index);\n }\n var inlineSubject = this.parent.element.querySelector('.' + cls.INLINE_SUBJECT_CLASS);\n inlineSubject.focus();\n };\n InlineEdit.prototype.createTimelineViewInline = function (saveObj, start, end, resIndex) {\n var count = this.getEventDaysCount(saveObj);\n var saveObject = this.parent.eventBase.cloneEventObject(saveObj, start, end, count, false, false);\n var timelineView = new TimelineEvent(this.parent, this.parent.activeViewOptions.timeScale.enable ? 'hour' : 'day');\n timelineView.dateRender = this.parent.activeView.renderDates;\n timelineView.eventContainers = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CONTAINER_CLASS));\n var workCell = this.parent.element.querySelector('.' + cls.WORK_CELLS_CLASS);\n timelineView.inlineValue = this.parent.allowInline;\n timelineView.cellWidth = workCell.offsetWidth;\n timelineView.cellHeight = workCell.offsetHeight;\n var dayLength = this.parent.element.querySelectorAll('.' + cls.CONTENT_TABLE_CLASS + ' tbody tr').length === 0 ?\n 0 : this.parent.element.querySelectorAll('.' + cls.CONTENT_TABLE_CLASS + ' tbody tr')[0].children.length;\n timelineView.slotsPerDay = dayLength / timelineView.dateRender.length;\n timelineView.eventHeight = util.getElementHeightFromClass(timelineView.element, cls.APPOINTMENT_CLASS);\n timelineView.renderEvents(saveObject, resIndex);\n };\n InlineEdit.prototype.getEventDaysCount = function (saveObj) {\n var startDate = saveObj[this.parent.eventFields.startTime];\n var endDate = saveObj[this.parent.eventFields.endTime];\n var daysCount = Math.abs(endDate.getTime() - startDate.getTime()) / util.MS_PER_DAY;\n return daysCount;\n };\n InlineEdit.prototype.generateEventData = function (target) {\n var inlineElement = this.parent.element.querySelector('.' + cls.INLINE_SUBJECT_CLASS);\n var subject = inlineElement ? inlineElement.value : target ? target.innerHTML : '';\n var saveObj = {};\n saveObj[this.parent.eventFields.id] = this.parent.eventBase.getEventMaxID();\n saveObj[this.parent.eventFields.subject] = subject;\n saveObj[this.parent.eventFields.startTime] = this.parent.activeCellsData.startTime;\n saveObj[this.parent.eventFields.endTime] = this.parent.activeCellsData.endTime;\n saveObj[this.parent.eventFields.isAllDay] = this.parent.activeCellsData.isAllDay;\n this.parent.eventWindow.setDefaultValueToObject(saveObj);\n if (this.parent.resourceBase) {\n this.parent.resourceBase.setResourceValues(saveObj, this.parent.activeCellsData.groupIndex);\n }\n return saveObj;\n };\n InlineEdit.prototype.documentClick = function () {\n var target = this.parent.element.querySelector('.' + cls.INLINE_SUBJECT_CLASS);\n if (target && target.value !== '') {\n this.inlineCrudActions(target);\n }\n else {\n this.removeInlineAppointmentElement();\n }\n };\n InlineEdit.prototype.inlineCrudActions = function (target) {\n if (closest(target, '.' + cls.INLINE_APPOINTMENT_CLASS)) {\n var saveObj = this.generateEventData(target);\n this.parent.addEvent(saveObj);\n }\n else {\n var eventTarget = closest(target, '.' + cls.APPOINTMENT_CLASS);\n var eventDetails = this.parent.getEventDetails(eventTarget);\n eventDetails[this.parent.eventFields.subject] = target.value;\n var currentAction = void 0;\n if (eventDetails[this.parent.eventFields.id] === eventDetails[this.parent.eventFields.recurrenceID]) {\n currentAction = 'EditOccurrence';\n eventDetails[this.parent.eventFields.id] = this.parent.eventBase.getEventMaxID();\n }\n this.parent.saveEvent(eventDetails, currentAction);\n }\n this.removeInlineAppointmentElement();\n };\n InlineEdit.prototype.createInlineAppointmentElement = function (inlineData) {\n var inlineAppointmentElement = createElement('div', {\n className: cls.APPOINTMENT_CLASS + ' ' + cls.INLINE_APPOINTMENT_CLASS\n });\n var inlineDetails = createElement('div', { className: cls.APPOINTMENT_DETAILS });\n inlineAppointmentElement.appendChild(inlineDetails);\n var inline = createElement('input', { className: cls.INLINE_SUBJECT_CLASS });\n inlineDetails.appendChild(inline);\n if (inlineData) {\n this.parent.eventBase.applyResourceColor(inlineAppointmentElement, inlineData, 'backgroundColor');\n }\n return inlineAppointmentElement;\n };\n InlineEdit.prototype.removeInlineAppointmentElement = function () {\n var inlineAppointment = [].slice.call(this.parent.element.querySelectorAll('.' + cls.INLINE_APPOINTMENT_CLASS));\n if (inlineAppointment.length > 0) {\n inlineAppointment.forEach(function (node) { return remove(node); });\n }\n var inlineSubject = this.parent.element.querySelector('.' + cls.INLINE_SUBJECT_CLASS);\n if (inlineSubject) {\n var appointmentSubject = closest(inlineSubject, '.' + cls.APPOINTMENT_CLASS);\n var subject = appointmentSubject.querySelector('.' + cls.SUBJECT_CLASS);\n if (!isNullOrUndefined(subject)) {\n removeClass([subject], cls.DISABLE_CLASS);\n }\n remove(inlineSubject);\n }\n };\n InlineEdit.prototype.destroy = function () {\n this.parent.off(events.inlineClick, this.inlineEdit);\n };\n return InlineEdit;\n}());\nexport { InlineEdit };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { append, createElement, extend, EventHandler, Animation, formatUnit } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, setStyleAttribute, remove, removeClass, addClass } from '@syncfusion/ej2-base';\nimport { EventBase } from './event-base';\nimport * as util from '../base/util';\nimport * as events from '../base/constant';\nimport * as cls from '../base/css-constant';\n/**\n * Vertical view appointment rendering\n */\nvar VerticalEvent = /** @class */ (function (_super) {\n __extends(VerticalEvent, _super);\n function VerticalEvent(parent) {\n var _this = _super.call(this, parent) || this;\n _this.dateRender = [];\n _this.renderedEvents = [];\n _this.renderedAllDayEvents = [];\n _this.overlapEvents = [];\n _this.moreEvents = [];\n _this.overlapList = [];\n _this.allDayEvents = [];\n _this.slotCount = _this.parent.activeViewOptions.timeScale.slotCount;\n _this.interval = _this.parent.activeViewOptions.timeScale.interval;\n _this.allDayLevel = 0;\n _this.startHour = _this.parent.activeView.getStartHour();\n _this.endHour = _this.parent.activeView.getEndHour();\n _this.element = _this.parent.activeView.getPanel();\n _this.fields = _this.parent.eventFields;\n _this.animation = new Animation({ progress: _this.animationUiUpdate.bind(_this) });\n _this.addEventListener();\n return _this;\n }\n VerticalEvent.prototype.renderAppointments = function () {\n if (isNullOrUndefined(this.parent)) {\n return;\n }\n if (this.parent.dragAndDropModule) {\n this.parent.dragAndDropModule.setDragArea();\n }\n this.isResourceEventTemplate = this.parent.isSpecificResourceEvents();\n var wrapperElements = [].slice.call(this.parent.element.querySelectorAll('.' + cls.BLOCK_APPOINTMENT_CLASS +\n ',.' + cls.APPOINTMENT_CLASS + ',.' + cls.ROW_COUNT_WRAPPER_CLASS));\n var isDragging = (this.parent.crudModule && this.parent.crudModule.crudObj.isCrudAction) ? true : false;\n for (var _i = 0, wrapperElements_1 = wrapperElements; _i < wrapperElements_1.length; _i++) {\n var wrapper = wrapperElements_1[_i];\n if (isDragging && !(wrapper.classList.contains(cls.ALLDAY_APPOINTMENT_CLASS) ||\n wrapper.classList.contains(cls.ROW_COUNT_WRAPPER_CLASS))) {\n var groupIndex = parseInt(wrapper.getAttribute('data-group-index'), 10);\n for (var j = 0, len = this.parent.crudModule.crudObj.sourceEvent.length; j < len; j++) {\n if (groupIndex === this.parent.crudModule.crudObj.sourceEvent[parseInt(j.toString(), 10)].groupIndex ||\n groupIndex === this.parent.crudModule.crudObj.targetEvent[parseInt(j.toString(), 10)].groupIndex) {\n remove(wrapper);\n }\n }\n }\n else {\n remove(wrapper);\n }\n }\n if (!this.element.querySelector('.' + cls.WORK_CELLS_CLASS)) {\n return;\n }\n if (this.parent.virtualScrollModule) {\n this.parent.virtualScrollModule.updateFocusedWorkCell();\n }\n this.allDayElement = [].slice.call(this.element.querySelectorAll('.' + cls.ALLDAY_CELLS_CLASS));\n this.setAllDayRowHeight(0);\n if (this.parent.eventsProcessed.length === 0 && this.parent.blockProcessed.length === 0) {\n return;\n }\n var expandCollapse = this.element.querySelector('.' + cls.ALLDAY_APPOINTMENT_SECTION_CLASS);\n EventHandler.remove(expandCollapse, 'click', this.rowExpandCollapse);\n EventHandler.add(expandCollapse, 'click', this.rowExpandCollapse, this);\n this.renderedEvents = [];\n this.renderedAllDayEvents = [];\n this.initializeValues();\n this.processBlockEvents();\n this.renderEvents('normalEvents');\n if (this.allDayEvents.length > 0) {\n this.allDayEvents = this.allDayEvents.filter(function (item, index, arr) {\n return index === arr.map(function (item) { return item.Guid; }).indexOf(item.Guid);\n });\n removeClass(this.allDayElement, cls.ALLDAY_ROW_ANIMATE_CLASS);\n this.slots.push(this.parent.activeView.renderDates.map(function (date) { return +date; }));\n this.renderEvents('allDayEvents');\n this.animation.animate(this.allDayElement[0]);\n }\n this.parent.notify(events.contentReady, {});\n addClass(this.allDayElement, cls.ALLDAY_ROW_ANIMATE_CLASS);\n if (isDragging) {\n this.parent.crudModule.crudObj.isCrudAction = false;\n }\n this.parent.renderTemplates();\n };\n VerticalEvent.prototype.initializeValues = function () {\n this.resources = (this.parent.activeViewOptions.group.resources.length > 0) ? this.parent.uiStateValues.isGroupAdaptive ?\n [this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex]] :\n this.parent.resourceBase.lastResourceLevel : [];\n if (this.resources.length > 0 && this.parent.activeViewOptions.allowVirtualScrolling && this.parent.virtualScrollModule) {\n this.resources = this.parent.resourceBase.renderedResources;\n }\n this.cellHeight =\n parseFloat(this.parent.element.querySelector('.e-content-wrap tbody tr').getBoundingClientRect().height.toFixed(2));\n this.dateRender[0] = this.parent.activeView.renderDates;\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n for (var i = 0, len = this.resources.length; i < len; i++) {\n this.dateRender[parseInt(i.toString(), 10)] = this.resources[parseInt(i.toString(), 10)].renderDates;\n }\n }\n };\n VerticalEvent.prototype.getHeight = function (start, end) {\n var appHeight = (util.getUniversalTime(end) - util.getUniversalTime(start)) /\n util.MS_PER_MINUTE * (this.cellHeight * this.slotCount) / this.interval;\n appHeight = (appHeight <= 0) ? this.cellHeight : appHeight;\n return appHeight;\n };\n VerticalEvent.prototype.appendEvent = function (eventObj, appointmentElement, index, appLeft) {\n var appointmentWrap = this.element.querySelector('.' + cls.APPOINTMENT_WRAPPER_CLASS + '[id=\"' + cls.APPOINTMENT_WRAPPER_CLASS + '-' + index + '\"]');\n if (this.parent.enableRtl) {\n setStyleAttribute(appointmentElement, { 'right': appLeft });\n }\n else {\n setStyleAttribute(appointmentElement, { 'left': appLeft });\n }\n var eventType = appointmentElement.classList.contains(cls.BLOCK_APPOINTMENT_CLASS) ? 'blockEvent' : 'event';\n var args = {\n data: extend({}, eventObj, null, true),\n element: appointmentElement, cancel: false, type: eventType\n };\n this.parent.trigger(events.eventRendered, args, function (eventArgs) {\n if (!eventArgs.cancel) {\n appointmentWrap.appendChild(appointmentElement);\n }\n });\n };\n VerticalEvent.prototype.processBlockEvents = function () {\n var resources = this.getResourceList();\n var dateCount = this.getStartCount();\n for (var _i = 0, resources_1 = resources; _i < resources_1.length; _i++) {\n var resource = resources_1[_i];\n var renderDates = this.dateRender[parseInt(resource.toString(), 10)];\n for (var day = 0, length_1 = renderDates.length; day < length_1; day++) {\n var startDate = new Date(renderDates[parseInt(day.toString(), 10)].getTime());\n var endDate = util.addDays(renderDates[parseInt(day.toString(), 10)], 1);\n var filterEvents = this.filterEvents(startDate, endDate, this.parent.blockProcessed, this.resources[parseInt(resource.toString(), 10)]);\n for (var _a = 0, filterEvents_1 = filterEvents; _a < filterEvents_1.length; _a++) {\n var event_1 = filterEvents_1[_a];\n if (this.parent.resourceBase) {\n this.setValues(event_1, resource);\n }\n this.renderBlockEvents(event_1, day, resource, dateCount);\n this.cssClass = null;\n this.groupOrder = null;\n }\n dateCount += 1;\n }\n }\n };\n VerticalEvent.prototype.renderBlockEvents = function (eventObj, dayIndex, resource, dayCount) {\n var spannedData = this.isSpannedEvent(eventObj, dayIndex, resource);\n var eStart = spannedData[this.fields.startTime];\n var eEnd = spannedData[this.fields.endTime];\n var currentDate = util.resetTime(new Date(this.dateRender[parseInt(resource.toString(), 10)][parseInt(dayIndex.toString(), 10)].getTime()));\n var schedule = util.getStartEndHours(currentDate, this.startHour, this.endHour);\n if (eStart <= eEnd && this.isValidEvent(eventObj, eStart, eEnd, schedule) && this.isWorkDayAvailable(resource, eStart)) {\n var blockTop = void 0;\n var blockHeight = void 0;\n if (spannedData[this.fields.isAllDay]) {\n var contentWrap = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS + ' table');\n blockHeight = formatUnit(contentWrap.offsetHeight);\n blockTop = formatUnit(0);\n }\n else {\n blockHeight = formatUnit(this.getHeight(eStart, eEnd));\n blockTop = formatUnit(this.getTopValue(eStart, dayIndex, resource));\n }\n var appointmentElement = this.createBlockAppointmentElement(eventObj, resource, this.isResourceEventTemplate);\n setStyleAttribute(appointmentElement, { 'width': '100%', 'height': blockHeight, 'top': blockTop });\n var index = this.getDayIndex(dayIndex, resource, dayCount);\n this.appendEvent(eventObj, appointmentElement, index, '0px');\n }\n };\n VerticalEvent.prototype.renderEvents = function (eventType) {\n removeClass(this.allDayElement, cls.ALLDAY_ROW_ANIMATE_CLASS);\n var eventCollection = (eventType === 'allDayEvents') ? this.sortByDateTime(this.allDayEvents) : undefined;\n var resources = this.getResourceList();\n var dateCount = this.getStartCount();\n var isRender;\n var appHeight = eventType === 'allDayEvents' ? util.getElementHeightFromClass(this.element.querySelector('.' + cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS), cls.APPOINTMENT_CLASS) : 0;\n var allDayRowTop = eventType === 'allDayEvents' && this.allDayElement.length > 0 ? this.allDayElement[0].offsetTop : 0;\n var _loop_1 = function (resource) {\n isRender = true;\n if (this_1.parent.crudModule && this_1.parent.crudModule.crudObj.isCrudAction && eventType !== 'allDayEvents'\n && !this_1.parent.uiStateValues.isGroupAdaptive) {\n if (this_1.parent.crudModule.crudObj.sourceEvent.filter(function (data) { return data.groupIndex === resource; }).length === 0 &&\n this_1.parent.crudModule.crudObj.targetEvent.filter(function (data) { return data.groupIndex === resource; }).length === 0) {\n isRender = false;\n }\n }\n this_1.slots = [];\n var renderDates = this_1.dateRender[parseInt(resource.toString(), 10)];\n var renderedDate = this_1.getRenderedDates(renderDates) || renderDates;\n this_1.slots.push(renderDates.map(function (date) { return +date; }));\n for (var day = 0, length_2 = renderDates.length; day < length_2 &&\n renderDates[parseInt(day.toString(), 10)] <= renderedDate[renderedDate.length - 1]; day++) {\n this_1.renderedEvents = [];\n var startDate = new Date(renderDates[parseInt(day.toString(), 10)].getTime());\n var endDate = util.addDays(renderDates[parseInt(day.toString(), 10)], 1);\n var filterEvents = this_1.filterEvents(startDate, endDate, eventCollection, this_1.resources[parseInt(resource.toString(), 10)]);\n if (isRender) {\n for (var _i = 0, filterEvents_2 = filterEvents; _i < filterEvents_2.length; _i++) {\n var event_2 = filterEvents_2[_i];\n if (this_1.parent.resourceBase) {\n this_1.setValues(event_2, resource);\n }\n if (eventType === 'allDayEvents') {\n this_1.renderAllDayEvents(event_2, day, resource, dateCount, false, allDayRowTop, appHeight);\n }\n else {\n if (this_1.isAllDayAppointment(event_2)) {\n this_1.allDayEvents.push(extend({}, event_2, null, true));\n }\n else {\n if (this_1.parent.eventSettings.enableMaxHeight) {\n if (this_1.getOverlapIndex(event_2, day, false, resource) > 0) {\n continue;\n }\n }\n this_1.renderNormalEvents(event_2, day, resource, dateCount);\n }\n }\n this_1.cssClass = null;\n this_1.groupOrder = null;\n }\n }\n else {\n for (var _a = 0, filterEvents_3 = filterEvents; _a < filterEvents_3.length; _a++) {\n var event_3 = filterEvents_3[_a];\n if (this_1.isAllDayAppointment(event_3)) {\n this_1.allDayEvents.push(extend({}, event_3, null, true));\n }\n }\n }\n dateCount += 1;\n }\n };\n var this_1 = this;\n for (var _i = 0, resources_2 = resources; _i < resources_2.length; _i++) {\n var resource = resources_2[_i];\n _loop_1(resource);\n }\n };\n VerticalEvent.prototype.getStartCount = function () {\n return this.parent.virtualScrollModule && this.parent.activeViewOptions.allowVirtualScrolling && this.parent.timeScale.enable ?\n parseInt(this.element.querySelector('.' + cls.APPOINTMENT_WRAPPER_CLASS).getAttribute('id').split('-').slice(-1)[0], 10) : 0;\n };\n VerticalEvent.prototype.getDayIndex = function (dayIndex, resource, dayCount) {\n var _this = this;\n if (!this.parent.activeViewOptions.group.byDate) {\n return dayCount;\n }\n if (this.parent.activeViewOptions.group.byDate && !this.parent.activeViewOptions.group.hideNonWorkingDays) {\n var renderedIndex = this.parent.resourceBase.lastResourceLevel[0].renderDates.indexOf(this.dateRender[parseInt(resource.toString(), 10)][parseInt(dayIndex.toString(), 10)]);\n return (this.resources.length * renderedIndex) + resource;\n }\n var dateIndex = 0;\n var firstColumn = this.parent.activeView.colLevels[0];\n var currentDate = this.dateRender[parseInt(resource.toString(), 10)][parseInt(dayIndex.toString(), 10)].getTime();\n var currentResources = [];\n for (var i = 0; i < firstColumn.length; i++) {\n currentResources = this.parent.resourceBase.resourceDateTree[parseInt(i.toString(), 10)];\n if (currentDate === firstColumn[parseInt(i.toString(), 10)].date.getTime()) {\n break;\n }\n dateIndex = dateIndex + firstColumn[parseInt(i.toString(), 10)].colSpan;\n }\n var resIndex = currentResources.findIndex(function (x) { return x.groupOrder.toString() ===\n _this.resources[parseInt(resource.toString(), 10)].groupOrder.toString(); });\n if (resIndex < 0) {\n return dateIndex;\n }\n return dateIndex + resIndex;\n };\n VerticalEvent.prototype.setValues = function (event, resourceIndex) {\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n this.cssClass = this.resources[parseInt(resourceIndex.toString(), 10)].cssClass;\n this.groupOrder = this.resources[parseInt(resourceIndex.toString(), 10)].groupOrder;\n }\n else {\n this.cssClass = this.parent.resourceBase.getCssClass(event);\n }\n };\n VerticalEvent.prototype.getResourceList = function () {\n // eslint-disable-next-line prefer-spread\n var resources = Array.apply(null, {\n length: (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) ?\n this.resources.length : 1\n }).map(function (value, index) { return index; });\n return resources;\n };\n // eslint-disable-next-line max-len\n VerticalEvent.prototype.createAppointmentElement = function (record, isAllDay, data, resource) {\n var fieldMapping = this.parent.eventFields;\n var recordSubject = (record[fieldMapping.subject] || this.parent.eventSettings.fields.subject.default\n || this.parent.localeObj.getConstant('addTitle'));\n var appointmentWrapper = createElement('div', {\n className: cls.APPOINTMENT_CLASS,\n attrs: {\n 'data-id': 'Appointment_' + record[fieldMapping.id],\n 'data-guid': record.Guid,\n 'role': 'button',\n 'tabindex': '0',\n 'aria-disabled': this.parent.eventBase.getReadonlyAttribute(record),\n 'aria-label': this.parent.getAnnouncementString(record)\n }\n });\n if (record[this.fields.isReadonly]) {\n addClass([appointmentWrapper], 'e-read-only');\n }\n var appointmentDetails = createElement('div', { className: cls.APPOINTMENT_DETAILS });\n appointmentWrapper.appendChild(appointmentDetails);\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n var resourceIndex = this.parent.uiStateValues.isGroupAdaptive ? this.parent.uiStateValues.groupIndex : resource;\n appointmentWrapper.setAttribute('data-group-index', resourceIndex.toString());\n }\n var templateElement;\n var eventData = data;\n if (!isNullOrUndefined(this.parent.activeViewOptions.eventTemplate)) {\n var elementId = this.parent.element.id + '_';\n var viewName = this.parent.activeViewOptions.eventTemplateName;\n var templateId = elementId + viewName + 'eventTemplate';\n var resIndex = this.parent.uiStateValues.isGroupAdaptive ? this.parent.uiStateValues.groupIndex : resource;\n var templateName = 'eventTemplate' + (this.isResourceEventTemplate ? '_' + resIndex : '');\n templateElement = this.parent.getAppointmentTemplate()(record, this.parent, templateName, templateId, false);\n }\n else {\n var appointmentSubject = createElement('div', { className: cls.SUBJECT_CLASS });\n this.parent.sanitize(recordSubject, appointmentSubject);\n if (isAllDay) {\n if (record[fieldMapping.isAllDay]) {\n templateElement = [appointmentSubject];\n }\n else {\n templateElement = [];\n var appointmentStartTime = createElement('div', {\n className: cls.APPOINTMENT_TIME + (this.parent.isAdaptive ? ' ' + cls.DISABLE_CLASS : ''),\n innerHTML: this.parent.getTimeString(record[fieldMapping.startTime])\n });\n var appointmentEndTime = createElement('div', {\n className: cls.APPOINTMENT_TIME + (this.parent.isAdaptive ? ' ' + cls.DISABLE_CLASS : ''),\n innerHTML: this.parent.getTimeString(record[fieldMapping.endTime])\n });\n addClass([appointmentSubject], 'e-text-center');\n if (!eventData.isLeft) {\n templateElement.push(appointmentStartTime);\n }\n templateElement.push(appointmentSubject);\n if (!eventData.isRight) {\n templateElement.push(appointmentEndTime);\n }\n }\n }\n else {\n var timeStr = this.parent.getTimeString(record[fieldMapping.startTime]) + ' - ' +\n this.parent.getTimeString(record[fieldMapping.endTime]);\n var appointmentTime = createElement('div', {\n className: cls.APPOINTMENT_TIME + (this.parent.isAdaptive ? ' ' + cls.DISABLE_CLASS : ''),\n innerHTML: timeStr\n });\n var appointmentLocation = createElement('div', { className: cls.LOCATION_CLASS });\n this.parent.sanitize((record[fieldMapping.location] || this.parent.eventSettings.fields.location.default || ''), appointmentLocation);\n templateElement = [appointmentSubject, appointmentTime, appointmentLocation];\n }\n }\n append(templateElement, appointmentDetails);\n if (!this.parent.isAdaptive &&\n (!isNullOrUndefined(record[fieldMapping.recurrenceRule]) || !isNullOrUndefined(record[fieldMapping.recurrenceID]))) {\n var iconClass = (record[fieldMapping.id] === record[fieldMapping.recurrenceID]) ?\n cls.EVENT_RECURRENCE_ICON_CLASS : cls.EVENT_RECURRENCE_EDIT_ICON_CLASS;\n var recurrenceIcon = createElement('div', { className: cls.ICON + ' ' + iconClass });\n if (isAllDay) {\n appointmentDetails.appendChild(recurrenceIcon);\n }\n else {\n appointmentWrapper.appendChild(recurrenceIcon);\n }\n }\n this.parent.eventBase.renderSpannedIcon(isAllDay ? appointmentDetails : appointmentWrapper, eventData);\n if (!isNullOrUndefined(this.cssClass)) {\n addClass([appointmentWrapper], this.cssClass);\n }\n this.applyResourceColor(appointmentWrapper, record, 'backgroundColor', this.groupOrder);\n this.renderResizeHandler(appointmentWrapper, eventData, record[this.fields.isReadonly]);\n return appointmentWrapper;\n };\n VerticalEvent.prototype.createMoreIndicator = function (allDayRow, count, currentDay) {\n var index = currentDay + count;\n var countWrapper = allDayRow[parseInt(index.toString(), 10)];\n if (countWrapper.childElementCount <= 0) {\n var innerCountWrap = createElement('div', {\n className: cls.ROW_COUNT_WRAPPER_CLASS,\n id: cls.ROW_COUNT_WRAPPER_CLASS + '-' + index.toString()\n });\n var moreIndicatorElement = createElement('div', {\n className: cls.MORE_INDICATOR_CLASS,\n attrs: { 'tabindex': '0', 'data-index': index.toString(), 'data-count': '1' },\n innerHTML: '+1 ' + (this.parent.isAdaptive ? '' : this.parent.localeObj.getConstant('more'))\n });\n innerCountWrap.appendChild(moreIndicatorElement);\n countWrapper.appendChild(innerCountWrap);\n EventHandler.add(moreIndicatorElement, 'click', this.rowExpandCollapse, this);\n }\n else {\n var countCell = countWrapper.querySelector('.' + cls.MORE_INDICATOR_CLASS);\n var moreCount = parseInt(countCell.getAttribute('data-count'), 10) + 1;\n countCell.setAttribute('data-count', moreCount.toString());\n countCell.innerHTML = '+' + this.parent.globalize.formatNumber(moreCount) + ' ' + (this.parent.isAdaptive ? '' : this.parent.localeObj.getConstant('more'));\n }\n };\n VerticalEvent.prototype.isSpannedEvent = function (record, day, resource) {\n var currentDate = util.resetTime(this.dateRender[parseInt(resource.toString(), 10)][parseInt(day.toString(), 10)]);\n var renderedDate = this.getRenderedDates(this.dateRender[parseInt(resource.toString(), 10)]) || [currentDate];\n var currentDay = renderedDate.filter(function (date) { return date.getDay() === day; });\n if (currentDay.length === 0) {\n currentDate = util.resetTime(renderedDate[0]);\n }\n var field = this.parent.eventFields;\n var schedule = util.getStartEndHours(currentDate, this.startHour, this.endHour);\n var event = extend({}, record, null, true);\n event.isSpanned = { isBottom: false, isTop: false };\n if (record[field.startTime].getTime() < schedule.startHour.getTime()) {\n event[field.startTime] = schedule.startHour;\n event.isSpanned.isTop = true;\n }\n if (record[field.endTime].getTime() > schedule.endHour.getTime()) {\n event[field.endTime] = schedule.endHour;\n event.isSpanned.isBottom = true;\n }\n var eventDates = this.updateEventMinimumDuration(schedule, event[field.startTime], event[field.endTime]);\n event[field.startTime] = eventDates.startDate;\n event[field.endTime] = eventDates.endDate;\n return event;\n };\n VerticalEvent.prototype.isWorkDayAvailable = function (resource, start) {\n if (this.parent.activeViewOptions.group.hideNonWorkingDays && this.resources.length > 0) {\n var workDays = this.resources[parseInt(resource.toString(), 10)].\n resourceData[this.resources[parseInt(resource.toString(), 10)].resource.workDaysField] ||\n this.parent.activeViewOptions.workDays;\n return workDays && workDays.indexOf(start.getDay()) >= 0;\n }\n return true;\n };\n // eslint-disable-next-line max-len\n VerticalEvent.prototype.renderAllDayEvents = function (eventObj, dayIndex, resource, dayCount, inline, cellTop, eventHeight) {\n var _this = this;\n var currentDates = this.getRenderedDates(this.dateRender[parseInt(resource.toString(), 10)]) ||\n this.dateRender[parseInt(resource.toString(), 10)];\n if (this.parent.activeViewOptions.group.byDate) {\n this.slots[0] = [this.dateRender[parseInt(resource.toString(), 10)][parseInt(dayIndex.toString(), 10)].getTime()];\n currentDates = [this.dateRender[parseInt(resource.toString(), 10)][parseInt(dayIndex.toString(), 10)]];\n }\n var record = this.splitEvent(eventObj, currentDates)[0];\n var eStart = new Date(record[this.parent.eventFields.startTime].getTime());\n var eEnd = new Date(record[this.parent.eventFields.endTime].getTime());\n var appWidth = 0;\n var topValue = 1;\n var isDateRange = currentDates[0].getTime() <= eStart.getTime() &&\n util.addDays(currentDates.slice(-1)[0], 1).getTime() >= eStart.getTime();\n if (eStart <= eEnd && isDateRange && this.isWorkDayAvailable(resource, eStart)) {\n var isAlreadyRendered = [];\n if (this.renderedAllDayEvents[parseInt(resource.toString(), 10)]) {\n isAlreadyRendered = this.renderedAllDayEvents[parseInt(resource.toString(), 10)].filter(function (event) {\n return event.Guid === eventObj.Guid;\n });\n if (this.parent.activeViewOptions.group.byDate) {\n isAlreadyRendered = isAlreadyRendered.filter(function (event) {\n return event[_this.parent.eventFields.startTime] >= currentDates[parseInt(dayIndex.toString(), 10)] &&\n event[_this.parent.eventFields.endTime] <=\n util.addDays(new Date(+currentDates[parseInt(dayIndex.toString(), 10)]), 1);\n });\n }\n }\n if (isAlreadyRendered.length === 0) {\n var allDayDifference_1 = record.data.count;\n var allDayIndex_1 = this.getOverlapIndex(record, dayIndex, true, resource);\n record.Index = allDayIndex_1;\n this.allDayLevel = (this.allDayLevel < allDayIndex_1) ? allDayIndex_1 : this.allDayLevel;\n var widthAdjustment = record.data.isRight ? 0 :\n this.parent.currentView === 'Day' ? 4 : 7;\n if (allDayDifference_1 >= 0) {\n appWidth = (allDayDifference_1 * 100) - widthAdjustment;\n }\n if (isNullOrUndefined(this.renderedAllDayEvents[parseInt(resource.toString(), 10)])) {\n this.renderedAllDayEvents[parseInt(resource.toString(), 10)] = [];\n }\n this.renderedAllDayEvents[parseInt(resource.toString(), 10)].push(extend({}, record, null, true));\n var allDayRow_1 = [].slice.call(this.element.querySelector('.' + cls.ALLDAY_ROW_CLASS).children);\n var wIndex_1 = this.getDayIndex(dayIndex, resource, dayCount);\n var eventWrapper_1 = this.element.querySelector('.' + cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS +\n ':nth-child(' + (wIndex_1 + 1) + ')');\n var appointmentElement_1;\n if (inline) {\n appointmentElement_1 = this.parent.inlineModule.createInlineAppointmentElement(eventObj);\n }\n else {\n appointmentElement_1 = this.createAppointmentElement(eventObj, true, record.data, resource);\n }\n addClass([appointmentElement_1], cls.ALLDAY_APPOINTMENT_CLASS);\n var eventData = extend({}, record.data, null, true);\n eventObj.data = eventData;\n var args = { data: eventObj, element: appointmentElement_1, cancel: false };\n this.parent.trigger(events.eventRendered, args, function (eventArgs) {\n if (!eventArgs.cancel) {\n eventWrapper_1.appendChild(appointmentElement_1);\n topValue += (allDayIndex_1 === 0 ? cellTop : (cellTop + (allDayIndex_1 * eventHeight))) + 1;\n setStyleAttribute(appointmentElement_1, { 'width': appWidth + '%', 'top': formatUnit(topValue) });\n if (allDayIndex_1 > 1) {\n _this.moreEvents.push(appointmentElement_1);\n for (var count = 0, length_3 = allDayDifference_1; count < length_3; count++) {\n _this.createMoreIndicator(allDayRow_1, count, wIndex_1);\n }\n }\n _this.allDayElement[0].setAttribute('data-count', _this.allDayLevel.toString());\n var allDayRowHeight = ((!_this.parent.uiStateValues.expand && _this.allDayLevel > 2) ?\n (3 * eventHeight) : ((_this.allDayLevel + 1) * eventHeight)) + 4;\n _this.setAllDayRowHeight(allDayRowHeight);\n _this.addOrRemoveClass();\n _this.wireAppointmentEvents(appointmentElement_1, eventObj);\n }\n });\n }\n }\n };\n VerticalEvent.prototype.renderNormalEvents = function (eventObj, dayIndex, resource, dayCount, inline) {\n var record = this.isSpannedEvent(eventObj, dayIndex, resource);\n var eStart = record[this.fields.startTime];\n var eEnd = record[this.fields.endTime];\n var appWidth = '0%';\n var appLeft = '0%';\n var topValue = 0;\n var currentDate = util.resetTime(new Date(this.dateRender[parseInt(resource.toString(), 10)][parseInt(dayIndex.toString(), 10)].getTime()));\n var schedule = util.getStartEndHours(currentDate, this.startHour, this.endHour);\n var isValidEvent = this.isValidEvent(eventObj, eStart, eEnd, schedule);\n if ((eStart.getTime() < this.parent.minDate.getTime()) || (eEnd.getTime() > this.parent.maxDate.getTime())) {\n return;\n }\n if (eStart <= eEnd && isValidEvent && this.isWorkDayAvailable(resource, eStart)) {\n var appHeight = this.getHeight(eStart, eEnd);\n if (eStart.getTime() > schedule.startHour.getTime()) {\n topValue = this.getTopValue(eStart, dayIndex, resource);\n }\n var appIndex = this.getOverlapIndex(record, dayIndex, false, resource);\n record.Index = appIndex;\n this.overlapList.push(record);\n if (this.overlapList.length > 1) {\n if (isNullOrUndefined(this.overlapEvents[parseInt(appIndex.toString(), 10)])) {\n this.overlapEvents[parseInt(appIndex.toString(), 10)] = [];\n }\n this.overlapEvents[parseInt(appIndex.toString(), 10)].push(record);\n }\n else {\n this.overlapEvents = [];\n this.overlapEvents.push([record]);\n }\n appWidth = this.getEventWidth();\n var argsData = {\n index: appIndex, left: appLeft, width: appWidth,\n day: dayCount, dayIndex: dayIndex, record: record, resource: resource\n };\n var tempData = this.adjustOverlapElements(argsData);\n appWidth = (tempData.appWidth);\n if (isNullOrUndefined(this.renderedEvents[parseInt(resource.toString(), 10)])) {\n this.renderedEvents[parseInt(resource.toString(), 10)] = [];\n }\n this.renderedEvents[parseInt(resource.toString(), 10)].push(extend({}, record, null, true));\n var appointmentElement = void 0;\n if (inline) {\n appointmentElement = this.parent.inlineModule.createInlineAppointmentElement(eventObj);\n }\n else {\n appointmentElement = this.createAppointmentElement(eventObj, false, record.isSpanned, resource);\n }\n setStyleAttribute(appointmentElement, {\n 'width': (this.parent.eventSettings.enableMaxHeight ? '100%' : tempData.appWidth),\n 'height': appHeight + 'px', 'top': topValue + 'px'\n });\n var iconHeight = appointmentElement.querySelectorAll('.' + cls.EVENT_INDICATOR_CLASS).length * 15;\n var maxHeight = appHeight - 40 - iconHeight;\n var subjectElement = appointmentElement.querySelector('.' + cls.SUBJECT_CLASS);\n if (!this.parent.isAdaptive && subjectElement) {\n subjectElement.style.maxHeight = formatUnit(maxHeight);\n }\n var index = this.getDayIndex(dayIndex, resource, dayCount);\n var eventData = {};\n eventData[this.fields.startTime] = eventObj[this.fields.startTime];\n eventData[this.fields.endTime] = eventObj[this.fields.endTime];\n record.data = eventData;\n this.appendEvent(record, appointmentElement, index, tempData.appLeft);\n this.wireAppointmentEvents(appointmentElement, eventObj);\n }\n };\n VerticalEvent.prototype.getEventWidth = function () {\n var width = this.parent.currentView === 'Day' ? 97 : 94;\n var tempWidth = ((width - this.overlapEvents.length) / this.overlapEvents.length);\n return (tempWidth < 0 ? 0 : tempWidth) + '%';\n };\n VerticalEvent.prototype.getEventLeft = function (appWidth, index) {\n var tempLeft = (parseFloat(appWidth) + 1) * index;\n return (tempLeft > 99 ? 99 : tempLeft) + '%';\n };\n VerticalEvent.prototype.getTopValue = function (date, day, resource) {\n var startEndHours = util.getStartEndHours(util.resetTime(this.dateRender[parseInt(resource.toString(), 10)][parseInt(day.toString(), 10)]), this.startHour, this.endHour);\n var startHour = startEndHours.startHour;\n var diffInMinutes = ((date.getHours() - startHour.getHours()) * 60) + (date.getMinutes() - startHour.getMinutes());\n return (this.parent.activeViewOptions.timeScale.enable) ? ((diffInMinutes * this.cellHeight * this.slotCount) / this.interval) : 0;\n };\n VerticalEvent.prototype.getOverlapIndex = function (record, day, isAllDay, resource) {\n var _this = this;\n var fieldMapping = this.parent.eventFields;\n var eventsList = [];\n var appIndex = -1;\n this.overlapEvents = [];\n if (isAllDay) {\n if (!isNullOrUndefined(this.renderedAllDayEvents[parseInt(resource.toString(), 10)])) {\n var date_1 = util.resetTime(new Date(this.dateRender[parseInt(resource.toString(), 10)][parseInt(day.toString(), 10)].getTime()));\n eventsList = this.renderedAllDayEvents[parseInt(resource.toString(), 10)].filter(function (app) {\n return util.resetTime(app[fieldMapping.startTime]).getTime() <= date_1.getTime() &&\n util.resetTime(app[fieldMapping.endTime]).getTime() >= date_1.getTime();\n });\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n eventsList = this.filterEventsByResource(this.resources[parseInt(resource.toString(), 10)], eventsList);\n }\n }\n }\n else {\n var appointmentList_1 = !isNullOrUndefined(this.renderedEvents[parseInt(resource.toString(), 10)]) ?\n this.renderedEvents[parseInt(resource.toString(), 10)] : [];\n var appointment_1 = [];\n var recordStart_1 = record[fieldMapping.startTime];\n var recordEnd_1 = record[fieldMapping.endTime];\n this.overlapList = appointmentList_1.filter(function (data) {\n return (data[fieldMapping.endTime] > recordStart_1 && data[fieldMapping.startTime] <= recordEnd_1) ||\n (data[fieldMapping.startTime] >= recordEnd_1 && data[fieldMapping.endTime] <= recordStart_1) ||\n (data[fieldMapping.endTime].getTime() === data[fieldMapping.startTime].getTime() &&\n data[fieldMapping.startTime].getTime() === recordStart_1.getTime() && data[fieldMapping.endTime] < recordEnd_1);\n });\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n this.overlapList = this.filterEventsByResource(this.resources[parseInt(resource.toString(), 10)], this.overlapList);\n }\n this.overlapList.forEach(function (obj) {\n var filterList = appointmentList_1.filter(function (data) {\n return data[fieldMapping.endTime] > obj[fieldMapping.startTime] && data[fieldMapping.startTime] <= obj[fieldMapping.endTime];\n });\n if (_this.parent.activeViewOptions.group.resources.length > 0) {\n filterList = _this.filterEventsByResource(_this.resources[parseInt(resource.toString(), 10)], filterList);\n }\n var collection = filterList.filter(function (val) {\n return _this.overlapList.indexOf(val) === -1;\n });\n if (collection.length > 0) {\n appointment_1 = appointment_1.concat(collection);\n }\n });\n for (var i = 0; i < appointment_1.length - 1; i++) {\n for (var j = i + 1; j < appointment_1.length; j++) {\n if (appointment_1[parseInt(i.toString(), 10)][fieldMapping.id] ===\n appointment_1[parseInt(j.toString(), 10)][fieldMapping.id]) {\n appointment_1.splice(j, 1);\n j--;\n }\n }\n }\n this.overlapList = this.overlapList.concat(appointment_1);\n eventsList = this.overlapList;\n for (var _i = 0, eventsList_1 = eventsList; _i < eventsList_1.length; _i++) {\n var event_4 = eventsList_1[_i];\n var record_1 = event_4;\n var index = record_1.Index;\n if (isNullOrUndefined(this.overlapEvents[parseInt(index.toString(), 10)])) {\n this.overlapEvents[parseInt(index.toString(), 10)] = [event_4];\n }\n else {\n this.overlapEvents[parseInt(index.toString(), 10)].push(event_4);\n }\n }\n }\n if (!isAllDay) {\n eventsList = eventsList.filter(function (obj) { return (obj[fieldMapping.startTime] === record[fieldMapping.startTime] &&\n obj[fieldMapping.endTime] > record[fieldMapping.endTime] || obj[fieldMapping.endTime] > record[fieldMapping.startTime] &&\n obj[fieldMapping.startTime] < record[fieldMapping.endTime] || obj[fieldMapping.endTime] === record[fieldMapping.startTime]\n && obj[fieldMapping.startTime] === record[fieldMapping.endTime]) ||\n ((obj[fieldMapping.startTime].getTime() === record[fieldMapping.startTime].getTime() &&\n obj[fieldMapping.endTime].getTime() === record[fieldMapping.endTime].getTime())\n || (obj[fieldMapping.startTime].getTime() === record[fieldMapping.startTime].getTime() &&\n obj[fieldMapping.endTime].getTime() < record[fieldMapping.endTime].getTime() ||\n obj[fieldMapping.endTime].getTime() > record[fieldMapping.endTime].getTime())); });\n }\n if (eventsList.length > 0) {\n var appLevel = eventsList.map(function (obj) { return obj.Index; });\n appIndex = (appLevel.length > 0) ? this.getSmallestMissingNumber(appLevel) : 0;\n }\n return (appIndex === -1) ? 0 : appIndex;\n };\n VerticalEvent.prototype.adjustOverlapElements = function (args) {\n var data = { appWidth: args.width, appLeft: args.left };\n for (var i = 0, length1 = this.overlapEvents.length; i < length1; i++) {\n if (!isNullOrUndefined(this.overlapEvents[parseInt(i.toString(), 10)])) {\n for (var j = 0, length2 = this.overlapEvents[parseInt(i.toString(), 10)].length; j < length2; j++) {\n var dayCount = this.getDayIndex(args.dayIndex, args.resource, args.day);\n var element = this.element.querySelector('#e-appointment-wrapper-' + dayCount);\n if (element && element.childElementCount > 0) {\n var eleGuid = this.overlapEvents[parseInt(i.toString(), 10)][parseInt(j.toString(), 10)].Guid;\n if (element.querySelectorAll('div[data-guid=\"' + eleGuid + '\"]').length > 0 && eleGuid !== args.record.Guid) {\n var apps = element.querySelector('div[data-guid=\"' + eleGuid + '\"]');\n if (parseFloat(args.width) <= parseFloat(apps.style.width)) {\n if (this.parent.enableRtl) {\n apps.style.right = this.getEventLeft(args.width, i);\n }\n else {\n apps.style.left = this.getEventLeft(args.width, i);\n }\n apps.style.width = ((parseFloat(args.width))) + '%';\n data.appWidth = apps.style.width;\n }\n else {\n data.appWidth = apps.style.width;\n }\n }\n else {\n var appWidth = args.width;\n if (isNullOrUndefined(this.overlapEvents[i - 1])) {\n appWidth = this.getEventWidth();\n }\n data.appWidth = appWidth;\n data.appLeft = this.getEventLeft(appWidth, args.index);\n }\n }\n }\n }\n }\n return data;\n };\n VerticalEvent.prototype.setAllDayRowHeight = function (height) {\n var dateHeader = this.parent.element.querySelector('.' + cls.DATE_HEADER_WRAP_CLASS);\n if (this.parent.height === 'auto' || !this.parent.enableAllDayScroll) {\n addClass([dateHeader], cls.ALLDAY_APPOINTMENT_AUTO);\n }\n var allDayRow = this.parent.element.querySelector('.' + cls.ALLDAY_ROW_CLASS);\n allDayRow.style.height = '';\n if (this.parent.uiStateValues.expand && this.parent.height !== 'auto' && this.parent.enableAllDayScroll) {\n allDayRow.style.height = (height / 12) + 'em';\n this.parent.eventBase.allDayExpandScroll(dateHeader);\n }\n else {\n for (var _i = 0, _a = this.allDayElement; _i < _a.length; _i++) {\n var element = _a[_i];\n element.style.height = (height / 12) + 'em';\n }\n removeClass([dateHeader], cls.ALLDAY_APPOINTMENT_SCROLL);\n }\n };\n VerticalEvent.prototype.addOrRemoveClass = function () {\n var _this = this;\n this.moreEvents.filter(function (element) {\n if (!_this.parent.uiStateValues.expand && _this.allDayLevel > 2) {\n addClass([element], cls.EVENT_COUNT_CLASS);\n element.setAttribute('tabindex', '-1');\n }\n else {\n removeClass([element], cls.EVENT_COUNT_CLASS);\n element.setAttribute('tabindex', '0');\n }\n });\n var moreEventCount = this.element.querySelector('.' + cls.ALLDAY_APPOINTMENT_SECTION_CLASS);\n if (this.parent.uiStateValues.expand) {\n removeClass([moreEventCount], cls.APPOINTMENT_ROW_EXPAND_CLASS);\n addClass([moreEventCount], cls.APPOINTMENT_ROW_COLLAPSE_CLASS);\n }\n else {\n removeClass([moreEventCount], cls.APPOINTMENT_ROW_COLLAPSE_CLASS);\n addClass([moreEventCount], cls.APPOINTMENT_ROW_EXPAND_CLASS);\n }\n if (this.allDayLevel > 2) {\n removeClass([moreEventCount], cls.DISABLE_CLASS);\n }\n else {\n addClass([moreEventCount], cls.DISABLE_CLASS);\n }\n var countCell = [].slice.call(this.element.querySelectorAll('.' + cls.ROW_COUNT_WRAPPER_CLASS));\n countCell.forEach(function (element) {\n if (!_this.parent.uiStateValues.expand && _this.allDayLevel > 2) {\n removeClass([element], cls.DISABLE_CLASS);\n }\n else {\n addClass([element], cls.DISABLE_CLASS);\n }\n });\n };\n VerticalEvent.prototype.getEventHeight = function () {\n var eventElement = createElement('div', { className: cls.APPOINTMENT_CLASS, styles: 'visibility:hidden' });\n var eventWrapper = this.element.querySelector('.' + cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS + ':first-child');\n eventWrapper.appendChild(eventElement);\n var height = eventElement.offsetHeight;\n remove(eventElement);\n return height;\n };\n VerticalEvent.prototype.rowExpandCollapse = function () {\n var target = this.element.querySelector('.' + cls.ALLDAY_APPOINTMENT_SECTION_CLASS);\n this.parent.uiStateValues.expand = target.classList.contains(cls.APPOINTMENT_ROW_EXPAND_CLASS);\n var rowHeight;\n if (this.parent.uiStateValues.expand) {\n target.setAttribute('title', this.parent.localeObj.getConstant('collapseAllDaySection'));\n target.setAttribute('aria-label', 'Collapse section');\n rowHeight = ((this.allDayLevel + 1) * this.getEventHeight()) + 4;\n }\n else {\n target.setAttribute('title', this.parent.localeObj.getConstant('expandAllDaySection'));\n target.setAttribute('aria-label', 'Expand section');\n rowHeight = (3 * this.getEventHeight()) + 4;\n this.parent.element.querySelector('.' + cls.DATE_HEADER_WRAP_CLASS).scrollTop = 0;\n }\n this.setAllDayRowHeight(rowHeight);\n this.animation.animate(this.allDayElement[0]);\n this.addOrRemoveClass();\n this.animation.animate(target);\n };\n VerticalEvent.prototype.animationUiUpdate = function () {\n this.parent.notify(events.contentReady, {});\n };\n VerticalEvent.prototype.destroy = function () {\n if (!this.parent || this.parent && this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n this.allDayElement = null;\n this.renderedAllDayEvents = null;\n this.renderedEvents = null;\n this.slotCount = null;\n this.interval = null;\n this.startHour = null;\n this.endHour = null;\n this.element = null;\n this.fields = null;\n this.animation = null;\n _super.prototype.destroy.call(this);\n };\n return VerticalEvent;\n}(EventBase));\nexport { VerticalEvent };\n"],"sourceRoot":""}