{"version":3,"file":"kendo.scheduler.dayview.min.js","names":["factory","define","amd","$","undefined$1","kendo","window","ui","setTime","date","SchedulerView","outerWidth","_outerWidth","outerHeight","_outerHeight","extend","getDate","MS_PER_MINUTE","MS_PER_DAY","INVERSE_COLOR_CLASS","getMilliseconds","NS","DAY_VIEW_EVENT_TEMPLATE","template","DAY_VIEW_ALL_DAY_EVENT_TEMPLATE","DATA_HEADER_TEMPLATE","toInvariantTime","staticDate","Date","isInDateRange","value","min","max","isInTimeRange","overlaps","addContinuousEvent","group","range","element","isAllDay","events","_continuousEvents","lastEvent","length","startDate","start","getTime","idx","splice","uid","attr","end","push","MultiDayView","init","options","that","this","fn","call","title","name","_workDays","workDays","dayIndex","workWeekStart","workWeekEnd","Math","abs","getWorkDays","_templates","_editable","calculateDateRange","_groups","_currentTime","_currentTimeMarkerUpdater","_updateCurrentTimeMarker","currentTime","currentTimeMarkers","currentContentMarkers","timesTableMarkerWidth","position","elementHtml","currentTimeMarker","useLocalTimezone","timezone","dataSource","schema","timezoneOffset","offset","convert","getTimezoneOffset","times","find","content","groupsCount","orientation","groups","firstTimesCell","first","lastTimesCell","last","_isRtl","left","groupIndex","currentGroup","utcCurrentTime","toUtcTime","ranges","timeSlotRanges","collection","slotByStartDate","timesTableMarker","eq","prependTo","markerTopPosition","round","innerRect","top","timesTableMarkerCss","right","addClass","CURRENT_TIME_MARKER_ARROW_CLASS","css","height","setUpdateTimer","markerOptions","updateInterval","_currentTimeUpdateTimer","setInterval","bind","_updateResizeHint","event","startTime","endTime","multiday","enforceAllDaySlot","isMultiDay","width","hint","_removeResizeHint","rangeIndex","startSlot","_isGroupedByDate","slotIdx","index","slot","_slots","offsetWidth","clientHeight","offsetTop","_createResizeHint","offsetLeft","_resizeHint","add","innerWidth","rect","outerRect","snap","bottom","format","container","appendTo","text","toString","toLocalDate","_updateMoveHint","distance","duration","_removeMoveHint","_end","pop","eventHint","clientWidth","offsetHeight","_createEventElement","clone","inverseColor","_appendMoveHint","_moveHint","_slotByPosition","x","y","_isVerticallyGrouped","scrollTop","scrollLeft","ceil","daySlotByPosition","timeSlotByPosition","_groupCount","resources","groupedResources","byDate","_groupOrientation","_columnCountForLevel","_rowCountForLevel","_columnOffsetForResource","_columnCountInResourceView","_timeSlotGroups","groupCount","columnCount","time","rowIndex","cellIndex","interval","_timeSlotInterval","verticalViews","tableRows","rowCount","floor","rowMultiplier","cellMultiplier","cells","children","timeIndex","_addTimeSlotGroup","cell","getTimeSlotCollection","currentDate","_dates","UTC","getFullYear","getMonth","addTimeSlot","_addDaySlotGroup","cellCount","addDaySlot","_daySlotGroups","getDaySlotCollection","view","_addResourceView","columnIndex","addTimeSlotCollection","addDays","allDaySlot","addDaySlotCollection","selectedDateFormat","selectedShortDateFormat","selectedMobileDateFormat","showWorkHours","today","minorTickCount","majorTick","majorTimeHeaderTemplate","minorTimeHeaderTemplate","groupHeaderTemplate","slotTemplate","allDaySlotTemplate","eventTemplate","allDayEventTemplate","dateHeaderTemplate","editable","workDayStart","workDayEnd","footer","command","messages","allDay","showFullDay","showWorkDay","settings","Template","templateSettings","_eventTmpl","_isMobile","_touchEditable","_mouseEditable","on","e","trigger","closest","preventDefault","create","parent","hasClass","pageX","pageY","resourceInfo","_resourceBySlot","eventInfo","endDate","update","threshold","support","mobileOS","android","_addUserEvents","UserEvents","filter","useClickAsTap","browser","edge","tap","_scrolling","target","location","_allDayUserEvents","_editUserEvents","eventElement","touch","initialTouch","_layout","dates","columns","rows","column","isMobile","isToday","className","cellContent","_forTimeRange","middleRow","lastSlotRow","row","_createDateLayout","_createColumnsLayout","_createRowsLayout","toggleFullDay","isWorkDay","_footer","html","action","after","msStart","msMin","msMax","msMajorInterval","msInterval","startDay","majorTickDivider","_content","_renderRows","rowLevels","columnLevels","append","_virtualContent","isVerticalGroupped","dateID","levels","_recalculateLevels","appendRow","groupIdx","dateIndex","_addCellsToContent","rowIdx","_allDayVerticalGroupRow","result","dateGroupIndex","tmplDate","classes","_isWorkDay","day","getDay","i","_render","_startDate","_endDate","createLayout","refreshLayout","_isVirtualized","_tryRenderContent","allDayHeader","_allDayHeaderHeight","th","currentTarget","additioanlWidth","additionalHeight","datesHeader","nextDate","nextDay","previousDate","previousDay","destroy","clearInterval","off","remove","inRange","selectionByElement","innerHeight","_timeSlotIndex","_slotIndex","_dateSlotIndex","slots","_positionAllDayEvent","slotRange","slotWidth","startIndex","endIndex","allDayEvents","collidingEvents","currentColumnCount","_headerColumnCount","rightOffset","eventHeight","addEvent","slotIndex","createRows","rowEvents","j","eventLength","_arrangeColumns","columnEvents","eventRightOffset","eventElements","slotEvents","tableEl","table","contentEl","columnWidth","createColumns","calculatedWidth","style","scrollWidth","_positionEvent","_startTime","_endTime","borderWidths","getComputedStyles","parseFloat","isOneDayEvent","head","tail","middle","showDelete","resizable","resize","eventStartTime","_time","eventEndTime","eventStartDate","eventEndDate","eventResources","apply","data","ns","singleDay","ariaLabel","_formatEventAriaLabel","angular","elements","dataItem","_isInTimeSlot","slotStartTime","slotEndTime","_date","_isInDateSlot","slotStart","firstSlot","slotEnd","lastSlot","_updateAllDayHeaderHeight","_height","allDaySlots","refresh","_renderEvents","allDayEventContainer","isMultiDayEvent","slotRanges","newStart","newEnd","dateRange","daySlotRanges","_inverseEventColor","rangeCount","occurrence","render","_cachedEvents","Query","sort","field","dir","toArray","eventsByResource","_eventsByResource","eventsPerDate","map","grep","parentValue","resource","item","itemParentValue","getter","dataParentValueField","itemIdx","_resourceValue","eventsFilteredByResource","operator","groupEqFilter","slice","level","columnLevel","rowLevel","clearSelection","removeAttr","removeClass","_updateDirection","selection","multiple","reverse","vertical","isDaySlot","endSlot","collectionIndex","backward","_changeViewPeriod","endMilliseconds","newDateStart","newDateEnd","verticalByDate","_timeSlotCollections","_getCollections","daySlotCollectionCount","_isInRange","DayView","WeekView","selectedDate","dayOfWeek","calendarInfo","firstDay","WorkWeekView","weekStart","indexOf","jQuery"],"sources":["kendo.scheduler.dayview.js"],"mappings":"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","sourcesContent":["(function (factory) {\n typeof define === 'function' && define.amd ? define(['kendo.scheduler.view'], factory) :\n factory();\n})((function () {\n var __meta__ = {\n id: \"scheduler.dayview\",\n name: \"Scheduler Day View\",\n category: \"web\",\n description: \"The Scheduler Day View\",\n depends: [ \"scheduler.view\" ],\n hidden: true\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n ui = kendo.ui,\n setTime = kendo.date.setTime,\n SchedulerView = ui.SchedulerView,\n outerWidth = kendo._outerWidth,\n outerHeight = kendo._outerHeight,\n extend = $.extend,\n getDate = kendo.date.getDate,\n MS_PER_MINUTE = kendo.date.MS_PER_MINUTE,\n MS_PER_DAY = kendo.date.MS_PER_DAY,\n CURRENT_TIME_MARKER_CLASS = \"k-current-time\",\n CURRENT_TIME_MARKER_ARROW_CLASS = \"k-current-time-arrow\",\n INVERSE_COLOR_CLASS = \"k-event-inverse\",\n BORDER_SIZE_COEFF = 0.8666,\n getMilliseconds = kendo.date.getMilliseconds,\n NS = \".kendoMultiDayView\";\n\n var DAY_VIEW_EVENT_TEMPLATE = kendo.template('
' +\n '
#:kendo.format(\"{0:t} - {1:t}\", start, end)#
' +\n '
${title}
' +\n '
'),\n DAY_VIEW_ALL_DAY_EVENT_TEMPLATE = kendo.template('
' +\n '
${title}
' +\n '
'),\n DATA_HEADER_TEMPLATE = kendo.template(\"#var dateString = isMobile ? kendo.toString(date,'ddd')[0] : kendo.toString(date,'ddd M/dd'); #\" +\n \"#=dateString#\"),\n ALLDAY_EVENT_WRAPPER_STRING = '
' +\n '' +\n '# if(data.tail || data.middle) {#' +\n '' +\n '#}#' +\n '# if(data.isException()) {#' +\n '' +\n '# } else if(data.isRecurring()) {#' +\n '' +\n '# } #' +\n '' +\n '{0}' +\n '' +\n '#if (showDelete) {#' +\n '' +\n '#}#' +\n '# if(data.head || data.middle) {#' +\n '' +\n '#}#' +\n '' +\n '#if(resizable && !singleDay && !data.tail && !data.middle){#' +\n '' +\n '#}#' +\n '#if(resizable && !singleDay && !data.head && !data.middle){#' +\n '' +\n '#}#' +\n '
',\n EVENT_WRAPPER_STRING = '
' +\n '' +\n '# if(data.isException()) {#' +\n '' +\n '# } else if(data.isRecurring()) {#' +\n '' +\n '# } #' +\n '' +\n '{0}' +\n '' +\n '#if (showDelete) {#' +\n '' +\n '#}#' +\n '' +\n '' +\n '# if(data.tail || data.middle) {#' +\n '' +\n '# } #' +\n '' +\n '' +\n '# if(data.head || data.middle) {#' +\n '' +\n '# } #' +\n '' +\n '# if(resizable && !data.tail && !data.middle) {#' +\n '' +\n '# } #' +\n '# if(resizable && !data.head && !data.middle) {#' +\n '' +\n '# } #' +\n '
';\n\n function toInvariantTime(date) {\n var staticDate = new Date(1980, 1, 1, 0, 0, 0);\n setTime(staticDate, getMilliseconds(date));\n return staticDate;\n }\n\n function isInDateRange(value, min, max) {\n return value >= min && value <= max;\n }\n\n function isInTimeRange(value, min, max, overlaps) {\n overlaps = overlaps ? value <= max : value < max;\n return value > min && overlaps;\n }\n\n function addContinuousEvent(group, range, element, isAllDay) {\n var events = group._continuousEvents;\n var lastEvent = events[events.length - 1];\n var startDate = getDate(range.start.startDate()).getTime();\n\n //this handles all day event which is over multiple slots but starts\n //after one of the time events\n if (isAllDay && lastEvent &&\n getDate(lastEvent.start.startDate()).getTime() == startDate) {\n\n var idx = events.length - 1;\n for ( ; idx > -1; idx --) {\n if (events[idx].isAllDay ||\n getDate(events[idx].start.startDate()).getTime() < startDate) {\n break;\n }\n }\n\n events.splice(idx + 1, 0, {\n element: element,\n isAllDay: true,\n uid: element.attr(kendo.attr(\"uid\")),\n start: range.start,\n end: range.end\n });\n } else {\n events.push({\n element: element,\n isAllDay: isAllDay,\n uid: element.attr(kendo.attr(\"uid\")),\n start: range.start,\n end: range.end\n });\n }\n }\n\n function getWorkDays(options) {\n if (options.workDays && options.workDays.length) {\n return options.workDays;\n }\n\n var workDays = [];\n var dayIndex = options.workWeekStart % 7;\n var workWeekEnd = Math.abs(options.workWeekEnd % 7);\n\n workDays.push(dayIndex);\n\n while (workWeekEnd != dayIndex) {\n if (dayIndex > 6 ) {\n dayIndex -= 7;\n } else {\n dayIndex++;\n }\n workDays.push(dayIndex);\n }\n return workDays;\n }\n\n var MultiDayView = SchedulerView.extend({\n init: function(element, options) {\n var that = this;\n\n SchedulerView.fn.init.call(that, element, options);\n\n that.title = that.options.title || that.options.name;\n\n that._workDays = getWorkDays(that.options);\n\n that._templates();\n\n that._editable();\n\n that.calculateDateRange();\n\n that._groups();\n\n that._currentTime(true);\n },\n\n _currentTimeMarkerUpdater: function() {\n this._updateCurrentTimeMarker(new Date());\n },\n\n _updateCurrentTimeMarker: function(currentTime) {\n var options = this.options,\n currentTimeMarkers, currentContentMarkers, timesTableMarkerWidth, position,\n elementHtml = \"
\";\n\n if (options.currentTimeMarker.useLocalTimezone === false) {\n var timezone = options.dataSource.options.schema.timezone;\n\n if (options.dataSource && timezone) {\n var timezoneOffset = kendo.timezone.offset(currentTime, timezone);\n currentTime = kendo.timezone.convert(currentTime, currentTime.getTimezoneOffset(), timezoneOffset);\n }\n }\n\n currentTimeMarkers = this.times.find(\".\" + CURRENT_TIME_MARKER_CLASS);\n currentContentMarkers = this.content.find(\".\" + CURRENT_TIME_MARKER_CLASS);\n\n var groupsCount = !options.group || options.group.orientation == \"horizontal\" ? 1 : this.groups.length;\n var firstTimesCell = this.times.find(\"tr\").first().find(\"th\").first();\n var lastTimesCell = this.times.find(\"tr\").first().find(\"th\").last();\n\n if (firstTimesCell.length > 0 && lastTimesCell.length > 0) {\n if (this._isRtl) {\n position = firstTimesCell.position().left + outerHeight(firstTimesCell) - outerHeight(lastTimesCell);\n } else {\n position = lastTimesCell.position().left;\n }\n }\n\n for (var groupIndex = 0; groupIndex < groupsCount; groupIndex++) {\n var currentGroup = this.groups[groupIndex];\n\n if (!currentGroup) {\n return;\n }\n\n var utcCurrentTime = kendo.date.toUtcTime(currentTime);\n var ranges = currentGroup.timeSlotRanges(utcCurrentTime, utcCurrentTime + 1);\n\n if (ranges.length === 0) {\n return;\n }\n\n var collection = ranges[0].collection;\n var slotElement = collection.slotByStartDate(currentTime);\n\n if (slotElement) {\n var timesTableMarker = currentTimeMarkers[groupIndex] ? currentTimeMarkers.eq(groupIndex) : $(elementHtml).prependTo(this.times);\n var markerTopPosition = Math.round(ranges[0].innerRect(currentTime, new Date(currentTime.getTime() + 1), false).top);\n\n var timesTableMarkerCss = {};\n\n if (this._isRtl) {\n timesTableMarkerCss.right = position;\n timesTableMarker.addClass(CURRENT_TIME_MARKER_ARROW_CLASS + \"-left\");\n } else {\n timesTableMarkerCss.left = position;\n timesTableMarker.addClass(CURRENT_TIME_MARKER_ARROW_CLASS + \"-right\");\n }\n\n if (!timesTableMarkerWidth) {\n timesTableMarkerWidth = (outerWidth(timesTableMarker) * BORDER_SIZE_COEFF / 2);\n }\n\n timesTableMarkerCss.top = markerTopPosition - timesTableMarkerWidth;\n\n timesTableMarker.css(timesTableMarkerCss);\n\n var contentMarker = currentContentMarkers[groupIndex] ? currentContentMarkers.eq(groupIndex) : $(elementHtml).prependTo(this.content);\n\n contentMarker.css({\n top: markerTopPosition,\n height: \"1px\",\n right: 0,\n left: 0\n });\n }\n }\n },\n\n _currentTime: function(setUpdateTimer) {\n var that = this;\n var markerOptions = that.options.currentTimeMarker;\n\n if (markerOptions !== false && markerOptions.updateInterval !== undefined$1) {\n that._currentTimeMarkerUpdater();\n\n if (setUpdateTimer) {\n that._currentTimeUpdateTimer = setInterval(this._currentTimeMarkerUpdater.bind(that), markerOptions.updateInterval);\n }\n }\n },\n\n _updateResizeHint: function(event, groupIndex, startTime, endTime) {\n var multiday;\n\n if (this.options.enforceAllDaySlot) {\n multiday = event.isMultiDay();\n } else {\n multiday = event.isAllDay;\n }\n\n var group = this.groups[groupIndex];\n\n var ranges = group.ranges(startTime, endTime, multiday, event.isAllDay);\n var width, height, top, hint;\n\n this._removeResizeHint();\n\n for (var rangeIndex = 0; rangeIndex < ranges.length; rangeIndex++) {\n var range = ranges[rangeIndex];\n var start = range.startSlot();\n\n if (this._isGroupedByDate() && multiday) {\n for (var slotIdx = start.index; slotIdx <= range.end.index; slotIdx++) {\n var slot = range.collection._slots[slotIdx];\n width = slot.offsetWidth;\n height = slot.clientHeight;\n top = slot.offsetTop;\n\n hint = SchedulerView.fn._createResizeHint.call(this,\n slot.offsetLeft,\n top,\n width,\n height\n );\n\n this._resizeHint = this._resizeHint.add(hint);\n }\n } else {\n width = start.offsetWidth;\n height = start.clientHeight;\n top = start.offsetTop;\n\n if (multiday) {\n width = range.innerWidth();\n } else {\n var rect = range.outerRect(startTime, endTime, this.options.snap);\n top = rect.top;\n height = rect.bottom - rect.top;\n }\n\n hint = SchedulerView.fn._createResizeHint.call(this,\n start.offsetLeft,\n top,\n width,\n height\n );\n\n this._resizeHint = this._resizeHint.add(hint);\n }\n }\n\n var format = \"t\";\n var container = this.content;\n\n if (multiday) {\n format = \"M/dd\";\n container = this.element.find(\".k-scheduler-header-wrap:has(.k-scheduler-header-all-day) > div\");\n if (!container.length) {\n container = this.content;\n }\n }\n\n this._resizeHint.appendTo(container);\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), format));\n\n this._resizeHint.last().addClass(\"k-last\").find(\".k-label-bottom\").text(kendo.toString(kendo.timezone.toLocalDate(endTime), format));\n },\n\n _updateMoveHint: function(event, groupIndex, distance) {\n var multiday;\n\n if (this.options.enforceAllDaySlot) {\n multiday = event.isMultiDay();\n } else {\n multiday = event.isAllDay;\n }\n\n var group = this.groups[groupIndex];\n\n var start = kendo.date.toUtcTime(event.start) + distance;\n\n var end = start + event.duration();\n\n var ranges = group.ranges(start, end, multiday, event.isAllDay);\n\n start = kendo.timezone.toLocalDate(start);\n\n end = kendo.timezone.toLocalDate(end);\n\n this._removeMoveHint(event.uid);\n\n if (!multiday &&\n getMilliseconds(end) < getMilliseconds(this.startTime()) &&\n (end < this._end().getTime()) &&\n getMilliseconds(end) !== 0 &&\n ranges.length > 1) {\n ranges.pop();\n }\n\n var eventHint = $();\n\n for (var rangeIndex = 0; rangeIndex < ranges.length; rangeIndex++) {\n var range = ranges[rangeIndex];\n var startSlot = range.start;\n var hint;\n var css = {\n left: startSlot.offsetLeft + 2,\n top: startSlot.offsetTop\n };\n\n if (this._isGroupedByDate() && multiday) {\n for (var slotIdx = startSlot.index; slotIdx <= range.end.index; slotIdx++) {\n var slot = range.collection._slots[slotIdx];\n\n css.left = this._isRtl ? slot.clientWidth * 0.1 + slot.offsetLeft + 2 : slot.offsetLeft + 2;\n css.height = slot.offsetHeight;\n css.width = slot.clientWidth * 0.9 - 2;\n\n hint = this._createEventElement(event.clone({ start: start, end: end }), !multiday);\n\n if (event.inverseColor) {\n hint.addClass(INVERSE_COLOR_CLASS);\n }\n\n this._appendMoveHint(hint, css);\n eventHint = eventHint.add(hint);\n }\n } else {\n if (this._isRtl) {\n css.left = startSlot.clientWidth * 0.1 + startSlot.offsetLeft + 2;\n }\n\n if (multiday) {\n css.width = range.innerWidth() - 2;\n } else {\n var rect = range.outerRect(start, end, this.options.snap);\n css.top = rect.top;\n css.height = rect.bottom - rect.top;\n css.width = startSlot.clientWidth * 0.9 - 2;\n }\n\n hint = this._createEventElement(event.clone({ start: start, end: end }), !multiday);\n\n if (event.inverseColor) {\n hint.addClass(INVERSE_COLOR_CLASS);\n }\n\n this._appendMoveHint(hint, css);\n eventHint = eventHint.add(hint);\n }\n }\n\n var content = this.content;\n\n if (multiday) {\n content = this.element.find(\".k-scheduler-header-wrap:has(.k-scheduler-header-all-day) > div\");\n if (!content.length) {\n content = this.content;\n }\n }\n\n eventHint.appendTo(content);\n },\n\n _appendMoveHint: function(hint, css) {\n hint.addClass(\"k-event-drag-hint\");\n\n hint.css(css);\n\n this._moveHint = this._moveHint.add(hint);\n },\n\n _slotByPosition: function(x, y) {\n var slot, offset;\n\n if (this._isVerticallyGrouped()) {\n offset = this.content.offset();\n y += this.content[0].scrollTop;\n x += this.content[0].scrollLeft;\n } else {\n offset = this.element.find(\".k-scheduler-header-wrap:has(.k-scheduler-header-all-day)\").find(\">div\").offset();\n }\n\n if (offset) {\n x -= offset.left;\n y -= offset.top;\n }\n\n x = Math.ceil(x);\n y = Math.ceil(y);\n\n var group;\n var groupIndex;\n\n for (groupIndex = 0; groupIndex < this.groups.length; groupIndex++) {\n group = this.groups[groupIndex];\n\n slot = group.daySlotByPosition(x, y, this._isGroupedByDate());\n\n if (slot) {\n return slot;\n }\n }\n\n if (offset) {\n x += offset.left;\n y += offset.top;\n }\n\n offset = this.content.offset();\n\n x -= offset.left;\n y -= offset.top;\n\n if (!this._isVerticallyGrouped()) {\n y += this.content[0].scrollTop;\n x += this.content[0].scrollLeft;\n }\n\n x = Math.ceil(x);\n y = Math.ceil(y);\n\n for (groupIndex = 0; groupIndex < this.groups.length; groupIndex++) {\n group = this.groups[groupIndex];\n\n slot = group.timeSlotByPosition(x, y);\n\n if (slot) {\n return slot;\n }\n }\n\n return null;\n },\n\n _groupCount: function() {\n var resources = this.groupedResources;\n var byDate = this._isGroupedByDate();\n\n if (resources.length) {\n if (this._groupOrientation() === \"vertical\") {\n if (byDate) {\n return this._columnCountForLevel(resources.length - 1);\n } else {\n return this._rowCountForLevel(resources.length - 1);\n }\n } else {\n if (byDate) {\n return this._columnCountForLevel(resources.length) / this._columnCountForLevel(0);\n } else {\n return this._columnCountForLevel(resources.length) / this._columnOffsetForResource(resources.length);\n }\n }\n }\n return 1;\n },\n\n _columnCountInResourceView: function() {\n var resources = this.groupedResources;\n var byDate = this._isGroupedByDate();\n\n if (!resources.length || this._isVerticallyGrouped()) {\n if (byDate) {\n return this._rowCountForLevel(0);\n } else {\n return this._columnCountForLevel(0);\n }\n }\n\n if (byDate) {\n return this._columnCountForLevel(0);\n } else {\n return this._columnOffsetForResource(resources.length);\n }\n },\n\n _timeSlotGroups: function(groupCount, columnCount) {\n var interval = this._timeSlotInterval();\n var verticalViews = groupCount;\n var byDate = this._isGroupedByDate();\n var tableRows = this.content.find(\"tr:not(.k-scheduler-header-all-day)\");\n var group, time, rowIndex, cellIndex;\n var rowCount = tableRows.length;\n\n if (this._isVerticallyGrouped()) {\n if (byDate) {\n verticalViews = columnCount;\n }\n rowCount = Math.floor(rowCount / verticalViews);\n }\n\n for (var groupIndex = 0; groupIndex < verticalViews; groupIndex++) {\n var rowMultiplier = 0;\n var cellMultiplier = 0;\n\n if (this._isVerticallyGrouped()) {\n rowMultiplier = groupIndex;\n } else {\n cellMultiplier = groupIndex;\n }\n\n rowIndex = rowMultiplier * rowCount;\n\n while (rowIndex < (rowMultiplier + 1) * rowCount) {\n var cells = tableRows[rowIndex].children;\n\n if (rowIndex % rowCount === 0) {\n time = getMilliseconds(new Date(+this.startTime()));\n }\n\n var timeIndex = 0;\n if (byDate) {\n if (this._isVerticallyGrouped()) {\n for (cellIndex = 0; cellIndex < groupCount; cellIndex++) {\n group = this.groups[cellIndex];\n this._addTimeSlotGroup(group, cells, cellIndex, time, interval, groupIndex);\n }\n } else {\n group = this.groups[groupIndex];\n for (cellIndex = cellMultiplier; cellIndex < groupCount * columnCount; cellIndex = cellIndex + groupCount) {\n this._addTimeSlotGroup(group, cells, cellIndex, time, interval, timeIndex);\n timeIndex++;\n }\n }\n } else {\n group = this.groups[groupIndex];\n for (cellIndex = cellMultiplier * columnCount; cellIndex < (cellMultiplier + 1) * columnCount; cellIndex++) {\n\n this._addTimeSlotGroup(group, cells, cellIndex, time, interval, timeIndex);\n timeIndex++;\n }\n }\n\n time += interval;\n rowIndex ++;\n }\n }\n },\n\n _addTimeSlotGroup: function(group, cells, cellIndex, time, interval, timeIndex) {\n var cell = cells[cellIndex];\n var collection = group.getTimeSlotCollection(timeIndex);\n var currentDate = this._dates[timeIndex];\n if (!currentDate || !cell) {\n return;\n }\n var currentTime = Date.UTC(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate());\n var start = currentTime + time;\n var end = start + interval;\n\n collection.addTimeSlot(cell, start, end);\n },\n\n _addDaySlotGroup: function(collection, cells, cellIndex, columnCount, cellCount) {\n var cell = cells[cellIndex];\n var start = this._dates[cellCount];\n if (!start) {\n return;\n }\n var currentTime = Date.UTC(start.getFullYear(), start.getMonth(), start.getDate());\n\n collection.addDaySlot(cell, currentTime, currentTime + kendo.date.MS_PER_DAY);\n },\n\n _daySlotGroups: function(groupCount, columnCount) {\n var tableRows, cellIndex;\n var verticalViews = groupCount;\n var byDate = this._isGroupedByDate();\n\n if (this._isVerticallyGrouped()) {\n if (byDate) {\n verticalViews = columnCount;\n }\n tableRows = this.element.find(\".k-scheduler-header-all-day\");\n } else {\n tableRows = this.element.find(\".k-scheduler-header-all-day tr\");\n }\n\n for (var groupIndex = 0; groupIndex < verticalViews; groupIndex++) {\n var rowMultiplier = 0;\n var group, collection;\n\n if (this._isVerticallyGrouped()) {\n rowMultiplier = groupIndex;\n }\n\n var cells = tableRows[rowMultiplier].children;\n var cellMultiplier = 0;\n\n if (!this._isVerticallyGrouped()) {\n cellMultiplier = groupIndex;\n }\n\n var cellCount = 0;\n if (byDate) {\n if (this._isVerticallyGrouped()) {\n for (cellIndex = 0; cellIndex < groupCount; cellIndex++) {\n group = this.groups[cellIndex];\n collection = group.getDaySlotCollection(0);\n this._addDaySlotGroup(collection, cells, cellIndex, columnCount, groupIndex);\n }\n } else {\n group = this.groups[groupIndex];\n collection = group.getDaySlotCollection(0);\n for (cellIndex = cellMultiplier; cellIndex < groupCount * columnCount; cellIndex = cellIndex + groupCount) {\n this._addDaySlotGroup(collection, cells, cellIndex, columnCount, cellCount);\n cellCount++;\n }\n }\n } else {\n group = this.groups[groupIndex];\n collection = group.getDaySlotCollection(0);\n for (cellIndex = cellMultiplier * columnCount; cellIndex < (cellMultiplier + 1) * columnCount; cellIndex++) {\n\n this._addDaySlotGroup(collection, cells, cellIndex, columnCount, cellCount);\n cellCount++;\n }\n }\n }\n },\n\n _groups: function() {\n var groupCount = this._groupCount();\n var columnCount = this._columnCountInResourceView();\n\n this.groups = [];\n\n for (var idx = 0; idx < groupCount; idx++) {\n var view = this._addResourceView(idx);\n\n for (var columnIndex = 0; columnIndex < columnCount; columnIndex++) {\n if (this._dates[columnIndex]) {\n view.addTimeSlotCollection(this._dates[columnIndex], kendo.date.addDays(this._dates[columnIndex], 1));\n }\n }\n\n if (this.options.allDaySlot) {\n view.addDaySlotCollection(this._dates[0], kendo.date.addDays(this._dates[this._dates.length - 1], 1));\n }\n }\n\n this._timeSlotGroups(groupCount, columnCount);\n\n if (this.options.allDaySlot) {\n this._daySlotGroups(groupCount, columnCount);\n }\n },\n\n options: {\n name: \"MultiDayView\",\n selectedDateFormat: \"{0:D}\",\n selectedShortDateFormat: \"{0:d}\",\n selectedMobileDateFormat: \"{0:MMM} {0:dd} - {1:dd}\",\n allDaySlot: true,\n showWorkHours: false,\n title: \"\",\n startTime: kendo.date.today(),\n endTime: kendo.date.today(),\n minorTickCount: 2,\n majorTick: 60,\n majorTimeHeaderTemplate: \"#=kendo.toString(date, 't')#\",\n minorTimeHeaderTemplate: \"&\\\\#8203;\",\n groupHeaderTemplate: \"#=text#\",\n slotTemplate: \" \",\n allDaySlotTemplate: \" \",\n eventTemplate: DAY_VIEW_EVENT_TEMPLATE,\n allDayEventTemplate: DAY_VIEW_ALL_DAY_EVENT_TEMPLATE,\n dateHeaderTemplate: DATA_HEADER_TEMPLATE,\n editable: true,\n workDayStart: new Date(1980, 1, 1, 8, 0, 0),\n workDayEnd: new Date(1980, 1, 1, 17, 0, 0),\n workWeekStart: 1,\n workWeekEnd: 5,\n footer: {\n command: \"workDay\"\n },\n messages: {\n allDay: \"all day\",\n showFullDay: \"Show full day\",\n showWorkDay: \"Show business hours\"\n },\n currentTimeMarker: {\n updateInterval: 10000,\n useLocalTimezone: true\n },\n // a hidden option that provides us a fallback to the previous behaviour\n // e.g. all events of 24 hours or more will be rendered in the allDaySlot\n enforceAllDaySlot: false\n },\n\n events: [\"remove\", \"add\", \"edit\"],\n\n _templates: function() {\n var options = this.options,\n settings = extend({}, kendo.Template, options.templateSettings);\n\n this.eventTemplate = this._eventTmpl(options.eventTemplate, EVENT_WRAPPER_STRING);\n this.allDayEventTemplate = this._eventTmpl(options.allDayEventTemplate, ALLDAY_EVENT_WRAPPER_STRING);\n\n this.majorTimeHeaderTemplate = kendo.template(options.majorTimeHeaderTemplate, settings);\n this.minorTimeHeaderTemplate = kendo.template(options.minorTimeHeaderTemplate, settings);\n this.dateHeaderTemplate = kendo.template(options.dateHeaderTemplate, settings);\n this.slotTemplate = kendo.template(options.slotTemplate, settings);\n this.allDaySlotTemplate = kendo.template(options.allDaySlotTemplate, settings);\n this.groupHeaderTemplate = kendo.template(options.groupHeaderTemplate, settings);\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 _mouseEditable: function() {\n var that = this;\n that.element.on(\"click\" + NS, \".k-event a:has(.k-i-close)\", 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-content > table td\", function(e) {\n if (!$(this).parent().hasClass(\"k-scheduler-header-all-day\")) {\n var slot = that._slotByPosition(e.pageX, e.pageY);\n\n if (slot) {\n var resourceInfo = that._resourceBySlot(slot);\n that.trigger(\"add\", { eventInfo: extend({ start: slot.startDate(), end: slot.endDate() }, resourceInfo) });\n }\n\n e.preventDefault();\n }\n }).on(\"dblclick\" + NS, \".k-scheduler-header-all-day td\", function(e) {\n var slot = that._slotByPosition(e.pageX, e.pageY);\n if (slot) {\n var resourceInfo = that._resourceBySlot(slot);\n that.trigger(\"add\", { eventInfo: extend({}, { isAllDay: true, start: kendo.date.getDate(slot.startDate()), end: kendo.date.getDate(slot.startDate()) }, resourceInfo) });\n }\n e.preventDefault();\n });\n }\n\n if (that.options.editable.update !== false) {\n that.element.on(\"dblclick\" + NS, \".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 filter: \".k-scheduler-content td\",\n useClickAsTap: !kendo.support.browser.edge,\n tap: function(e) {\n if (that._scrolling) {\n return;\n }\n if (!$(e.target).parent().hasClass(\"k-scheduler-header-all-day\")) {\n var x = e.x.location !== undefined$1 ? e.x.location : e.x;\n var y = e.y.location !== undefined$1 ? e.y.location : e.y;\n var slot = that._slotByPosition(x, y);\n\n if (slot) {\n var resourceInfo = that._resourceBySlot(slot);\n that.trigger(\"add\", { eventInfo: extend({ start: slot.startDate(), end: slot.endDate() }, resourceInfo) });\n }\n\n e.preventDefault();\n }\n }\n });\n\n that._allDayUserEvents = new kendo.UserEvents(that.element, {\n threshold: threshold,\n useClickAsTap: !kendo.support.browser.edge,\n filter: \".k-scheduler-header-all-day td\",\n tap: function(e) {\n if (that._scrolling) {\n return;\n }\n var x = e.x.location !== undefined$1 ? e.x.location : e.x;\n var y = e.y.location !== undefined$1 ? e.y.location : e.y;\n var slot = that._slotByPosition(x, y);\n\n if (slot) {\n var resourceInfo = that._resourceBySlot(slot);\n that.trigger(\"add\", { eventInfo: extend({}, { isAllDay: true, start: kendo.date.getDate(slot.startDate()), end: kendo.date.getDate(slot.startDate()) }, resourceInfo) });\n }\n\n e.preventDefault();\n }\n });\n }\n\n if (that.options.editable.update !== false) {\n that._editUserEvents = new kendo.UserEvents(that.element, {\n threshold: threshold,\n useClickAsTap: !kendo.support.browser.edge,\n filter: \".k-event\",\n tap: function(e) {\n if (that._scrolling) {\n return;\n }\n var eventElement = $(e.target).closest(\".k-event\");\n var touchElement = $(e.touch.initialTouch);\n\n if (touchElement.hasClass(\"k-i-close\")) {\n that.trigger(\"remove\", { uid: eventElement.attr(kendo.attr(\"uid\")) });\n } else if (!eventElement.hasClass(\"k-event-active\")) {\n that.trigger(\"edit\", { uid: eventElement.attr(kendo.attr(\"uid\")) });\n }\n\n e.preventDefault();\n }\n });\n }\n },\n\n _layout: function(dates) {\n var columns = [];\n var rows = [];\n var options = this.options;\n var that = this;\n var byDate = that._isGroupedByDate();\n\n for (var idx = 0; idx < dates.length; idx++) {\n var column = {};\n\n column.text = that.dateHeaderTemplate({ date: dates[idx], isMobile: that._isMobile() });\n\n if (kendo.date.isToday(dates[idx])) {\n column.className = \"k-today\";\n }\n\n columns.push(column);\n }\n\n var resources = this.groupedResources;\n\n if (options.allDaySlot) {\n rows.push({\n text: options.messages.allDay, allDay: true,\n cellContent: function(idx) {\n var groupIndex = idx;\n\n idx = resources.length && that._groupOrientation() !== \"vertical\" ? idx % dates.length : idx;\n\n return that.allDaySlotTemplate({ date: dates[idx], resources: function() {\n return that._resourceBySlot({ groupIndex: groupIndex });\n }\n });\n }\n });\n }\n\n this._forTimeRange(this.startTime(), this.endTime(), function(date, majorTick, middleRow, lastSlotRow) {\n var template = majorTick ? that.majorTimeHeaderTemplate : that.minorTimeHeaderTemplate;\n\n var row = {\n text: template({ date: date }),\n className: lastSlotRow ? \"k-slot-cell\" : \"\"\n };\n\n rows.push(row);\n });\n\n\n if (resources.length) {\n if (this._groupOrientation() === \"vertical\") {\n if (byDate) {\n rows = this._createDateLayout(columns, rows);\n columns = this._createColumnsLayout(resources, null, this.groupHeaderTemplate);\n } else {\n rows = this._createRowsLayout(resources, rows, this.groupHeaderTemplate);\n }\n } else {\n if (byDate) {\n columns = this._createColumnsLayout(resources, columns, this.groupHeaderTemplate, columns);\n } else {\n columns = this._createColumnsLayout(resources, columns, this.groupHeaderTemplate);\n }\n }\n }\n\n return {\n columns: columns,\n rows: rows\n };\n },\n\n toggleFullDay: function() {\n var options = this.options;\n\n this.trigger(\"navigate\", { view: this.name || options.name, date: options.date, isWorkDay: !options.showWorkHours });\n },\n\n _footer: function() {\n var options = this.options;\n\n if (options.footer !== false) {\n var html = '\";\n\n this.footer = $(html).appendTo(this.element);\n\n var that = this;\n\n this.footer.on(\"click\" + NS, \".k-scheduler-fullday\", function(e) {\n e.preventDefault();\n that.toggleFullDay();\n });\n\n this.footer.on(\"click\" + NS, \".k-scheduler-today\", function(e) {\n e.preventDefault();\n var timezone = that.options.timezone;\n var action = \"today\";\n var currentDate = new Date();\n var date;\n\n if (timezone) {\n var timezoneOffset = kendo.timezone.offset(currentDate, timezone);\n date = kendo.timezone.convert(currentDate, currentDate.getTimezoneOffset(), timezoneOffset);\n } else {\n date = currentDate;\n }\n\n that.trigger(\"navigate\", { view: that.name || options.name, action: action, date: date });\n });\n }\n },\n\n _forTimeRange: function(min, max, action, after) {\n min = toInvariantTime(min); //convert the date to 1/2/1980 and sets the time\n max = toInvariantTime(max);\n\n var that = this,\n msMin = getMilliseconds(min),\n msMax = getMilliseconds(max),\n minorTickCount = that.options.minorTickCount,\n msMajorInterval = that.options.majorTick * MS_PER_MINUTE,\n msInterval = msMajorInterval / minorTickCount || 1,\n start = new Date(+min),\n startDay = start.getDate(),\n msStart,\n idx = 0, length,\n html = \"\";\n\n length = MS_PER_DAY / msInterval;\n\n if (msMin != msMax) {\n if (msMin > msMax) {\n msMax += MS_PER_DAY;\n }\n\n length = ((msMax - msMin) / msInterval);\n }\n\n length = Math.round(length);\n\n for (; idx < length; idx++) {\n var majorTickDivider = idx % (msMajorInterval / msInterval),\n isMajorTickRow = majorTickDivider === 0,\n isMiddleRow = majorTickDivider < minorTickCount - 1,\n isLastSlotRow = majorTickDivider === minorTickCount - 1;\n\n html += action(start, isMajorTickRow, isMiddleRow, isLastSlotRow);\n\n setTime(start, msInterval, false);\n }\n\n if (msMax) {\n msStart = getMilliseconds(start);\n if (startDay < start.getDate()) {\n msStart += MS_PER_DAY;\n }\n\n if (msStart > msMax) {\n start = new Date(+max);\n }\n }\n\n if (after) {\n html += after(start);\n }\n\n return html;\n },\n\n _content: function(dates) {\n var that = this;\n var html = '';\n\n html += '';\n\n html += that._renderRows(dates, that.rowLevels, that.columnLevels);\n\n html += '';\n\n this.content.find(\"table\").append(html);\n },\n\n _virtualContent: function(rowLevels, columnLevels) {\n var that = this;\n var html = '';\n var dates = that._dates;\n\n html += that._renderRows(dates, rowLevels, columnLevels);\n\n that.content.find(\"table tbody\").append(html);\n },\n\n _renderRows: function(dates, rowLevels, columnLevels) {\n var that = this;\n var isVerticalGroupped = that._groupOrientation() === \"vertical\";\n var byDate = that._isGroupedByDate();\n var dateID = 0;\n var columnCount = dates.length;\n var options = that.options;\n var start = that.startTime();\n var end = this.endTime();\n var groupsCount = 1;\n var rowCount = 1;\n var resources = this.groupedResources;\n var html = '';\n\n if (resources.length) {\n var levels = that._recalculateLevels(rowLevels, columnLevels);\n\n rowCount = levels.rowCount;\n groupsCount = levels.groupsCount;\n }\n\n var appendRow = function(date, majorTick, middleRow) {\n var content = \"\";\n var groupIdx = 0;\n var idx, length;\n\n content = '';\n\n if (byDate) {\n for (idx = 0, length = columnCount; idx < length; idx++) {\n for (groupIdx = 0; groupIdx < groupsCount; groupIdx++) {\n var dateIndex = idx;\n if (isVerticalGroupped) {\n dateIndex = dateID;\n }\n content = that._addCellsToContent(content, dates, date, dateIndex, groupIdx, rowIdx);\n\n }\n if (isVerticalGroupped) {\n\n break;\n }\n }\n } else {\n for (; groupIdx < groupsCount; groupIdx++) {\n for (idx = 0, length = columnCount; idx < length; idx++) {\n content = that._addCellsToContent(content, dates, date, idx, groupIdx, rowIdx);\n }\n }\n }\n\n content += \"\";\n\n return content;\n };\n\n for (var rowIdx = 0; rowIdx < rowCount; rowIdx++) {\n html += options.allDaySlot && isVerticalGroupped ? this._allDayVerticalGroupRow(dates, rowIdx, groupsCount, dateID) : \"\";\n\n html += this._forTimeRange(start, end, appendRow);\n if (isVerticalGroupped) {\n dateID++;\n }\n }\n\n return html;\n },\n\n _recalculateLevels: function(rowLevels, columnLevels) {\n var that = this;\n var byDate = that._isGroupedByDate();\n var isVerticalGroupped = that._groupOrientation() === \"vertical\";\n var groupsCount = 1;\n var rowCount = 1;\n\n if (isVerticalGroupped) {\n rowCount = that._rowCountForLevel(rowLevels.length - 2, rowLevels);\n\n if (byDate) {\n groupsCount = that._columnCountForLevel(columnLevels.length - 1);\n }\n } else {\n if (byDate) {\n groupsCount = that._columnCountForLevel(columnLevels.length - 1) / this._columnCountForLevel(0);\n } else {\n groupsCount = that._columnCountForLevel(columnLevels.length - 2);\n }\n }\n\n return {\n rowCount: rowCount,\n groupsCount: groupsCount\n };\n },\n\n _allDayVerticalGroupRow: function(dates, groupIndex, groupsCount, dateID) {\n var that = this;\n var result = '';\n var byDate = that._isGroupedByDate();\n var dateGroupIndex = byDate ? 0 : groupIndex;\n var allDaySlotTemplate = that.allDaySlotTemplate;\n\n var resources = function() {\n return that._resourceBySlot({ groupIndex: dateGroupIndex });\n };\n\n if (byDate) {\n for (; dateGroupIndex < groupsCount; dateGroupIndex++) {\n result += \"\" + allDaySlotTemplate({ date: dates[dateID], resources: resources }) + \"\";\n }\n } else {\n for (var idx = 0; idx < dates.length; idx++) {\n result += \"\" + allDaySlotTemplate({ date: dates[idx], resources: resources }) + \"\";\n }\n }\n\n return result + \"\";\n },\n\n _addCellsToContent: function(content, dates, date, idx, groupIdx, rowIdx) {\n var that = this;\n var classes = \"\";\n var tmplDate;\n var slotTemplate = this.slotTemplate;\n var isVerticalGroupped = this._groupOrientation() === \"vertical\";\n var resources = function(groupIndex) {\n return function() {\n return that._resourceBySlot({ groupIndex: groupIndex });\n };\n };\n\n if (kendo.date.isToday(dates[idx])) {\n classes += \"k-today\";\n }\n\n if (kendo.date.getMilliseconds(date) < kendo.date.getMilliseconds(this.options.workDayStart) ||\n kendo.date.getMilliseconds(date) >= kendo.date.getMilliseconds(this.options.workDayEnd) ||\n !this._isWorkDay(dates[idx])) {\n classes += \" k-nonwork-hour\";\n }\n\n content += '\";\n tmplDate = kendo.date.getDate(dates[idx]);\n kendo.date.setTime(tmplDate, kendo.date.getMilliseconds(date));\n\n content += slotTemplate({ date: tmplDate, resources: resources(isVerticalGroupped && !that._isGroupedByDate() ? rowIdx : groupIdx) });\n content += \"\";\n return content;\n },\n\n _isWorkDay: function(date) {\n var day = date.getDay();\n var workDays = this._workDays;\n\n for (var i = 0; i < workDays.length; i++) {\n if (workDays[i] === day) {\n return true;\n }\n }\n return false;\n },\n\n _render: function(dates) {\n var that = this;\n\n dates = dates || [];\n\n this._dates = dates;\n\n this._startDate = dates[0];\n\n this._endDate = dates[(dates.length - 1) || 0];\n\n this.createLayout(this._layout(dates));\n\n this._content(dates);\n\n this._footer();\n\n this.refreshLayout();\n\n if (this._isVirtualized()) {\n this._tryRenderContent();\n }\n\n var allDayHeader = this.element.find(\".k-scheduler-header-all-day td\");\n\n if (allDayHeader.length) {\n this._allDayHeaderHeight = allDayHeader.first()[0].clientHeight;\n }\n\n that.element.on(\"click\" + NS, \".k-nav-day\", function(e) {\n var th = $(e.currentTarget).closest(\"th\");\n var offset = th.offset();\n var additioanlWidth = 0;\n var additionalHeight = outerHeight(th);\n\n if (that._isGroupedByDate()) {\n if (that._isVerticallyGrouped()) {\n additioanlWidth = outerWidth(that.times);\n additionalHeight = 0;\n } else {\n additionalHeight = outerHeight(that.datesHeader);\n }\n }\n\n var slot = that._slotByPosition(offset.left + additioanlWidth, offset.top + additionalHeight);\n\n that.trigger(\"navigate\", { view: \"day\", date: slot.startDate() });\n });\n },\n\n startTime: function() {\n var options = this.options;\n return options.showWorkHours ? options.workDayStart : options.startTime;\n },\n\n endTime: function() {\n var options = this.options;\n return options.showWorkHours ? options.workDayEnd : options.endTime;\n },\n\n startDate: function() {\n return this._startDate;\n },\n\n endDate: function() {\n return this._endDate;\n },\n\n _end: function(isAllDay) {\n var time = getMilliseconds(this.endTime()) || MS_PER_DAY;\n\n if (isAllDay) {\n time = 0;\n }\n\n return new Date(this._endDate.getTime() + time);\n },\n\n nextDate: function() {\n return kendo.date.nextDay(this.endDate());\n },\n\n previousDate: function() {\n return kendo.date.previousDay(this.startDate());\n },\n\n calculateDateRange: function() {\n this._render([this.options.date]);\n },\n\n destroy: function() {\n var that = this;\n\n if (that._currentTimeUpdateTimer) {\n clearInterval(that._currentTimeUpdateTimer);\n }\n\n if (that.datesHeader) {\n that.datesHeader.off(NS);\n }\n\n if (that.element) {\n that.element.off(NS);\n }\n\n if (that.footer) {\n that.footer.remove();\n }\n\n SchedulerView.fn.destroy.call(this);\n\n if (this._isMobile() && that.options.editable) {\n if (that.options.editable.create !== false) {\n that._addUserEvents.destroy();\n that._allDayUserEvents.destroy();\n }\n\n if (that.options.editable.update !== false) {\n that._editUserEvents.destroy();\n }\n }\n },\n\n inRange: function(options) {\n var inRange = SchedulerView.fn.inRange.call(this, options);\n\n if (options.isAllDay) {\n return inRange;\n }\n\n var startTime = getMilliseconds(this.startTime());\n var endTime = getMilliseconds(this.endTime()) || kendo.date.MS_PER_DAY;\n\n var start = getMilliseconds(options.start);\n var end = getMilliseconds(options.end) || kendo.date.MS_PER_DAY;\n\n return inRange && startTime <= start && end <= endTime;\n },\n\n selectionByElement: function(cell) {\n var offset = cell.offset();\n // The magical number 5 is to buffer properly the height of the cell for all browsers\n var height = Math.round(cell.innerHeight()) - 5;\n\n return this._slotByPosition(offset.left, offset.top + height);\n },\n\n _timeSlotInterval: function() {\n var options = this.options;\n return (options.majorTick / options.minorTickCount) * MS_PER_MINUTE;\n },\n\n _timeSlotIndex: function(date) {\n var options = this.options;\n var eventStartTime = getMilliseconds(date);\n var startTime = getMilliseconds(this.startTime());\n var timeSlotInterval = ((options.majorTick / options.minorTickCount) * MS_PER_MINUTE);\n\n return (eventStartTime - startTime) / (timeSlotInterval);\n },\n\n _slotIndex: function(date, multiday) {\n if (multiday) {\n return this._dateSlotIndex(date);\n }\n\n return this._timeSlotIndex(date);\n },\n\n _dateSlotIndex: function(date, overlaps) {\n var idx;\n var length;\n var slots = this._dates || [];\n var slotStart;\n var slotEnd;\n var offset = 1;\n\n for (idx = 0, length = slots.length; idx < length; idx++) {\n slotStart = kendo.date.getDate(slots[idx]);\n slotEnd = new Date(kendo.date.getDate(slots[idx]).getTime() + MS_PER_DAY - (overlaps ? 0 : 1));\n\n if (isInDateRange(date, slotStart, slotEnd)) {\n return idx * offset;\n }\n }\n return -1;\n },\n\n _positionAllDayEvent: function(element, slotRange) {\n var slotWidth = slotRange.innerWidth();\n var startIndex = slotRange.start.index;\n var endIndex = slotRange.end.index;\n\n var allDayEvents = SchedulerView.collidingEvents(slotRange.events(), startIndex, endIndex);\n\n var currentColumnCount = this._headerColumnCount || 0;\n\n var leftOffset = 2;\n\n var rightOffset = startIndex !== endIndex ? 3 : 2;\n\n var eventHeight = this._allDayHeaderHeight;\n\n var start = slotRange.startSlot();\n\n element\n .css({\n left: start.offsetLeft + leftOffset,\n width: slotWidth - rightOffset\n });\n\n slotRange.addEvent({ slotIndex: startIndex, start: startIndex, end: endIndex, element: element });\n\n allDayEvents.push({ slotIndex: startIndex, start: startIndex, end: endIndex, element: element });\n\n var rows = SchedulerView.createRows(allDayEvents);\n\n if (rows.length && rows.length > currentColumnCount) {\n this._headerColumnCount = rows.length;\n }\n\n var top = slotRange.start.offsetTop;\n\n for (var idx = 0, length = rows.length; idx < length; idx++) {\n var rowEvents = rows[idx].events;\n\n for (var j = 0, eventLength = rowEvents.length; j < eventLength; j++) {\n $(rowEvents[j].element).css({\n top: top + idx * eventHeight,\n // apply calculated height.\n // -2 is to match normal events\n height: eventHeight - 2\n });\n }\n }\n },\n\n _arrangeColumns: function(element, top, height, slotRange) {\n var startSlot = slotRange.start;\n\n element = { element: element, slotIndex: startSlot.index, start: top, end: top + height };\n\n var columns,\n slotWidth = startSlot.clientWidth,\n eventRightOffset = slotWidth * 0.10,\n columnEvents,\n eventElements = slotRange.events(),\n slotEvents = SchedulerView.collidingEvents(eventElements, element.start, element.end),\n tableEl = this.table.find(\".k-scheduler-content .k-scheduler-table\")[0],\n contentEl = this.table.find(\".k-scheduler-content\")[0];\n\n slotRange.addEvent(element);\n\n slotEvents.push(element);\n\n columns = SchedulerView.createColumns(slotEvents);\n\n var columnWidth = (slotWidth - eventRightOffset) / columns.length;\n\n for (var idx = 0, length = columns.length; idx < length; idx++) {\n columnEvents = columns[idx].events;\n\n for (var j = 0, eventLength = columnEvents.length; j < eventLength; j++) {\n var calculatedWidth = columnWidth - 2;\n columnEvents[j].element[0].style.width = (calculatedWidth > 0 ? calculatedWidth : columnWidth) + \"px\";\n\n if (this._isRtl && contentEl.clientWidth < contentEl.scrollWidth) {\n // RTL mobile rendering with horizontal scroll\n columnEvents[j].element[0].style.left = eventRightOffset +\n startSlot.offsetLeft +\n idx * columnWidth -\n (tableEl.clientWidth - contentEl.clientWidth) +\n \"px\";\n } else {\n columnEvents[j].element[0].style.left = (this._isRtl ? eventRightOffset : 0) + startSlot.offsetLeft + idx * columnWidth + 2 + \"px\";\n }\n }\n }\n },\n\n _positionEvent: function(event, element, slotRange) {\n var start = event._startTime || event.start;\n var end = event._endTime || event.end;\n var borderWidths = kendo.getComputedStyles(slotRange.start.element, [\"border-top-width\", \"border-bottom-width\"]);\n\n var rect = slotRange.innerRect(start, end, false);\n\n var height = rect.bottom - rect.top -\n parseFloat(borderWidths[\"border-top-width\"]) -\n parseFloat(borderWidths[\"border-bottom-width\"]);\n\n if (height < 0) {\n height = 0;\n }\n\n element.css( {\n top: rect.top,\n height: height\n } );\n\n this._arrangeColumns(element, rect.top, element[0].clientHeight, slotRange);\n },\n\n _createEventElement: function(event, isOneDayEvent, head, tail) {\n var template = isOneDayEvent ? this.eventTemplate : this.allDayEventTemplate;\n var options = this.options;\n var editable = options.editable;\n var isMobile = this._isMobile();\n var showDelete = editable && editable.destroy !== false && !isMobile;\n var resizable = editable && editable.resize !== false;\n var startDate = getDate(this.startDate());\n var endDate = getDate(this.endDate());\n var startTime = getMilliseconds(this.startTime());\n var endTime = getMilliseconds(this.endTime());\n var eventStartTime = event._time(\"start\");\n var eventEndTime = event._time(\"end\");\n var middle;\n\n if (startTime >= endTime) {\n endTime = getMilliseconds(new Date(this.endTime().getTime() + MS_PER_DAY - 1));\n }\n\n if (!isOneDayEvent && !event.isAllDay) {\n endDate = new Date(endDate.getTime() + MS_PER_DAY);\n }\n\n var eventStartDate = event.start;\n var eventEndDate = event.end;\n\n if (event.isAllDay) {\n eventEndDate = getDate(event.end);\n }\n if ((!isInDateRange(getDate(eventStartDate), startDate, endDate) &&\n !isInDateRange(eventEndDate, startDate, endDate)) ||\n (isOneDayEvent &&\n event.start.getTime() !== event.end.getTime() &&\n (eventStartTime < startTime || eventStartTime >= endTime) &&\n (eventEndTime > endTime || eventEndTime <= startTime ))) {\n\n middle = true;\n } else if (getDate(eventStartDate) < startDate ||\n (isOneDayEvent &&\n eventStartTime !== 0 &&\n event.start.getTime() !== event.end.getTime() &&\n (eventStartTime < startTime || eventStartTime >= endTime))) {\n\n tail = true;\n } else if ((eventEndDate > endDate && !isOneDayEvent) ||\n (isOneDayEvent &&\n eventEndTime !== 0 &&\n event.start.getTime() !== event.end.getTime() &&\n (eventEndTime > endTime || eventEndTime <= startTime))) {\n\n head = true;\n }\n\n var resources = this.eventResources(event);\n\n if (event._startTime && eventStartTime !== kendo.date.getMilliseconds(event.start)) {\n eventStartDate = new Date(eventStartTime);\n eventStartDate = kendo.timezone.apply(eventStartDate, \"Etc/UTC\");\n }\n\n if (event._endTime && eventEndTime !== kendo.date.getMilliseconds(event.end)) {\n eventEndDate = new Date(eventEndTime);\n eventEndDate = kendo.timezone.apply(eventEndDate, \"Etc/UTC\");\n }\n\n var data = extend({}, {\n ns: kendo.ns,\n resizable: resizable,\n showDelete: showDelete,\n middle: middle,\n head: head,\n tail: tail,\n singleDay: this._dates.length == 1,\n resources: resources,\n inverseColor: false,\n messages: options.messages,\n ariaLabel: this._formatEventAriaLabel(event.title, eventStartDate, eventEndDate, event.isAllDay)\n }, event, {\n start: eventStartDate,\n end: eventEndDate\n });\n\n var element = $(template(data));\n\n this.angular(\"compile\", function() {\n return {\n elements: element,\n data: [ { dataItem: data } ]\n };\n });\n\n return element;\n },\n\n _isInTimeSlot: function(event) {\n var slotStartTime = this.startTime(),\n slotEndTime = this.endTime(),\n startTime = event._startTime || event.start,\n endTime = event._endTime || event.end;\n\n if (getMilliseconds(slotEndTime) === getMilliseconds(kendo.date.getDate(slotEndTime))) {\n slotEndTime = kendo.date.getDate(slotEndTime);\n setTime(slotEndTime, MS_PER_DAY - 1);\n }\n\n if (event._date(\"end\") > event._date(\"start\")) {\n endTime = +event._date(\"end\") + (MS_PER_DAY - 1);\n }\n\n endTime = event._endTime ? endTime - event._date(\"end\") : getMilliseconds(new Date(endTime));\n startTime = event._startTime ? startTime - event._date(\"start\") : getMilliseconds(new Date(startTime));\n\n slotEndTime = getMilliseconds(slotEndTime);\n slotStartTime = getMilliseconds(slotStartTime);\n\n if (slotStartTime === startTime && startTime === endTime) {\n return true;\n }\n\n var overlaps = startTime !== slotEndTime;\n\n return isInTimeRange(startTime, slotStartTime, slotEndTime, overlaps) ||\n isInTimeRange(endTime, slotStartTime, slotEndTime, overlaps) ||\n isInTimeRange(slotStartTime, startTime, endTime) ||\n isInTimeRange(slotEndTime, startTime, endTime) ||\n (event.end.getDate() > event.start.getDate() && endTime > slotStartTime);\n },\n\n _isInDateSlot: function(event) {\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 _updateAllDayHeaderHeight: function(height) {\n if (this._height !== height) {\n this._height = height;\n\n var allDaySlots = this.element.find(\".k-scheduler-header-all-day td\");\n\n if (allDaySlots.length) {\n allDaySlots.parent()\n .add(this.element.find(\".k-scheduler-times-all-day\").parent())\n .height(height);\n\n for (var groupIndex = 0; groupIndex < this.groups.length; groupIndex++) {\n this.groups[groupIndex].refresh();\n }\n }\n }\n },\n\n _renderEvents: function(events, groupIndex) {\n var allDayEventContainer = this.datesHeader.find(\".k-scheduler-header-wrap > div\");\n var byDate = this._isGroupedByDate();\n var event;\n\n var idx;\n var length;\n\n for (idx = 0, length = events.length; idx < length; idx++) {\n event = events[idx];\n\n if (this._isInDateSlot(event)) {\n var isMultiDayEvent, container, element, ranges, range, start, end, group;\n\n if (this.options.enforceAllDaySlot) {\n isMultiDayEvent = event.isAllDay || event.duration() >= MS_PER_DAY;\n } else {\n isMultiDayEvent = event.isAllDay;\n }\n\n container = isMultiDayEvent && !this._isVerticallyGrouped() ? allDayEventContainer : this.content;\n\n if (!isMultiDayEvent) {\n if (this._isInTimeSlot(event)) {\n group = this.groups[groupIndex];\n\n if (!group) {\n continue;\n }\n\n if (!group._continuousEvents) {\n group._continuousEvents = [];\n }\n\n ranges = group.slotRanges(event);\n\n var rangeCount = ranges.length;\n\n for (var rangeIndex = 0; rangeIndex < rangeCount; rangeIndex++) {\n range = ranges[rangeIndex];\n start = event.start;\n end = event.end;\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, _startTime: event._startTime, _endTime: event.endTime });\n\n if (this._isInTimeSlot(occurrence)) {\n var head = range.head;\n\n element = this._createEventElement(event, !isMultiDayEvent, head, range.tail);\n\n element.appendTo(container);\n\n this._inverseEventColor(element);\n\n this._positionEvent(occurrence, element, range);\n\n addContinuousEvent(group, range, element, false);\n }\n }\n }\n\n } else if (this.options.allDaySlot) {\n group = this.groups[groupIndex];\n\n if (!group) {\n continue;\n }\n\n if (!group._continuousEvents) {\n group._continuousEvents = [];\n }\n\n ranges = group.slotRanges(event);\n\n if (ranges.length) {\n range = ranges[0];\n var startIndex = range.start.index;\n var endIndex = range.end.index;\n\n if (byDate && startIndex !== endIndex) {\n start = range.start.start;\n end = range.end.end;\n var newStart = start;\n var newEnd = start;\n\n for (var i = range.start.index; i <= range.end.index; i++) {\n element = this._createEventElement(event, !isMultiDayEvent, i !== endIndex, i !== startIndex);\n\n var dateRange = group.daySlotRanges(newStart, newEnd, true)[0];\n newStart = newEnd += kendo.date.MS_PER_DAY;\n\n this._positionAllDayEvent(element, dateRange);\n\n addContinuousEvent(group, dateRange, element, true);\n\n element.appendTo(container);\n\n this._inverseEventColor(element);\n }\n } else {\n element = this._createEventElement(event, !isMultiDayEvent);\n\n this._positionAllDayEvent(element, ranges[0]);\n\n addContinuousEvent(group, ranges[0], element, true);\n\n element.appendTo(container);\n\n this._inverseEventColor(element);\n }\n }\n }\n }\n }\n },\n\n render: function(events) {\n var that = this;\n\n this._headerColumnCount = 0;\n\n this._cachedEvents = events;\n\n this._groups();\n\n this.element.find(\".k-event\").remove();\n\n events = new kendo.data.Query(events)\n .sort([{ field: \"start\", dir: \"asc\" },{ field: \"end\", dir: \"desc\" }])\n .toArray();\n\n var eventsByResource = [];\n\n this._eventsByResource(events, this.groupedResources, eventsByResource);\n\n var eventsPerDate = $.map(this._dates, function(date) {\n return Math.max.apply(null,\n $.map(eventsByResource, function(events) {\n return $.grep(events, function(event) {\n if (that.options.enforceAllDaySlot) {\n return event.isMultiDay() && isInDateRange(date, getDate(event.start), getDate(event.end));\n } else {\n return event.isAllDay && isInDateRange(date, getDate(event.start), getDate(event.end));\n }\n }).length;\n })\n );\n });\n\n var height = Math.max.apply(null, eventsPerDate);\n\n this._updateAllDayHeaderHeight((height + 1) * this._allDayHeaderHeight);\n\n for (var groupIndex = 0; groupIndex < eventsByResource.length; groupIndex++) {\n this._renderEvents(eventsByResource[groupIndex], groupIndex);\n }\n\n this.refreshLayout();\n\n this._currentTime(false);\n\n this.trigger(\"activate\");\n },\n\n _eventsByResource: function(events, resources, result, 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$1 || itemParentValue === parentValue;\n });\n\n for (var itemIdx = 0; itemIdx < view.length; itemIdx++) {\n var value = this._resourceValue(resource, view[itemIdx]);\n\n var eventsFilteredByResource = new kendo.data.Query(events).filter({ field: resource.field, operator: SchedulerView.groupEqFilter(value) }).toArray();\n\n if (resources.length > 1) {\n this._eventsByResource(eventsFilteredByResource, resources.slice(1), result, value);\n } else {\n result.push(eventsFilteredByResource);\n }\n }\n } else {\n result.push(events);\n }\n },\n\n _columnOffsetForResource: function(index) {\n return this._columnCountForLevel(index) / this._columnCountForLevel(index - 1);\n },\n\n _columnCountForLevel: function(level) {\n var columnLevel = this.columnLevels[level];\n return columnLevel ? columnLevel.length : 0;\n },\n\n _rowCountForLevel: function(level, rowLevels) {\n rowLevels = rowLevels || this.rowLevels;\n var rowLevel = rowLevels[level];\n return rowLevel ? rowLevel.length : 0;\n },\n\n clearSelection: function() {\n\n this.content.add(this.datesHeader)\n .find(\".k-selected\")\n .removeAttr(\"id\")\n .removeClass(\"k-selected\");\n },\n\n _updateDirection: function(selection, ranges, multiple, reverse, vertical) {\n var isDaySlot = selection.isAllDay;\n var startSlot = ranges[0].start;\n var endSlot = ranges[ranges.length - 1].end;\n\n if (multiple) {\n if (vertical) {\n if (!isDaySlot &&\n startSlot.index === endSlot.index &&\n startSlot.collectionIndex === endSlot.collectionIndex) {\n selection.backward = reverse;\n }\n } else {\n if ((isDaySlot && startSlot.index === endSlot.index) ||\n (!isDaySlot && startSlot.collectionIndex === endSlot.collectionIndex)) {\n selection.backward = reverse;\n }\n }\n }\n },\n\n _changeViewPeriod: function(selection, reverse, vertical) {\n if (!vertical) {\n var date = reverse ? this.previousDate() : this.nextDate();\n var start = selection.start;\n var end = selection.end;\n var verticalByDate = this._isGroupedByDate() && this._isVerticallyGrouped();\n var group = this.groups[selection.groupIndex];\n var collection = reverse ? group._timeSlotCollections : group._getCollections(group.daySlotCollectionCount());\n var slots = collection[collection.length - 1]._slots;\n var slotIndex = (!reverse && !group.daySlotCollectionCount()) ? 0 : slots.length - 1;\n var endMilliseconds;\n var newDateStart, newDateEnd;\n\n newDateStart = new Date(date);\n newDateEnd = new Date(date);\n\n if (this._isInRange(newDateStart, newDateEnd)) {\n return false;\n }\n\n selection.start = newDateStart;\n selection.end = newDateEnd;\n\n if (verticalByDate) {\n var newStart = new Date(slots[slotIndex].startDate());\n var newEnd = new Date(slots[slotIndex].endDate());\n endMilliseconds = getMilliseconds(newEnd) ? getMilliseconds(newEnd) : MS_PER_DAY;\n\n setTime(selection.start, getMilliseconds(newStart));\n setTime(selection.end, endMilliseconds);\n if (group.daySlotCollectionCount()) {\n selection.isAllDay = !selection.isAllDay;\n }\n } else {\n endMilliseconds = (selection.isAllDay || !getMilliseconds(end)) ? MS_PER_DAY : getMilliseconds(end);\n\n setTime(selection.start, getMilliseconds(start));\n setTime(selection.end, endMilliseconds);\n }\n\n if (!this._isVerticallyGrouped()) {\n selection.groupIndex = reverse ? this.groups.length - 1 : 0;\n }\n\n selection.events = [];\n\n return true;\n }\n }\n });\n\n extend(true, ui, {\n MultiDayView: MultiDayView,\n DayView: MultiDayView.extend({\n options: {\n name: \"DayView\",\n title: \"Day\",\n selectedMobileDateFormat: \"{0:MMM d}\"\n },\n name: \"day\"\n }),\n WeekView: MultiDayView.extend({\n options: {\n name: \"WeekView\",\n title: \"Week\",\n selectedDateFormat: \"{0:D} - {1:D}\",\n selectedShortDateFormat: \"{0:d} - {1:d}\"\n },\n name: \"week\",\n calculateDateRange: function() {\n var selectedDate = this.options.date,\n start = kendo.date.dayOfWeek(selectedDate, this.calendarInfo().firstDay, -1),\n idx, length,\n dates = [];\n\n for (idx = 0, length = 7; idx < length; idx++) {\n dates.push(start);\n start = kendo.date.nextDay(start);\n }\n this._render(dates);\n }\n }),\n WorkWeekView: MultiDayView.extend({\n options: {\n name: \"WorkWeekView\",\n title: \"Work Week\",\n selectedDateFormat: \"{0:D} - {1:D}\",\n selectedShortDateFormat: \"{0:d} - {1:d}\"\n },\n name: \"workWeek\",\n nextDate: function() {\n var weekStart = kendo.date.dayOfWeek(kendo.date.nextDay(this.startDate()), this.calendarInfo().firstDay, 1);\n return kendo.date.addDays(weekStart, this._workDays[0]);\n },\n previousDate: function() {\n var weekStart = kendo.date.dayOfWeek(this.startDate(), this.calendarInfo().firstDay, -1);\n var workDays = this._workDays;\n\n return kendo.date.addDays(weekStart, workDays[workDays.length - 1] - 7);\n },\n calculateDateRange: function() {\n var options = this.options,\n selectedDate = options.date,\n dayOfWeek = kendo.date.dayOfWeek,\n weekStart = dayOfWeek(selectedDate, this.calendarInfo().firstDay, -1),\n start = dayOfWeek(weekStart, options.workWeekStart, 1),\n end = dayOfWeek(start, options.workWeekEnd, 1),\n dates = [],\n workDays = (options.workDays && options.workDays.length) ? options.workDays.map(function(day) {\n return dayOfWeek(weekStart, day, 1).getTime();\n }) : null;\n\n if (workDays) {\n start = weekStart;\n end = dayOfWeek(start, this.calendarInfo().firstDay + 6, 1);\n }\n\n while (start <= end) {\n if (workDays && workDays.indexOf(start.getTime()) > -1) {\n dates.push(start);\n } else if (!workDays) {\n dates.push(start);\n }\n\n start = kendo.date.nextDay(start);\n }\n\n this._render(dates);\n }\n })\n });\n\n })(window.kendo.jQuery);\n\n}));\n"]}