{"version":3,"file":"kendo.scheduler.timelineview.min.js","names":["global","factory","exports","module","require","define","amd","globalThis","self","kendoscheduler","timelineview","js","this","$","undefined$1","kendo","window","ui","setTime","date","SchedulerView","outerWidth","_outerWidth","outerHeight","_outerHeight","extend","encode","htmlEncode","getDate","getMilliseconds","MS_PER_DAY","MS_PER_MINUTE","CURRENT_TIME_MARKER_CLASS","CURRENT_TIME_MARKER_ARROW_CLASS","SCHEDULER_HEADER_WRAP_CLASS","INVERSE_COLOR_CLASS","BORDER_SIZE_COEFF","DOT","NS","EVENT_TEMPLATE","template","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","left","round","innerRect","getTime","timesTableMarker","prependTo","addClass","_adjustLeftPosition","prev","position","width","scrollHeight","_changeGroup","_prevGroupSlot","slot","isDay","_collection","_nextGroupSlot","first","_verticalSlots","selection","reverse","_verticalMethod","_normalizeVerticalSelection","_horizontalSlots","method","startSlot","endSlot","multiple","result","_isHorizontallyGrouped","_changeVerticalViewPeriod","_changeHorizontalViewPeriod","slots","shift","_changeViewPeriod","_updateDirection","_createMoveHint","hint","rect","snap","right","offsetHeight","inverseColor","_appendMoveHint","_isRtl","scrollWidth","clientWidth","TimelineGroupedByDateView","times","eq","_createDateLayout","subColumns","isMajorTickColumn","isMiddleColumn","isLastSlotColumn","minorTickColumns","workDateIndex","tempStart","minorTickCount","msInterval","majorTick","_dates","startIndex","endIndex","eventObjects","index","currentSlot","_timeSlotCollections","_slots","dateRange","timeSlotRanges","push","firstTimesCell","lastTimesCell","markerTopPosition","timesTableMarkerCss","previous","_changeDate","collections","_getCollections","tempSlot","startEnd","slotIdx","collection","offsetLeft","offsetWidth","scheduler","TimelineView","that","zeroWidthEvent","document","body","fn","call","_zeroWidthEventOffset","remove","_groupedView","_getGroupedView","name","_workDays","workDays","dayIndex","workWeekStart","workWeekEnd","abs","getWorkDays","_templates","_editable","calculateDateRange","_groups","_currentTime","_isVirtualized","_isGroupedByDate","_getNextEventIndexBySlot","sortedEvents","tempIndex","startDate","_getSelectedSlot","pad","_getSortedEvents","uniqueAllEvents","sort","second","isDaySlot","_currentTimeMarkerUpdater","_updateCurrentTimeMarker","_scrollTo","elementOffset","elementOffsetDir","containerScroll","scrollLeft","containerOffsetDir","rightDistance","_isInDateSlot","currentTimeMarker","useLocalTimezone","timezone","dataSource","schema","timezoneOffset","offset","convert","getTimezoneOffset","orientation","currentGroup","utcCurrentTime","toUtcTime","slotByStartDate","setUpdateTimer","markerOptions","updateInterval","_currentTimeUpdateTimer","setInterval","bind","editable","_isMobile","_touchEditable","_mouseEditable","on","e","trigger","closest","preventDefault","create","_slotByPosition","pageX","pageY","resourceInfo","eventInfo","endDate","update","threshold","support","mobileOS","android","_addUserEvents","UserEvents","useClickAsTap","browser","edge","filter","tap","_scrolling","location","_editUserEvents","eventElement","target","touch","initialTouch","is","hasClass","mozilla","webkit","version","msie","scrollTop","ceil","selectedDateFormat","selectedShortDateFormat","selectedMobileDateFormat","today","endTime","showWorkHours","eventMinWidth","columnWidth","text","majorTimeHeaderTemplate","toString","eventTemplate","dateHeaderTemplate","footer","command","ongoingEvents","cssClass","enabled","defaultRowText","showFullDay","showWorkDay","settings","Template","templateSettings","_render","_startDate","_endDate","_calculateSlotRanges","createLayout","_layout","_content","_footer","_setContentWidth","refreshLayout","th","currentTarget","contentWidth","contentTable","minWidth","calculatedWidth","add","slotStartTime","slotEndTime","slotRanges","rangeStart","rangeEnd","_slotRanges","min","max","action","verticalByDate","msMin","msMax","msMajorInterval","majorTickDivider","timeColumns","groupedView","minorTickSlots","minorTickIndex","className","minorTicks","middleColumn","lastSlotColumn","minorSlotsCount","slice","groupedResources","_groupOrientation","_footerItems","items","_defaultTools","todayMobile","fulldayMobile","fulldayDesktop","toggleFullDay","isWorkDay","columnLevels","rowLevel","rowLevels","day","getDay","append","_addResourceView","addTimeSlotCollection","addDays","_timeSlotGroups","_timeSlotInterval","cell","getTimeSlotCollection","currentDate","UTC","getFullYear","getMonth","addTimeSlot","visibleEndDate","nextDate","nextDay","previousDate","previousDay","render","_headerColumnCount","data","Query","field","dir","toArray","eventsByResource","_eventsByResource","_renderEvents","_setRowsHeight","_positionEvents","_ongoingEvents","eventsForGroup","eventUid","Array","isArray","eventIndex","_positionEvent","eventBottomOffset","_getBottomRowOffset","verticalGroupCount","rowsCount","rowHeight","timesRow","row","_refreshSlots","minOffset","maxOffset","slotsCollection","lastSlot","offsetRight","refresh","parentValue","resource","item","itemParentValue","getter","dataParentValueField","itemIdx","value","_resourceValue","eventsFilteredByResource","operator","groupEqFilter","_isInTimeSlot","slotIndex","_adjustEvent","eventStartTime","_time","eventEndTime","adjustedStartDate","adjustedEndDate","clone","isMultiDayEvent","duration","_continuousEvents","isMobile","destroy","resize","eventStartDate","eventEndDate","eventResources","apply","ns","singleDay","_formatEventAriaLabel","applyStylesFromKendoAttributes","rectRight","collidingEvents","addEvent","slotIndexEnd","zeroWidthEventOffset","rectLeft","createRows","rowEvents","j","eventLength","_updateEventForSelection","_eventOptionsForMove","_updateEventForResize","set","_updateMoveHint","distance","clonedEvent","eventDuraton","_removeMoveHint","rangeIndex","_moveHint","_updateResizeHint","_removeResizeHint","startRect","_createResizeHint","_resizeHint","toLocalDate","selectionByElement","vertical","collectionIndex","backward","prevGroupSlot","nextGroupSlot","newStart","newEnd","_isInRange","move","key","handled","keys","DOWN","UP","LEFT","RIGHT","off","clearInterval","groupOptions","passedChildren","numberOfChildren","resourceIndex","levels","groupLevel","groupLevelMember","_setResourceValue","TimelineWeekView","selectedDate","dayOfWeek","calendarInfo","firstDay","TimelineWorkWeekView","weekStart","map","indexOf","TimelineMonthView","firstDayOfMonth","lastDayOfMonth","jQuery"],"sources":["kendo.scheduler.timelineview.js"],"mappings":"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","sourcesContent":["(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('kendo.scheduler.view.js'), require('kendo.icons.js')) :\n typeof define === 'function' && define.amd ? define(['kendo.scheduler.view', 'kendo.icons'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (global.kendoscheduler = global.kendoscheduler || {}, global.kendoscheduler.timelineview = global.kendoscheduler.timelineview || {}, global.kendoscheduler.timelineview.js = factory()));\n})(this, (function () {\n var __meta__ = {\n id: \"scheduler.timelineview\",\n name: \"Scheduler Timeline View\",\n category: \"web\",\n description: \"The Scheduler Timeline View\",\n depends: [ \"scheduler.view\", \"icons\" ],\n hidden: true\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n ui = kendo.ui,\n setTime = kendo.date.setTime,\n SchedulerView = ui.SchedulerView,\n outerWidth = kendo._outerWidth,\n outerHeight = kendo._outerHeight,\n extend = $.extend,\n encode = kendo.htmlEncode,\n getDate = kendo.date.getDate,\n getMilliseconds = kendo.date.getMilliseconds,\n MS_PER_DAY = kendo.date.MS_PER_DAY,\n MS_PER_MINUTE = kendo.date.MS_PER_MINUTE,\n CURRENT_TIME_MARKER_CLASS = \"k-current-time\",\n CURRENT_TIME_MARKER_ARROW_CLASS = \"k-current-time-arrow\",\n SCHEDULER_HEADER_WRAP_CLASS = \"k-scheduler-header-wrap\",\n INVERSE_COLOR_CLASS = \"k-event-inverse\",\n BORDER_SIZE_COEFF = 0.8666,\n DOT = \".\",\n NS = \".kendoTimelineView\";\n\n var EVENT_TEMPLATE = kendo.template(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 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"]}