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