{"version":3,"sources":["kendo.scheduler.view.js"],"names":["f","define","$","levels","values","key","collect","depth","level","idx","result","length","push","cellspacing","kendo","support","cssBorderSpacing","table","tableRows","className","trim","join","allDayTable","timesHeader","columnLevelCount","allDaySlot","rowCount","text","datesHeader","columnLevels","columnCount","columnIndex","columnLevelIndex","th","colspan","column","allDayTableRows","lastLevel","td","cellContent","dateTableRows","times","rowLevels","rowIndex","rowLevelIndex","rowspan","rows","Array","split","rowHeaderRows","allDay","content","scrollbar","scrollbarWidth","collidingEvents","elements","start","end","index","startIndex","overlaps","endIndex","rangeIndex","eventsForSlot","eventElement","slotStart","slotEnd","event","events","createColumns","eventElements","_createColumns","createRows","eventRange","j","columnLength","endOverlaps","columns","createLayoutConfiguration","name","resources","inner","template","configuration","data","dataIndex","obj","resource","dataSource","view","htmlEncode","getter","dataTextField","color","dataColorField","field","title","value","dataValueField","slice","groupEqFilter","item","isArray","ObservableArray","addSelectedState","cell","replace","selectedStateRegExp","ResourceView","SlotRange","TimeSlotRange","DaySlotRange","SlotCollection","Slot","TimeSlot","DaySlot","Color","window","ui","Widget","keys","NS","math","Math","HINT","scheduler","Class","extend","init","isRtl","this","_index","_timeSlotCollections","_daySlotCollections","_isRtl","addTimeSlotCollection","startDate","endDate","_addCollection","addDaySlotCollection","collections","collection","timeSlotCollectionCount","daySlotCollectionCount","daySlotByPosition","x","y","_slotByPosition","timeSlotByPosition","collectionIndex","slotIndex","slot","width","height","horizontalEnd","verticalEnd","nextSlot","count","at","offsetWidth","offsetHeight","offsetLeft","offsetTop","refresh","timeSlotRanges","startTime","endTime","_startSlot","inRange","_endSlot","first","last","_continuousRange","daySlotRanges","isAllDay","date","MS_PER_DAY","range","head","tail","startSlot","endSlot","ranges","slotRanges","isDay","_startTime","toUtcTime","_endTime","undefined","isMultiDay","_startCollection","startInRange","_endCollection","endInRange","_getCollections","continuousSlot","reverse","pad","isDaySlot","firstSlot","lastSlot","upSlot","keepCollection","that","moveToDaySlot","isFirstCell","_verticalSlot","downSlot","moveToTimeSlot","leftSlot","_horizontalSlot","rightSlot","step","swapCollection","_collection","multiday","time","slotByStartDate","slotByEndDate","getSlotCollection","getTimeSlotCollection","getDaySlotCollection","options","innerHeight","addEvent","outerRect","snap","_rect","property","top","bottom","left","right","startOffset","startSlotDuration","endOffset","endSlotDuration","element","round","innerRect","innerWidth","groupIndex","_slots","_events","_start","_end","_groupIndex","_collectionIndex","allday","addTimeSlot","isHorizontal","addDaySlot","eventCount","clientWidth","clientHeight","timezone","toLocalDate","fn","apply","arguments","offsetX","rtl","offset","duration","difference","floor","children","firstChildHeight","firstChildTop","Date","SchedulerView","call","_normalizeOptions","_scrollbar","_resizeHint","_moveHint","_cellId","guid","_resourcesForGroups","_selectedSlots","setMilliseconds","workDayStart","workDayEnd","_isMobile","mobile","mobileOS","_isMobilePhoneView","tablet","_addResourceView","resourceView","groups","dateForTitle","format","selectedDateFormat","shortDateForTitle","selectedShortDateFormat","_changeGroup","selection","previous","method","_changeGroupContinuously","_changeViewPeriod","_horizontalSlots","multiple","group","_normalizeHorizontalSelection","_isVerticallyGrouped","_continuousSlot","_verticalSlots","_normalizeVerticalSelection","constrainSelection","move","shift","slots","backward","handled","DOWN","UP","_updateDirection","LEFT","RIGHT","moveToEventInGroup","selectedEvents","prev","found","_continuousEvents","inArray","uid","moveToEvent","current","candidate","_current","has","_scrollTo","select","clearSelection","_selectEvents","_selectSlots","setAttribute","groupEvents","add","addClass","attr","addDays","_resourceValue","valuePrimitive","_resourceBySlot","resourceIndex","setter","groupedResources","total","_createResizeHint","css","_removeResizeHint","remove","_removeMoveHint","container","elementOffset","elementOffsetDir","containerScroll","scrollTop","containerOffsetDir","bottomDistance","_shouldInverseResourceColor","resourceColorIsDark","isDark","currentColor","currentColorIsDark","_eventTmpl","wrapper","tmpl","settings","Template","templateSettings","paramName","html","type","state","storage","proxy","eventResources","eventResource","resourceColor","get","createLayout","layout","allDayIndex","splice","append","_topSection","_bottomSection","_scroller","refreshLayout","datesHeaderRows","isSchedulerHeightSet","contentDiv","timesTable","toolbar","find","headerHeight","paddingDirection","eq","outerHeight","footer","el","initialHeight","newHeight","style","kineticScrollNeeded","parseInt","removeClass","wrap","parent","touchScroller","bind","scrollLeft","avoidScrolling","e","target","closest","movable","_touchScroller","scrollElement","sender","groupIdx","groupLength","_createColumnsLayout","_groupOrientation","orientation","_createRowsLayout","selectionByElement","removeAttr","destroy","calendarInfo","getCulture","calendars","standard","prevGroupSlot","nextGroupSlot","_eventOptionsForMove","_updateEventForResize","_updateEventForSelection","re","processor","parts","i","channels","formats","resolveColor","process","exec","r","g","b","normalizeByte","prototype","charAt","substr","toLowerCase","namedColors","isNaN","percBrightness","sqrt","brightnessValue","aqua","azure","beige","black","blue","brown","coral","cyan","darkblue","darkcyan","darkgray","darkgreen","darkorange","darkred","dimgray","fuchsia","gold","goldenrod","gray","green","greenyellow","indigo","ivory","khaki","lightblue","lightgrey","lightgreen","lightpink","lightyellow","lime","limegreen","linen","magenta","maroon","mediumblue","navy","olive","orange","orangered","orchid","pink","plum","purple","red","royalblue","salmon","silver","skyblue","slateblue","slategray","snow","steelblue","tan","teal","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","jQuery","amd","a1","a2","a3"],"mappings":"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","file":"kendo.scheduler.view.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.view', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'scheduler.view',\n name: 'Scheduler View',\n category: 'web',\n description: 'The Scheduler Common View',\n depends: ['core'],\n hidden: true\n };\n (function ($) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, keys = kendo.keys, NS = '.kendoSchedulerView', math = Math;\n function levels(values, key) {\n var result = [];\n function collect(depth, values) {\n values = values[key];\n if (values) {\n var level = result[depth] = result[depth] || [];\n for (var idx = 0; idx < values.length; idx++) {\n level.push(values[idx]);\n collect(depth + 1, values[idx]);\n }\n }\n }\n collect(0, values);\n return result;\n }\n function cellspacing() {\n if (kendo.support.cssBorderSpacing) {\n return '';\n }\n return 'cellspacing=\"0\"';\n }\n function table(tableRows, className) {\n if (!tableRows.length) {\n return '';\n }\n return '' + '' + tableRows.join('') + '' + '
';\n }\n function allDayTable(tableRows, className) {\n if (!tableRows.length) {\n return '';\n }\n return '
' + table(tableRows, className) + '
';\n }\n function timesHeader(columnLevelCount, allDaySlot, rowCount) {\n var tableRows = [];\n if (rowCount > 0) {\n for (var idx = 0; idx < columnLevelCount; idx++) {\n tableRows.push(' ');\n }\n }\n if (allDaySlot) {\n tableRows.push('' + allDaySlot.text + '');\n }\n if (rowCount < 1) {\n return $();\n }\n return $('
' + table(tableRows) + '
');\n }\n function datesHeader(columnLevels, columnCount, allDaySlot) {\n var dateTableRows = [];\n var columnIndex;\n for (var columnLevelIndex = 0; columnLevelIndex < columnLevels.length; columnLevelIndex++) {\n var level = columnLevels[columnLevelIndex];\n var th = [];\n var colspan = columnCount / level.length;\n for (columnIndex = 0; columnIndex < level.length; columnIndex++) {\n var column = level[columnIndex];\n th.push('' + column.text + '');\n }\n dateTableRows.push(th.join(''));\n }\n var allDayTableRows = [];\n if (allDaySlot) {\n var lastLevel = columnLevels[columnLevels.length - 1];\n var td = [];\n var cellContent = allDaySlot.cellContent;\n for (columnIndex = 0; columnIndex < lastLevel.length; columnIndex++) {\n td.push('' + (cellContent ? cellContent(columnIndex) : ' ') + '');\n }\n allDayTableRows.push(td.join(''));\n }\n return $('
' + '
' + table(dateTableRows) + allDayTable(allDayTableRows, 'k-scheduler-header-all-day') + '
' + '
');\n }\n function times(rowLevels, rowCount) {\n var rows = new Array(rowCount).join().split(',');\n var rowHeaderRows = [];\n var rowIndex;\n for (var rowLevelIndex = 0; rowLevelIndex < rowLevels.length; rowLevelIndex++) {\n var level = rowLevels[rowLevelIndex];\n var rowspan = rowCount / level.length;\n var className;\n for (rowIndex = 0; rowIndex < level.length; rowIndex++) {\n className = level[rowIndex].className || '';\n if (level[rowIndex].allDay) {\n className = 'k-scheduler-times-all-day';\n }\n rows[rowspan * rowIndex] += '' + level[rowIndex].text + '';\n }\n }\n for (rowIndex = 0; rowIndex < rowCount; rowIndex++) {\n rowHeaderRows.push(rows[rowIndex]);\n }\n if (rowCount < 1) {\n return $();\n }\n return $('
' + table(rowHeaderRows) + '
');\n }\n function content() {\n return $('
' + '' + '');\n }\n var HINT = '
' + '
' + '
' + '
' + '
' + '
' + '
';\n kendo.ui.scheduler = {};\n var ResourceView = kendo.Class.extend({\n init: function (index, isRtl) {\n this._index = index;\n this._timeSlotCollections = [];\n this._daySlotCollections = [];\n this._isRtl = isRtl;\n },\n addTimeSlotCollection: function (startDate, endDate) {\n return this._addCollection(startDate, endDate, this._timeSlotCollections);\n },\n addDaySlotCollection: function (startDate, endDate) {\n return this._addCollection(startDate, endDate, this._daySlotCollections);\n },\n _addCollection: function (startDate, endDate, collections) {\n var collection = new SlotCollection(startDate, endDate, this._index, collections.length);\n collections.push(collection);\n return collection;\n },\n timeSlotCollectionCount: function () {\n return this._timeSlotCollections.length;\n },\n daySlotCollectionCount: function () {\n return this._daySlotCollections.length;\n },\n daySlotByPosition: function (x, y) {\n return this._slotByPosition(x, y, this._daySlotCollections);\n },\n timeSlotByPosition: function (x, y) {\n return this._slotByPosition(x, y, this._timeSlotCollections);\n },\n _slotByPosition: function (x, y, collections) {\n for (var collectionIndex = 0; collectionIndex < collections.length; collectionIndex++) {\n var collection = collections[collectionIndex];\n for (var slotIndex = 0; slotIndex < collection.count(); slotIndex++) {\n var slot = collection.at(slotIndex);\n var width = slot.offsetWidth;\n var height = slot.offsetHeight;\n var horizontalEnd = slot.offsetLeft + width;\n var verticalEnd = slot.offsetTop + height;\n var nextSlot = collection.at(slotIndex + 1);\n if (nextSlot) {\n if (nextSlot.offsetLeft != slot.offsetLeft) {\n if (this._isRtl) {\n horizontalEnd = slot.offsetLeft + (slot.offsetLeft - nextSlot.offsetLeft);\n } else {\n horizontalEnd = nextSlot.offsetLeft;\n }\n } else {\n verticalEnd = nextSlot.offsetTop;\n }\n }\n if (x >= slot.offsetLeft && x < horizontalEnd && y >= slot.offsetTop && y < verticalEnd) {\n return slot;\n }\n }\n }\n },\n refresh: function () {\n var collectionIndex;\n for (collectionIndex = 0; collectionIndex < this._daySlotCollections.length; collectionIndex++) {\n this._daySlotCollections[collectionIndex].refresh();\n }\n for (collectionIndex = 0; collectionIndex < this._timeSlotCollections.length; collectionIndex++) {\n this._timeSlotCollections[collectionIndex].refresh();\n }\n },\n timeSlotRanges: function (startTime, endTime) {\n var collections = this._timeSlotCollections;\n var start = this._startSlot(startTime, collections);\n if (!start.inRange && startTime >= start.slot.end) {\n start = null;\n }\n var end = start;\n if (startTime < endTime) {\n end = this._endSlot(endTime, collections);\n }\n if (end && !end.inRange && endTime <= end.slot.start) {\n end = null;\n }\n if (start === null && end === null) {\n return [];\n }\n if (start === null) {\n start = {\n inRange: true,\n slot: collections[end.slot.collectionIndex].first()\n };\n }\n if (end === null) {\n end = {\n inRange: true,\n slot: collections[start.slot.collectionIndex].last()\n };\n }\n return this._continuousRange(TimeSlotRange, collections, start, end);\n },\n daySlotRanges: function (startTime, endTime, isAllDay) {\n var collections = this._daySlotCollections;\n var start = this._startSlot(startTime, collections, isAllDay);\n if (!start.inRange && startTime >= start.slot.end) {\n start = null;\n }\n var end = start;\n if (startTime < endTime) {\n end = this._endSlot(endTime, collections, isAllDay);\n }\n if (end && !end.inRange && endTime <= end.slot.start) {\n end = null;\n }\n if (start === null && end === null) {\n return [];\n }\n if (start === null) {\n do {\n startTime += kendo.date.MS_PER_DAY;\n start = this._startSlot(startTime, collections, isAllDay);\n } while (!start.inRange && startTime >= start.slot.end);\n }\n if (end === null) {\n do {\n endTime -= kendo.date.MS_PER_DAY;\n end = this._endSlot(endTime, collections, isAllDay);\n } while (!end.inRange && endTime <= end.slot.start);\n }\n return this._continuousRange(DaySlotRange, collections, start, end);\n },\n _continuousRange: function (range, collections, start, end) {\n var startSlot = start.slot;\n var endSlot = end.slot;\n var startIndex = startSlot.collectionIndex;\n var endIndex = endSlot.collectionIndex;\n var ranges = [];\n for (var collectionIndex = startIndex; collectionIndex <= endIndex; collectionIndex++) {\n var collection = collections[collectionIndex];\n var first = collection.first();\n var last = collection.last();\n var head = false;\n var tail = false;\n if (collectionIndex == startIndex) {\n tail = !start.inRange;\n }\n if (collectionIndex == endIndex) {\n head = !end.inRange;\n }\n if (first.start < startSlot.start) {\n first = startSlot;\n }\n if (last.start > endSlot.start) {\n last = endSlot;\n }\n if (startIndex < endIndex) {\n if (collectionIndex == startIndex) {\n head = true;\n } else if (collectionIndex == endIndex) {\n tail = true;\n } else {\n head = tail = true;\n }\n }\n ranges.push(new range({\n start: first,\n end: last,\n collection: collection,\n head: head,\n tail: tail\n }));\n }\n return ranges;\n },\n slotRanges: function (event, isDay) {\n var startTime = event._startTime || kendo.date.toUtcTime(event.start);\n var endTime = event._endTime || kendo.date.toUtcTime(event.end);\n if (isDay === undefined) {\n isDay = event.isMultiDay();\n }\n if (isDay) {\n return this.daySlotRanges(startTime, endTime, event.isAllDay);\n }\n return this.timeSlotRanges(startTime, endTime);\n },\n ranges: function (startTime, endTime, isDay, isAllDay) {\n if (typeof startTime != 'number') {\n startTime = kendo.date.toUtcTime(startTime);\n }\n if (typeof endTime != 'number') {\n endTime = kendo.date.toUtcTime(endTime);\n }\n if (isDay) {\n return this.daySlotRanges(startTime, endTime, isAllDay);\n }\n return this.timeSlotRanges(startTime, endTime);\n },\n _startCollection: function (date, collections) {\n for (var collectionIndex = 0; collectionIndex < collections.length; collectionIndex++) {\n var collection = collections[collectionIndex];\n if (collection.startInRange(date)) {\n return collection;\n }\n }\n return null;\n },\n _endCollection: function (date, collections, isAllDay) {\n for (var collectionIndex = 0; collectionIndex < collections.length; collectionIndex++) {\n var collection = collections[collectionIndex];\n if (collection.endInRange(date, isAllDay)) {\n return collection;\n }\n }\n return null;\n },\n _getCollections: function (isDay) {\n return isDay ? this._daySlotCollections : this._timeSlotCollections;\n },\n continuousSlot: function (slot, reverse) {\n var pad = reverse ? -1 : 1;\n var collections = this._getCollections(slot.isDaySlot);\n var collection = collections[slot.collectionIndex + pad];\n return collection ? collection[reverse ? 'last' : 'first']() : undefined;\n },\n firstSlot: function () {\n var collections = this._getCollections(this.daySlotCollectionCount());\n return collections[0].first();\n },\n lastSlot: function () {\n var collections = this._getCollections(this.daySlotCollectionCount());\n return collections[collections.length - 1].last();\n },\n upSlot: function (slot, keepCollection) {\n var that = this;\n var moveToDaySlot = function (isDaySlot, collectionIndex, index) {\n var isFirstCell = index === 0;\n if (!keepCollection && !isDaySlot && isFirstCell && that.daySlotCollectionCount()) {\n return that._daySlotCollections[0].at(collectionIndex);\n }\n };\n if (!this.timeSlotCollectionCount()) {\n keepCollection = true;\n }\n return this._verticalSlot(slot, -1, moveToDaySlot);\n },\n downSlot: function (slot, keepCollection) {\n var that = this;\n var moveToTimeSlot = function (isDaySlot, collectionIndex, index) {\n if (!keepCollection && isDaySlot && that.timeSlotCollectionCount()) {\n return that._timeSlotCollections[index].at(0);\n }\n };\n if (!this.timeSlotCollectionCount()) {\n keepCollection = true;\n }\n return this._verticalSlot(slot, 1, moveToTimeSlot);\n },\n leftSlot: function (slot) {\n return this._horizontalSlot(slot, -1);\n },\n rightSlot: function (slot) {\n return this._horizontalSlot(slot, 1);\n },\n _horizontalSlot: function (slot, step) {\n var index = slot.index;\n var isDaySlot = slot.isDaySlot;\n var collectionIndex = slot.collectionIndex;\n var collections = this._getCollections(isDaySlot);\n if (isDaySlot) {\n index += step;\n } else {\n collectionIndex += step;\n }\n var collection = collections[collectionIndex];\n return collection ? collection.at(index) : undefined;\n },\n _verticalSlot: function (slot, step, swapCollection) {\n var index = slot.index;\n var isDaySlot = slot.isDaySlot;\n var collectionIndex = slot.collectionIndex;\n var collections = this._getCollections(isDaySlot);\n slot = swapCollection(isDaySlot, collectionIndex, index);\n if (slot) {\n return slot;\n }\n if (isDaySlot) {\n collectionIndex += step;\n } else {\n index += step;\n }\n var collection = collections[collectionIndex];\n return collection ? collection.at(index) : undefined;\n },\n _collection: function (index, multiday) {\n var collections = multiday ? this._daySlotCollections : this._timeSlotCollections;\n return collections[index];\n },\n _startSlot: function (time, collections, isAllDay) {\n var collection = this._startCollection(time, collections);\n var inRange = true;\n if (!collection) {\n collection = collections[0];\n inRange = false;\n }\n var slot = collection.slotByStartDate(time, isAllDay);\n if (!slot) {\n slot = collection.first();\n inRange = false;\n }\n return {\n slot: slot,\n inRange: inRange\n };\n },\n _endSlot: function (time, collections, isAllDay) {\n var collection = this._endCollection(time, collections, isAllDay);\n var inRange = true;\n if (!collection) {\n collection = collections[collections.length - 1];\n inRange = false;\n }\n var slot = collection.slotByEndDate(time, isAllDay);\n if (!slot) {\n slot = collection.last();\n inRange = false;\n }\n return {\n slot: slot,\n inRange: inRange\n };\n },\n getSlotCollection: function (index, isDay) {\n return this[isDay ? 'getDaySlotCollection' : 'getTimeSlotCollection'](index);\n },\n getTimeSlotCollection: function (index) {\n return this._timeSlotCollections[index];\n },\n getDaySlotCollection: function (index) {\n return this._daySlotCollections[index];\n }\n });\n var SlotRange = kendo.Class.extend({\n init: function (options) {\n $.extend(this, options);\n },\n innerHeight: function () {\n var collection = this.collection;\n var startIndex = this.start.index;\n var endIndex = this.end.index;\n var result = 0;\n for (var slotIndex = startIndex; slotIndex <= endIndex; slotIndex++) {\n result += collection.at(slotIndex).offsetHeight;\n }\n return result;\n },\n events: function () {\n return this.collection.events();\n },\n addEvent: function (event) {\n this.events().push(event);\n },\n startSlot: function () {\n if (this.start.offsetLeft > this.end.offsetLeft) {\n return this.end;\n }\n return this.start;\n },\n endSlot: function () {\n if (this.start.offsetLeft > this.end.offsetLeft) {\n return this.start;\n }\n return this.end;\n }\n });\n var TimeSlotRange = SlotRange.extend({\n innerHeight: function () {\n var collection = this.collection;\n var startIndex = this.start.index;\n var endIndex = this.end.index;\n var result = 0;\n for (var slotIndex = startIndex; slotIndex <= endIndex; slotIndex++) {\n result += collection.at(slotIndex).offsetHeight;\n }\n return result;\n },\n outerRect: function (start, end, snap) {\n return this._rect('offset', start, end, snap);\n },\n _rect: function (property, start, end, snap) {\n var top;\n var bottom;\n var left;\n var right;\n var startSlot = this.start;\n var endSlot = this.end;\n var isRtl = kendo.support.isRtl(startSlot.element);\n if (typeof start != 'number') {\n start = kendo.date.toUtcTime(start);\n }\n if (typeof end != 'number') {\n end = kendo.date.toUtcTime(end);\n }\n if (snap) {\n top = startSlot.offsetTop;\n bottom = endSlot.offsetTop + endSlot[property + 'Height'];\n if (isRtl) {\n left = endSlot.offsetLeft;\n right = startSlot.offsetLeft + startSlot[property + 'Width'];\n } else {\n left = startSlot.offsetLeft;\n right = endSlot.offsetLeft + endSlot[property + 'Width'];\n }\n } else {\n var startOffset = start - startSlot.start;\n if (startOffset < 0) {\n startOffset = 0;\n }\n var startSlotDuration = startSlot.end - startSlot.start;\n top = startSlot.offsetTop + startSlot[property + 'Height'] * startOffset / startSlotDuration;\n var endOffset = endSlot.end - end;\n if (endOffset < 0) {\n endOffset = 0;\n }\n var endSlotDuration = endSlot.end - endSlot.start;\n bottom = endSlot.offsetTop + endSlot[property + 'Height'] - endSlot[property + 'Height'] * endOffset / endSlotDuration;\n if (isRtl) {\n left = Math.round(endSlot.offsetLeft + endSlot[property + 'Width'] * endOffset / endSlotDuration);\n right = Math.round(startSlot.offsetLeft + startSlot[property + 'Width'] - startSlot[property + 'Width'] * startOffset / startSlotDuration);\n } else {\n left = Math.round(startSlot.offsetLeft + startSlot[property + 'Width'] * startOffset / startSlotDuration);\n right = Math.round(endSlot.offsetLeft + endSlot[property + 'Width'] - endSlot[property + 'Width'] * endOffset / endSlotDuration);\n }\n }\n return {\n top: top,\n bottom: bottom,\n left: left === 0 ? left : left + 1,\n right: right\n };\n },\n innerRect: function (start, end, snap) {\n return this._rect('client', start, end, snap);\n }\n });\n var DaySlotRange = SlotRange.extend({\n innerWidth: function () {\n var collection = this.collection;\n var startIndex = this.start.index;\n var endIndex = this.end.index;\n var result = 0;\n var width = startIndex !== endIndex ? 'offsetWidth' : 'clientWidth';\n for (var slotIndex = startIndex; slotIndex <= endIndex; slotIndex++) {\n result += collection.at(slotIndex)[width];\n }\n return result;\n }\n });\n var SlotCollection = kendo.Class.extend({\n init: function (startDate, endDate, groupIndex, collectionIndex) {\n this._slots = [];\n this._events = [];\n this._start = kendo.date.toUtcTime(startDate);\n this._end = kendo.date.toUtcTime(endDate);\n this._groupIndex = groupIndex;\n this._collectionIndex = collectionIndex;\n },\n refresh: function () {\n for (var slotIndex = 0; slotIndex < this._slots.length; slotIndex++) {\n this._slots[slotIndex].refresh();\n }\n },\n startInRange: function (date) {\n return this._start <= date && date < this._end;\n },\n endInRange: function (date, isAllDay) {\n var end = isAllDay ? date < this._end : date <= this._end;\n return this._start <= date && end;\n },\n slotByStartDate: function (date) {\n var time = date;\n if (typeof time != 'number') {\n time = kendo.date.toUtcTime(date);\n }\n for (var slotIndex = 0; slotIndex < this._slots.length; slotIndex++) {\n var slot = this._slots[slotIndex];\n if (slot.startInRange(time)) {\n return slot;\n }\n }\n return null;\n },\n slotByEndDate: function (date, allday) {\n var time = date;\n if (typeof time != 'number') {\n time = kendo.date.toUtcTime(date);\n }\n if (allday) {\n return this.slotByStartDate(date, false);\n }\n for (var slotIndex = 0; slotIndex < this._slots.length; slotIndex++) {\n var slot = this._slots[slotIndex];\n if (slot.endInRange(time)) {\n return slot;\n }\n }\n return null;\n },\n count: function () {\n return this._slots.length;\n },\n events: function () {\n return this._events;\n },\n addTimeSlot: function (element, start, end, isHorizontal) {\n var slot = new TimeSlot(element, start, end, this._groupIndex, this._collectionIndex, this._slots.length, isHorizontal);\n this._slots.push(slot);\n },\n addDaySlot: function (element, start, end, eventCount) {\n var slot = new DaySlot(element, start, end, this._groupIndex, this._collectionIndex, this._slots.length, eventCount);\n this._slots.push(slot);\n },\n first: function () {\n return this._slots[0];\n },\n last: function () {\n return this._slots[this._slots.length - 1];\n },\n at: function (index) {\n return this._slots[index];\n }\n });\n var Slot = kendo.Class.extend({\n init: function (element, start, end, groupIndex, collectionIndex, index) {\n this.element = element;\n this.clientWidth = element.clientWidth;\n this.clientHeight = element.clientHeight;\n this.offsetWidth = element.offsetWidth;\n this.offsetHeight = element.offsetHeight;\n this.offsetTop = element.offsetTop;\n this.offsetLeft = element.offsetLeft;\n this.start = start;\n this.end = end;\n this.element = element;\n this.groupIndex = groupIndex;\n this.collectionIndex = collectionIndex;\n this.index = index;\n this.isDaySlot = false;\n },\n startDate: function () {\n return kendo.timezone.toLocalDate(this.start);\n },\n endDate: function () {\n return kendo.timezone.toLocalDate(this.end);\n },\n startInRange: function (date) {\n return this.start <= date && date < this.end;\n },\n endInRange: function (date) {\n return this.start < date && date <= this.end;\n },\n startOffset: function () {\n return this.start;\n },\n endOffset: function () {\n return this.end;\n }\n });\n var TimeSlot = Slot.extend({\n init: function (element, start, end, groupIndex, collectionIndex, index, isHorizontal) {\n Slot.fn.init.apply(this, arguments);\n this.isHorizontal = isHorizontal ? true : false;\n },\n refresh: function () {\n var element = this.element;\n this.clientWidth = element.clientWidth;\n this.clientHeight = element.clientHeight;\n this.offsetWidth = element.offsetWidth;\n this.offsetHeight = element.offsetHeight;\n this.offsetTop = element.offsetTop;\n this.offsetLeft = element.offsetLeft;\n },\n offsetX: function (rtl, offset) {\n if (rtl) {\n return this.offsetLeft + offset;\n } else {\n return this.offsetLeft + offset;\n }\n },\n startInRange: function (date) {\n return this.start <= date && date < this.end;\n },\n endInRange: function (date) {\n return this.start < date && date <= this.end;\n },\n startOffset: function (x, y, snap) {\n if (snap) {\n return this.start;\n }\n var offset = $(this.element).offset();\n var duration = this.end - this.start;\n var difference;\n var time;\n if (this.isHorizontal) {\n var isRtl = kendo.support.isRtl(this.element);\n difference = x - offset.left;\n time = Math.floor(duration * (difference / this.offsetWidth));\n if (isRtl) {\n return this.start + duration - time;\n }\n } else {\n difference = y - offset.top;\n time = Math.floor(duration * (difference / this.offsetHeight));\n }\n return this.start + time;\n },\n endOffset: function (x, y, snap) {\n if (snap) {\n return this.end;\n }\n var offset = $(this.element).offset();\n var duration = this.end - this.start;\n var difference;\n var time;\n if (this.isHorizontal) {\n var isRtl = kendo.support.isRtl(this.element);\n difference = x - offset.left;\n time = Math.floor(duration * (difference / this.offsetWidth));\n if (isRtl) {\n return this.start + duration - time;\n }\n } else {\n difference = y - offset.top;\n time = Math.floor(duration * (difference / this.offsetHeight));\n }\n return this.start + time;\n }\n });\n var DaySlot = Slot.extend({\n init: function (element, start, end, groupIndex, collectionIndex, index, eventCount) {\n Slot.fn.init.apply(this, arguments);\n this.eventCount = eventCount;\n this.isDaySlot = true;\n if (this.element.children.length) {\n this.firstChildHeight = this.element.children[0].offsetHeight + 3;\n this.firstChildTop = this.element.children[0].offsetTop;\n } else {\n this.firstChildHeight = 3;\n this.firstChildTop = 0;\n }\n },\n refresh: function () {\n this.clientHeight = this.element.clientHeight;\n this.offsetTop = this.element.offsetTop;\n },\n startDate: function () {\n var date = new Date(this.start);\n return kendo.timezone.apply(date, 'Etc/UTC');\n },\n endDate: function () {\n var date = new Date(this.end);\n return kendo.timezone.apply(date, 'Etc/UTC');\n },\n startInRange: function (date) {\n return this.start <= date && date < this.end;\n },\n endInRange: function (date) {\n return this.start < date && date <= this.end;\n }\n });\n var scrollbarWidth;\n function scrollbar() {\n scrollbarWidth = scrollbarWidth ? scrollbarWidth : kendo.support.scrollbar();\n return scrollbarWidth;\n }\n kendo.ui.SchedulerView = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this._normalizeOptions();\n this._scrollbar = scrollbar();\n this._isRtl = kendo.support.isRtl(element);\n this._resizeHint = $();\n this._moveHint = $();\n this._cellId = kendo.guid();\n this._resourcesForGroups();\n this._selectedSlots = [];\n },\n _normalizeOptions: function () {\n var options = this.options;\n if (options.startTime) {\n options.startTime.setMilliseconds(0);\n }\n if (options.endTime) {\n options.endTime.setMilliseconds(0);\n }\n if (options.workDayStart) {\n options.workDayStart.setMilliseconds(0);\n }\n if (options.workDayEnd) {\n options.workDayEnd.setMilliseconds(0);\n }\n },\n _isMobile: function () {\n var options = this.options;\n return options.mobile === true && kendo.support.mobileOS || options.mobile === 'phone' || options.mobile === 'tablet';\n },\n _isMobilePhoneView: function () {\n var options = this.options;\n return options.mobile === true && kendo.support.mobileOS && !kendo.support.mobileOS.tablet || options.mobile === 'phone';\n },\n _addResourceView: function () {\n var resourceView = new ResourceView(this.groups.length, this._isRtl);\n this.groups.push(resourceView);\n return resourceView;\n },\n dateForTitle: function () {\n return kendo.format(this.options.selectedDateFormat, this.startDate(), this.endDate());\n },\n shortDateForTitle: function () {\n return kendo.format(this.options.selectedShortDateFormat, this.startDate(), this.endDate());\n },\n _changeGroup: function (selection, previous) {\n var method = previous ? 'prevGroupSlot' : 'nextGroupSlot';\n var slot = this[method](selection.start, selection.groupIndex, selection.isAllDay);\n if (slot) {\n selection.groupIndex += previous ? -1 : 1;\n }\n return slot;\n },\n _changeGroupContinuously: function () {\n return null;\n },\n _changeViewPeriod: function () {\n return false;\n },\n _horizontalSlots: function (selection, ranges, multiple, reverse) {\n var method = reverse ? 'leftSlot' : 'rightSlot';\n var startSlot = ranges[0].start;\n var endSlot = ranges[ranges.length - 1].end;\n var group = this.groups[selection.groupIndex];\n if (!multiple) {\n var slot = this._normalizeHorizontalSelection(selection, ranges, reverse);\n if (slot) {\n startSlot = endSlot = slot;\n }\n }\n startSlot = group[method](startSlot);\n endSlot = group[method](endSlot);\n if (!multiple && !this._isVerticallyGrouped() && (!startSlot || !endSlot)) {\n startSlot = endSlot = this._changeGroup(selection, reverse);\n }\n var continuousSlot;\n if (!startSlot || !endSlot) {\n continuousSlot = this._continuousSlot(selection, ranges, reverse);\n continuousSlot = this._changeGroupContinuously(selection, continuousSlot, multiple, reverse);\n if (continuousSlot) {\n startSlot = endSlot = continuousSlot;\n }\n }\n return {\n startSlot: startSlot,\n endSlot: endSlot\n };\n },\n _verticalSlots: function (selection, ranges, multiple, reverse) {\n var startSlot = ranges[0].start;\n var endSlot = ranges[ranges.length - 1].end;\n var group = this.groups[selection.groupIndex];\n if (!multiple) {\n var slot = this._normalizeVerticalSelection(selection, ranges, reverse);\n if (slot) {\n startSlot = endSlot = slot;\n }\n }\n var method = reverse ? 'upSlot' : 'downSlot';\n startSlot = group[method](startSlot, multiple);\n endSlot = group[method](endSlot, multiple);\n if (!multiple && this._isVerticallyGrouped() && (!startSlot || !endSlot)) {\n startSlot = endSlot = this._changeGroup(selection, reverse);\n }\n return {\n startSlot: startSlot,\n endSlot: endSlot\n };\n },\n _normalizeHorizontalSelection: function () {\n return null;\n },\n _normalizeVerticalSelection: function (selection, ranges, reverse) {\n var slot;\n if (reverse) {\n slot = ranges[0].start;\n } else {\n slot = ranges[ranges.length - 1].end;\n }\n return slot;\n },\n _continuousSlot: function () {\n return null;\n },\n constrainSelection: function (selection) {\n var group = this.groups[0];\n var slot;\n if (!this.inRange(selection)) {\n slot = group.firstSlot();\n selection.isAllDay = slot.isDaySlot;\n selection.start = slot.startDate();\n selection.end = slot.endDate();\n } else {\n if (!group.daySlotCollectionCount()) {\n selection.isAllDay = false;\n }\n }\n if (!this.groups[selection.groupIndex]) {\n selection.groupIndex = 0;\n }\n },\n move: function (selection, key, shift) {\n var handled = false;\n var group = this.groups[selection.groupIndex];\n if (!group.timeSlotCollectionCount()) {\n selection.isAllDay = true;\n }\n var ranges = group.ranges(selection.start, selection.end, selection.isAllDay, false);\n var startSlot, endSlot, reverse, slots;\n if (key === keys.DOWN || key === keys.UP) {\n handled = true;\n reverse = key === keys.UP;\n this._updateDirection(selection, ranges, shift, reverse, true);\n slots = this._verticalSlots(selection, ranges, shift, reverse);\n if (!slots.startSlot && !shift && this._changeViewPeriod(selection, reverse, true)) {\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 (!slots.startSlot && !shift && this._changeViewPeriod(selection, reverse, false)) {\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.isAllDay = startSlot.isDaySlot;\n selection.start = startSlot.startDate();\n selection.end = endSlot.endDate();\n }\n selection.events = [];\n }\n return handled;\n },\n moveToEventInGroup: function (group, slot, selectedEvents, prev) {\n var events = group._continuousEvents || [];\n var found, event;\n var pad = prev ? -1 : 1;\n var length = events.length;\n var idx = prev ? length - 1 : 0;\n while (idx < length && idx > -1) {\n event = events[idx];\n if (!prev && event.start.startDate() >= slot.startDate() || prev && event.start.startDate() <= slot.startDate()) {\n if (selectedEvents.length) {\n event = events[idx + pad];\n }\n if (event && $.inArray(event.uid, selectedEvents) === -1) {\n found = !!event;\n break;\n }\n }\n idx += pad;\n }\n return event;\n },\n moveToEvent: function (selection, prev) {\n var groupIndex = selection.groupIndex;\n var group = this.groups[groupIndex];\n var slot = group.ranges(selection.start, selection.end, selection.isAllDay, false)[0].start;\n var length = this.groups.length;\n var pad = prev ? -1 : 1;\n var events = selection.events;\n var event;\n while (groupIndex < length && groupIndex > -1) {\n event = this.moveToEventInGroup(group, slot, events, prev);\n groupIndex += pad;\n group = this.groups[groupIndex];\n if (!group || event) {\n break;\n }\n events = [];\n if (prev) {\n slot = group.lastSlot();\n } else {\n slot = group.firstSlot(true);\n }\n }\n if (event) {\n selection.events = [event.uid];\n selection.start = event.start.startDate();\n selection.end = event.end.endDate();\n selection.isAllDay = event.start.isDaySlot;\n selection.groupIndex = event.start.groupIndex;\n }\n return !!event;\n },\n current: function (candidate) {\n if (candidate !== undefined) {\n this._current = candidate;\n if (this.content.has(candidate)) {\n this._scrollTo(candidate, this.content[0]);\n }\n } else {\n return this._current;\n }\n },\n select: function (selection) {\n this.clearSelection();\n if (!this._selectEvents(selection)) {\n this._selectSlots(selection);\n }\n },\n _selectSlots: function (selection) {\n var isAllDay = selection.isAllDay;\n var group = this.groups[selection.groupIndex];\n if (!group.timeSlotCollectionCount()) {\n isAllDay = true;\n }\n this._selectedSlots = [];\n var ranges = group.ranges(selection.start, selection.end, isAllDay, false);\n var element;\n var slot;\n for (var rangeIndex = 0; rangeIndex < ranges.length; rangeIndex++) {\n var range = ranges[rangeIndex];\n var collection = range.collection;\n for (var slotIndex = range.start.index; slotIndex <= range.end.index; slotIndex++) {\n slot = collection.at(slotIndex);\n element = slot.element;\n element.setAttribute('aria-selected', true);\n addSelectedState(element);\n this._selectedSlots.push({\n start: slot.startDate(),\n end: slot.endDate(),\n element: element\n });\n }\n }\n if (selection.backward) {\n element = ranges[0].start.element;\n }\n this.current(element);\n },\n _selectEvents: function (selection) {\n var found = false;\n var events = selection.events;\n var groupEvents = this.groups[selection.groupIndex]._continuousEvents || [];\n var idx, length = groupEvents.length;\n if (!events[0] || !groupEvents[0]) {\n return found;\n }\n var result = $();\n selection.events = [];\n for (idx = 0; idx < length; idx++) {\n if ($.inArray(groupEvents[idx].uid, events) > -1) {\n result = result.add(groupEvents[idx].element);\n selection.events.push(groupEvents[idx].uid);\n }\n }\n if (result[0]) {\n result.addClass('k-state-selected').attr('aria-selected', true);\n this.current(result.last()[0]);\n this._selectedSlots = [];\n found = true;\n }\n return found;\n },\n inRange: function (options) {\n var startDate = this.startDate();\n var endDate = kendo.date.addDays(this.endDate(), 1);\n var start = options.start;\n var end = options.end;\n return startDate <= start && start < endDate && startDate < end && end <= endDate;\n },\n _resourceValue: function (resource, item) {\n if (resource.valuePrimitive) {\n item = kendo.getter(resource.dataValueField)(item);\n }\n return item;\n },\n _resourceBySlot: function (slot) {\n var resources = this.groupedResources;\n var result = {};\n if (resources.length) {\n var resourceIndex = slot.groupIndex;\n for (var idx = resources.length - 1; idx >= 0; idx--) {\n var resource = resources[idx];\n var value = this._resourceValue(resource, resource.dataSource.view()[resourceIndex % resource.dataSource.total()]);\n if (resource.multiple) {\n value = [value];\n }\n var setter = kendo.setter(resource.field);\n setter(result, value);\n resourceIndex = Math.floor(resourceIndex / resource.dataSource.total());\n }\n }\n return result;\n },\n _createResizeHint: function (left, top, width, height) {\n return $(HINT).css({\n left: left,\n top: top,\n width: width,\n height: height\n });\n },\n _removeResizeHint: function () {\n this._resizeHint.remove();\n this._resizeHint = $();\n },\n _removeMoveHint: function () {\n this._moveHint.remove();\n this._moveHint = $();\n },\n _scrollTo: function (element, container) {\n var elementOffset = element.offsetTop, elementOffsetDir = element.offsetHeight, containerScroll = container.scrollTop, containerOffsetDir = container.clientHeight, bottomDistance = elementOffset + elementOffsetDir, result = 0;\n if (containerScroll > elementOffset) {\n result = elementOffset;\n } else if (bottomDistance > containerScroll + containerOffsetDir) {\n if (elementOffsetDir <= containerOffsetDir) {\n result = bottomDistance - containerOffsetDir;\n } else {\n result = elementOffset;\n }\n } else {\n result = containerScroll;\n }\n container.scrollTop = result;\n },\n _shouldInverseResourceColor: function (resource) {\n var resourceColorIsDark = new Color(resource.color).isDark();\n var currentColor = this.element.css('color');\n var currentColorIsDark = new Color(currentColor).isDark();\n return resourceColorIsDark == currentColorIsDark;\n },\n _eventTmpl: function (template, wrapper) {\n var options = this.options, settings = $.extend({}, kendo.Template, options.templateSettings), paramName = settings.paramName, html = '', type = typeof template, state = {\n storage: {},\n count: 0\n };\n if (type === 'function') {\n state.storage['tmpl' + state.count] = template;\n html += '#=this.tmpl' + state.count + '(' + paramName + ')#';\n state.count++;\n } else if (type === 'string') {\n html += template;\n }\n var tmpl = kendo.template(kendo.format(wrapper, html), settings);\n if (state.count > 0) {\n tmpl = $.proxy(tmpl, state.storage);\n }\n return tmpl;\n },\n eventResources: function (event) {\n var resources = [], options = this.options;\n if (!options.resources) {\n return resources;\n }\n for (var idx = 0; idx < options.resources.length; idx++) {\n var resource = options.resources[idx];\n var field = resource.field;\n var eventResources = kendo.getter(field)(event);\n if (eventResources == null) {\n continue;\n }\n if (!resource.multiple) {\n eventResources = [eventResources];\n }\n var data = resource.dataSource.view();\n for (var resourceIndex = 0; resourceIndex < eventResources.length; resourceIndex++) {\n var eventResource = null;\n var value = eventResources[resourceIndex];\n if (!resource.valuePrimitive) {\n value = kendo.getter(resource.dataValueField)(value);\n }\n for (var dataIndex = 0; dataIndex < data.length; dataIndex++) {\n if (data[dataIndex].get(resource.dataValueField) == value) {\n eventResource = data[dataIndex];\n break;\n }\n }\n if (eventResource !== null) {\n var resourceColor = kendo.getter(resource.dataColorField)(eventResource);\n resources.push({\n field: resource.field,\n title: resource.title,\n name: resource.name,\n text: kendo.getter(resource.dataTextField)(eventResource),\n value: value,\n color: resourceColor\n });\n }\n }\n }\n return resources;\n },\n createLayout: function (layout) {\n var allDayIndex = -1;\n if (!layout.rows) {\n layout.rows = [];\n }\n for (var idx = 0; idx < layout.rows.length; idx++) {\n if (layout.rows[idx].allDay) {\n allDayIndex = idx;\n break;\n }\n }\n var allDaySlot = layout.rows[allDayIndex];\n if (allDayIndex >= 0) {\n layout.rows.splice(allDayIndex, 1);\n }\n var columnLevels = this.columnLevels = levels(layout, 'columns');\n var rowLevels = this.rowLevels = levels(layout, 'rows');\n this.table = $('
');\n var rowCount = rowLevels[rowLevels.length - 1].length;\n this.table.append(this._topSection(columnLevels, allDaySlot, rowCount));\n this.table.append(this._bottomSection(columnLevels, rowLevels, rowCount));\n this.element.append(this.table);\n this._scroller();\n },\n refreshLayout: function () {\n var that = this, toolbar = that.element.find('>.k-scheduler-toolbar'), height = that.element.innerHeight(), scrollbar = this._scrollbar, headerHeight = 0, paddingDirection = this._isRtl ? 'left' : 'right';\n for (var idx = 0; idx < toolbar.length; idx++) {\n height -= toolbar.eq(idx).outerHeight();\n }\n if (that.datesHeader) {\n headerHeight = that.datesHeader.outerHeight();\n }\n if (that.timesHeader && that.timesHeader.outerHeight() > headerHeight) {\n headerHeight = that.timesHeader.outerHeight();\n }\n if (that.datesHeader && that.timesHeader) {\n var datesHeaderRows = that.datesHeader.find('table:first tr');\n that.timesHeader.find('tr').height(function (index) {\n $(this).height(datesHeaderRows.eq(index).height());\n });\n }\n if (headerHeight) {\n height -= headerHeight;\n }\n if (that.footer) {\n height -= that.footer.outerHeight();\n }\n var isSchedulerHeightSet = function (el) {\n var initialHeight, newHeight;\n if (el[0].style.height) {\n return true;\n } else {\n initialHeight = el.height();\n }\n el.height('auto');\n newHeight = el.height();\n if (initialHeight != newHeight) {\n el.height('');\n return true;\n }\n el.height('');\n return false;\n };\n var contentDiv = that.content[0], scrollbarWidth = !kendo.support.kineticScrollNeeded ? scrollbar : 0;\n if (isSchedulerHeightSet(that.element)) {\n if (height > scrollbar * 2) {\n that.content.height(height);\n } else {\n that.content.height(scrollbar * 2 + 1);\n }\n that.times.height(contentDiv.clientHeight);\n var timesTable = that.times.find('table');\n if (timesTable.length) {\n timesTable.height(that.content.find('table')[0].clientHeight);\n }\n }\n if (contentDiv.offsetWidth - contentDiv.clientWidth > 0) {\n that.table.addClass('k-scrollbar-v');\n that.datesHeader.css('padding-' + paddingDirection, scrollbarWidth - parseInt(that.datesHeader.children().css('border-' + paddingDirection + '-width'), 10));\n } else {\n that.datesHeader.css('padding-' + paddingDirection, '');\n }\n if (contentDiv.offsetHeight - contentDiv.clientHeight > 0 || contentDiv.clientHeight > that.content.children('.k-scheduler-table').height()) {\n that.table.addClass('k-scrollbar-h');\n } else {\n that.table.removeClass('k-scrollbar-h');\n }\n },\n _topSection: function (columnLevels, allDaySlot, rowCount) {\n this.timesHeader = timesHeader(columnLevels.length, allDaySlot, rowCount);\n var columnCount = columnLevels[columnLevels.length - 1].length;\n this.datesHeader = datesHeader(columnLevels, columnCount, allDaySlot);\n return $('').append(this.timesHeader.add(this.datesHeader).wrap('').append(this.times.add(this.content).wrap('
').parent());\n },\n _bottomSection: function (columnLevels, rowLevels, rowCount) {\n this.times = times(rowLevels, rowCount);\n this.content = content(columnLevels[columnLevels.length - 1], rowLevels[rowLevels.length - 1]);\n return $('
').parent());\n },\n _scroller: function () {\n var that = this;\n this.content.bind('scroll' + NS, function () {\n that.datesHeader.find('>.k-scheduler-header-wrap').scrollLeft(this.scrollLeft);\n that.times.scrollTop(this.scrollTop);\n });\n var touchScroller = kendo.touchScroller(this.content, {\n avoidScrolling: function (e) {\n return $(e.event.target).closest('.k-event.k-event-active').length > 0;\n }\n });\n if (touchScroller && touchScroller.movable) {\n this._touchScroller = touchScroller;\n this.content = touchScroller.scrollElement;\n touchScroller.movable.bind('change', function (e) {\n that.datesHeader.find('>.k-scheduler-header-wrap').scrollLeft(-e.sender.x);\n that.times.scrollTop(-e.sender.y);\n });\n }\n },\n _resourcesForGroups: function () {\n var result = [];\n var groups = this.options.group;\n var resources = this.options.resources;\n groups = groups && groups.resources ? groups.resources : [];\n if (resources && groups.length) {\n for (var idx = 0, length = resources.length; idx < length; idx++) {\n for (var groupIdx = 0, groupLength = groups.length; groupIdx < groupLength; groupIdx++) {\n if (resources[idx].name === groups[groupIdx]) {\n result.push(resources[idx]);\n }\n }\n }\n }\n this.groupedResources = result;\n },\n _createColumnsLayout: function (resources, inner, template) {\n return createLayoutConfiguration('columns', resources, inner, template);\n },\n _groupOrientation: function () {\n var groups = this.options.group;\n return groups && groups.resources ? groups.orientation : 'horizontal';\n },\n _isVerticallyGrouped: function () {\n return this.groupedResources.length && this._groupOrientation() === 'vertical';\n },\n _createRowsLayout: function (resources, inner, template) {\n return createLayoutConfiguration('rows', resources, inner, template);\n },\n selectionByElement: function () {\n return null;\n },\n clearSelection: function () {\n this.content.find('.k-state-selected').removeAttr('id').attr('aria-selected', false).removeClass('k-state-selected');\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(this);\n if (that.table) {\n kendo.destroy(that.table);\n that.table.remove();\n }\n that.groups = null;\n that.table = null;\n that.content = null;\n that.times = null;\n that.datesHeader = null;\n that.timesHeader = null;\n that.footer = null;\n that._resizeHint = null;\n that._moveHint = null;\n },\n calendarInfo: function () {\n return kendo.getCulture().calendars.standard;\n },\n prevGroupSlot: function (date, groupIndex, isDay) {\n var collection;\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 if (this._isVerticallyGrouped()) {\n if (!group.timeSlotCollectionCount()) {\n collection = group._collection(group.daySlotCollectionCount() - 1, true);\n return collection.at(slot.index);\n } else {\n collection = group._collection(isDay ? slot.index : slot.collectionIndex, false);\n return collection.last();\n }\n } else {\n if (!group.timeSlotCollectionCount()) {\n collection = group._collection(slot.collectionIndex, true);\n return collection.last();\n } else {\n collection = group._collection(isDay ? 0 : group.timeSlotCollectionCount() - 1, isDay);\n return isDay ? collection.last() : collection.at(slot.index);\n }\n }\n },\n nextGroupSlot: function (date, groupIndex, isDay) {\n var collection;\n var group = this.groups[groupIndex];\n var slot = group.ranges(date, date, isDay, false)[0].start;\n var daySlotCollectionCount;\n if (groupIndex >= this.groups.length - 1) {\n return;\n }\n if (this._isVerticallyGrouped()) {\n if (!group.timeSlotCollectionCount()) {\n collection = group._collection(0, true);\n return collection.at(slot.index);\n } else {\n daySlotCollectionCount = group.daySlotCollectionCount();\n collection = group._collection(daySlotCollectionCount ? 0 : slot.collectionIndex, daySlotCollectionCount);\n return isDay ? collection.first() : collection.at(slot.collectionIndex);\n }\n } else {\n if (!group.timeSlotCollectionCount()) {\n collection = group._collection(slot.collectionIndex, true);\n return collection.first();\n } else {\n collection = group._collection(0, isDay);\n return isDay ? collection.first() : collection.at(slot.index);\n }\n }\n },\n _eventOptionsForMove: function () {\n return {};\n },\n _updateEventForResize: function () {\n return;\n },\n _updateEventForSelection: function (event) {\n return event;\n }\n });\n function collidingEvents(elements, start, end) {\n var idx, index, startIndex, overlaps, endIndex;\n for (idx = elements.length - 1; idx >= 0; idx--) {\n index = rangeIndex(elements[idx]);\n startIndex = index.start;\n endIndex = index.end;\n overlaps = startIndex <= start && endIndex >= start;\n if (overlaps || startIndex >= start && endIndex <= end || start <= startIndex && end >= startIndex) {\n if (startIndex < start) {\n start = startIndex;\n }\n if (endIndex > end) {\n end = endIndex;\n }\n }\n }\n return eventsForSlot(elements, start, end);\n }\n function rangeIndex(eventElement) {\n return {\n start: eventElement.start,\n end: eventElement.end\n };\n }\n function eventsForSlot(elements, slotStart, slotEnd) {\n var events = [];\n for (var idx = 0; idx < elements.length; idx++) {\n var event = rangeIndex(elements[idx]);\n if (event.start < slotStart && event.end > slotStart || event.start >= slotStart && event.end <= slotEnd) {\n events.push(elements[idx]);\n }\n }\n return events;\n }\n function createColumns(eventElements) {\n return _createColumns(eventElements);\n }\n function createRows(eventElements) {\n return _createColumns(eventElements);\n }\n var Color = function (value) {\n var color = this, formats = Color.formats, re, processor, parts, i, channels;\n if (arguments.length === 1) {\n value = color.resolveColor(value);\n for (i = 0; i < formats.length; i++) {\n re = formats[i].re;\n processor = formats[i].process;\n parts = re.exec(value);\n if (parts) {\n channels = processor(parts);\n color.r = channels[0];\n color.g = channels[1];\n color.b = channels[2];\n }\n }\n } else {\n color.r = arguments[0];\n color.g = arguments[1];\n color.b = arguments[2];\n }\n color.r = color.normalizeByte(color.r);\n color.g = color.normalizeByte(color.g);\n color.b = color.normalizeByte(color.b);\n };\n Color.prototype = {\n resolveColor: function (value) {\n value = value || '#000';\n if (value.charAt(0) == '#') {\n value = value.substr(1, 6);\n }\n value = value.replace(/ /g, '');\n value = value.toLowerCase();\n value = Color.namedColors[value] || value;\n return value;\n },\n normalizeByte: function (value) {\n return value < 0 || isNaN(value) ? 0 : value > 255 ? 255 : value;\n },\n percBrightness: function () {\n var color = this;\n return math.sqrt(0.241 * color.r * color.r + 0.691 * color.g * color.g + 0.068 * color.b * color.b);\n },\n isDark: function () {\n var color = this;\n var brightnessValue = color.percBrightness();\n return brightnessValue < 180;\n }\n };\n Color.formats = [\n {\n re: /^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$/,\n process: function (parts) {\n return [\n parseInt(parts[1], 10),\n parseInt(parts[2], 10),\n parseInt(parts[3], 10)\n ];\n }\n },\n {\n re: /^(\\w{2})(\\w{2})(\\w{2})$/,\n process: function (parts) {\n return [\n parseInt(parts[1], 16),\n parseInt(parts[2], 16),\n parseInt(parts[3], 16)\n ];\n }\n },\n {\n re: /^(\\w{1})(\\w{1})(\\w{1})$/,\n process: function (parts) {\n return [\n parseInt(parts[1] + parts[1], 16),\n parseInt(parts[2] + parts[2], 16),\n parseInt(parts[3] + parts[3], 16)\n ];\n }\n }\n ];\n Color.namedColors = {\n aqua: '00ffff',\n azure: 'f0ffff',\n beige: 'f5f5dc',\n black: '000000',\n blue: '0000ff',\n brown: 'a52a2a',\n coral: 'ff7f50',\n cyan: '00ffff',\n darkblue: '00008b',\n darkcyan: '008b8b',\n darkgray: 'a9a9a9',\n darkgreen: '006400',\n darkorange: 'ff8c00',\n darkred: '8b0000',\n dimgray: '696969',\n fuchsia: 'ff00ff',\n gold: 'ffd700',\n goldenrod: 'daa520',\n gray: '808080',\n green: '008000',\n greenyellow: 'adff2f',\n indigo: '4b0082',\n ivory: 'fffff0',\n khaki: 'f0e68c',\n lightblue: 'add8e6',\n lightgrey: 'd3d3d3',\n lightgreen: '90ee90',\n lightpink: 'ffb6c1',\n lightyellow: 'ffffe0',\n lime: '00ff00',\n limegreen: '32cd32',\n linen: 'faf0e6',\n magenta: 'ff00ff',\n maroon: '800000',\n mediumblue: '0000cd',\n navy: '000080',\n olive: '808000',\n orange: 'ffa500',\n orangered: 'ff4500',\n orchid: 'da70d6',\n pink: 'ffc0cb',\n plum: 'dda0dd',\n purple: '800080',\n red: 'ff0000',\n royalblue: '4169e1',\n salmon: 'fa8072',\n silver: 'c0c0c0',\n skyblue: '87ceeb',\n slateblue: '6a5acd',\n slategray: '708090',\n snow: 'fffafa',\n steelblue: '4682b4',\n tan: 'd2b48c',\n teal: '008080',\n tomato: 'ff6347',\n turquoise: '40e0d0',\n violet: 'ee82ee',\n wheat: 'f5deb3',\n white: 'ffffff',\n whitesmoke: 'f5f5f5',\n yellow: 'ffff00',\n yellowgreen: '9acd32'\n };\n function _createColumns(eventElements) {\n var columns = [];\n for (var idx = 0; idx < eventElements.length; idx++) {\n var event = eventElements[idx];\n var eventRange = rangeIndex(event);\n var column = null;\n for (var j = 0, columnLength = columns.length; j < columnLength; j++) {\n var endOverlaps = eventRange.start > columns[j].end;\n if (eventRange.start < columns[j].start || endOverlaps) {\n column = columns[j];\n if (column.end < eventRange.end) {\n column.end = eventRange.end;\n }\n break;\n }\n }\n if (!column) {\n column = {\n start: eventRange.start,\n end: eventRange.end,\n events: []\n };\n columns.push(column);\n }\n column.events.push(event);\n }\n return columns;\n }\n function createLayoutConfiguration(name, resources, inner, template) {\n var resource = resources[0];\n if (resource) {\n var configuration = [];\n var data = resource.dataSource.view();\n for (var dataIndex = 0; dataIndex < data.length; dataIndex++) {\n var obj = {\n text: template({\n text: kendo.htmlEncode(kendo.getter(resource.dataTextField)(data[dataIndex])),\n color: kendo.getter(resource.dataColorField)(data[dataIndex]),\n field: resource.field,\n title: resource.title,\n name: resource.name,\n value: kendo.getter(resource.dataValueField)(data[dataIndex])\n }),\n className: 'k-slot-cell'\n };\n obj[name] = createLayoutConfiguration(name, resources.slice(1), inner, template);\n configuration.push(obj);\n }\n return configuration;\n }\n return inner;\n }\n function groupEqFilter(value) {\n return function (item) {\n if ($.isArray(item) || item instanceof kendo.data.ObservableArray) {\n for (var idx = 0; idx < item.length; idx++) {\n if (item[idx] == value) {\n return true;\n }\n }\n return false;\n }\n return item == value;\n };\n }\n var selectedStateRegExp = /\\s*k-state-selected/;\n function addSelectedState(cell) {\n cell.className = cell.className.replace(selectedStateRegExp, '') + ' k-state-selected';\n }\n $.extend(ui.SchedulerView, {\n createColumns: createColumns,\n createRows: createRows,\n rangeIndex: rangeIndex,\n collidingEvents: collidingEvents,\n groupEqFilter: groupEqFilter\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/"}