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