{"version":3,"file":"kendo.scheduler.monthview.min.js","names":["global","factory","exports","module","require","define","amd","globalThis","self","kendoscheduler","monthview","js","this","$","kendo","window","ui","SchedulerView","NS","extend","encode","htmlEncode","getDate","date","MS_PER_DAY","INVERSE_COLOR_CLASS","DAY_TEMPLATE","template","toString","EVENT_WRAPPER_STRING","task","ns","uid","ariaLabel","resources","attr","color","tail","middle","icon","isException","isRecurring","showDelete","messages","destroy","head","resizable","EVENT_TEMPLATE","title","replace","MORE_BUTTON_TEMPLATE","iconClass","MonthGroupedView","Class","init","view","_view","_verticalRowCountForLevel","level","_rowCountForLevel","_horizontalGroupCountForLevel","_columnCountForLevel","_getCalendarRowsLength","cellsPerRow","cellCount","_createRows","start","startIdx","horizontalGroupCount","verticalGroupIndex","isVerticallyGrouped","_isVerticallyGrouped","html","groupIdx","_createRow","_adjustStartDate","addDays","_getContent","content","startDate","_getTimeSlotByPosition","x","y","groupIndex","groups","daySlotByPosition","_nextSlotStartDate","nextDay","_createRowsLayout","rows","groupHeaderTemplate","_createVerticalColumnsLayout","columns","_createColumnsLayout","_verticalGroupCount","_horizontalGroupCount","_columnOffsetForResource","_positionMobileEvent","event","group","range","rangeCount","end","rangeIndex","endDate","occurrence","clone","Date","_createEventElement","_positionEvent","_addDaySlotCollections","groupCount","tableRows","rowMultiplier","rowIndex","collection","addDaySlotCollection","cells","children","cellMultiplier","cellIndex","cell","addDaySlot","_changePeriodGroupIndex","reverse","length","_createResizeHint","left","startSlot","offsetLeft","top","offsetTop","width","innerWidth","height","clientHeight","hint","fn","call","_appendResizeHint","_createMoveHint","endSlot","css","firstChildHeight","options","eventHeight","index","addClass","inverseColor","_appendMoveHint","MonthGroupedByDateView","dateIdx","verticalStart","_groupCount","isLastRow","NUMBER_OF_COLUMNS","cellIdx","_createDateLayout","resource","configuration","data","dataSource","dataIndex","value","getter","dataValueField","obj","text","dataTextField","dataColorField","field","name","className","slice","push","subColumns","startIndex","endIndex","i","currentSlot","_slots","dateRange","daySlotRanges","dateIndex","currentGroupIndex","_daySlotCollections","vertical","selectionGroupIndex","offsetWidth","offsetHeight","slotIdx","slot","isInDateRange","min","max","msValue","scheduler","MonthView","element","that","eventsPerDay","moreButtonHeight","adaptiveSlotHeight","_groupedView","_getGroupedView","isGroupedByDate","_isGroupedByDate","Error","_templates","_editable","_renderLayout","_groups","_updateDirection","selection","ranges","multiple","isSameSlot","isSameCollection","collectionIndex","backward","_changeDate","previous","collections","_getCollections","daySlotCollectionCount","_getNextHorizontalRange","method","horizontalRange","isVertical","_getNextVerticalRange","verticalRange","_changeViewPeriod","newStart","newEnd","pad","_isInRange","events","_continuousSlot","continuousSlot","_changeGroupContinuously","lastGroupIndex","_normalizeHorizontalSelection","_normalizeVerticalSelection","settings","Template","templateSettings","eventTemplate","dayTemplate","dateForTitle","format","selectedDateFormat","_firstDayOfMonth","_lastDayOfMonth","shortDateForTitle","selectedShortDateFormat","mobileDateForTitle","selectedMobileDateFormat","nextDate","previousDate","previousDay","_startDate","_endDate","firstDayOfMonth","lastDayOfMonth","calendarInfo","firstDay","firstVisibleDay","getFullYear","getMonth","getHours","getMinutes","getSeconds","getMilliseconds","getDay","setTime","firstVisibleMonthDay","createLayout","_layout","_content","_initSlotHeight","_initTimesHeight","refreshLayout","_isVirtualized","_tryRenderContent","on","e","offset","currentTarget","_slotByPosition","preventDefault","trigger","_footer","editable","_isMobile","_touchEditable","_mouseEditable","closest","create","resourceInfo","_resourceBySlot","eventInfo","isAllDay","update","threshold","support","mobileOS","android","_addUserEvents","UserEvents","useClickAsTap","browser","edge","filter","tap","_scrolling","target","selectionByElement","columnLevel","columnLevels","rowLevel","rowLevels","verticalGroupCount","groupedView","groupedResources","verticalGroupIdx","_createCalendar","_cachedGroupIndex","find","_virtualContent","append","_calcSlotHeight","dateHeader","eventSpacing","firstCell","firstChild","Math","round","rowHeight","isMobile","table","_adjustSlotHeight","_canAdjustSlotHeight","weeks","forEach","week","_events","eventIndex","slots","firstSlot","weekOffsetTop","weekHeight","eventMeta","actualEventCount","slotIndex","meta","adjSlot","adjMeta","indexOf","dirty","sort","first","second","order","slotHeight","firstChildTop","style","more","parentNode","times","isSetHeight","_isSchedulerHeightSet","contentDiv","weekStartDates","_slotIndices","calendarRowsLength","rowIdx","_weekStartDates","classes","isToday","getTime","names","array","idx","concat","shiftArray","days","namesShort","map","inner","resize","eventResources","_formatEventAriaLabel","applyStylesFromKendoAttributes","_isInDateSlot","slotStart","slotEnd","lastSlot","startTime","toUtcTime","endTime","_slotIndex","slotRange","tableEl","contentEl","collidingEvents","createRows","at","container","_isRtl","clientWidth","scrollWidth","appendChild","addEvent","_continuousEvents","eventCount","rightOffset","rowEvents","eventTop","j","eventLength","parseInt","appendTo","_inverseEventColor","_collectionIndex","_startSlotIndex","_startSlot","outerHeight","scrollTop","scrollLeft","ceil","_resizeHint","add","_updateResizeHint","_removeResizeHint","timezone","toLocalDate","last","_updateMoveHint","distance","duration","_removeMoveHint","_moveHint","getElementsByTagName","_addResourceView","MS_PER_HOUR","render","remove","_cachedEvents","Query","dir","toArray","bind","_renderGroups","_renderEvents","_ongoingEvents","slotRanges","rangeStart","rangeEnd","setDate","parentValue","item","itemParentValue","dataParentValueField","itemIdx","_resourceValue","tmp","operator","groupEqFilter","removeClass","off","ongoingEvents","cssClass","enabled","updateInterval","jQuery"],"sources":["kendo.scheduler.monthview.js"],"mappings":"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","sourcesContent":["(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('kendo.scheduler.view.js'), require('kendo.icons.js')) :\n typeof define === 'function' && define.amd ? define(['kendo.scheduler.view', 'kendo.icons'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (global.kendoscheduler = global.kendoscheduler || {}, global.kendoscheduler.monthview = global.kendoscheduler.monthview || {}, global.kendoscheduler.monthview.js = factory()));\n})(this, (function () {\n var __meta__ = {\n id: \"scheduler.monthview\",\n name: \"Scheduler Month View\",\n category: \"web\",\n description: \"The Scheduler Month View\",\n depends: [ \"scheduler.view\", \"icons\" ],\n hidden: true\n };\n\n (function($) {\n var kendo = window.kendo,\n ui = kendo.ui,\n SchedulerView = ui.SchedulerView,\n NS = \".kendoMonthView\",\n extend = $.extend,\n encode = kendo.htmlEncode,\n getDate = kendo.date.getDate,\n MS_PER_DAY = kendo.date.MS_PER_DAY,\n NUMBER_OF_ROWS = 6,\n NUMBER_OF_COLUMNS = 7,\n INVERSE_COLOR_CLASS = \"k-event-inverse\",\n DAY_TEMPLATE = kendo.template(({ date }) => `${encode(kendo.toString(date, \"dd\"))}`),\n EVENT_WRAPPER_STRING = (task) =>\n `
` : 'class=\"k-event\">') +\n '' +\n `${task.tail || task.middle ? kendo.ui.icon(\"caret-alt-left\") : ''}` +\n `${task.isException() ? kendo.ui.icon(\"arrows-no-repeat\") :\n (task.isRecurring() ? kendo.ui.icon(\"arrow-rotate-cw\") : '')}` +\n '' +\n `${kendo.template(task.template)(task)}` +\n '' +\n `${task.showDelete ? `${kendo.ui.icon(\"x\")}` : ''}` +\n `${task.head || task.middle ? kendo.ui.icon(\"caret-alt-right\") : ''}` +\n '' +\n (task.resizable && !task.tail && !task.middle ? '' : '') +\n (task.resizable && !task.head && !task.middle ? '' : '') +\n '
',\n EVENT_TEMPLATE = kendo.template(({ title }) => `
` +\n `
${encode(title)}
` +\n '
');\n\n var CELL_INNER_SPACING = 2;\n\n var MORE_BUTTON_TEMPLATE = kendo.template(() =>\n `
${kendo.ui.icon({ icon: \"more-horizontal\", iconClass: \"k-button-icon\" })}
`\n );\n\n var MonthGroupedView = kendo.Class.extend({\n init: function(view) {\n this._view = view;\n },\n\n _verticalRowCountForLevel: function(level) {\n var view = this._view;\n\n return view._rowCountForLevel(level);\n },\n\n _horizontalGroupCountForLevel: function(level) {\n var view = this._view;\n\n return view._columnCountForLevel(level);\n },\n\n _getCalendarRowsLength: function(cellsPerRow, cellCount) {\n return cellCount / cellsPerRow;\n },\n\n _createRows: function(start, startIdx, horizontalGroupCount, verticalGroupIndex) {\n var view = this._view;\n var cellsPerRow = NUMBER_OF_COLUMNS;\n var isVerticallyGrouped = view._isVerticallyGrouped();\n var html = \"\";\n\n for (var groupIdx = 0; groupIdx < horizontalGroupCount; groupIdx++) {\n html += view._createRow(start, startIdx, cellsPerRow, isVerticallyGrouped ? verticalGroupIndex : groupIdx);\n }\n\n return html;\n },\n\n _adjustStartDate: function(start) {\n return kendo.date.addDays(start, NUMBER_OF_COLUMNS);\n },\n\n _getContent: function(content, startDate, resources) {\n return content({ date: startDate, resources: resources });\n },\n\n _getTimeSlotByPosition: function(x, y, groupIndex) {\n var group = this._view.groups[groupIndex];\n\n return group.daySlotByPosition(x, y);\n },\n\n _nextSlotStartDate: function(startDate) {\n return kendo.date.nextDay(startDate);\n },\n\n _createRowsLayout: function(resources, rows, groupHeaderTemplate) {\n var view = this._view;\n\n return view._createRowsLayout(resources, rows, groupHeaderTemplate);\n },\n\n _createVerticalColumnsLayout: function(resources, rows, groupHeaderTemplate, columns) {\n\n return columns;\n },\n\n _createColumnsLayout: function(resources, columns, groupHeaderTemplate) {\n var view = this._view;\n\n return view._createColumnsLayout(resources, columns, groupHeaderTemplate);\n },\n\n _verticalGroupCount: function(level) {\n var view = this._view;\n\n return view._rowCountForLevel(level);\n },\n\n _horizontalGroupCount: function(level) {\n var view = this._view;\n\n return view._columnCountForLevel(level) / view._columnOffsetForResource(level);\n },\n\n _positionMobileEvent: function(event, group, range, rangeCount, start, end, rangeIndex) {\n var view = this._view;\n\n if (rangeCount > 1) {\n if (rangeIndex === 0) {\n end = range.end.endDate();\n } else if (rangeIndex == rangeCount - 1) {\n start = range.start.startDate();\n } else {\n start = range.start.startDate();\n end = range.end.endDate();\n }\n }\n\n var occurrence = event.clone({ start: new Date(start), end: new Date(end), head: range.head, tail: range.tail });\n\n view._positionMobileEvent(range, view._createEventElement(occurrence), group);\n },\n\n _positionEvent: function(event, group, range, rangeCount, start, end, rangeIndex) {\n var view = this._view;\n\n if (rangeCount > 1) {\n if (rangeIndex === 0) {\n end = range.end.endDate();\n } else if (rangeIndex == rangeCount - 1) {\n start = range.start.startDate();\n } else {\n start = range.start.startDate();\n end = range.end.endDate();\n }\n }\n\n var occurrence = event.clone({ start: start, end: end, head: range.head, tail: range.tail });\n\n view._positionEvent(range, view._createEventElement(occurrence), group);\n },\n\n _addDaySlotCollections: function(groupCount, tableRows, startDate) {\n var view = this._view;\n var columnCount = NUMBER_OF_COLUMNS;\n var rowCount = NUMBER_OF_ROWS;\n\n for (var groupIndex = 0; groupIndex < groupCount; groupIndex++) {\n var cellCount = 0;\n var rowMultiplier = 0;\n\n if (view._isVerticallyGrouped()) {\n rowMultiplier = groupIndex;\n }\n\n for (var rowIndex = rowMultiplier * rowCount; rowIndex < (rowMultiplier + 1) * rowCount; rowIndex++) {\n var group = view.groups[groupIndex];\n var collection = group.addDaySlotCollection(kendo.date.addDays(startDate, cellCount), kendo.date.addDays(startDate, cellCount + columnCount));\n\n var tableRow = tableRows[rowIndex];\n var cells = tableRow.children;\n var cellMultiplier = 0;\n\n if (!view._isVerticallyGrouped()) {\n cellMultiplier = groupIndex;\n }\n\n for (var cellIndex = cellMultiplier * columnCount; cellIndex < (cellMultiplier + 1) * columnCount; cellIndex++) {\n var cell = cells[cellIndex];\n\n view.addDaySlot(collection, cell, startDate, cellCount);\n cellCount++;\n }\n }\n }\n },\n\n _changePeriodGroupIndex: function(reverse) {\n var view = this._view;\n\n return reverse ? view.groups.length - 1 : 0;\n },\n\n _createResizeHint: function(range) {\n var view = this._view;\n var left = range.startSlot().offsetLeft;\n var top = range.start.offsetTop;\n var width = range.innerWidth();\n var height = range.start.clientHeight - 2;\n var hint = SchedulerView.fn._createResizeHint.call(view, left, top, width, height);\n\n view._appendResizeHint(hint);\n },\n\n _createMoveHint: function(range, event) {\n var view = this._view;\n var startSlot = range.startSlot();\n var endSlot = range.endSlot();\n var hint = view._createEventElement(event.clone({ head: range.head, tail: range.tail }));\n\n hint.css({\n left: startSlot.offsetLeft + 2,\n top: startSlot.offsetTop + startSlot.firstChildHeight,\n height: (view.options.eventHeight === \"auto\") ? 25 : view.options.eventHeight,\n width: range.innerWidth() - (startSlot.index !== endSlot.index ? 3 : 2)\n });\n\n hint.addClass(\"k-event-drag-hint\");\n\n if (event.inverseColor) {\n hint.addClass(INVERSE_COLOR_CLASS);\n }\n\n view._appendMoveHint(hint);\n }\n });\n\n var MonthGroupedByDateView = kendo.Class.extend({\n init: function(view) {\n this._view = view;\n },\n\n _verticalRowCountForLevel: function() {\n return 1;\n },\n\n _horizontalGroupCountForLevel: function(level) {\n var view = this._view;\n\n return view._columnCountForLevel(level + 1) / NUMBER_OF_COLUMNS;\n },\n\n _createRows: function(start, startIdx, horizontalGroupCount) {\n var view = this._view;\n var cellsPerRow = NUMBER_OF_COLUMNS;\n var isVerticallyGrouped = view._isVerticallyGrouped();\n var html = \"\";\n var dateIdx = 0;\n\n if (isVerticallyGrouped) {\n var verticalStart = new Date(start);\n var groupCount = view._groupCount();\n for (dateIdx; dateIdx < NUMBER_OF_ROWS; dateIdx++) {\n html += view._createRow(verticalStart, startIdx, groupCount, dateIdx);\n\n verticalStart = kendo.date.addDays(verticalStart, cellsPerRow);\n }\n start = kendo.date.nextDay(start);\n } else {\n for (dateIdx; dateIdx < cellsPerRow; dateIdx++) {\n html += view._createRow(start, startIdx, horizontalGroupCount, dateIdx);\n start = kendo.date.nextDay(start);\n }\n start = kendo.date.addDays(start, cellsPerRow);\n }\n\n return html;\n },\n\n _adjustStartDate: function(start, isLastRow) {\n var view = this._view;\n var isVerticallyGrouped = view._isVerticallyGrouped();\n\n if (isVerticallyGrouped) {\n if (isLastRow) {\n return kendo.date.addDays(start, NUMBER_OF_COLUMNS * (NUMBER_OF_ROWS - 1) + 1);\n } else {\n return kendo.date.nextDay(start);\n }\n }\n\n return kendo.date.addDays(start, NUMBER_OF_COLUMNS);\n },\n\n _getContent: function(content, startDate, resources, cellIdx) {\n if (cellIdx === 0) {\n return content({ date: startDate, resources: resources });\n }\n return \"\";\n },\n\n _getTimeSlotByPosition: function(x, y, groupIndex) {\n var group = this._view.groups[groupIndex];\n\n return group.daySlotByPosition(x, y, true);\n },\n\n _nextSlotStartDate: function(startDate) {\n return startDate;\n },\n\n _getCalendarRowsLength: function() {\n var view = this._view;\n var isVerticallyGrouped = view._isVerticallyGrouped();\n\n return isVerticallyGrouped ? NUMBER_OF_COLUMNS : NUMBER_OF_ROWS;\n },\n\n _createRowsLayout: function(resources, rows, groupHeaderTemplate, columns) {\n var view = this._view;\n\n return view._createDateLayout(columns, null, false);\n },\n\n _createVerticalColumnsLayout: function(resources, rows, groupHeaderTemplate) {\n var view = this._view;\n var resource = resources[0];\n var configuration = [];\n var data = resource.dataSource.view();\n\n for (var dataIndex = 0; dataIndex < data.length * NUMBER_OF_ROWS; dataIndex++) {\n var value = kendo.getter(resource.dataValueField)(data[dataIndex % data.length]);\n var obj = {\n text: groupHeaderTemplate({\n text: kendo.htmlEncode(kendo.getter(resource.dataTextField)(data[dataIndex % data.length])),\n color: kendo.getter(resource.dataColorField)(data[dataIndex % data.length]),\n field: resource.field,\n title: resource.title,\n name: resource.name,\n value: value\n }),\n className: \"k-slot-cell\",\n value: value\n };\n\n obj.columns = view._createColumnsLayout(resources.slice(1), null, groupHeaderTemplate, null, null, value);\n\n configuration.push(obj);\n }\n\n return configuration;\n },\n\n _createColumnsLayout: function(resources, columns, groupHeaderTemplate, subColumns) {\n var view = this._view;\n\n return view._createColumnsLayout(resources, columns, groupHeaderTemplate, subColumns, true);\n },\n\n _verticalGroupCount: function(level) {\n var view = this._view;\n\n return view._columnCountForLevel(level) / NUMBER_OF_ROWS;\n },\n\n _horizontalGroupCount: function(level) {\n var view = this._view;\n return view._columnCountForLevel(level) / NUMBER_OF_COLUMNS;\n },\n\n _positionMobileEvent: function(event, group, range, rangeCount, start, end) {\n var view = this._view;\n var startIndex = range.start.index;\n var endIndex = range.end.index;\n\n for (var i = range.start.index; i <= range.end.index; i++) {\n var currentSlot = range.collection._slots[i];\n var dateRange = group.daySlotRanges(currentSlot.start, currentSlot.start, true)[0];\n\n var occurrence = event.clone({\n start: i === startIndex ? start : currentSlot.startDate(),\n end: i === endIndex ? end : currentSlot.endDate(),\n head: i !== endIndex || range.head,\n tail: i !== startIndex || range.tail });\n\n view._positionMobileEvent(dateRange, view._createEventElement(occurrence), group);\n }\n },\n\n _positionEvent: function(event, group, range, rangeCount, start, end) {\n var view = this._view;\n var startIndex = range.start.index;\n var endIndex = range.end.index;\n\n for (var i = range.start.index; i <= range.end.index; i++) {\n var currentSlot = range.collection._slots[i];\n var dateRange = group.daySlotRanges(currentSlot.start, currentSlot.start, true)[0];\n\n var occurrence = event.clone({\n start: i === startIndex ? start : currentSlot.startDate(),\n end: i === endIndex ? end : currentSlot.endDate(),\n head: i !== endIndex || range.head,\n tail: i !== startIndex || range.tail });\n\n view._positionEvent(dateRange, view._createEventElement(occurrence), group);\n }\n },\n\n _addDaySlotCollections: function(groupCount, tableRows, startDate) {\n var view = this._view;\n var columnCount = NUMBER_OF_COLUMNS;\n var rowCount = NUMBER_OF_ROWS;\n var isVerticallyGrouped = view._isVerticallyGrouped();\n\n for (var dateIndex = 0; dateIndex < columnCount; dateIndex++) {\n for (var rowIndex = 0; rowIndex < rowCount; rowIndex++) {\n var groupIndex = 0;\n var currentTableIndex = isVerticallyGrouped ? dateIndex : rowIndex;\n var tableRow = tableRows[currentTableIndex];\n var cells = tableRow.children;\n var cellMultiplier = 0;\n\n if (!view._isVerticallyGrouped()) {\n cellMultiplier = dateIndex;\n }\n\n for (var cellIndex = cellMultiplier * groupCount; cellIndex < (cellMultiplier + 1) * groupCount; cellIndex++) {\n var cellCount = (rowIndex * columnCount) + dateIndex;\n var currentCellIndex = isVerticallyGrouped ? cellIndex + (rowIndex * groupCount) : cellIndex;\n var cell = cells[currentCellIndex];\n var currentGroupIndex = isVerticallyGrouped ? cellIndex : groupIndex;\n var group = view.groups[currentGroupIndex];\n var collection;\n if (dateIndex === 0) {\n collection = group.addDaySlotCollection(kendo.date.addDays(startDate, cellCount), kendo.date.addDays(startDate, cellCount + columnCount));\n } else {\n collection = group._daySlotCollections[rowIndex];\n }\n\n view.addDaySlot(collection, cell, startDate, cellCount);\n groupIndex++;\n }\n }\n }\n },\n\n _changePeriodGroupIndex: function(reverse, vertical, selectionGroupIndex) {\n var view = this._view;\n\n if (vertical && view._isVerticallyGrouped()) {\n return reverse ? view.groups.length - 1 : 0;\n }\n\n return selectionGroupIndex;\n },\n\n _createResizeHint: function(range) {\n var view = this._view;\n var left, top, width, height, hint;\n\n if (view._isVerticallyGrouped()) {\n left = range.startSlot().offsetLeft;\n top = range.start.offsetTop;\n width = range.startSlot().offsetWidth;\n height = range.endSlot().offsetTop + range.startSlot().offsetHeight - range.startSlot().offsetTop - 2;\n hint = SchedulerView.fn._createResizeHint.call(view, left, top, width, height);\n\n view._appendResizeHint(hint);\n } else {\n for (var slotIdx = range.startSlot().index; slotIdx <= range.endSlot().index; slotIdx++) {\n var slot = range.collection._slots[slotIdx];\n left = slot.offsetLeft;\n top = slot.offsetTop;\n width = slot.offsetWidth;\n height = slot.offsetHeight - 2;\n hint = SchedulerView.fn._createResizeHint.call(view, left, top, width, height);\n\n view._appendResizeHint(hint);\n }\n }\n },\n\n _createMoveHint: function(range, event) {\n var view = this._view;\n var startSlot = range.startSlot();\n var endSlot = range.endSlot();\n\n for (var slotIdx = startSlot.index; slotIdx <= endSlot.index; slotIdx++) {\n var slot = range.collection._slots[slotIdx];\n var hint = view._createEventElement(event.clone({ head: range.head, tail: range.tail }));\n\n hint.css({\n left: slot.offsetLeft,\n top: slot.offsetTop + slot.firstChildHeight,\n height: (view.options.eventHeight === \"auto\") ? 25 : view.options.eventHeight,\n width: slot.offsetWidth - 2\n });\n\n hint.addClass(\"k-event-drag-hint\");\n\n if (event.inverseColor) {\n hint.addClass(INVERSE_COLOR_CLASS);\n }\n\n view._appendMoveHint(hint);\n }\n }\n });\n\n kendo.ui.scheduler.MonthGroupedView = MonthGroupedView;\n kendo.ui.scheduler.MonthGroupedByDateView = MonthGroupedByDateView;\n\n ui.MonthView = SchedulerView.extend({\n init: function(element, options) {\n var that = this;\n\n // Do not allow less than one event\n if (options.eventsPerDay === 0) {\n options.eventsPerDay = 1;\n }\n\n // Do not allow 0 height events\n if (options.eventHeight === 0) {\n options.eventHeight = 1;\n }\n\n // Do not allow 0 height more-button\n if (options.moreButtonHeight === 0) {\n options.moreButtonHeight = 1;\n }\n\n // Do not allow string values other than auto\n if (typeof options.eventHeight === \"string\" && options.eventHeight !== \"auto\") {\n options.eventHeight = 25;\n }\n\n // Set adaptiveSlotHeight to true if eventHeight is auto\n if (options.eventHeight === \"auto\") {\n options.adaptiveSlotHeight = true;\n }\n\n SchedulerView.fn.init.call(that, element, options);\n that._groupedView = that._getGroupedView();\n\n // Exception handling for invalid combinations\n var isGroupedByDate = this._isGroupedByDate();\n var adaptiveSlotHeight = this.options.adaptiveSlotHeight;\n var eventHeight = this.options.eventHeight;\n\n if (isGroupedByDate === true && adaptiveSlotHeight === true) {\n throw new Error(\"Incompatible options: adaptive slot height and date grouping!\");\n }\n\n if (isGroupedByDate === true && eventHeight === \"auto\") {\n throw new Error(\"Incompatible options: auto event height and date grouping!\");\n }\n\n that.title = that.options.title;\n\n that._templates();\n\n that._editable();\n\n that._renderLayout(that.options.date);\n\n that._groups();\n },\n\n name: \"month\",\n\n _getGroupedView: function() {\n if (this._isGroupedByDate()) {\n return new kendo.ui.scheduler.MonthGroupedByDateView(this);\n } else {\n return new kendo.ui.scheduler.MonthGroupedView(this);\n }\n },\n\n _updateDirection: function(selection, ranges, multiple, reverse, vertical) {\n if (multiple) {\n var startSlot = ranges[0].start;\n var endSlot = ranges[ranges.length - 1].end;\n var isSameSlot = startSlot.index === endSlot.index;\n var isSameCollection = startSlot.collectionIndex === endSlot.collectionIndex;\n var updateDirection;\n\n if (vertical) {\n updateDirection = (isSameSlot && isSameCollection) || isSameCollection;\n } else {\n updateDirection = isSameSlot && isSameCollection;\n }\n\n if (updateDirection) {\n selection.backward = reverse;\n }\n }\n },\n\n _changeDate: function(selection, slot, previous) {\n var group = this.groups[selection.groupIndex];\n var collections, index;\n\n if (previous) {\n collections = group._getCollections(group.daySlotCollectionCount());\n index = slot.collectionIndex - 1;\n\n if (index >= 0) {\n return collections[index]._slots[collections[index]._slots.length - 1];\n }\n } else {\n collections = group._getCollections(group.daySlotCollectionCount());\n index = slot.collectionIndex + 1;\n var slotIndex = 0;\n\n if (collections[index] && collections[index]._slots[slotIndex]) {\n return collections[index]._slots[slotIndex];\n }\n }\n },\n\n _getNextHorizontalRange: function(group, method, horizontalRange) {\n var isVertical = this._isVerticallyGrouped();\n\n horizontalRange.startSlot = group[method](horizontalRange.startSlot, isVertical);\n horizontalRange.endSlot = group[method](horizontalRange.endSlot, isVertical);\n\n return horizontalRange;\n },\n\n _getNextVerticalRange: function(group, method, verticalRange, multiple) {\n var isVertical = this._isVerticallyGrouped() && this._isGroupedByDate();\n\n verticalRange.startSlot = group[method](verticalRange.startSlot, multiple, isVertical);\n verticalRange.endSlot = group[method](verticalRange.endSlot, multiple, isVertical);\n\n return verticalRange;\n },\n\n _changeViewPeriod: function(selection, reverse, vertical) {\n var pad = vertical ? 7 : 1;\n var newStart, newEnd;\n\n if (reverse) {\n pad *= -1;\n }\n\n newStart = kendo.date.addDays(selection.start, pad);\n newEnd = kendo.date.addDays(selection.end, pad);\n\n if (this._isInRange(newStart, newEnd)) {\n return false;\n }\n\n selection.start = newStart;\n selection.end = newEnd;\n\n if (!vertical || (vertical && this._isVerticallyGrouped())) {\n selection.groupIndex = this._groupedView._changePeriodGroupIndex(reverse, vertical, selection.groupIndex);\n }\n\n selection.events = [];\n\n return true;\n },\n\n _continuousSlot: function(selection, ranges, reverse) {\n var index = selection.backward ? 0 : ranges.length - 1;\n var group = this.groups[selection.groupIndex];\n\n return group.continuousSlot(ranges[index].start, reverse);\n },\n\n _changeGroupContinuously: function(selection, continuousSlot, multiple, reverse) {\n if (!multiple) {\n var groupIndex = selection.groupIndex;\n var lastGroupIndex = this.groups.length - 1;\n var vertical = this._isVerticallyGrouped();\n var group = this.groups[groupIndex];\n\n if (!continuousSlot && vertical) {\n\n continuousSlot = group[reverse ? \"lastSlot\" : \"firstSlot\"]();\n\n groupIndex += (reverse ? -1 : 1);\n\n } else if (continuousSlot && !vertical) {\n groupIndex = reverse ? lastGroupIndex : 0;\n }\n\n if (groupIndex < 0 || groupIndex > lastGroupIndex) {\n groupIndex = reverse ? lastGroupIndex : 0;\n continuousSlot = null;\n }\n\n selection.groupIndex = groupIndex;\n }\n\n return continuousSlot;\n },\n\n _normalizeHorizontalSelection: function(selection, ranges, reverse) {\n var slot;\n\n if (reverse) {\n slot = ranges[0].start;\n } else {\n slot = ranges[ranges.length - 1].end;\n }\n\n return slot;\n },\n\n _normalizeVerticalSelection: function(selection, ranges) {\n var slot;\n\n if (selection.backward) {\n slot = ranges[0].start;\n } else {\n slot = ranges[ranges.length - 1].end;\n }\n\n return slot;\n },\n\n _templates: function() {\n var options = this.options,\n settings = extend({}, kendo.Template, options.templateSettings);\n\n this.eventTemplate = kendo.template(EVENT_WRAPPER_STRING);\n this.dayTemplate = kendo.template(options.dayTemplate, settings);\n this.groupHeaderTemplate = kendo.template(options.groupHeaderTemplate, settings);\n },\n\n dateForTitle: function() {\n return kendo.format(this.options.selectedDateFormat, this._firstDayOfMonth, this._lastDayOfMonth);\n },\n\n shortDateForTitle: function() {\n return kendo.format(this.options.selectedShortDateFormat, this._firstDayOfMonth, this._lastDayOfMonth);\n },\n\n mobileDateForTitle: function() {\n return kendo.format(this.options.selectedMobileDateFormat, this._firstDayOfMonth, this._lastDayOfMonth);\n },\n\n nextDate: function() {\n return kendo.date.nextDay(this._lastDayOfMonth);\n },\n\n previousDate: function() {\n return kendo.date.previousDay(this._firstDayOfMonth);\n },\n\n startDate: function() {\n return this._startDate;\n },\n\n endDate: function() {\n return this._endDate;\n },\n\n _renderLayout: function(date) {\n var that = this;\n\n this._firstDayOfMonth = kendo.date.firstDayOfMonth(date);\n\n this._lastDayOfMonth = kendo.date.lastDayOfMonth(date);\n\n this._startDate = firstVisibleMonthDay(date, this.calendarInfo());\n\n this.createLayout(this._layout());\n\n this._content();\n\n this._initSlotHeight();\n\n this._initTimesHeight();\n\n this.refreshLayout();\n\n if (this._isVirtualized()) {\n this._tryRenderContent();\n }\n\n this.content.on(\"click\" + NS, \".k-nav-day,.k-more-events\", function(e) {\n var offset = $(e.currentTarget).offset();\n var slot = that._slotByPosition(offset.left, offset.top);\n\n e.preventDefault();\n that.trigger(\"navigate\", { view: \"day\", date: slot.startDate() });\n });\n\n this._footer();\n },\n\n _editable: function() {\n if (this.options.editable) {\n if (this._isMobile()) {\n this._touchEditable();\n } else {\n this._mouseEditable();\n }\n\n }\n },\n\n _mouseEditable: function() {\n var that = this;\n that.element.on(\"click\" + NS, \".k-scheduler-monthview .k-event a:has(.k-i-x),.k-scheduler-monthview .k-event a:has(.k-svg-i-x)\", function(e) {\n that.trigger(\"remove\", { uid: $(this).closest(\".k-event\").attr(kendo.attr(\"uid\")) });\n e.preventDefault();\n });\n\n if (that.options.editable.create !== false) {\n that.element.on(\"dblclick\" + NS, \".k-scheduler-monthview .k-scheduler-content td\", function(e) {\n var offset = $(e.currentTarget).offset();\n var slot = that._slotByPosition(offset.left, offset.top);\n\n if (slot) {\n var resourceInfo = that._resourceBySlot(slot);\n that.trigger(\"add\", { eventInfo: extend({ isAllDay: true, start: slot.startDate(), end: slot.startDate() }, resourceInfo ) });\n }\n\n e.preventDefault();\n });\n }\n\n if (that.options.editable.update !== false) {\n that.element.on(\"dblclick\" + NS, \".k-scheduler-monthview .k-event\", function(e) {\n that.trigger(\"edit\", { uid: $(this).closest(\".k-event\").attr(kendo.attr(\"uid\")) });\n e.preventDefault();\n });\n }\n },\n\n _touchEditable: function() {\n var that = this;\n var threshold = 0;\n\n if (kendo.support.mobileOS.android) {\n threshold = 5;\n }\n\n if (that.options.editable.create !== false) {\n that._addUserEvents = new kendo.UserEvents(that.element, {\n threshold: threshold,\n useClickAsTap: !kendo.support.browser.edge,\n filter: \".k-scheduler-monthview .k-scheduler-content td\",\n tap: function(e) {\n if (that._scrolling) {\n return;\n }\n var offset = $(e.target).offset();\n var slot = that._slotByPosition(offset.left, offset.top);\n\n if (slot) {\n var resourceInfo = that._resourceBySlot(slot);\n that.trigger(\"add\", { eventInfo: extend({ isAllDay: true, start: slot.startDate(), end: slot.startDate() }, resourceInfo ) });\n }\n\n e.preventDefault();\n }\n });\n }\n },\n\n selectionByElement: function(cell) {\n var offset = $(cell).offset();\n return this._slotByPosition(offset.left, offset.top);\n },\n\n _columnCountForLevel: function(level) {\n var columnLevel = this.columnLevels[level];\n return columnLevel ? columnLevel.length : 0;\n },\n\n _rowCountForLevel: function(level) {\n var rowLevel = this.rowLevels[level];\n return rowLevel ? rowLevel.length : 0;\n },\n\n _content: function() {\n var html = '';\n var verticalGroupCount = 1;\n var groupedView = this._groupedView;\n var resources = this.groupedResources;\n\n if (resources.length) {\n if (this._isVerticallyGrouped()) {\n verticalGroupCount = groupedView._verticalRowCountForLevel(resources.length - 1);\n }\n }\n\n for (var verticalGroupIdx = 0; verticalGroupIdx < verticalGroupCount; verticalGroupIdx++) {\n html += this._createCalendar(verticalGroupIdx);\n this._cachedGroupIndex = verticalGroupIdx;\n }\n\n html += \"\";\n\n this.content.find(\"table\").html(html);\n },\n\n _virtualContent: function() {\n var that = this;\n var html = '';\n\n html += this._createCalendar(++this._cachedGroupIndex);\n\n that.content.find(\"table tbody\").append(html);\n\n that._initSlotHeight();\n },\n\n _calcSlotHeight: function(eventsPerDay) {\n var options = this.options;\n var eventHeight = options.eventHeight;\n var eventSpacing = options.eventSpacing;\n var moreButtonHeight = options.moreButtonHeight;\n var firstCell = this.content.find(\"table tr td\")[0];\n var dateHeader;\n\n if (eventHeight === \"auto\" || !firstCell) {\n return undefined;\n }\n\n dateHeader = firstCell.firstChild;\n\n return Math.round(\n // border of cell\n ( firstCell.offsetHeight - firstCell.clientHeight ) +\n\n // top padding\n dateHeader.offsetTop +\n\n // height of date header\n dateHeader.offsetHeight +\n\n // cell inner spacing\n CELL_INNER_SPACING +\n\n // all visible events and spacing\n ( eventsPerDay * eventHeight ) + ( ( eventsPerDay - 1 ) * eventSpacing ) +\n\n // leading space, more button\n ( CELL_INNER_SPACING + moreButtonHeight ) +\n\n // traling spacing\n CELL_INNER_SPACING\n );\n },\n\n _initSlotHeight: function() {\n var options = this.options;\n var eventsPerDay = options.eventsPerDay;\n var eventHeight = options.eventHeight;\n var isMobile = this._isMobile();\n var table = this.content.find(\"table\");\n var rowHeight;\n\n if (isMobile) {\n return;\n }\n\n if (typeof eventHeight === \"number\") {\n rowHeight = this._calcSlotHeight(eventsPerDay);\n\n table.find(\"tr\").height( rowHeight );\n\n table.addClass(\"k-scheduler-table-auto\");\n }\n },\n\n _adjustSlotHeight: function(group) {\n var options = this.options;\n var eventHeight = options.eventHeight;\n var eventSpacing = options.eventSpacing;\n var moreButtonHeight = options.moreButtonHeight;\n\n if (this._canAdjustSlotHeight !== true) {\n return;\n }\n\n var weeks = group._daySlotCollections;\n\n this.content.find(\"table\").addClass(\"k-scheduler-table-auto\");\n\n weeks.forEach(function(week) {\n var events = week._events;\n var eventIndex = 0;\n var slots = week._slots;\n var firstSlot = slots[0];\n var weekOffsetTop = firstSlot.element.offsetTop;\n var weekHeight = 0;\n\n // Ensure event meta exists in each slot\n slots.forEach(function(slot) {\n if (!slot.eventMeta) {\n slot.eventMeta = [];\n slot.actualEventCount = 0;\n } else {\n slot.actualEventCount = slot.eventMeta.length;\n }\n });\n\n // Ensure spanning event meta is present in all related slots\n slots.forEach(function(slot, slotIndex) {\n\n slot.eventMeta.forEach(function(meta, eventIndex) {\n\n // Skip events not starting in this slot\n if (meta.startIndex !== slotIndex) {\n return;\n }\n\n // Skip non-spanning events\n if (meta.startIndex === meta.endIndex) {\n return;\n }\n\n // Copy spanning event meta in all related slots\n slots.slice(slotIndex, meta.endIndex + 1).forEach(function(adjSlot) {\n\n var adjMeta = adjSlot.eventMeta;\n\n if (adjMeta.indexOf(meta) > -1) {\n return;\n }\n\n // adjMeta.push(meta);\n adjMeta[adjMeta.length] = slot.eventMeta[eventIndex];\n adjSlot.actualEventCount = adjMeta.length;\n adjSlot.dirty = true;\n });\n\n });\n\n // Set correct order\n if (slot.dirty === true) {\n slot.eventMeta.sort(function(first, second) {\n return first.order - second.order;\n });\n delete slot.dirty;\n }\n\n });\n\n if (eventHeight === \"auto\") {\n slots.forEach(function(slot, slotIndex) {\n var slotHeight = slot.firstChildTop + slot.firstChildHeight + CELL_INNER_SPACING;\n\n slot.eventMeta.forEach(function(meta, eventIndex) {\n meta.top = Math.max(meta.top, weekOffsetTop + slotHeight);\n slotHeight = (meta.top - weekOffsetTop) + eventSpacing + meta.height;\n });\n });\n }\n\n // Position events\n slots.forEach(function(slot, slotIndex) {\n var slotHeight = slot.firstChildTop + slot.firstChildHeight + CELL_INNER_SPACING;\n\n slot.eventMeta.forEach(function(meta) {\n meta.top = Math.max(meta.top, weekOffsetTop + slotHeight);\n slotHeight = (meta.top - weekOffsetTop) + eventSpacing + meta.height;\n\n if (meta.startIndex === slotIndex) {\n events[eventIndex].element[0].style.top = meta.top + \"px\";\n eventIndex++;\n }\n });\n\n if (slot.eventMeta.length > 0) {\n slotHeight -= eventSpacing;\n slotHeight += CELL_INNER_SPACING;\n } else {\n slotHeight += (eventHeight === \"auto\" ? 25 : eventHeight);\n }\n\n if (slot.more) {\n slot.more[0].style.top = weekOffsetTop + slotHeight + \"px\";\n slotHeight += CELL_INNER_SPACING + moreButtonHeight;\n }\n\n weekHeight = Math.max(weekHeight, slotHeight + 1);\n\n });\n\n // Update slot size and meta\n firstSlot.element.parentNode.style.height = weekHeight + \"px\";\n slots.forEach(function(slot) {\n slot.offsetTop = weekOffsetTop;\n slot.offsetHeight = weekHeight;\n slot.clientHeight = weekHeight - 1;\n });\n\n });\n },\n\n _initTimesHeight: function() {\n var that = this;\n var times = that.times;\n var isSetHeight = that._isSchedulerHeightSet();\n var contentDiv = that.content[0];\n\n if (times && !isSetHeight) {\n times.height(contentDiv.clientHeight);\n }\n },\n\n _createCalendar: function(verticalGroupIndex) {\n var start = this.startDate();\n var cellCount = NUMBER_OF_COLUMNS * NUMBER_OF_ROWS;\n var cellsPerRow = NUMBER_OF_COLUMNS;\n var weekStartDates = [start];\n var html = '';\n var horizontalGroupCount = 1;\n var isVerticallyGrouped = this._isVerticallyGrouped();\n var groupedView = this._groupedView;\n\n var resources = this.groupedResources;\n\n if (resources.length) {\n if (!isVerticallyGrouped) {\n horizontalGroupCount = groupedView._horizontalGroupCountForLevel(resources.length - 1);\n }\n }\n\n this._slotIndices = {};\n\n var calendarRowsLength = groupedView._getCalendarRowsLength(cellsPerRow, cellCount);\n\n for (var rowIdx = 0; rowIdx < calendarRowsLength; rowIdx++) {\n html += \"\";\n\n weekStartDates.push(start);\n\n var startIdx = rowIdx * cellsPerRow;\n\n html += groupedView._createRows(start, startIdx, horizontalGroupCount, verticalGroupIndex);\n start = groupedView._adjustStartDate(start, rowIdx === calendarRowsLength - 1);\n\n html += \"\";\n }\n\n this._weekStartDates = weekStartDates;\n this._endDate = kendo.date.previousDay(start);\n\n return html;\n },\n\n _createRow: function(startDate, startIdx, cellsPerRow, groupIndex) {\n var that = this;\n var min = that._firstDayOfMonth;\n var max = that._lastDayOfMonth;\n var content = that.dayTemplate;\n var classes = \"\";\n var html = \"\";\n var groupedView = this._groupedView;\n\n var resources = function() {\n return that._resourceBySlot({ groupIndex: groupIndex });\n };\n\n for (var cellIdx = 0; cellIdx < cellsPerRow; cellIdx++) {\n classes = \"\";\n\n if (kendo.date.isToday(startDate)) {\n classes += \"k-today\";\n }\n\n if (!kendo.date.isInDateRange(startDate, min, max)) {\n classes += \" k-other-month\";\n }\n\n html += \"\";\n html += groupedView._getContent(content, startDate, resources, cellIdx);\n html += \"\";\n\n that._slotIndices[getDate(startDate).getTime()] = startIdx + cellIdx;\n\n startDate = groupedView._nextSlotStartDate(startDate);\n }\n\n return html;\n },\n\n _layout: function() {\n var calendarInfo = this.calendarInfo();\n\n var weekDayNames = this._isMobile() ? calendarInfo.days.namesShort.map(function(name) {\n return name[0];\n }) : calendarInfo.days.names;\n\n var names = shiftArray(weekDayNames, calendarInfo.firstDay);\n var columns = $.map(names, function(value) { return { text: value }; });\n var resources = this.groupedResources;\n var rows;\n var groupedView = this._groupedView;\n\n if (resources.length) {\n if (this._isVerticallyGrouped()) {\n var inner = []; //add hidden cells in order to sync the content rows\n for (var idx = 0; idx < 6; idx++) {\n inner.push({ text: \"
 
\", className: \"k-hidden k-slot-cell\" });\n }\n rows = groupedView._createRowsLayout(resources, inner, this.groupHeaderTemplate, columns);\n columns = groupedView._createVerticalColumnsLayout(resources, inner, this.groupHeaderTemplate, columns);\n\n } else {\n columns = groupedView._createColumnsLayout(resources, columns, this.groupHeaderTemplate, columns);\n }\n }\n\n return {\n columns: columns,\n rows: rows\n };\n },\n\n _createEventElement: function(event) {\n var options = this.options;\n var editable = options.editable;\n\n var isMobile = this._isMobile();\n\n event.showDelete = editable && editable.destroy !== false && !isMobile;\n event.resizable = editable && editable.resize !== false && !isMobile;\n event.ns = kendo.ns;\n event.resources = this.eventResources(event);\n event.inverseColor = false;\n event.messages = options.messages || { destroy: \"Delete\" };\n\n var element = $(this.eventTemplate($.extend({}, event, {\n ariaLabel: this._formatEventAriaLabel(event.title, event.start, event.end, event.isAllDay),\n template: this.options.eventTemplate\n })));\n\n kendo.applyStylesFromKendoAttributes(element, [\"background-color\", \"border-color\"]);\n\n return element;\n },\n\n _isInDateSlot: function(event) {\n if (!this.groups || this.groups.length === 0) {\n return false;\n }\n\n var groups = this.groups[0];\n var slotStart = groups.firstSlot().start;\n var slotEnd = groups.lastSlot().end - 1;\n\n var startTime = kendo.date.toUtcTime(event.start);\n var endTime = kendo.date.toUtcTime(event.end);\n\n return (isInDateRange(startTime, slotStart, slotEnd) ||\n isInDateRange(endTime, slotStart, slotEnd) ||\n isInDateRange(slotStart, startTime, endTime) ||\n isInDateRange(slotEnd, startTime, endTime)) &&\n (!isInDateRange(endTime, slotStart, slotStart) || isInDateRange(endTime, startTime, startTime) || event.isAllDay );\n },\n\n _slotIndex: function(date) {\n return this._slotIndices[getDate(date).getTime()];\n },\n\n _positionMobileEvent: function(slotRange, element, group) {\n var startSlot = slotRange.start,\n tableEl = this.table.find(\".k-scheduler-content .k-scheduler-table\")[0],\n contentEl = this.table.find(\".k-scheduler-content\")[0],\n offsetLeft;\n\n if (slotRange.start.offsetLeft > slotRange.end.offsetLeft) {\n startSlot = slotRange.end;\n }\n\n var startIndex = slotRange.start.index;\n var endIndex = startIndex;\n\n var eventCount = 3;\n var events = SchedulerView.collidingEvents(slotRange.events(), startIndex, endIndex);\n\n events.push({ element: element, start: startIndex, end: endIndex });\n\n var rows = SchedulerView.createRows(events);\n\n var slot = slotRange.collection.at(startIndex);\n\n var container = slot.container;\n\n if (!container) {\n if (this._isRtl && contentEl.clientWidth < contentEl.scrollWidth) {\n // RTL mobile rendering with horizontal scroll\n offsetLeft = startSlot.offsetLeft - (tableEl.clientWidth - contentEl.clientWidth) + \"px\";\n } else {\n offsetLeft = startSlot.offsetLeft + \"px\";\n }\n\n container = $('
').css({\n top: startSlot.offsetTop + startSlot.firstChildTop + startSlot.firstChildHeight + \"px\",\n left: offsetLeft,\n width: startSlot.offsetWidth + \"px\"\n });\n\n slot.container = container;\n\n this.content[0].appendChild(container[0]);\n }\n\n if (rows.length <= eventCount) {\n slotRange.addEvent({ element: element, start: startIndex, end: endIndex, groupIndex: startSlot.groupIndex });\n\n group._continuousEvents.push({\n element: element,\n uid: element.attr(kendo.attr(\"uid\")),\n start: slotRange.start,\n end: slotRange.end\n });\n\n container[0].appendChild(element[0]);\n }\n },\n\n _positionEvent: function(slotRange, element, group) {\n var eventHeight = this.options.eventHeight;\n var eventSpacing = this.options.eventSpacing;\n var startSlot = slotRange.start;\n\n if (slotRange.start.offsetLeft > slotRange.end.offsetLeft) {\n startSlot = slotRange.end;\n }\n\n var startIndex = slotRange.start.index;\n var endIndex = slotRange.end.index;\n var eventCount = startSlot.eventCount;\n var events = SchedulerView.collidingEvents(slotRange.events(), startIndex, endIndex);\n var rightOffset = startIndex !== endIndex ? 3 : 2;\n\n events.push({ element: element, start: startIndex, end: endIndex });\n\n var rows = SchedulerView.createRows(events);\n\n for (var idx = 0, length = Math.min(rows.length, eventCount); idx < length; idx++) {\n var rowEvents = rows[idx].events;\n var eventTop = (eventHeight === \"auto\")\n ? \"\"\n : (\n startSlot.offsetTop +\n startSlot.firstChildTop +\n startSlot.firstChildHeight +\n CELL_INNER_SPACING +\n idx * (eventHeight + eventSpacing) +\n \"px\"\n );\n\n for (var j = 0, eventLength = rowEvents.length; j < eventLength; j++) {\n rowEvents[j].element[0].style.top = eventTop;\n rowEvents[j].element.attr(kendo.attr(\"order\"), idx);\n }\n }\n\n if (rows.length > eventCount) {\n for (var slotIndex = startIndex; slotIndex <= endIndex; slotIndex++) {\n var collection = slotRange.collection;\n\n var slot = collection.at(slotIndex);\n\n if (slot.more) {\n continue;\n }\n\n slot.more = $(MORE_BUTTON_TEMPLATE()).css({\n width: slot.clientWidth - 2,\n left: slot.offsetLeft + 2,\n top: (eventHeight === \"auto\")\n ? \"\"\n : (\n slot.offsetTop +\n slot.firstChildTop +\n slot.firstChildHeight +\n CELL_INNER_SPACING +\n (eventCount * eventHeight) +\n ( (eventCount - 1) * eventSpacing) +\n CELL_INNER_SPACING\n )\n });\n\n this.content[0].appendChild(slot.more[0]);\n }\n } else {\n slotRange.addEvent({ element: element, start: startIndex, end: endIndex, groupIndex: startSlot.groupIndex });\n\n element[0].style.width = slotRange.innerWidth() - rightOffset + \"px\";\n element[0].style.left = startSlot.offsetLeft + 2 + \"px\";\n element[0].style.height = (eventHeight === \"auto\") ? \"\" : eventHeight + \"px\";\n\n group._continuousEvents.push({\n element: element,\n uid: element.attr(kendo.attr(\"uid\")),\n start: slotRange.start,\n end: slotRange.end,\n order: parseInt(element.attr(kendo.attr(\"order\")), 10)\n });\n\n element.appendTo(this.content);\n\n this._inverseEventColor(element);\n\n // Add event meta to slot\n var _collectionIndex = slotRange.start.collectionIndex;\n var _startSlotIndex = slotRange.start.index;\n var _startSlot = group._daySlotCollections[_collectionIndex]._slots[_startSlotIndex];\n\n if (!_startSlot.eventMeta) {\n _startSlot.eventMeta = [];\n }\n\n _startSlot.eventMeta.push({\n height: (eventHeight === \"auto\") ? element.outerHeight() : eventHeight,\n top: 0,\n startIndex: _startSlotIndex,\n endIndex: slotRange.end.index,\n uid: element.attr(kendo.attr(\"uid\")),\n order: parseInt(element.attr(kendo.attr(\"order\")), 10)\n });\n }\n },\n\n _slotByPosition: function(x, y) {\n var offset = this.content.offset();\n\n x -= offset.left;\n y -= offset.top;\n y += this.content[0].scrollTop;\n x += this.content[0].scrollLeft;\n\n x = Math.ceil(x);\n y = Math.ceil(y);\n\n for (var groupIndex = 0; groupIndex < this.groups.length; groupIndex++) {\n var slot = this._groupedView._getTimeSlotByPosition(x, y, groupIndex);\n\n if (slot) {\n return slot;\n }\n }\n\n return null;\n },\n\n _appendResizeHint: function(hint) {\n hint.appendTo(this.content);\n\n this._resizeHint = this._resizeHint.add(hint);\n },\n\n _updateResizeHint: function(event, groupIndex, startTime, endTime) {\n this._removeResizeHint();\n\n var group = this.groups[groupIndex];\n\n var ranges = group.ranges(startTime, endTime, true, event.isAllDay);\n\n for (var rangeIndex = 0; rangeIndex < ranges.length; rangeIndex++) {\n this._groupedView._createResizeHint(ranges[rangeIndex]);\n }\n\n this._resizeHint.find(\".k-label-top,.k-label-bottom\").text(\"\");\n\n this._resizeHint.first().addClass(\"k-first\").find(\".k-label-top\").text(kendo.toString(kendo.timezone.toLocalDate(startTime), \"M/dd\"));\n\n this._resizeHint.last().addClass(\"k-last\").find(\".k-label-bottom\").text(kendo.toString(kendo.timezone.toLocalDate(endTime), \"M/dd\"));\n },\n\n _updateMoveHint: function(event, groupIndex, distance) {\n var start = kendo.date.toUtcTime(event.start) + distance;\n\n var end = start + event.duration();\n\n var group = this.groups[groupIndex];\n\n var ranges = group.ranges(start, end, true, event.isAllDay);\n\n this._removeMoveHint(event.uid);\n\n for (var rangeIndex = 0; rangeIndex < ranges.length; rangeIndex++) {\n this._groupedView._createMoveHint(ranges[rangeIndex], event);\n }\n },\n\n _appendMoveHint: function(hint) {\n hint.appendTo(this.content);\n\n this._moveHint = this._moveHint.add(hint);\n },\n\n _groups: function() {\n var groupCount = this._groupCount();\n var tableRows = this.content[0].getElementsByTagName(\"tr\");\n var startDate = this.startDate();\n this.groups = [];\n\n for (var idx = 0; idx < groupCount; idx++) {\n this._addResourceView(idx);\n }\n\n this._groupedView._addDaySlotCollections(groupCount, tableRows, startDate);\n },\n\n\n addDaySlot: function(collection, cell, startDate, cellCount) {\n var start = kendo.date.addDays(startDate, cellCount);\n var end = kendo.date.MS_PER_DAY;\n var eventsPerDay = this.options.eventsPerDay;\n\n if (startDate.getHours() !== start.getHours()) {\n end += (startDate.getHours() - start.getHours()) * kendo.date.MS_PER_HOUR;\n }\n\n start = kendo.date.toUtcTime(start);\n end += start;\n\n collection.addDaySlot(cell, start, end, eventsPerDay);\n },\n\n render: function(events) {\n this.content.children(\".k-event,.k-more-events,.k-events-container\").remove();\n\n this._cachedEvents = events;\n\n this._groups();\n\n events = new kendo.data.Query(events)\n .sort([{ field: \"start\", dir: \"asc\" },{ field: \"end\", dir: \"desc\" }])\n .toArray()\n .filter(function(event) {\n return this._isInDateSlot(event);\n }.bind(this));\n\n var resources = this.groupedResources;\n var isMobile = this._isMobile();\n var isGroupedByDate = this._isGroupedByDate();\n var adaptiveSlotHeight = this.options.adaptiveSlotHeight;\n\n this._canAdjustSlotHeight = isMobile !== true && isGroupedByDate !== true && resources.length === 0 && adaptiveSlotHeight === true;\n\n if (resources.length) {\n this._renderGroups(events, resources, 0, 1);\n } else {\n this._renderEvents(events, 0);\n }\n\n this.refreshLayout();\n this._ongoingEvents(events);\n\n this.trigger(\"activate\");\n },\n\n _renderEvents: function(events, groupIndex) {\n var group = this.groups[groupIndex];\n var view = this._groupedView._view;\n var isMobile = view._isMobile();\n\n if (!group) {\n return;\n }\n\n if (!group._continuousEvents) {\n group._continuousEvents = [];\n }\n\n if (isMobile) {\n\n events.forEach(function(event) {\n var ranges = group.slotRanges(event, true);\n var range = ranges[0];\n var start = range.start.start;\n var end = range.end.end;\n var rangeStart = new Date(range.start.start);\n var rangeEnd = ranges[ranges.length - 1].end.end;\n var newStart = new Date(rangeStart);\n var newEnd = new Date(end);\n\n while (rangeStart.getTime() <= rangeEnd &&\n event.end >= kendo.timezone.toLocalDate(rangeStart) &&\n event.start <= kendo.timezone.toLocalDate(rangeEnd)) {\n var dateRange = group.daySlotRanges(newStart.getTime(), newEnd.getTime(), true)[0];\n newEnd.setDate(newEnd.getDate() + 1);\n newStart.setDate(newStart.getDate() + 1);\n\n if (dateRange) {\n dateRange.head = null;\n dateRange.middle = null;\n dateRange.tail = null;\n this._groupedView._positionMobileEvent(event, group, dateRange, 1, start, end, 0);\n }\n\n rangeStart = kendo.date.addDays(rangeStart, 1);\n }\n\n }.bind(this));\n\n } else {\n\n events.forEach(function(event) {\n var range;\n var start = event.start;\n var end = event.end;\n var ranges = group.slotRanges(event, true);\n var rangeCount = ranges.length;\n\n for (var rangeIndex = 0; rangeIndex < rangeCount; rangeIndex++) {\n range = ranges[rangeIndex];\n\n this._groupedView._positionEvent(event, group, range, rangeCount, start, end, rangeIndex);\n }\n\n }.bind(this));\n\n if (this._canAdjustSlotHeight === true) {\n this._adjustSlotHeight(group);\n }\n\n }\n },\n\n _renderGroups: function(events, resources, offset, columnLevel, parentValue) {\n var resource = resources[0];\n\n if (resource) {\n var view = resource.dataSource.view();\n\n view = view.filter(function(item) {\n var itemParentValue = kendo.getter(resource.dataParentValueField)(item);\n\n return itemParentValue === null || itemParentValue === undefined || itemParentValue === parentValue;\n });\n\n for (var itemIdx = 0; itemIdx < view.length; itemIdx++) {\n var value = this._resourceValue(resource, view[itemIdx]);\n\n var tmp = new kendo.data.Query(events).filter({ field: resource.field, operator: SchedulerView.groupEqFilter(value) }).toArray();\n\n if (resources.length > 1) {\n offset = this._renderGroups(tmp, resources.slice(1), offset++, columnLevel + 1, value);\n } else {\n this._renderEvents(tmp, offset++);\n }\n }\n }\n return offset;\n },\n\n _groupCount: function() {\n var resources = this.groupedResources;\n var groupedView = this._groupedView;\n\n if (resources.length) {\n if (this._isVerticallyGrouped()) {\n return groupedView._verticalGroupCount(resources.length - 1);\n } else {\n return groupedView._horizontalGroupCount(resources.length);\n }\n }\n return 1;\n },\n\n _columnOffsetForResource: function(index) {\n return this._columnCountForLevel(index) / this._columnCountForLevel(index - 1);\n },\n\n destroy: function() {\n if (this.table) {\n this.table.removeClass(\"k-scheduler-monthview\");\n }\n\n if (this.content) {\n this.content.off(NS);\n }\n\n if (this.element) {\n this.element.off(NS);\n }\n\n SchedulerView.fn.destroy.call(this);\n\n if (this._isMobile() && this.options.editable) {\n if (this.options.editable.create !== false) {\n this._addUserEvents.destroy();\n }\n }\n },\n\n events: [\"remove\", \"add\", \"edit\", \"navigate\"],\n\n options: {\n title: \"Month\",\n name: \"month\",\n eventHeight: 25,\n moreButtonHeight: 13,\n editable: true,\n selectedDateFormat: \"{0:y}\",\n selectedShortDateFormat: \"{0:y}\",\n selectedMobileDateFormat: \"{0:MMMM}\",\n groupHeaderTemplate: ({ text }) => text,\n dayTemplate: DAY_TEMPLATE,\n eventTemplate: EVENT_TEMPLATE,\n eventsPerDay: 2,\n adaptiveSlotHeight: false,\n eventSpacing: 3,\n ongoingEvents: {\n cssClass: null,\n enabled: true,\n updateInterval: 60000\n }\n }\n });\n\n\n function shiftArray(array, idx) {\n return array.slice(idx).concat(array.slice(0, idx));\n }\n\n function firstVisibleMonthDay(date, calendarInfo) {\n var firstDay = calendarInfo.firstDay,\n firstVisibleDay = new Date(date.getFullYear(), date.getMonth(), 0, date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n\n while (firstVisibleDay.getDay() != firstDay) {\n kendo.date.setTime(firstVisibleDay, -1 * MS_PER_DAY);\n }\n\n return firstVisibleDay;\n }\n\n function isInDateRange(value, min, max) {\n var msMin = min,\n msMax = max,\n msValue;\n\n msValue = value;\n\n return msValue >= msMin && msValue <= msMax;\n }\n })(window.kendo.jQuery);\n var kendo$1 = kendo;\n\n return kendo$1;\n\n}));\n"]}