{"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","ref","toString","EVENT_WRAPPER_STRING","task","ariaLabel","resources","attr","tail","middle","icon","isException","isRecurring","showDelete","messages","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","color","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","uid","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","destroy","resize","ns","eventResources","_formatEventAriaLabel","applyStylesFromKendoAttributes","angular","elements","dataItem","_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(function (ref) {\n var date = ref.date;\n\n return (\"\" + (encode(kendo.toString(date, \"dd\"))) + \"\");\n }),\n EVENT_WRAPPER_STRING = function (task) { return \"
\") : '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(function (ref) {\n var title = ref.title;\n\n return \"
\" +\n \"
\" + (encode(title)) + \"
\" +\n '
';\n });\n\n var CELL_INNER_SPACING = 2;\n\n var MORE_BUTTON_TEMPLATE = kendo.template(function () { return (\"
\" + (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 this.angular(\"compile\", function() {\n return {\n elements: element,\n data: [ { dataItem: event } ]\n };\n });\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: function (ref) {\n var text = ref.text;\n\n return text;\n },\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"]}