{"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","INVERSE_COLOR_CLASS","BORDER_SIZE_COEFF","NS","EVENT_TEMPLATE","template","ref","title","start","end","format","DATA_HEADER_TEMPLATE","EVENT_WRAPPER_TEMPLATE","task","ariaLabel","resources","attr","tail","icon","isException","isRecurring","showDelete","messages","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","uid","slotRange","rowIndex","offsetTop","events","_inverseEventColor","addContinuousEvent","isAllDay","_arrangeRows","_verticalCountForLevel","level","_rowCountForLevel","_horizontalCountForLevel","_columnCountForLevel","_updateCurrentVerticalTimeMarker","ranges","currentTime","elementHtml","headerWrap","DOT","left","round","innerRect","getTime","timesTableMarker","prependTo","addClass","CURRENT_TIME_MARKER_ARROW_CLASS","_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","destroy","resize","eventStartDate","eventEndDate","eventResources","apply","ns","singleDay","_formatEventAriaLabel","applyStylesFromKendoAttributes","angular","elements","dataItem","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(function (ref) {\n var title = ref.title;\n var start = ref.start;\n var end = ref.end;\n\n return '
' +\n \"
\" + (encode(kendo.format(\"{0:t} - {1:t}\", start, end))) + \"
\" +\n \"
\" + title + \"
\";\n }),\n DATA_HEADER_TEMPLATE = kendo.template(function (ref) {\n var date = ref.date;\n\n return (\"\" + (kendo.format('{0:m}', date)) + \"\");\n }),\n EVENT_WRAPPER_TEMPLATE = function (task) { return \"
\") : '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: function (ref) {\n var text = ref.text;\n\n return text;\n },\n majorTimeHeaderTemplate: function (ref) {\n var date = ref.date;\n\n return kendo.toString(date, 't');\n },\n slotTemplate: function () { return \" \"; },\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 this.angular(\"compile\", function() {\n return {\n elements: element,\n data: [ { dataItem: data } ]\n };\n });\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"]}