{"version":3,"file":"kendo.scheduler.timelineview.min.js","names":["global","factory","exports","module","require","define","amd","globalThis","self","kendoscheduler","timelineview","js","this","$","undefined$1","kendo","window","ui","setTime","date","SchedulerView","outerWidth","_outerWidth","outerHeight","_outerHeight","extend","encode","htmlEncode","getDate","getMilliseconds","MS_PER_DAY","MS_PER_MINUTE","CURRENT_TIME_MARKER_CLASS","CURRENT_TIME_MARKER_ARROW_CLASS","SCHEDULER_HEADER_WRAP_CLASS","INVERSE_COLOR_CLASS","BORDER_SIZE_COEFF","DOT","NS","EVENT_TEMPLATE","template","title","start","end","format","DATA_HEADER_TEMPLATE","EVENT_WRAPPER_TEMPLATE","task","ariaLabel","ns","uid","resources","attr","color","tail","icon","isException","isRecurring","showDelete","messages","destroy","head","resizable","toInvariantTime","staticDate","Date","setColspan","columnLevel","count","columns","i","length","colspan","TimelineGroupedView","Class","init","view","_view","_getTimeSlotByPosition","x","y","groupIndex","groups","timeSlotByPosition","_hideHeaders","timesHeader","find","last","hide","datesHeader","_setColspan","timeColumn","_createRowsLayout","rows","groupHeaderTemplate","_createVerticalColumnsLayout","_createColumnsLayout","_getRowCount","_groupCount","_getGroupsCount","_addContent","dates","columnCount","groupsCount","rowCount","slotTemplate","isVerticalGrouped","html","options","appendRow","tmplDate","content","classes","isToday","idx","workDayStart","workDayEnd","_isWorkDay","rowIdx","groupIdx","_resourceBySlot","_forTimeRange","_addTimeSlotsCollections","groupCount","datesCount","tableRows","interval","isVerticallyGrouped","Math","floor","time","rowMultiplier","group","cellMultiplier","cells","children","cellsPerGroup","cellsPerDay","dateIndex","cellOffset","startTime","cellIndex","_addTimeSlotToCollection","_getVerticalGroupCount","_getVerticalRowCount","eventGroups","maxRowCount","_isVerticallyGrouped","_renderEvent","eventGroup","event","adjustedEvent","range","container","element","_createEventElement","occurrence","appendTo","css","top","height","eventHeight","eventObject","_startTime","_endTime","slotRange","rowIndex","offsetTop","events","_inverseEventColor","addContinuousEvent","isAllDay","_arrangeRows","_verticalCountForLevel","level","_rowCountForLevel","_horizontalCountForLevel","_columnCountForLevel","_updateCurrentVerticalTimeMarker","ranges","currentTime","elementHtml","headerWrap","left","round","innerRect","getTime","timesTableMarker","prependTo","addClass","_adjustLeftPosition","prev","position","width","scrollHeight","_changeGroup","_prevGroupSlot","slot","isDay","_collection","_nextGroupSlot","first","_verticalSlots","selection","reverse","_verticalMethod","_normalizeVerticalSelection","_horizontalSlots","method","startSlot","endSlot","multiple","result","_isHorizontallyGrouped","_changeVerticalViewPeriod","_changeHorizontalViewPeriod","slots","shift","_changeViewPeriod","_updateDirection","_createMoveHint","hint","rect","snap","right","offsetHeight","inverseColor","_appendMoveHint","_isRtl","scrollWidth","clientWidth","TimelineGroupedByDateView","times","eq","_createDateLayout","subColumns","isMajorTickColumn","isMiddleColumn","isLastSlotColumn","minorTickColumns","workDateIndex","tempStart","minorTickCount","msInterval","majorTick","_dates","startIndex","endIndex","eventObjects","index","currentSlot","_timeSlotCollections","_slots","dateRange","timeSlotRanges","push","firstTimesCell","lastTimesCell","markerTopPosition","timesTableMarkerCss","previous","_changeDate","collections","_getCollections","tempSlot","startEnd","slotIdx","collection","offsetLeft","offsetWidth","scheduler","TimelineView","that","zeroWidthEvent","document","body","fn","call","_zeroWidthEventOffset","remove","_groupedView","_getGroupedView","name","_workDays","workDays","dayIndex","workWeekStart","workWeekEnd","abs","getWorkDays","_templates","_editable","calculateDateRange","_groups","_currentTime","_isVirtualized","_isGroupedByDate","_getNextEventIndexBySlot","sortedEvents","tempIndex","startDate","_getSelectedSlot","pad","_getSortedEvents","uniqueAllEvents","sort","second","isDaySlot","_currentTimeMarkerUpdater","_updateCurrentTimeMarker","_scrollTo","elementOffset","elementOffsetDir","containerScroll","scrollLeft","containerOffsetDir","rightDistance","_isInDateSlot","currentTimeMarker","useLocalTimezone","timezone","dataSource","schema","timezoneOffset","offset","convert","getTimezoneOffset","orientation","currentGroup","utcCurrentTime","toUtcTime","slotByStartDate","setUpdateTimer","markerOptions","updateInterval","_currentTimeUpdateTimer","setInterval","bind","editable","_isMobile","_touchEditable","_mouseEditable","on","e","trigger","closest","preventDefault","create","_slotByPosition","pageX","pageY","resourceInfo","eventInfo","endDate","update","threshold","support","mobileOS","android","_addUserEvents","UserEvents","useClickAsTap","browser","edge","filter","tap","_scrolling","location","_editUserEvents","eventElement","target","touch","initialTouch","is","hasClass","mozilla","webkit","version","msie","scrollTop","ceil","selectedDateFormat","selectedShortDateFormat","selectedMobileDateFormat","today","endTime","showWorkHours","eventMinWidth","columnWidth","text","majorTimeHeaderTemplate","toString","eventTemplate","dateHeaderTemplate","footer","command","ongoingEvents","cssClass","enabled","defaultRowText","showFullDay","showWorkDay","settings","Template","templateSettings","_render","_startDate","_endDate","_calculateSlotRanges","createLayout","_layout","_content","_footer","_setContentWidth","refreshLayout","th","currentTarget","contentWidth","contentTable","minWidth","calculatedWidth","add","slotStartTime","slotEndTime","slotRanges","rangeStart","rangeEnd","_slotRanges","min","max","action","verticalByDate","msMin","msMax","msMajorInterval","majorTickDivider","timeColumns","groupedView","minorTickSlots","minorTickIndex","className","minorTicks","middleColumn","lastSlotColumn","minorSlotsCount","slice","groupedResources","_groupOrientation","_footerItems","items","_defaultTools","todayMobile","fulldayMobile","fulldayDesktop","toggleFullDay","isWorkDay","columnLevels","rowLevel","rowLevels","day","getDay","append","_addResourceView","addTimeSlotCollection","addDays","_timeSlotGroups","_timeSlotInterval","cell","getTimeSlotCollection","currentDate","UTC","getFullYear","getMonth","addTimeSlot","visibleEndDate","nextDate","nextDay","previousDate","previousDay","render","_headerColumnCount","data","Query","field","dir","toArray","eventsByResource","_eventsByResource","_renderEvents","_setRowsHeight","_positionEvents","_ongoingEvents","eventsForGroup","eventUid","Array","isArray","eventIndex","_positionEvent","eventBottomOffset","_getBottomRowOffset","verticalGroupCount","rowsCount","rowHeight","timesRow","row","_refreshSlots","minOffset","maxOffset","slotsCollection","lastSlot","offsetRight","refresh","parentValue","resource","item","itemParentValue","getter","dataParentValueField","itemIdx","value","_resourceValue","eventsFilteredByResource","operator","groupEqFilter","_isInTimeSlot","slotIndex","_adjustEvent","eventStartTime","_time","eventEndTime","adjustedStartDate","adjustedEndDate","clone","isMultiDayEvent","duration","_continuousEvents","isMobile","resize","eventStartDate","eventEndDate","eventResources","apply","singleDay","_formatEventAriaLabel","applyStylesFromKendoAttributes","rectRight","collidingEvents","addEvent","slotIndexEnd","zeroWidthEventOffset","rectLeft","createRows","rowEvents","j","eventLength","_updateEventForSelection","_eventOptionsForMove","_updateEventForResize","set","_updateMoveHint","distance","clonedEvent","eventDuraton","_removeMoveHint","rangeIndex","_moveHint","_updateResizeHint","_removeResizeHint","startRect","_createResizeHint","_resizeHint","toLocalDate","selectionByElement","vertical","collectionIndex","backward","prevGroupSlot","nextGroupSlot","newStart","newEnd","_isInRange","move","key","handled","keys","DOWN","UP","LEFT","RIGHT","off","clearInterval","groupOptions","passedChildren","numberOfChildren","resourceIndex","levels","groupLevel","groupLevelMember","_setResourceValue","TimelineWeekView","selectedDate","dayOfWeek","calendarInfo","firstDay","TimelineWorkWeekView","weekStart","map","indexOf","TimelineMonthView","firstDayOfMonth","lastDayOfMonth","jQuery"],"sources":["kendo.scheduler.timelineview.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.timelineview = global.kendoscheduler.timelineview || {}, global.kendoscheduler.timelineview.js = factory()));\n})(this, (function () {\n var __meta__ = {\n id: \"scheduler.timelineview\",\n name: \"Scheduler Timeline View\",\n category: \"web\",\n description: \"The Scheduler Timeline View\",\n depends: [ \"scheduler.view\", \"icons\" ],\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 encode = kendo.htmlEncode,\n getDate = kendo.date.getDate,\n getMilliseconds = kendo.date.getMilliseconds,\n MS_PER_DAY = kendo.date.MS_PER_DAY,\n MS_PER_MINUTE = kendo.date.MS_PER_MINUTE,\n CURRENT_TIME_MARKER_CLASS = \"k-current-time\",\n CURRENT_TIME_MARKER_ARROW_CLASS = \"k-current-time-arrow\",\n SCHEDULER_HEADER_WRAP_CLASS = \"k-scheduler-header-wrap\",\n INVERSE_COLOR_CLASS = \"k-event-inverse\",\n BORDER_SIZE_COEFF = 0.8666,\n DOT = \".\",\n NS = \".kendoTimelineView\";\n\n var EVENT_TEMPLATE = kendo.template(({ title, start, end }) =>'
' +\n `
${encode(kendo.format(\"{0:t} - {1:t}\", start, end))}
` +\n `
${title}
`),\n DATA_HEADER_TEMPLATE = kendo.template(({ date }) => `${kendo.format('{0:m}', date)}`),\n EVENT_WRAPPER_TEMPLATE = (task) =>\n `
` : 'class=\"k-event\">'}` +\n '' +\n `${task.tail ? 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 ? kendo.ui.icon(\"caret-alt-right\") : ''}` +\n '' +\n `${task.resizable && !task.tail ? '' : ''}` +\n `${task.resizable && !task.head ? '' : ''}` +\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 createZeroWidthEvent() {\n return $(\"
\").appendTo(document.body);\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 function setColspan(columnLevel) {\n var count = 0;\n if (columnLevel.columns) {\n for (var i = 0; i < columnLevel.columns.length; i++) {\n count += setColspan(columnLevel.columns[i]);\n }\n columnLevel.colspan = count;\n return count;\n } else {\n columnLevel.colspan = 1;\n return 1;\n }\n }\n\n var TimelineGroupedView = kendo.Class.extend({\n init: function(view) {\n this._view = view;\n },\n\n _getTimeSlotByPosition: function(x, y, groupIndex) {\n var group = this._view.groups[groupIndex];\n\n return group.timeSlotByPosition(x, y);\n },\n\n _hideHeaders: function() {\n var view = this._view;\n\n view.timesHeader.find(\"table tr\").last().hide(); /*Chrome fix, use CSS selector*/\n view.datesHeader.find(\"table tr\").last().hide();\n },\n\n _setColspan: function(timeColumn) {\n setColspan(timeColumn);\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 _getRowCount: function() {\n var view = this._view;\n\n return view._groupCount();\n },\n\n _getGroupsCount: function() {\n return 1;\n },\n\n _addContent: function(dates, columnCount, groupsCount, rowCount, start, end, slotTemplate, isVerticalGrouped) {\n var view = this._view;\n var html = '';\n var options = view.options;\n\n var appendRow = function(date) {\n var content = \"\";\n var classes = \"\";\n var tmplDate;\n\n var resources = function(groupIndex) {\n return function() {\n return view._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(options.workDayStart) ||\n kendo.date.getMilliseconds(date) >= kendo.date.getMilliseconds(options.workDayEnd) ||\n !view._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(isVerticalGrouped ? rowIdx : groupIdx) });\n content += \"\";\n\n return content;\n };\n\n for (var rowIdx = 0; rowIdx < rowCount; rowIdx++) {\n html += '';\n for (var groupIdx = 0; groupIdx < groupsCount; groupIdx++) {\n for (var idx = 0, length = columnCount; idx < length; idx++) {\n html += view._forTimeRange(start, end, appendRow);\n }\n }\n html += \"\";\n }\n return html;\n },\n\n _addTimeSlotsCollections: function(groupCount, datesCount, tableRows, interval, isVerticallyGrouped) {\n var view = this._view;\n var rowCount = tableRows.length;\n\n if (isVerticallyGrouped) {\n rowCount = Math.floor(rowCount / groupCount);\n }\n\n for (var groupIndex = 0; groupIndex < groupCount; groupIndex++) {\n var rowMultiplier = 0;\n var group = view.groups[groupIndex];\n var time;\n\n if (isVerticallyGrouped) {\n rowMultiplier = groupIndex;\n }\n\n var rowIndex = rowMultiplier * rowCount;\n var cellMultiplier = 0;\n\n if (!isVerticallyGrouped) {\n cellMultiplier = groupIndex;\n }\n\n var cells = tableRows[rowIndex].children;\n var cellsPerGroup = cells.length / (!isVerticallyGrouped ? groupCount : 1);\n var cellsPerDay = cellsPerGroup / datesCount;\n\n for (var dateIndex = 0; dateIndex < datesCount; dateIndex++) {\n var cellOffset = dateIndex * cellsPerDay + (cellsPerGroup * cellMultiplier);\n time = getMilliseconds(new Date(+view.startTime()));\n\n for (var cellIndex = 0; cellIndex < cellsPerDay; cellIndex++) {\n\n view._addTimeSlotToCollection(group, cells, cellIndex, cellOffset, dateIndex, time, interval);\n time += interval;\n }\n }\n }\n },\n\n _getVerticalGroupCount: function(groupsCount) {\n\n return groupsCount;\n },\n\n _getVerticalRowCount: function(eventGroups, groupIndex, maxRowCount) {\n var view = this._view;\n\n return view._isVerticallyGrouped() ? eventGroups[groupIndex].maxRowCount : maxRowCount;\n },\n\n _renderEvent: function(eventGroup, event, adjustedEvent, group, range, container) {\n var view = this._view;\n var element;\n\n element = view._createEventElement(adjustedEvent.occurrence, event, range.head || adjustedEvent.head, range.tail || adjustedEvent.tail);\n element.appendTo(container).css({ top: 0, height: view.options.eventHeight });\n\n var eventObject = {\n start: adjustedEvent.occurrence._startTime || adjustedEvent.occurrence.start,\n end: adjustedEvent.occurrence._endTime || adjustedEvent.occurrence.end,\n element: element,\n uid: event.uid,\n slotRange: range,\n rowIndex: 0,\n offsetTop: 0\n };\n\n eventGroup.events[event.uid] = eventObject;\n\n view._inverseEventColor(element);\n view.addContinuousEvent(group, range, element, event.isAllDay);\n view._arrangeRows(eventObject, range, eventGroup);\n },\n\n _verticalCountForLevel: function(level) {\n var view = this._view;\n\n return view._rowCountForLevel(level);\n },\n\n _horizontalCountForLevel: function(level) {\n var view = this._view;\n\n return view._columnCountForLevel(level);\n },\n\n _updateCurrentVerticalTimeMarker: function(ranges, currentTime) {\n var view = this._view;\n var elementHtml = \"
\";\n var headerWrap = view.datesHeader.find(DOT + SCHEDULER_HEADER_WRAP_CLASS);\n var left = Math.round(ranges[0].innerRect(currentTime, new Date(currentTime.getTime() + 1), false).left);\n var timesTableMarker = $(elementHtml)\n .prependTo(headerWrap)\n .addClass(CURRENT_TIME_MARKER_ARROW_CLASS + \"-down\");\n\n timesTableMarker.css({\n left: view._adjustLeftPosition(left - (outerWidth(timesTableMarker) * BORDER_SIZE_COEFF / 2)),\n top: headerWrap.find(\"tr\").last().prev().position().top\n });\n\n $(elementHtml).prependTo(view.content).css({\n left: view._adjustLeftPosition(left),\n width: \"1px\",\n height: view.content[0].scrollHeight - 1,\n top: 0\n });\n },\n\n _changeGroup: function() {\n return undefined$1;\n },\n\n _prevGroupSlot: function(slot, group, isDay) {\n var view = this._view;\n\n if (view._isVerticallyGrouped()) {\n return slot;\n } else {\n var collection = group._collection(0, isDay);\n return collection.last();\n }\n },\n\n _nextGroupSlot: function(slot, group, isDay) {\n var view = this._view;\n\n if (view._isVerticallyGrouped()) {\n return slot;\n } else {\n var collection = group._collection(0, isDay);\n return collection.first();\n }\n },\n\n _verticalSlots: function(selection, reverse) {\n var view = this._view;\n\n return view._changeGroup(selection, reverse);\n },\n\n _verticalMethod: function(reverse) {\n\n return reverse ? \"leftSlot\" : \"rightSlot\";\n },\n\n _normalizeVerticalSelection: function() {\n return undefined$1;\n },\n\n _horizontalSlots: function(selection, group, method, startSlot, endSlot, multiple, reverse) {\n var view = this._view;\n var result = {};\n\n result.startSlot = group[method](startSlot);\n result.endSlot = group[method](endSlot);\n\n if (!multiple && view._isHorizontallyGrouped() && (!result.startSlot || !result.endSlot)) {\n result.startSlot = result.endSlot = view._changeGroup(selection, reverse);\n }\n\n return result;\n },\n\n _changeVerticalViewPeriod: function() {\n return false;\n },\n\n _changeHorizontalViewPeriod: function(slots, shift, selection, reverse) {\n var view = this._view;\n\n if ((!slots.startSlot || !slots.endSlot ) && !shift && view._changeViewPeriod(selection, reverse, false)) {\n return true;\n }\n return false;\n },\n\n _updateDirection: function(selection, ranges, shift, reverse) {\n var view = this._view;\n\n view._updateDirection(selection, ranges, shift, reverse, true);\n },\n\n _createMoveHint: function(range, adjustedEvent) {\n var view = this._view;\n var startSlot = range.start;\n\n var hint = view._createEventElement(adjustedEvent.occurrence ,adjustedEvent.occurrence, false, false);\n\n hint.addClass(\"k-event-drag-hint\");\n\n var rect = range.innerRect(adjustedEvent.occurrence.start, adjustedEvent.occurrence.end, view.options.snap);\n var width = rect.right - rect.left;\n\n if (width < 0) {\n width = 0;\n }\n\n var left = view._adjustLeftPosition(rect.left);\n\n var css = {\n left: left,\n top: startSlot.offsetTop,\n height: startSlot.offsetHeight,\n width: width\n };\n\n hint.css(css);\n\n if (adjustedEvent.occurrence.inverseColor) {\n hint.addClass(INVERSE_COLOR_CLASS);\n }\n\n view._appendMoveHint(hint);\n },\n\n _adjustLeftPosition: function(left) {\n var view = this._view;\n\n if (view._isRtl) {\n left -= (view.content[0].scrollWidth - view.content[0].clientWidth);\n }\n\n return left;\n }\n });\n\n var TimelineGroupedByDateView = kendo.Class.extend({\n init: function(view) {\n this._view = view;\n },\n\n _getTimeSlotByPosition: function(x, y, groupIndex) {\n var group = this._view.groups[groupIndex];\n\n return group.timeSlotByPosition(x, y, true);\n },\n\n _hideHeaders: function() {\n var view = this._view;\n\n if (!view._isVerticallyGrouped()) {\n view.timesHeader.find(\"table tr\").eq(2).hide();\n view.datesHeader.find(\"table tr\").eq(2).hide();\n } else {\n view.times.find(\".k-last\").hide();\n }\n },\n _setColspan: function() {},\n\n _createRowsLayout: function(resources, rows, groupHeaderTemplate, columns) {\n var view = this._view;\n\n return view._createDateLayout(columns, null, true);\n },\n\n _createVerticalColumnsLayout: function(resources, rows, groupHeaderTemplate) {\n var view = this._view;\n\n return view._createColumnsLayout(resources, null, groupHeaderTemplate);\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 _getRowCount: function(level) {\n var view = this._view;\n\n return view._rowCountForLevel(level);\n },\n\n _getGroupsCount: function() {\n var view = this._view;\n\n return view._groupCount();\n },\n\n _addContent: function(dates, columnCount, groupsCount, rowCount, start, end, slotTemplate, isVerticalGrouped) {\n var view = this._view;\n var html = '';\n var options = view.options;\n\n var appendRow = function(date, isMajorTickColumn, isMiddleColumn, isLastSlotColumn, minorTickColumns, groupIdx) {\n var content = \"\";\n var classes = \"\";\n var tmplDate;\n var workDateIndex = view._isVerticallyGrouped() ? dateIndex : idx;\n\n var resources = function(groupIndex) {\n return function() {\n return view._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(options.workDayStart) ||\n kendo.date.getMilliseconds(date) >= kendo.date.getMilliseconds(options.workDayEnd) ||\n !view._isWorkDay(dates[workDateIndex])) {\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(groupIdx) });\n content += \"\";\n\n return content;\n };\n\n var tempStart = new Date(start),\n minorTickCount = view.options.minorTickCount,\n msMajorInterval = view.options.majorTick * MS_PER_MINUTE,\n msInterval = msMajorInterval / minorTickCount || 1,\n dateIndex;\n\n for (var rowIdx = 0; rowIdx < rowCount; rowIdx++) {\n html += '';\n\n if ((rowIdx % (rowCount / view._dates.length)) === 0) {\n dateIndex = (rowIdx / (rowCount / view._dates.length));\n tempStart = new Date(view._dates[dateIndex]);\n kendo.date.setTime(tempStart, kendo.date.getMilliseconds(start));\n }\n\n for (var idx = 0, length = columnCount; idx < length; idx++) {\n\n html += view._forTimeRange(tempStart, end, appendRow, isVerticalGrouped, groupsCount);\n\n if (isVerticalGrouped) {\n setTime(tempStart, msInterval, false);\n break;\n }\n }\n html += \"\";\n }\n\n return html;\n },\n\n _addTimeSlotsCollections: function(groupCount, datesCount, tableRows, interval, isVerticallyGrouped) {\n var view = this._view;\n var rowCount = tableRows.length;\n\n if (isVerticallyGrouped) {\n rowCount = rowCount / datesCount;\n }\n\n for (var dateIndex = 0; dateIndex < datesCount; dateIndex++) {\n var rowMultiplier = 0;\n var time;\n\n if (isVerticallyGrouped) {\n rowMultiplier = dateIndex;\n }\n\n var rowIndex = rowMultiplier * rowCount;\n var cellMultiplier = 0;\n var cells = tableRows[rowIndex].children;\n var cellsPerGroup = isVerticallyGrouped ? rowCount : cells.length / (datesCount * groupCount);\n var cellsPerDay = cells.length / datesCount;\n var cellOffset;\n\n time = getMilliseconds(new Date(+view.startTime()));\n\n for (var cellIndex = 0; cellIndex < cellsPerGroup; cellIndex++) {\n if (!isVerticallyGrouped) {\n cellOffset = (dateIndex * cellsPerDay) + (groupCount * cellIndex);\n cellMultiplier++;\n } else {\n cellOffset = 0;\n cells = tableRows[cellIndex + (cellsPerGroup * dateIndex)].children;\n }\n\n for (var groupIndex = 0; groupIndex < groupCount; groupIndex++) {\n var group = view.groups[groupIndex];\n\n view._addTimeSlotToCollection(group, cells, groupIndex, cellOffset, dateIndex, time, interval);\n }\n time += interval;\n }\n }\n },\n\n _getVerticalGroupCount: function() {\n var view = this._view;\n\n return view.content.find(\"tr\").length;\n },\n\n _getVerticalRowCount: function(eventGroups, groupIndex, maxRowCount) {\n\n return maxRowCount;\n },\n\n _renderEvent: function(eventGroup, event, adjustedEvent, group, range, container, startIndex, endIndex) {\n var view = this._view;\n var element;\n var eventObjects = [];\n\n for (var i = range.start.index; i <= range.end.index; i++) {\n element = view._createEventElement(adjustedEvent.occurrence, event, i !== endIndex, i !== startIndex);\n element.appendTo(container).css({ top: 0, height: view.options.eventHeight });\n var currentSlot = group._timeSlotCollections[0]._slots[i];\n var dateRange = group.timeSlotRanges(currentSlot.start, currentSlot.end, false)[0];\n\n var eventObject = {\n start: i === startIndex ? adjustedEvent.occurrence._startTime || adjustedEvent.occurrence.start : currentSlot.start,\n end: i === endIndex ? adjustedEvent.occurrence._endTime || adjustedEvent.occurrence.end : currentSlot.end,\n element: element,\n uid: event.uid,\n slotRange: dateRange,\n rowIndex: 0,\n offsetTop: 0\n };\n\n eventGroup.events[event.uid] = eventObject;\n eventObjects.push(eventObject);\n\n view.addContinuousEvent(group, dateRange, element, event.isAllDay);\n view._arrangeRows(eventObject, dateRange, eventGroup);\n }\n eventGroup.events[event.uid] = eventObjects;\n },\n\n _verticalCountForLevel: function(level) {\n var view = this._view;\n\n return view._columnCountForLevel(level);\n },\n\n _horizontalCountForLevel: function(level, columnLevel) {\n var view = this._view;\n\n return view._columnCountForLevel(columnLevel) / view._columnCountForLevel(2);\n },\n\n _updateCurrentVerticalTimeMarker: function(ranges,currentTime) {\n var view = this._view;\n var firstTimesCell = view.times.find(\"tr\").first().find(\"th\").first();\n var lastTimesCell = view.times.find(\"tr\").first().find(\"th\").last();\n var elementHtml = \"
\";\n var timesTableMarker = $(elementHtml).prependTo(view.times);\n var markerTopPosition = Math.round(ranges[0].innerRect(currentTime, new Date(currentTime.getTime() + 1), false).top);\n var timesTableMarkerCss = {};\n\n if (this._isRtl) {\n timesTableMarkerCss.right = firstTimesCell.position().left + outerHeight(firstTimesCell) - outerHeight(lastTimesCell);\n timesTableMarker.addClass(CURRENT_TIME_MARKER_ARROW_CLASS + \"-left\");\n } else {\n timesTableMarkerCss.left = lastTimesCell.position().left;\n timesTableMarker.addClass(CURRENT_TIME_MARKER_ARROW_CLASS + \"-right\");\n }\n\n timesTableMarkerCss.top = markerTopPosition - (outerWidth(timesTableMarker) * BORDER_SIZE_COEFF / 2);\n\n timesTableMarker.css(timesTableMarkerCss);\n\n $(elementHtml).prependTo(view.content).css({\n top: markerTopPosition,\n height: \"1px\",\n right: \"1px\",\n width: view.content[0].scrollWidth,\n left: 0\n });\n },\n\n _changeGroup: function(selection, previous, slot) {\n var view = this._view;\n\n if (!slot) {\n selection.groupIndex = previous ? view.groups.length - 1 : 0;\n }\n },\n\n _prevGroupSlot: function(slot) {\n return slot;\n },\n\n _nextGroupSlot: function(slot) {\n return slot;\n },\n\n _changeDate: function(selection, reverse, slot) {\n var view = this._view;\n var group = view.groups[selection.groupIndex];\n var collections, index;\n\n if (reverse) {\n collections = group._getCollections(false);\n index = slot.index - 1;\n\n if (index >= 0) {\n return collections[0]._slots[index];\n }\n } else {\n collections = group._getCollections(false);\n index = slot.index + 1;\n\n if (collections[0] && collections[0]._slots[index]) {\n return collections[0]._slots[index];\n }\n }\n },\n\n _verticalSlots: function(selection, reverse, slot) {\n return this._changeDate(selection, reverse, slot);\n },\n\n _verticalMethod: function(reverse, multiple) {\n if (multiple) {\n return reverse ? \"upSlot\" : \"downSlot\";\n } else {\n return reverse ? \"leftSlot\" : \"rightSlot\";\n }\n },\n\n _normalizeVerticalSelection: function(selection, ranges, reverse, multiple) {\n var view = this._view;\n\n if (!multiple) {\n return view._normalizeVerticalSelection(selection, ranges, reverse);\n }\n\n return undefined$1;\n },\n\n _horizontalSlots: function(selection, group, method, startSlot, endSlot, multiple, reverse) {\n var view = this._view;\n var tempSlot = view._changeGroup(selection, reverse);\n var result = {};\n\n if (!tempSlot) {\n if (!view._isVerticallyGrouped()) {\n result.startSlot = group[method](startSlot);\n result.endSlot = group[method](endSlot);\n }\n\n } else {\n result.startSlot = result.endSlot = tempSlot;\n }\n\n return result;\n },\n\n _changeVerticalViewPeriod: function(slots, shift, selection, reverse) {\n var view = this._view;\n\n if ((!slots.startSlot || !slots.endSlot) && !shift &&\n view._changeViewPeriod(selection, reverse, view._isVerticallyGrouped())) {\n return true;\n }\n return false;\n },\n\n _changeHorizontalViewPeriod: function(slots, shift, selection, reverse) {\n var view = this._view;\n\n if ( view._isVerticallyGrouped()) {\n return false;\n }\n\n if ((!slots.startSlot || !slots.endSlot ) && !shift && view._changeViewPeriod(selection, reverse, false)) {\n return true;\n }\n return false;\n },\n\n _updateDirection: function(selection, ranges, shift, reverse) {\n var view = this._view;\n\n view._updateDirection(selection, ranges, shift, reverse, !view._isVerticallyGrouped());\n },\n\n _createMoveHint: function(range, adjustedEvent) {\n var view = this._view;\n var startSlot = range.start;\n var startEnd = range.end;\n\n for (var slotIdx = startSlot.index; slotIdx <= startEnd.index; slotIdx++) {\n var slot = range.collection._slots[slotIdx];\n var hint = view._createEventElement(adjustedEvent.occurrence ,adjustedEvent.occurrence, false, false);\n\n hint.addClass(\"k-event-drag-hint\");\n\n var css = {\n left: slot.offsetLeft + 2,\n top: slot.offsetTop,\n height: view.options.eventHeight,\n width: slot.offsetWidth\n };\n\n hint.css(css);\n\n if (adjustedEvent.occurrence.inverseColor) {\n hint.addClass(INVERSE_COLOR_CLASS);\n }\n\n view._appendMoveHint(hint);\n }\n },\n\n _adjustLeftPosition: function(left) {\n var view = this._view;\n\n if (view._isRtl && !view._isVerticallyGrouped()) {\n left -= (view.content[0].scrollWidth - view.content[0].offsetWidth);\n }\n\n return left;\n }\n });\n\n kendo.ui.scheduler.TimelineGroupedView = TimelineGroupedView;\n kendo.ui.scheduler.TimelineGroupedByDateView = TimelineGroupedByDateView;\n\n var TimelineView = SchedulerView.extend({\n init: function(element, options) {\n var that = this,\n zeroWidthEvent = createZeroWidthEvent();\n\n SchedulerView.fn.init.call(that, element, options);\n\n that._zeroWidthEventOffset = zeroWidthEvent.outerWidth();\n zeroWidthEvent.remove();\n\n that._groupedView = that._getGroupedView();\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 name: \"timeline\",\n\n _isVirtualized: function() {\n return false;\n },\n\n _getGroupedView: function() {\n\n if (this._isGroupedByDate()) {\n return new kendo.ui.scheduler.TimelineGroupedByDateView(this);\n } else {\n return new kendo.ui.scheduler.TimelineGroupedView(this);\n }\n },\n\n _getNextEventIndexBySlot: function(slot, sortedEvents, groupIndex) {\n if (this._isVerticallyGrouped()) {\n return kendo.ui.SchedulerView.fn._getNextEventIndexBySlot.call(this, slot, sortedEvents, groupIndex);\n }\n\n var tempIndex = 0;\n\n for (var i = 0; i < sortedEvents.length; i++) {\n if (slot.startDate() > sortedEvents[i].start.startDate()) {\n tempIndex++;\n continue;\n }\n\n if (slot.startDate().getTime() === sortedEvents[i].start.startDate().getTime() &&\n groupIndex > sortedEvents[i].start.groupIndex) {\n tempIndex++;\n continue;\n }\n\n break;\n\n }\n return tempIndex;\n },\n\n _getSelectedSlot: function(slot, sortedEvents, event, idx, pad, prev) {\n if (this._isVerticallyGrouped()) {\n return kendo.ui.SchedulerView.fn._getSelectedSlot.call(this, slot, sortedEvents, event, idx, pad, prev);\n }\n\n return slot;\n },\n\n _getSortedEvents: function(uniqueAllEvents) {\n if (this._isVerticallyGrouped()) {\n return kendo.ui.SchedulerView.fn._getSortedEvents.call(this, uniqueAllEvents);\n }\n\n return uniqueAllEvents.sort(function(first, second) {\n var result = first.start.startDate().getTime() - second.start.startDate().getTime();\n\n if (result === 0) {\n if (first.start.isDaySlot && !second.start.isDaySlot) {\n result = -1;\n }\n\n if (!first.start.isDaySlot && second.start.isDaySlot) {\n result = 1;\n }\n }\n\n if (result === 0) {\n result = first.start.groupIndex - second.start.groupIndex;\n }\n\n if (result === 0) {\n result = $(first.element).index() - $(second.element).index();\n }\n\n return result;\n });\n },\n\n _currentTimeMarkerUpdater: function() {\n this._updateCurrentTimeMarker(new Date());\n },\n\n _scrollTo: function(element, container) {\n SchedulerView.fn._scrollTo.call(this, element, container);\n\n var elementOffset = element.offsetLeft,\n elementOffsetDir = element.offsetWidth,\n containerScroll = container.scrollLeft,\n containerOffsetDir = container.clientWidth,\n rightDistance = elementOffset + elementOffsetDir,\n result = 0;\n\n if (containerScroll > elementOffset) {\n result = elementOffset;\n } else if (rightDistance > (containerScroll + containerOffsetDir)) {\n if (elementOffsetDir <= containerOffsetDir) {\n result = (rightDistance - containerOffsetDir);\n } else {\n result = elementOffset;\n }\n } else {\n result = containerScroll;\n }\n container.scrollLeft = result;\n },\n\n _updateCurrentTimeMarker: function(currentTime) {\n var options = this.options;\n\n this.datesHeader.find(DOT + CURRENT_TIME_MARKER_CLASS).remove();\n this.times.find(DOT + CURRENT_TIME_MARKER_CLASS).remove();\n this.content.find(DOT + CURRENT_TIME_MARKER_CLASS).remove();\n\n if (!this._isInDateSlot({ start: currentTime, end: currentTime })) {\n return;\n }\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 var groupsCount = !options.group || options.group.orientation == \"vertical\" ? 1 : this.groups.length;\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\n if (this._isVerticallyGrouped()) {\n this._groupedView._updateCurrentVerticalTimeMarker(ranges,currentTime);\n } else {\n var elementHtml = \"
\";\n var headerWrap = this.datesHeader.find(DOT + SCHEDULER_HEADER_WRAP_CLASS);\n var left = Math.round(ranges[0].innerRect(currentTime, new Date(currentTime.getTime() + 1), false).left);\n var timesTableMarker = $(elementHtml)\n .prependTo(headerWrap)\n .addClass(CURRENT_TIME_MARKER_ARROW_CLASS + \"-down\");\n\n timesTableMarker.css({\n left: this._adjustLeftPosition(left - (outerWidth(timesTableMarker) * BORDER_SIZE_COEFF / 2)),\n top: headerWrap.find(\"tr\").last().prev().position().top\n });\n\n $(elementHtml).prependTo(this.content).css({\n left: this._adjustLeftPosition(left),\n width: \"1px\",\n height: this.content[0].scrollHeight - 1,\n top: 0\n });\n }\n }\n }\n },\n\n _adjustLeftPosition: function(left) {\n return this._groupedView._adjustLeftPosition(left);\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 _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-x),.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-content td\", function(e) {\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 }\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 useClickAsTap: !kendo.support.browser.edge,\n filter: \".k-scheduler-content 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({ start: slot.startDate(), end: slot.endDate() }, 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.is(\".k-i-x,.k-svg-i-x\")) {\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 _slotByPosition: function(x, y) {\n var slot;\n var content = this.content;\n var offset = content.offset();\n var groupIndex;\n\n x -= offset.left;\n y -= offset.top;\n\n if (this._isRtl) {\n var browser = kendo.support.browser;\n\n if (browser.mozilla || (browser.webkit && browser.version >= 85)) {\n x += (content[0].scrollWidth - content[0].offsetWidth);\n x += content[0].scrollLeft;\n } else if (browser.msie) {\n x -= kendo.scrollLeft(content);\n x += content[0].scrollWidth - content[0].offsetWidth;\n } else if (browser.webkit) {\n x += content[0].scrollLeft;\n }\n } else {\n x += content[0].scrollLeft;\n }\n\n y += content[0].scrollTop;\n\n x = Math.ceil(x);\n y = Math.ceil(y);\n\n for (groupIndex = 0; groupIndex < this.groups.length; groupIndex++) {\n\n slot = this._groupedView._getTimeSlotByPosition(x, y, groupIndex);\n\n if (slot) {\n return slot;\n }\n }\n\n return null;\n },\n\n options: {\n name: \"TimelineView\",\n title: \"Timeline\",\n selectedDateFormat: \"{0:D}\",\n selectedShortDateFormat: \"{0:d}\",\n selectedMobileDateFormat: \"{0:MMM dd}\",\n date: kendo.date.today(),\n startTime: kendo.date.today(),\n endTime: kendo.date.today(),\n showWorkHours: false,\n minorTickCount: 2,\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 majorTick: 60,\n eventHeight: 25,\n eventMinWidth: 0,\n columnWidth: 100,\n groupHeaderTemplate: ({ text }) => text,\n majorTimeHeaderTemplate: ({ date }) => kendo.toString(date, 't'),\n slotTemplate: () => \" \",\n eventTemplate: EVENT_TEMPLATE,\n dateHeaderTemplate: DATA_HEADER_TEMPLATE,\n footer: {\n command: \"workDay\"\n },\n currentTimeMarker: {\n updateInterval: 10000,\n useLocalTimezone: true\n },\n ongoingEvents: {\n cssClass: null,\n enabled: true,\n updateInterval: 60000\n },\n messages: {\n defaultRowText: \"All events\",\n showFullDay: \"Show full day\",\n showWorkDay: \"Show business hours\"\n }\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 = kendo.template(EVENT_WRAPPER_TEMPLATE);\n this.majorTimeHeaderTemplate = kendo.template(options.majorTimeHeaderTemplate, settings);\n this.dateHeaderTemplate = kendo.template(options.dateHeaderTemplate, settings);\n this.slotTemplate = kendo.template(options.slotTemplate, settings);\n this.groupHeaderTemplate = kendo.template(options.groupHeaderTemplate, settings);\n },\n\n _render: function(dates) {\n var that = this;\n\n dates = dates || [];\n\n that._dates = dates;\n\n that._startDate = dates[0];\n\n that._endDate = dates[(dates.length - 1) || 0];\n\n that._calculateSlotRanges();\n\n that.createLayout(that._layout(dates));\n\n that._content(dates);\n\n that._footer();\n\n that._setContentWidth();\n\n that.refreshLayout();\n\n that.datesHeader.on(\"click\" + NS, \".k-nav-day\", function(e) {\n var th = $(e.currentTarget).closest(\"th\");\n\n var slot = that._slotByPosition(th.offset().left, that.content.offset().top);\n\n that.trigger(\"navigate\", { view: \"timeline\", date: slot.startDate() });\n });\n\n that._groupedView._hideHeaders();\n },\n\n _setContentWidth: function() {\n var content = this.content;\n var contentWidth = content.width();\n var contentTable = this.content.find(\"table\");\n var columnCount = contentTable.find(\"tr\").first().children().length;\n\n var minWidth = 100;\n var calculatedWidth = columnCount * this.options.columnWidth;\n\n if (contentWidth < calculatedWidth) {\n minWidth = Math.ceil((calculatedWidth / contentWidth) * 100);\n }\n\n contentTable.add(this.datesHeader.find(\"table\"))\n .css(\"width\", minWidth + \"%\");\n },\n\n _calculateSlotRanges: function() {\n var dates = this._dates;\n var slotStartTime = this.startTime();\n var slotEndTime = this.endTime();\n\n slotEndTime = getMilliseconds(slotEndTime);\n slotStartTime = getMilliseconds(slotStartTime);\n\n if (slotEndTime === slotStartTime) {\n slotEndTime += MS_PER_DAY - 1;\n } else if (slotEndTime < slotStartTime) {\n slotEndTime += MS_PER_DAY;\n }\n\n var slotRanges = [];\n for (var i = 0; i < dates.length; i++) {\n var rangeStart = getDate(dates[i]);\n setTime(rangeStart, slotStartTime);\n\n var rangeEnd = getDate(dates[i]);\n setTime(rangeEnd, slotEndTime);\n\n slotRanges.push({\n start: kendo.date.toUtcTime(rangeStart),\n end: kendo.date.toUtcTime(rangeEnd)\n });\n }\n\n this._slotRanges = slotRanges;\n },\n\n _forTimeRange: function(min, max, action, verticalByDate, groupsCount) {\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 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 = verticalByDate ? 1 : Math.round(length);\n\n if (groupsCount) {\n length = length * groupsCount;\n }\n\n for (; idx < length; idx++) {\n var majorTickDivider = idx % (msMajorInterval / msInterval);\n var isMajorTickColumn = majorTickDivider === 0;\n var isMiddleColumn = majorTickDivider < minorTickCount - 1;\n var isLastSlotColumn = majorTickDivider === minorTickCount - 1;\n var minorTickColumns = minorTickCount;\n\n if (length % minorTickCount !== 0) {\n var isLastMajorSlot = (length - (idx + 1)) < minorTickCount;\n if (isMajorTickColumn && isLastMajorSlot) {\n minorTickColumns = length % minorTickCount;\n }\n }\n\n html += action(start, isMajorTickColumn, isMiddleColumn, isLastSlotColumn, minorTickColumns, idx % groupsCount);\n\n if (!verticalByDate) {\n if (groupsCount) {\n if ((idx % groupsCount) === groupsCount - 1) {\n setTime(start, msInterval, false);\n }\n } else {\n setTime(start, msInterval, false);\n }\n }\n }\n\n return html;\n },\n\n _layout: function(dates) {\n var timeColumns = [];\n var columns = [];\n var that = this;\n var rows = [{ text: that.options.messages.defaultRowText }];\n var groupedView = that._groupedView;\n\n var minorTickSlots = [];\n for (var minorTickIndex = 0; minorTickIndex < that.options.minorTickCount; minorTickIndex++) {\n minorTickSlots.push({\n text: \"​\",\n className: \"k-last\",\n minorTicks: true\n });\n }\n\n this._forTimeRange(that.startTime(), that.endTime(), function(date, majorTick, middleColumn, lastSlotColumn, minorSlotsCount) {\n var template = that.majorTimeHeaderTemplate;\n\n if (majorTick) {\n var timeColumn = {\n text: template({ date: date }),\n className: lastSlotColumn ? \"k-slot-cell\" : \"\",\n columns: minorTickSlots.slice(0, minorSlotsCount)\n };\n\n groupedView._setColspan(timeColumn);\n\n timeColumns.push(timeColumn);\n }\n });\n\n for (var idx = 0; idx < dates.length; idx++) {\n columns.push({\n text: that.dateHeaderTemplate({ date: dates[idx] }),\n className: \"k-slot-cell\",\n columns: timeColumns.slice(0)\n });\n }\n\n var resources = this.groupedResources;\n if (resources.length) {\n if (this._groupOrientation() === \"vertical\") {\n rows = groupedView._createRowsLayout(resources, null, this.groupHeaderTemplate, columns);\n columns = groupedView._createVerticalColumnsLayout(resources, null, 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 _footerItems: function() {\n var that = this,\n items = [],\n options = this.options,\n command = options.footer.command;\n\n if (that._isMobile()) {\n items.push(that._defaultTools.todayMobile);\n }\n\n if (command && command === \"workDay\") {\n if (that._isMobile()) {\n items.push(that._defaultTools.fulldayMobile);\n } else {\n items.push(that._defaultTools.fulldayDesktop);\n }\n }\n\n return items;\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 _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 _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 _content: function(dates) {\n var that = this;\n var start = that.startTime();\n var end = this.endTime();\n var groupsCount = 1;\n var rowCount = 1;\n var columnCount = dates.length;\n var html = '';\n var resources = this.groupedResources;\n var slotTemplate = this.slotTemplate;\n var isVerticalGrouped = false;\n\n if (resources.length) {\n isVerticalGrouped = that._groupOrientation() === \"vertical\";\n\n if (isVerticalGrouped) {\n rowCount = that._groupedView._getRowCount(this.rowLevels.length - 1);\n groupsCount = that._groupedView._getGroupsCount();\n } else {\n groupsCount = that._groupCount();\n }\n }\n\n html += '';\n html += that._groupedView._addContent(dates, columnCount, groupsCount, rowCount, start, end, slotTemplate, isVerticalGrouped);\n html += '';\n\n this.content.find(\"table\").append(html);\n },\n\n _groups: function() {\n var groupCount = this._groupCount();\n var dates = this._dates;\n var columnCount = dates.length;\n\n this.groups = [];\n\n for (var idx = 0; idx < groupCount; idx++) {\n var view = this._addResourceView(idx);\n\n var start = dates[0];\n var end = dates[(dates.length - 1) || 0];\n\n var startTime = getMilliseconds(this.startTime());\n var endTime = getMilliseconds(this.endTime());\n\n if (startTime !== 0 && endTime <= startTime) {\n start = getDate(start);\n setTime(start, startTime);\n\n end = getDate(end);\n setTime(end, endTime);\n }\n\n view.addTimeSlotCollection(start, kendo.date.addDays(end, 1));\n }\n\n this._timeSlotGroups(groupCount, columnCount);\n },\n\n _isHorizontallyGrouped: function() {\n return this.groupedResources.length && this._groupOrientation() === \"horizontal\";\n },\n\n _timeSlotGroups: function(groupCount, datesCount) {\n var interval = this._timeSlotInterval();\n var isVerticallyGrouped = this._isVerticallyGrouped();\n var tableRows = this.content.find(\"tr\");\n\n this._groupedView._addTimeSlotsCollections(groupCount, datesCount, tableRows, interval, isVerticallyGrouped);\n\n },\n\n _addTimeSlotToCollection: function(group, cells, cellIndex, cellOffset, dateIndex, time, interval) {\n var cell = cells[cellIndex + cellOffset];\n var collection = group.getTimeSlotCollection(0);\n var currentDate = this._dates[dateIndex];\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, true);\n },\n\n startDate: function() {\n return this._startDate;\n },\n\n endDate: function() {\n return this._endDate;\n },\n\n visibleEndDate: function() {\n var startTime = getMilliseconds(this.startTime());\n var endTime = getMilliseconds(this.endTime());\n var endDate = this.endDate();\n\n if (startTime !== 0 && endTime <= startTime) {\n endDate = kendo.date.addDays(endDate, 1);\n }\n\n return endDate;\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 _timeSlotInterval: function() {\n var options = this.options;\n return (options.majorTick / options.minorTickCount) * MS_PER_MINUTE;\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 render: function(events) {\n this._headerColumnCount = 0;\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 eventGroups = [];\n var maxRowCount = 0;\n\n for (var groupIndex = 0; groupIndex < eventsByResource.length; groupIndex++) {\n var eventGroup = {\n groupIndex: groupIndex,\n maxRowCount: 0,\n events: {}\n };\n\n eventGroups.push(eventGroup);\n\n this._renderEvents(eventsByResource[groupIndex], groupIndex, eventGroup);\n\n if (maxRowCount < eventGroup.maxRowCount) {\n maxRowCount = eventGroup.maxRowCount;\n }\n }\n\n this._setRowsHeight(eventGroups, eventsByResource.length, maxRowCount);\n\n this._positionEvents(eventGroups, eventsByResource.length);\n\n this._currentTime(false);\n this._ongoingEvents(events);\n\n this.trigger(\"activate\");\n },\n\n _positionEvents: function(eventGroups, groupsCount) {\n for (var groupIndex = 0; groupIndex < groupsCount; groupIndex++) {\n var eventsForGroup = eventGroups[groupIndex].events;\n for (var eventUid in eventsForGroup) {\n var eventObject = eventsForGroup[eventUid];\n if (Array.isArray(eventObject)) {\n for (var eventIndex = 0; eventIndex < eventObject.length; eventIndex++) {\n this._positionEvent(eventObject[eventIndex]);\n }\n } else {\n this._positionEvent(eventObject);\n }\n }\n }\n },\n\n _setRowsHeight: function(eventGroups, groupsCount, maxRowCount) {\n var eventHeight = this.options.eventHeight;\n var eventBottomOffset = this._getBottomRowOffset();\n var groupedView = this._groupedView;\n var verticalGroupCount = groupedView._getVerticalGroupCount(groupsCount);\n\n groupsCount = this._isVerticallyGrouped() ? verticalGroupCount : 1;\n\n for (var groupIndex = 0; groupIndex < groupsCount; groupIndex++) {\n var rowsCount = groupedView._getVerticalRowCount(eventGroups, groupIndex, maxRowCount);\n\n rowsCount = rowsCount ? rowsCount : 1;\n\n var rowHeight = ((eventHeight + 2) * rowsCount) + eventBottomOffset;\n var timesRow = $(this.times.find(\"tr\")[groupIndex]);\n var row = $(this.content.find(\"tr\")[groupIndex]);\n\n timesRow.height(rowHeight);\n row.height(rowHeight);\n }\n\n this._setContentWidth();\n this.refreshLayout();\n this._refreshSlots();\n },\n\n _getBottomRowOffset: function() {\n var eventBottomOffset = this.options.eventHeight * 0.50;\n var isMobile = this._isMobile();\n var minOffset;\n var maxOffset;\n\n if (isMobile) {\n minOffset = 30;\n maxOffset = 60;\n } else {\n minOffset = 15;\n maxOffset = 30;\n }\n\n if (eventBottomOffset > maxOffset) {\n eventBottomOffset = maxOffset;\n } else if (eventBottomOffset < minOffset) {\n eventBottomOffset = minOffset;\n }\n\n return eventBottomOffset;\n },\n\n _positionEvent: function(eventObject) {\n var eventHeight = this.options.eventHeight;\n var eventOffset = 2;\n var rect = eventObject.slotRange.innerRect(eventObject.start, eventObject.end, false);\n var left = this._adjustLeftPosition(rect.left);\n var width = rect.right - rect.left;\n\n if (width < 0) {\n width = 0;\n }\n\n if (width < this.options.eventMinWidth) {\n var slotsCollection = eventObject.slotRange.collection;\n var lastSlot = slotsCollection._slots[slotsCollection._slots.length - 1];\n var offsetRight = lastSlot.offsetLeft + lastSlot.offsetWidth;\n\n width = this.options.eventMinWidth;\n\n if (offsetRight < left + width) {\n width = offsetRight - rect.left;\n }\n }\n\n eventObject.element.css({\n top: eventObject.slotRange.start.offsetTop + eventObject.rowIndex * (eventHeight + eventOffset) + \"px\",\n left: left,\n width: width\n });\n },\n\n _refreshSlots: function() {\n for (var groupIndex = 0; groupIndex < this.groups.length; groupIndex++) {\n this.groups[groupIndex].refresh();\n }\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 _isInDateSlot: function(event) {\n var startTime = event.start;\n var endTime = event.end;\n var rangeStart = getDate(this._startDate);\n var rangeEnd = kendo.date.addDays(getDate(this.visibleEndDate()), 1);\n\n if (startTime < rangeEnd && rangeStart <= endTime) {\n return true;\n }\n return false;\n },\n\n _isInTimeSlot: function(event) {\n var startTime = event._startTime || kendo.date.toUtcTime(event.start);\n var endTime = event._endTime || kendo.date.toUtcTime(event.end);\n\n var slotRanges = this._slotRanges;\n\n if (startTime === endTime) {\n endTime = endTime + 1;\n }\n\n for (var slotIndex = 0; slotIndex < slotRanges.length; slotIndex++) {\n if (startTime < slotRanges[slotIndex].end && slotRanges[slotIndex].start < endTime) {\n return true;\n }\n }\n return false;\n },\n\n _adjustEvent: function(event) {\n var start = event.start;\n var end = event.end;\n var eventStartTime = event._time(\"start\");\n var eventEndTime = event._time(\"end\");\n var startTime = getMilliseconds(this.startTime());\n var endTime = getMilliseconds(this.endTime());\n var adjustedStartDate = null;\n var adjustedEndDate = null;\n var occurrence;\n var head = false;\n var tail = false;\n\n if (event.isAllDay) {\n start = getDate(start);\n eventStartTime = 0;\n\n end = getDate(end);\n eventEndTime = MS_PER_DAY;\n adjustedEndDate = kendo.date.addDays(end, 1);\n }\n\n if (endTime === 0) {\n endTime = MS_PER_DAY;\n }\n\n if (endTime <= startTime) {\n if (eventStartTime < startTime && eventStartTime >= endTime) {\n adjustedStartDate = getDate(start);\n setTime(adjustedStartDate, startTime);\n tail = true;\n }\n\n if (eventEndTime > endTime && eventEndTime <= startTime) {\n adjustedEndDate = getDate(end);\n setTime(adjustedEndDate, endTime);\n head = true;\n }\n } else {\n if (startTime > eventStartTime) {\n adjustedStartDate = getDate(start);\n setTime(adjustedStartDate, startTime);\n tail = true;\n } else if (endTime <= eventStartTime) {\n adjustedStartDate = getDate(start);\n adjustedStartDate = kendo.date.addDays(adjustedStartDate, 1);\n setTime(adjustedStartDate, startTime);\n tail = true;\n }\n\n if (endTime < eventEndTime) {\n adjustedEndDate = getDate(end);\n setTime(adjustedEndDate, endTime);\n head = true;\n } else if (startTime > eventEndTime) {\n adjustedEndDate = getDate(end);\n adjustedEndDate = kendo.date.addDays(adjustedEndDate,-1);\n setTime(adjustedEndDate, endTime);\n head = true;\n }\n }\n\n occurrence = event.clone({\n start: adjustedStartDate ? adjustedStartDate : start,\n end: adjustedEndDate ? adjustedEndDate : end,\n _startTime: adjustedStartDate ? kendo.date.toUtcTime(adjustedStartDate) : event._startTime,\n _endTime: adjustedEndDate ? kendo.date.toUtcTime(adjustedEndDate) : event._endTime,\n isAllDay: false\n });\n\n return {\n occurrence: occurrence,\n head: head,\n tail: tail\n };\n },\n\n _renderEvents: function(events, groupIndex, eventGroup) {\n var event;\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 = event.isAllDay || event.duration() >= MS_PER_DAY;\n var container = this.content;\n\n if (isMultiDayEvent || this._isInTimeSlot(event)) {\n var adjustedEvent = this._adjustEvent(event);\n var group = this.groups[groupIndex];\n\n if (!group._continuousEvents) {\n group._continuousEvents = [];\n }\n\n if (this._isInTimeSlot(adjustedEvent.occurrence)) {\n var ranges = group.slotRanges(adjustedEvent.occurrence, false);\n var range = ranges[0];\n var startIndex = range.start.index;\n var endIndex = range.end.index;\n\n this._groupedView._renderEvent(eventGroup, event, adjustedEvent, group, range, container, startIndex, endIndex);\n }\n }\n }\n }\n },\n\n addContinuousEvent: function(group, range, element, isAllDay) {\n var events = group._continuousEvents;\n\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 _createEventElement: function(occurrence, event, head, tail) {\n var template = this.eventTemplate;\n var editable = this.options.editable;\n var isMobile = this._isMobile();\n var showDelete = editable && editable.destroy !== false && !isMobile;\n var resizable = editable && editable.resize !== false;\n var eventStartTime = event._time(\"start\");\n var eventEndTime = event._time(\"end\");\n var eventStartDate = event.start;\n var eventEndDate = event.end;\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 head: head,\n tail: tail,\n singleDay: this._dates.length == 1,\n resources: resources,\n inverseColor: false,\n messages: this.options.messages,\n ariaLabel: this._formatEventAriaLabel(event.title, eventStartDate, eventEndDate, event.isAllDay),\n template: this.options.eventTemplate\n }, event, {\n start: eventStartDate,\n end: eventEndDate\n });\n\n var element = $(template(data));\n kendo.applyStylesFromKendoAttributes(element, [\"background-color\", \"border-color\"]);\n\n return element;\n },\n\n _arrangeRows: function(eventObject, slotRange, eventGroup) {\n var that = this;\n var startIndex = slotRange.start.index;\n var endIndex = slotRange.end.index;\n\n var rect = eventObject.slotRange.innerRect(eventObject.start, eventObject.end, false);\n var rectRight = rect.right + this.options.eventMinWidth;\n\n var events = SchedulerView.collidingEvents(slotRange.events(), rect.left, rectRight);\n\n slotRange.addEvent({\n slotIndex: startIndex,\n slotIndexEnd: endIndex,\n start: rect.left,\n end: rectRight,\n zeroWidthEventOffset: that._zeroWidthEventOffset,\n rectLeft: rect.left,\n rectRight: rectRight,\n element: eventObject.element,\n uid: eventObject.uid\n });\n\n events.push({\n slotIndex: startIndex,\n slotIndexEnd: endIndex,\n start: rect.left,\n end: rectRight,\n zeroWidthEventOffset: that._zeroWidthEventOffset,\n uid: eventObject.uid\n });\n\n var rows = SchedulerView.createRows(events);\n\n if (eventGroup.maxRowCount < rows.length) {\n eventGroup.maxRowCount = rows.length;\n }\n\n for (var idx = 0, length = rows.length; idx < length; idx++) {\n var rowEvents = rows[idx].events;\n for (var j = 0, eventLength = rowEvents.length; j < eventLength; j++) {\n eventGroup.events[rowEvents[j].uid].rowIndex = idx;\n }\n }\n },\n\n _groupCount: function() {\n var resources = this.groupedResources;\n var groupedView = this._groupedView;\n\n if (resources.length) {\n if (this._groupOrientation() === \"vertical\") {\n return groupedView._verticalCountForLevel(resources.length - 1);\n } else {\n return groupedView._horizontalCountForLevel(resources.length - 1, this.columnLevels.length - 1);\n }\n }\n return 1;\n },\n\n _updateEventForSelection: function(event) {\n var adjustedEvent = this._adjustEvent(event.clone());\n return adjustedEvent.occurrence;\n },\n\n _eventOptionsForMove: function(event) {\n if (event.isAllDay) {\n return { isAllDay: false };\n }\n\n return {};\n },\n\n _updateEventForResize: function(event) {\n if (event.isAllDay) {\n event.set(\"isAllDay\", false);\n }\n },\n\n _updateMoveHint: function(event, groupIndex, distance) {\n var group = this.groups[groupIndex];\n\n var clonedEvent = event.clone({ start: event.start, end: event.end });\n\n var eventDuraton = clonedEvent.duration();\n clonedEvent.start = new Date(clonedEvent.start.getTime() + distance);\n clonedEvent.end = new Date(+clonedEvent.start + eventDuraton);\n\n this._removeMoveHint(event.uid);\n\n if (this._isInDateSlot(clonedEvent)) {\n if (clonedEvent.isAllDay || clonedEvent.duration() >= MS_PER_DAY || this._isInTimeSlot(clonedEvent)) {\n var adjustedEvent = this._adjustEvent(clonedEvent);\n var ranges = group.slotRanges(adjustedEvent.occurrence, false);\n\n for (var rangeIndex = 0; rangeIndex < ranges.length; rangeIndex++) {\n this._groupedView._createMoveHint(ranges[rangeIndex], adjustedEvent);\n }\n }\n }\n },\n\n _appendMoveHint: function(hint) {\n hint.appendTo(this.content);\n\n this._moveHint = this._moveHint.add(hint);\n },\n\n _updateResizeHint: function(event, groupIndex, startTime, endTime) {\n var group = this.groups[groupIndex];\n var ranges = group.ranges(startTime, endTime, false, false);\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 var startRect = range.innerRect(startTime, endTime, false);\n startRect.top = start.offsetTop;\n\n var width = startRect.right - startRect.left;\n\n if (width < 0) {\n for (var i = 0; i < range.events().length; i++) {\n if (range.events()[i].uid === event.uid) {\n width = range.events()[i].rectRight - startRect.left;\n break;\n }\n }\n }\n\n var height = range.endSlot().offsetTop + start.offsetHeight - startRect.top;\n\n var left = this._adjustLeftPosition(startRect.left);\n\n var hint = SchedulerView.fn._createResizeHint.call(this,\n left,\n startRect.top,\n width,\n height\n );\n\n this._resizeHint = this._resizeHint.add(hint);\n }\n\n var format = \"t\";\n var container = this.content;\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 selectionByElement: function(cell) {\n var offset = cell.offset();\n return this._slotByPosition(offset.left, offset.top);\n },\n\n _updateDirection: function(selection, ranges, multiple, reverse, vertical) {\n\n var startSlot = ranges[0].start;\n var endSlot = ranges[ranges.length - 1].end;\n if (multiple && !vertical) {\n if (startSlot.index === endSlot.index &&\n startSlot.collectionIndex === endSlot.collectionIndex) {\n selection.backward = reverse;\n }\n }\n },\n\n _changeGroup: function(selection, previous) {\n var method = previous ? \"prevGroupSlot\" : \"nextGroupSlot\";\n\n var slot = this[method](selection.start, selection.groupIndex, false);\n\n if (slot) {\n selection.groupIndex += previous ? -1 : 1;\n }\n\n this._groupedView._changeGroup(selection, previous, slot);\n return slot;\n },\n\n prevGroupSlot: function(date, groupIndex, isDay) {\n var group = this.groups[groupIndex];\n var slot = group.ranges(date, date, isDay, false)[0].start;\n\n if (groupIndex <= 0) {\n return;\n }\n\n return this._groupedView._prevGroupSlot(slot, group, isDay);\n },\n\n nextGroupSlot: function(date, groupIndex, isDay) {\n var group = this.groups[groupIndex];\n var slot = group.ranges(date, date, isDay, false)[0].start;\n\n if (groupIndex >= this.groups.length - 1) {\n return;\n }\n\n return this._groupedView._nextGroupSlot(slot, group, isDay);\n },\n\n _verticalSlots: function(selection, ranges, multiple, reverse) {\n var groupedView = this._groupedView;\n var method = groupedView._verticalMethod(reverse, multiple);\n var startSlot = ranges[0].start;\n var endSlot = ranges[ranges.length - 1].end;\n var group = this.groups[selection.groupIndex];\n var slot = groupedView._normalizeVerticalSelection(selection, ranges, reverse, multiple);\n\n if (slot) {\n startSlot = endSlot = slot;\n }\n\n startSlot = group[method](startSlot);\n endSlot = group[method](endSlot);\n\n if (!multiple && this._isVerticallyGrouped() && (!startSlot || !endSlot)) {\n startSlot = endSlot = groupedView._verticalSlots(selection, reverse, slot);\n }\n\n return {\n startSlot: startSlot,\n endSlot: endSlot\n };\n },\n\n _horizontalSlots: function(selection, ranges, multiple, reverse) {\n var method = reverse ? \"upSlot\" : \"downSlot\";\n var startSlot = ranges[0].start;\n var endSlot = ranges[ranges.length - 1].end;\n var group = this.groups[selection.groupIndex];\n var result = {};\n\n if (!multiple) {\n result = this._groupedView._horizontalSlots(selection, group, method, startSlot, endSlot, multiple, reverse);\n } else {\n result.startSlot = group[method](startSlot);\n result.endSlot = group[method](endSlot);\n\n if (!multiple && this._isHorizontallyGrouped() && (!startSlot || !endSlot)) {\n result.startSlot = result.endSlot = this._changeGroup(selection, reverse);\n }\n }\n\n return result;\n },\n\n _changeViewPeriod: function(selection, reverse) {\n var date = reverse ? this.previousDate() : this.nextDate();\n var start = selection.start;\n var end = selection.end;\n var newStart, newEnd;\n\n newStart = new Date(date);\n newEnd = new Date(date);\n\n if (this._isInRange(newStart, newEnd)) {\n return false;\n }\n selection.start = newStart;\n selection.end = newEnd;\n\n if (this._isHorizontallyGrouped()) {\n selection.groupIndex = reverse ? this.groups.length - 1 : 0;\n }\n\n var duration = end - start;\n\n if (reverse) {\n end = getMilliseconds(this.endTime());\n end = end === 0 ? MS_PER_DAY : end;\n\n setTime(selection.start, end - duration);\n setTime(selection.end, end);\n } else {\n start = getMilliseconds(this.startTime());\n\n setTime(selection.start, start);\n setTime(selection.end, start + duration);\n }\n\n selection.events = [];\n\n return true;\n },\n\n move: function(selection, key, shift) {\n var handled = false;\n var group = this.groups[selection.groupIndex];\n var keys = kendo.keys;\n var groupedView = this._groupedView;\n var ranges = group.ranges(selection.start, selection.end, false, false);\n var startSlot, endSlot, reverse, slots;\n\n if (key === keys.DOWN || key === keys.UP) {\n handled = true;\n reverse = key === keys.UP;\n\n groupedView._updateDirection(selection, ranges, shift, reverse);\n\n slots = this._verticalSlots(selection, ranges, shift, reverse);\n\n if (groupedView._changeVerticalViewPeriod(slots, shift, selection, reverse)) {\n return handled;\n }\n } else if (key === keys.LEFT || key === keys.RIGHT) {\n handled = true;\n reverse = key === keys.LEFT;\n\n this._updateDirection(selection, ranges, shift, reverse, false);\n\n slots = this._horizontalSlots(selection, ranges, shift, reverse);\n\n if (groupedView._changeHorizontalViewPeriod(slots, shift, selection, reverse)) {\n return handled;\n }\n }\n\n if (handled) {\n startSlot = slots.startSlot;\n endSlot = slots.endSlot;\n\n if (shift) {\n var backward = selection.backward;\n\n if (backward && startSlot) {\n selection.start = startSlot.startDate();\n } else if (!backward && endSlot) {\n selection.end = endSlot.endDate();\n }\n } else if (startSlot && endSlot) {\n selection.start = startSlot.startDate();\n selection.end = endSlot.endDate();\n }\n\n selection.events = [];\n }\n\n return handled;\n },\n\n destroy: function() {\n var that = this;\n\n if (that.element) {\n that.element.off(NS);\n }\n\n if (that._currentTimeUpdateTimer) {\n clearInterval(that._currentTimeUpdateTimer);\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 }\n\n if (that.options.editable.update !== false) {\n that._editUserEvents.destroy();\n }\n }\n },\n\n _resourceBySlot: function(slot) {\n var resources = this.groupedResources;\n var result = {},\n groupOptions = this.options.group;\n\n if (resources.length && groupOptions.orientation === \"horizontal\" && groupOptions.date) {\n var resourceIndex = slot.groupIndex,\n levels = this.columnLevels,\n groupLevel = levels[levels.length - 1],\n resource = resources[resources.length - 1],\n groupLevelMember = groupLevel[resourceIndex],\n passedChildren, numberOfChildren, j, i;\n\n this._setResourceValue(groupLevelMember, resource, result);\n\n for (j = levels.length - 2; j >= 3; j--) {\n groupLevel = levels[j];\n resource = resources[j - 3];\n passedChildren = 0;\n\n for (i = 0; i < groupLevel.length; i++) {\n groupLevelMember = groupLevel[i];\n numberOfChildren = groupLevelMember.columns.length;\n\n if (numberOfChildren > resourceIndex - passedChildren) {\n this._setResourceValue(groupLevelMember, resource, result);\n\n i = groupLevel.length;\n } else {\n passedChildren += numberOfChildren;\n }\n }\n }\n\n return result;\n } else {\n return SchedulerView.fn._resourceBySlot.call(this, slot);\n }\n }\n });\n\n extend(true, ui, {\n TimelineView: TimelineView,\n TimelineWeekView: TimelineView.extend({\n options: {\n name: \"TimelineWeekView\",\n title: \"Timeline Week\",\n selectedDateFormat: \"{0:D} - {1:D}\",\n selectedShortDateFormat: \"{0:d} - {1:d}\",\n selectedMobileDateFormat: \"{0:MMM dd} - {1:dd}\",\n majorTick: 120\n },\n name: \"timelineWeek\",\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 TimelineWorkWeekView: TimelineView.extend({\n options: {\n name: \"TimelineWorkWeekView\",\n title: \"Timeline Work Week\",\n selectedDateFormat: \"{0:D} - {1:D}\",\n selectedShortDateFormat: \"{0:d} - {1:d}\",\n selectedMobileDateFormat: \"{0:MMM dd} - {1:dd}\",\n majorTick: 120\n },\n name: \"timelineWorkWeek\",\n nextDate: function() {\n var weekStart = kendo.date.dayOfWeek(kendo.date.nextDay(this.endDate()), this.calendarInfo().firstDay, 1);\n\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 TimelineMonthView: TimelineView.extend({\n options: {\n name: \"TimelineMonthView\",\n title: \"Timeline Month\",\n selectedDateFormat: \"{0:D} - {1:D}\",\n selectedShortDateFormat: \"{0:d} - {1:d}\",\n workDayStart: new Date(1980, 1, 1, 0, 0, 0),\n workDayEnd: new Date(1980, 1, 1, 23, 59, 59),\n footer: false,\n majorTick: 1440,\n minorTickCount: 1\n },\n name: \"timelineMonth\",\n calculateDateRange: function() {\n var selectedDate = this.options.date,\n start = kendo.date.firstDayOfMonth(selectedDate),\n end = kendo.date.lastDayOfMonth(selectedDate),\n idx, length,\n dates = [];\n\n for (idx = 0, length = end.getDate(); idx < length; idx++) {\n dates.push(start);\n start = kendo.date.nextDay(start);\n }\n this._render(dates);\n }\n })\n });\n\n })(window.kendo.jQuery);\n var kendo$1 = kendo;\n\n return kendo$1;\n\n}));\n"]}