{"version":3,"sources":["kendo.gantt.js"],"names":["f","define","$","normalizeText","text","String","replace","REPLACE_REGEX","SPACE","objectKey","object","key","parts","push","sort","join","hashKey","str","i","hash","length","charCodeAt","zeroSize","width","height","baseline","measureText","style","measureBox","TextMetrics","current","measure","LRUCache","DEFAULT_OPTIONS","defaultMeasureBox","window","kendo","util","Class","extend","init","size","this","_size","_length","_map","put","value","map","entry","_head","_tail","newer","older","get","baselineMarkerSize","document","createElement","cssText","options","_cache","styleKey","cacheKey","cachedResult","baselineMarker","textStr","box","_baselineMarker","cloneNode","textContent","appendChild","body","offsetWidth","offsetHeight","offsetTop","parentNode","removeChild","marker","deepExtend","jQuery","amd","a1","a2","a3","undefined","selector","uid","attr","trimOptions","name","prefix","remove","edit","add","navigate","focusTable","table","direct","wrapper","parents","scrollPositions","scrollableParents","TABINDEX","each","index","parent","scrollTop","setActive","e","focus","element","parentsUntil","filter","computedStyle","getComputedStyles","overflow","defaultCommands","keys","F10","supportsMedia","mobileOS","support","Widget","ui","ObservableObject","data","ObservableArray","Query","isArray","inArray","isFunction","proxy","isPlainObject","outerWidth","_outerWidth","outerHeight","_outerHeight","defaultIndicatorWidth","NS","PERCENTAGE_FORMAT","CLICK","STRING","ARIA_DESCENDANT","ARIA_LABEL","ACTIVE_CELL","DOT","TASK_DELETE_CONFIRM","DEPENDENCY_DELETE_CONFIRM","TOGGLE_BUTTON_TEMPLATE","template","BUTTON_TEMPLATE","COMMAND_BUTTON_TEMPLATE","VIEWS_DROPDOWN_TEMPLATE","HEADER_VIEWS_TEMPLATE","ganttStyles","plannedTasks","rowHeight","content","listWrapper","list","timelineWrapper","timeline","splitBarWrapper","splitBar","splitBarHover","popupWrapper","popupList","resizeHandle","icon","item","line","buttonDelete","buttonCancel","buttonSave","buttonToggle","primary","hovered","selected","focused","gridHeader","gridHeaderWrap","gridContent","tasks","popup","form","editForm","formContainer","resourcesFormContainer","message","buttonsContainer","button","editField","editLabel","resourcesField","toolbar","headerWrapper","footerWrapper","views","viewsWrapper","viewsDropdown","iconPlus","iconPdf","iconToggle","viewButtonDefault","viewButton","link","pdfButton","appendButton","Gantt","events","dataSource","append","action","className","styles","iconClass","pdf","fn","call","_events","_wrapper","_resources","_timeline","_toolbar","_footer","_adjustDimensions","_preventRefresh","view","_selectedViewName","_dataSource","_assignments","_dropDowns","_list","_dependencies","_resizable","_scrollable","_dataBind","_attachEvents","_createEditor","notify","autoBind","navigatable","selectable","editable","resizable","columnResizeHandleWidth","columns","dependencies","resources","assignments","taskTemplate","messages","save","cancel","destroy","deleteTaskConfirmation","deleteDependencyConfirmation","deleteTaskWindowTitle","deleteDependencyWindowTitle","day","week","month","year","start","end","actions","addChild","insertBefore","insertAfter","editor","editorTitle","resourcesEditorTitle","title","plannedStart","plannedEnd","percentComplete","assignButton","resourcesHeader","unitsHeader","switchText","offsetTooltipAdvanced","offsetTooltipDelay","seconds","minutes","hours","days","showWorkHours","showWorkDays","workDayStart","Date","workDayEnd","workWeekStart","workWeekEnd","hourSpan","snap","listWidth","showPlannedTasks","select","find","clearSelection","unbind","_refreshHandler","_progressHandler","_errorHandler","_dependencyRefreshHandler","_dependencyErrorHandler","footerDropDown","headerDropDown","_editor","_resizeDraggable","off","_mediaQuery","removeListener","_mediaQueryHandler","_resizeHandler","footer","setOptions","selectedView","newOptions","isSettings","type","empty","_setEvents","resize","on","matches","splitBarHandleClassName","addClass","layout","appendTo","css","treelistWrapper","splitbar","toggleButton","that","viewsSelector","viewsDropdownSelector","pdfSelector","toggleSelector","contentSelector","treelist","mediaQueryHandler","removeClass","refresh","_resize","_actions","ns","prepend","toggeSwitchWrap","matchMedia","addListener","val","trigger","preventDefault","children","focusedViewIndex","_focusedView","closest","keyCode","RIGHT","LEFT","ENTER","SPACEBAR","_viewByIndex","toLowerCase","saveAsPDF","is","relatedTarget","expanded","html","create","_createButton","_createPlannedTasksSwitch","command","commandName","Error","split","toolbarHeight","footerHeight","totalHeight","totalWidth","splitBarWidth","treeListWidth","timelineWidth","_scrollTo","scrollTarget","id","scrollIntoView","actionsSelector","actionMessages","handler","orderId","task","_createNewModel","dataItem","taskParent","firstSlot","_timeSlots","target","set","_createTask","gantt","TaskDropDown","eq","direction","animation","open","effects","bind","_getListEditable","update","reorder","mode","move","reorderable","_getListOptions","ganttListOptions","filterable","columnMenu","field","_attachResourceEditor","column","_createResourceEditor","_attachListEvents","toggleButtons","restoreFocus","_cachedCurrent","rowIndex","columnIndex","_current","oldIndex","newIndex","oldWidth","newWidth","_navigatable","container","model","cell","_preventItemChange","closeCell","updatedValues","values","updateDuration","duration","updatePlannedDuration","plannedDuration","hasOwnProperty","previousStart","getTime","previousPlannedStart","updateInfo","hasChanges","cancelChanges","_updateAssignments","_requestStart","sync","then","selection","removeAttr","row","position","parentId","source","dir","_updateTask","listElement","listOptions","GanttList","GanttTimeline","viewName","getByUid","resizeStart","dependency","predecessorId","predecessor","successorId","successor","_createDependency","editTask","removeTask","removeDependency","_error","GanttDataSource","refreshDependencies","GanttDependencyDataSource","dataTextField","dataColorField","dataFormatField","DataSource","_assignmentsRefreshHandler","dataTaskIdField","dataResourceIdField","dataValueField","PopupEditor","createButton","_createPopupButton","cancelTask","saveTask","_onDialogClose","unitsValidation","step","assignmentsModel","schema","fields","Units","validation","_resourceEditor","ResourceEditor","_wrapResourceData","buttons","range","_render","taskTree","_renderDependencies","date","_scrollToDate","_modelFromElement","setDataSource","fetch","setDependenciesDataSource","items","assignment","resource","j","newLength","taskId","resourceId","hasMatch","operator","toArray","_updateAssignment","splice","_removeAssignment","shift","_createAssignment","close","taskCopy","toJSON","_editTask","_syncDataSource","resourceValueField","_taskConfirm","_removeTask","insert","_scrollToUid","_preventDependencyRefresh","resourceValue","_dependencyConfirm","_removeDependency","_removeTaskDependencies","_removeTaskAssignments","callback","_confirm","confirmation","click","showDialog","scrollToUid","cachedUid","cachedIndex","_progress","_assignResources","_renderTree","groupAssigments","group","assigments","applyTaskResource","setter","wrapTask","resourcedId","valueFormat","formatedValue","toString","color","result","taskAssignments","valuePerResource","format","toggle","progress","timelineScroll","treeListWrapper","hover","kendoResizable","orientation","handle","scrollLeft","delta","x","initialDelta","isRtl","_renderCurrentTime","headerSelector","timelineHeader","timelineContent","treeListHeader","treeListContent","wheelDeltaY","currentTarget","one","cellIndex","headerTable","contentTable","tables","expandState","collapse","expand","scroll","reverse","scrollVertical","_rowHeight","moveVertical","method","sibling","first","moveHorizontal","subling","toggleExpandedState","summary","deleteAction","selectedTask","isInput","ctrlKey","_focusTimeout","setTimeout","itemToFocus","focusableItems","_getToolbarItems","idx","shiftKey","TAB","blur","DELETE","isCell","altKey","UP","DOWN","_startEditHandler","stopPropagation","tagName","concat","activeElement","_activeElement","promises","when","apply","done","_adjustHeight","switchLabel","plannedToggle","Switch","checked","change","_togglePlannedTasks","unchecked","toggleSwitch","toggleClass","_setPlanned","PDFMixin","_drawPDF","listTableWidth","clone","_drawPDFShadow","avoidLinks","plugin"],"mappings":"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","file":"kendo.gantt.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('util/text-metrics', ['kendo.core'], f);\n}(function () {\n (function ($) {\n window.kendo.util = window.kendo.util || {};\n var LRUCache = kendo.Class.extend({\n init: function (size) {\n this._size = size;\n this._length = 0;\n this._map = {};\n },\n put: function (key, value) {\n var map = this._map;\n var entry = {\n key: key,\n value: value\n };\n map[key] = entry;\n if (!this._head) {\n this._head = this._tail = entry;\n } else {\n this._tail.newer = entry;\n entry.older = this._tail;\n this._tail = entry;\n }\n if (this._length >= this._size) {\n map[this._head.key] = null;\n this._head = this._head.newer;\n this._head.older = null;\n } else {\n this._length++;\n }\n },\n get: function (key) {\n var entry = this._map[key];\n if (entry) {\n if (entry === this._head && entry !== this._tail) {\n this._head = entry.newer;\n this._head.older = null;\n }\n if (entry !== this._tail) {\n if (entry.older) {\n entry.older.newer = entry.newer;\n entry.newer.older = entry.older;\n }\n entry.older = this._tail;\n entry.newer = null;\n this._tail.newer = entry;\n this._tail = entry;\n }\n return entry.value;\n }\n }\n });\n var REPLACE_REGEX = /\\r?\\n|\\r|\\t/g;\n var SPACE = ' ';\n function normalizeText(text) {\n return String(text).replace(REPLACE_REGEX, SPACE);\n }\n function objectKey(object) {\n var parts = [];\n for (var key in object) {\n parts.push(key + object[key]);\n }\n return parts.sort().join('');\n }\n function hashKey(str) {\n var hash = 2166136261;\n for (var i = 0; i < str.length; ++i) {\n hash += (hash << 1) + (hash << 4) + (hash << 7) + (hash << 8) + (hash << 24);\n hash ^= str.charCodeAt(i);\n }\n return hash >>> 0;\n }\n function zeroSize() {\n return {\n width: 0,\n height: 0,\n baseline: 0\n };\n }\n var DEFAULT_OPTIONS = { baselineMarkerSize: 1 };\n var defaultMeasureBox;\n if (typeof document !== 'undefined') {\n defaultMeasureBox = document.createElement('div');\n defaultMeasureBox.style.cssText = 'position: absolute !important; top: -4000px !important; width: auto !important; height: auto !important;' + 'padding: 0 !important; margin: 0 !important; border: 0 !important;' + 'line-height: normal !important; visibility: hidden !important; white-space: pre!important;';\n }\n var TextMetrics = kendo.Class.extend({\n init: function (options) {\n this._cache = new LRUCache(1000);\n this.options = $.extend({}, DEFAULT_OPTIONS, options);\n },\n measure: function (text, style, options) {\n if (options === void 0) {\n options = {};\n }\n if (typeof text === 'undefined' || text === null) {\n return zeroSize();\n }\n var styleKey = objectKey(style);\n var cacheKey = hashKey(text + styleKey);\n var cachedResult = this._cache.get(cacheKey);\n if (cachedResult) {\n return cachedResult;\n }\n var size = zeroSize();\n var measureBox = options.box || defaultMeasureBox;\n var baselineMarker = this._baselineMarker().cloneNode(false);\n for (var key in style) {\n var value = style[key];\n if (typeof value !== 'undefined') {\n measureBox.style[key] = value;\n }\n }\n var textStr = options.normalizeText !== false ? normalizeText(text) : String(text);\n measureBox.textContent = textStr;\n measureBox.appendChild(baselineMarker);\n document.body.appendChild(measureBox);\n if (textStr.length) {\n size.width = measureBox.offsetWidth - this.options.baselineMarkerSize;\n size.height = measureBox.offsetHeight;\n size.baseline = baselineMarker.offsetTop + this.options.baselineMarkerSize;\n }\n if (size.width > 0 && size.height > 0) {\n this._cache.put(cacheKey, size);\n }\n measureBox.parentNode.removeChild(measureBox);\n return size;\n },\n _baselineMarker: function () {\n var marker = document.createElement('div');\n marker.style.cssText = 'display: inline-block; vertical-align: baseline;width: ' + this.options.baselineMarkerSize + 'px; height: ' + this.options.baselineMarkerSize + 'px;overflow: hidden;';\n return marker;\n }\n });\n TextMetrics.current = new TextMetrics();\n function measureText(text, style, measureBox) {\n return TextMetrics.current.measure(text, style, measureBox);\n }\n kendo.deepExtend(kendo.util, {\n LRUCache: LRUCache,\n TextMetrics: TextMetrics,\n measureText: measureText,\n objectKey: objectKey,\n hashKey: hashKey,\n normalizeText: normalizeText\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.gantt', [\n 'kendo.data',\n 'kendo.resizable',\n 'kendo.switch',\n 'kendo.gantt.data',\n 'kendo.gantt.editors',\n 'kendo.gantt.list',\n 'kendo.gantt.timeline',\n 'kendo.pdf'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'gantt',\n name: 'Gantt',\n category: 'web',\n description: 'The Gantt component.',\n depends: [\n 'data',\n 'resizable',\n 'switch',\n 'gantt.data',\n 'gantt.editors',\n 'gantt.list',\n 'gantt.timeline',\n 'pdf'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, keys = $.extend({ F10: 121 }, kendo.keys), supportsMedia = 'matchMedia' in window, mobileOS = kendo.support.mobileOS, Widget = kendo.ui.Widget, ObservableObject = kendo.data.ObservableObject, ObservableArray = kendo.data.ObservableArray, Query = kendo.data.Query, isArray = $.isArray, inArray = $.inArray, isFunction = kendo.isFunction, proxy = $.proxy, extend = $.extend, isPlainObject = $.isPlainObject, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, defaultIndicatorWidth = 3, NS = '.kendoGantt', PERCENTAGE_FORMAT = 'p0', TABINDEX = 'tabIndex', CLICK = 'click', STRING = 'string', ARIA_DESCENDANT = 'aria-activedescendant', ARIA_LABEL = 'aria-label', ACTIVE_CELL = 'gantt_active_cell', DOT = '.', TASK_DELETE_CONFIRM = 'Are you sure you want to delete this task?', DEPENDENCY_DELETE_CONFIRM = 'Are you sure you want to delete this dependency?', TOGGLE_BUTTON_TEMPLATE = kendo.template(''), BUTTON_TEMPLATE = '', COMMAND_BUTTON_TEMPLATE = '#=text#', VIEWS_DROPDOWN_TEMPLATE = kendo.template(''), HEADER_VIEWS_TEMPLATE = kendo.template('
' + '' + '#for(var view in views){#' + '' + '#}#' + '' + '
');\n var ganttStyles = {\n wrapper: 'k-widget k-gantt',\n plannedTasks: 'k-gantt-planned',\n rowHeight: 'k-gantt-rowheight',\n content: 'k-gantt-content',\n listWrapper: 'k-gantt-treelist',\n list: 'k-gantt-treelist',\n timelineWrapper: 'k-gantt-timeline',\n timeline: 'k-gantt-timeline',\n splitBarWrapper: 'k-splitbar k-state-default k-splitbar-horizontal k-splitbar-draggable-horizontal',\n splitBar: 'k-splitbar',\n splitBarHover: 'k-splitbar-horizontal-hover',\n popupWrapper: 'k-list-container',\n popupList: 'k-list k-reset',\n resizeHandle: 'k-resize-handle',\n icon: 'k-icon',\n item: 'k-item',\n line: 'k-gantt-line',\n buttonDelete: 'k-gantt-delete',\n buttonCancel: 'k-gantt-cancel',\n buttonSave: 'k-gantt-update',\n buttonToggle: 'k-gantt-toggle',\n primary: 'k-primary',\n hovered: 'k-state-hover',\n selected: 'k-state-selected',\n focused: 'k-state-focused',\n gridHeader: 'k-grid-header',\n gridHeaderWrap: 'k-grid-header-wrap',\n gridContent: 'k-grid-content',\n tasks: 'k-gantt-tasks',\n popup: {\n form: 'k-popup-edit-form',\n editForm: 'k-gantt-edit-form',\n formContainer: 'k-edit-form-container',\n resourcesFormContainer: 'k-resources-form-container',\n message: 'k-popup-message',\n buttonsContainer: 'k-edit-buttons k-state-default',\n button: 'k-button',\n editField: 'k-edit-field',\n editLabel: 'k-edit-label',\n resourcesField: 'k-gantt-resources'\n },\n toolbar: {\n headerWrapper: 'k-gantt-header k-toolbar k-gantt-toolbar',\n footerWrapper: 'k-gantt-footer k-toolbar k-gantt-toolbar',\n toolbar: 'k-gantt-toolbar',\n views: 'k-gantt-views',\n viewsWrapper: 'k-gantt-views-wrapper',\n viewsDropdown: 'k-views-dropdown',\n button: 'k-button k-button-icontext',\n buttonToggle: 'k-button k-button-icon k-gantt-toggle',\n iconPlus: 'k-icon k-i-plus',\n iconPdf: 'k-icon k-i-file-pdf',\n iconToggle: 'k-icon k-i-layout-1-by-4',\n viewButtonDefault: 'k-state-default',\n viewButton: 'k-view',\n link: 'k-link',\n pdfButton: 'k-gantt-pdf',\n appendButton: 'k-gantt-create'\n }\n };\n function selector(uid) {\n return '[' + kendo.attr('uid') + (uid ? '=\\'' + uid + '\\']' : ']');\n }\n function trimOptions(options) {\n delete options.name;\n delete options.prefix;\n delete options.remove;\n delete options.edit;\n delete options.add;\n delete options.navigate;\n return options;\n }\n function focusTable(table, direct) {\n var wrapper = table.parents('[' + kendo.attr('role') + '=\"gantt\"]');\n var scrollPositions = [];\n var parents = scrollableParents(wrapper);\n table.attr(TABINDEX, 0);\n if (direct) {\n parents.each(function (index, parent) {\n scrollPositions[index] = $(parent).scrollTop();\n });\n }\n try {\n table[0].setActive();\n } catch (e) {\n table[0].focus();\n }\n if (direct) {\n parents.each(function (index, parent) {\n $(parent).scrollTop(scrollPositions[index]);\n });\n }\n }\n function scrollableParents(element) {\n return $(element).parentsUntil('body').filter(function (index, element) {\n var computedStyle = kendo.getComputedStyles(element, ['overflow']);\n return computedStyle.overflow != 'visible';\n }).add(window);\n }\n var defaultCommands;\n var Gantt = Widget.extend({\n init: function (element, options, events) {\n if (isArray(options)) {\n options = { dataSource: options };\n }\n defaultCommands = {\n append: {\n text: 'Add Task',\n action: 'add',\n className: Gantt.styles.toolbar.appendButton,\n iconClass: Gantt.styles.toolbar.iconPlus\n },\n pdf: {\n text: 'Export to PDF',\n className: Gantt.styles.toolbar.pdfButton,\n iconClass: Gantt.styles.toolbar.iconPdf\n }\n };\n Widget.fn.init.call(this, element, options);\n if (events) {\n this._events = events;\n }\n this._wrapper();\n this._resources();\n if (!this.options.views || !this.options.views.length) {\n this.options.views = [\n 'day',\n 'week',\n 'month'\n ];\n }\n this._timeline();\n this._toolbar();\n this._footer();\n this._adjustDimensions();\n this._preventRefresh = true;\n this.view(this.timeline._selectedViewName);\n this._preventRefresh = false;\n this._dataSource();\n this._assignments();\n this._dropDowns();\n this._list();\n this._dependencies();\n this._resizable();\n this._scrollable();\n this._dataBind();\n this._attachEvents();\n this._createEditor();\n kendo.notify(this);\n },\n events: [\n 'dataBinding',\n 'dataBound',\n 'add',\n 'edit',\n 'remove',\n 'cancel',\n 'save',\n 'change',\n 'navigate',\n 'moveStart',\n 'move',\n 'moveEnd',\n 'resizeStart',\n 'resize',\n 'resizeEnd',\n 'columnHide',\n 'columnReorder',\n 'columnResize',\n 'columnShow',\n 'togglePlannedTasks'\n ],\n options: {\n name: 'Gantt',\n autoBind: true,\n navigatable: false,\n selectable: true,\n editable: true,\n resizable: false,\n columnResizeHandleWidth: defaultIndicatorWidth,\n columns: [],\n views: [],\n dataSource: {},\n dependencies: {},\n resources: {},\n assignments: {},\n taskTemplate: null,\n messages: {\n save: 'Save',\n cancel: 'Cancel',\n destroy: 'Delete',\n deleteTaskConfirmation: TASK_DELETE_CONFIRM,\n deleteDependencyConfirmation: DEPENDENCY_DELETE_CONFIRM,\n deleteTaskWindowTitle: 'Delete task',\n deleteDependencyWindowTitle: 'Delete dependency',\n views: {\n day: 'Day',\n week: 'Week',\n month: 'Month',\n year: 'Year',\n start: 'Start',\n end: 'End'\n },\n actions: {\n append: 'Add Task',\n addChild: 'Add Child',\n insertBefore: 'Add Above',\n insertAfter: 'Add Below',\n pdf: 'Export to PDF'\n },\n editor: {\n editorTitle: 'Task',\n resourcesEditorTitle: 'Resources',\n title: 'Title',\n start: 'Start',\n end: 'End',\n plannedStart: 'Planned Start',\n plannedEnd: 'Planned End',\n percentComplete: 'Complete',\n resources: 'Resources',\n assignButton: 'Assign',\n resourcesHeader: 'Resources',\n unitsHeader: 'Units'\n },\n plannedTasks: {\n switchText: 'Planned Tasks',\n offsetTooltipAdvanced: 'Met deadline earlier',\n offsetTooltipDelay: 'Delay',\n seconds: 'seconds',\n minutes: 'minutes',\n hours: 'hours',\n days: 'days'\n }\n },\n showWorkHours: true,\n showWorkDays: true,\n toolbar: null,\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 hourSpan: 1,\n snap: true,\n height: 600,\n listWidth: '30%',\n rowHeight: null,\n showPlannedTasks: false\n },\n select: function (value) {\n var list = this.list;\n if (!value) {\n return list.select();\n }\n if (typeof value === STRING) {\n value = list.content.find(value);\n }\n list.select(value);\n this.list.element.find('table[role=treegrid]').focus();\n return;\n },\n clearSelection: function () {\n this.list.clearSelection();\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n if (this.dataSource) {\n this.dataSource.unbind('change', this._refreshHandler);\n this.dataSource.unbind('progress', this._progressHandler);\n this.dataSource.unbind('error', this._errorHandler);\n }\n if (this.dependencies) {\n this.dependencies.unbind('change', this._dependencyRefreshHandler);\n this.dependencies.unbind('error', this._dependencyErrorHandler);\n }\n if (this.timeline) {\n this.timeline.unbind();\n this.timeline.destroy();\n }\n if (this.list) {\n this.list.unbind();\n this.list.destroy();\n }\n if (this.footerDropDown) {\n this.footerDropDown.destroy();\n }\n if (this.headerDropDown) {\n this.headerDropDown.destroy();\n }\n if (this._editor) {\n this._editor.destroy();\n }\n if (this._resizeDraggable) {\n this._resizeDraggable.destroy();\n }\n this.toolbar.off(NS);\n if (supportsMedia) {\n this._mediaQuery.removeListener(this._mediaQueryHandler);\n this._mediaQuery = null;\n }\n $(window).off('resize' + NS, this._resizeHandler);\n $(this.wrapper).off(NS);\n this.toolbar = null;\n this.footer = null;\n kendo.destroy(this.element);\n },\n setOptions: function (options) {\n var newOptions = kendo.deepExtend({}, this.options, options);\n var events = this._events;\n if (!options.views) {\n var selectedView = this.view().name;\n newOptions.views = $.map(this.options.views, function (view) {\n var isSettings = isPlainObject(view);\n var name = isSettings ? typeof view.type !== 'string' ? view.title : view.type : view;\n if (selectedView === name) {\n if (isSettings) {\n view.selected = true;\n } else {\n view = {\n type: name,\n selected: true\n };\n }\n } else if (isSettings) {\n view.selected = false;\n }\n return view;\n });\n }\n if (!options.dataSource) {\n newOptions.dataSource = this.dataSource;\n }\n if (!options.dependencies) {\n newOptions.dependencies = this.dependencies;\n }\n if (!options.resources) {\n newOptions.resources = this.resources;\n }\n if (!options.assignments) {\n newOptions.assignments = this.assignments;\n }\n this.destroy();\n this.element.empty();\n this.options = null;\n this.init(this.element, newOptions, events);\n Widget.fn._setEvents.call(this, newOptions);\n },\n _attachEvents: function () {\n this._resizeHandler = proxy(this.resize, this, false);\n $(window).on('resize' + NS, this._resizeHandler);\n if (supportsMedia && this._mediaQuery.matches === true) {\n this._mediaQueryHandler({ matches: true });\n }\n },\n _wrapper: function () {\n var ganttStyles = Gantt.styles;\n var splitBarHandleClassName = [\n ganttStyles.icon,\n ganttStyles.resizeHandle\n ].join(' ');\n var options = this.options;\n var height = options.height;\n var width = options.width;\n this.wrapper = this.element.addClass(ganttStyles.wrapper);\n this.layout = $('
').appendTo(this.wrapper).append('
').append('
').append('
');\n if (options.showPlannedTasks) {\n this.wrapper.addClass(ganttStyles.plannedTasks);\n }\n if (height) {\n this.wrapper.css('height', height);\n }\n if (width) {\n this.wrapper.css('width', width);\n }\n if (options.rowHeight) {\n this.wrapper.addClass(ganttStyles.rowHeight);\n }\n this.treelistWrapper = this.wrapper.find(DOT + ganttStyles.list);\n this.splitbar = this.wrapper.find(DOT + ganttStyles.splitBar);\n this.timelineWrapper = this.wrapper.find(DOT + ganttStyles.timeline);\n this.treelistWrapper.css('width', options.listWidth);\n this.timelineWrapper.css('width', this.wrapper.width() - this.treelistWrapper.outerWidth() - this.splitbar.outerWidth());\n },\n _toolbar: function () {\n var that = this;\n var ganttStyles = Gantt.styles;\n var viewsSelector = DOT + ganttStyles.toolbar.views + ' > button';\n var viewsDropdownSelector = DOT + ganttStyles.toolbar.viewsDropdown;\n var pdfSelector = DOT + ganttStyles.toolbar.pdfButton;\n var toggleSelector = DOT + ganttStyles.buttonToggle;\n var contentSelector = DOT + ganttStyles.gridContent;\n var splitbar = that.splitbar;\n var treelist = that.treelistWrapper;\n var timeline = that.timelineWrapper;\n var actions = this.options.toolbar;\n var toolbar;\n var views;\n var toggleButton;\n var mediaQueryHandler = function (e) {\n if (e.matches) {\n treelist.addClass('k-hidden');\n splitbar.addClass('k-hidden');\n treelist.width('100%');\n } else {\n treelist.removeClass('k-hidden');\n splitbar.removeClass('k-hidden');\n timeline.removeClass('k-hidden');\n treelist.width(treelist.outerWidth());\n that.refresh();\n timeline.find(contentSelector).scrollTop(that.scrollTop);\n }\n that._resize();\n };\n if (!isFunction(actions)) {\n actions = typeof actions === STRING ? actions : this._actions(actions);\n actions = proxy(kendo.template(actions), this);\n }\n toggleButton = $(TOGGLE_BUTTON_TEMPLATE({ styles: ganttStyles.toolbar }));\n views = $(HEADER_VIEWS_TEMPLATE({\n ns: kendo.ns,\n views: this.timeline.views,\n styles: ganttStyles.toolbar\n }));\n toolbar = $('
').append(toggleButton).append(actions({})).append('').append(views);\n if (views.find('button').length > 1) {\n views.prepend(VIEWS_DROPDOWN_TEMPLATE({\n ns: kendo.ns,\n views: this.timeline.views,\n styles: ganttStyles.toolbar\n }));\n }\n if (this.toggeSwitchWrap) {\n this.toggeSwitchWrap.insertBefore(views);\n }\n this.wrapper.prepend(toolbar);\n this.toolbar = toolbar;\n if (supportsMedia) {\n this._mediaQueryHandler = proxy(mediaQueryHandler, this);\n this._mediaQuery = window.matchMedia('(max-width: 480px)');\n this._mediaQuery.addListener(this._mediaQueryHandler);\n }\n toolbar.on('change' + NS, viewsDropdownSelector, function () {\n var list = that.list;\n var name = $(this).val();\n if (list.editable && list.editable.trigger('validate')) {\n return;\n }\n if (!that.trigger('navigate', { view: name })) {\n that.view(name);\n }\n that.toolbar.find(DOT + ganttStyles.focused).removeClass(ganttStyles.focused);\n }).on(CLICK + NS, viewsSelector, function (e) {\n e.preventDefault();\n var list = that.list;\n var name = $(this).attr(kendo.attr('name'));\n if (list.editor && !list.editor.end()) {\n return;\n }\n if (!that.trigger('navigate', { view: name })) {\n that.view(name);\n }\n that.toolbar.find(DOT + ganttStyles.focused).removeClass(ganttStyles.focused);\n }).on('keydown' + NS, viewsSelector, function (e) {\n var views = $(DOT + ganttStyles.toolbar.views).children(':not(.k-current-view)');\n var focusedViewIndex = views.index(that._focusedView && that._focusedView[0] || views.closest(DOT + ganttStyles.selected)[0]);\n if (e.keyCode === keys.RIGHT) {\n $(that.toolbar.find(DOT + ganttStyles.focused)).removeClass(ganttStyles.focused);\n that._focusedView = focusedViewIndex + 1 === views.length ? $(views[0]) : $(views[focusedViewIndex + 1]);\n that._focusedView.focus().addClass(ganttStyles.focused);\n e.preventDefault();\n } else if (e.keyCode === keys.LEFT) {\n $(that.toolbar.find(DOT + ganttStyles.focused)).removeClass(ganttStyles.focused);\n that._focusedView = focusedViewIndex === 0 ? $(views[views.length - 1]) : $(views[focusedViewIndex - 1]);\n that._focusedView.focus().addClass(ganttStyles.focused);\n e.preventDefault();\n } else if ((e.keyCode === keys.ENTER || e.keyCode === keys.SPACEBAR) && that._focusedView) {\n that.view(that._focusedView.text().toLowerCase());\n e.preventDefault();\n } else if (e.keyCode >= 49 && e.keyCode <= 57) {\n that.view(that.timeline._viewByIndex(e.keyCode - 49));\n }\n }).on(CLICK + NS, pdfSelector, function (e) {\n e.preventDefault();\n that.saveAsPDF();\n }).on(CLICK + NS, toggleSelector, function (e) {\n e.preventDefault();\n if (treelist.is(':visible')) {\n treelist.addClass('k-hidden');\n timeline.removeClass('k-hidden');\n that.refresh();\n timeline.find(contentSelector).scrollTop(that.scrollTop);\n } else {\n treelist.removeClass('k-hidden');\n timeline.addClass('k-hidden');\n treelist.find(contentSelector).scrollTop(that.scrollTop);\n }\n that._resize();\n });\n this.wrapper.on('focusout' + NS, function (e) {\n if (!$(e.relatedTarget).closest(DOT + ganttStyles.toolbar.toolbar).length) {\n that.toolbar.find(DOT + ganttStyles.focused).removeClass(ganttStyles.focused);\n }\n if (!$(e.relatedTarget).closest(DOT + ganttStyles.toolbar.views).length) {\n that.toolbar.find(DOT + ganttStyles.toolbar.views).removeClass(ganttStyles.toolbar.expanded);\n }\n });\n },\n _actions: function () {\n var options = this.options;\n var editable = options.editable;\n var actions = options.toolbar;\n var html = '';\n var action;\n if (!isArray(actions)) {\n if (editable && editable.create !== false) {\n actions = ['append'];\n } else {\n return html;\n }\n }\n for (var i = 0, length = actions.length; i < length; i++) {\n action = actions[i];\n if (action === 'plannedTasks' || action.name === 'plannedTasks') {\n this._createPlannedTasksSwitch();\n continue;\n }\n html += this._createButton(action);\n }\n return html;\n },\n _footer: function () {\n var editable = this.options.editable;\n if (!editable || editable.create === false) {\n return;\n }\n var ganttStyles = Gantt.styles.toolbar;\n var messages = this.options.messages.actions;\n var button = $(kendo.template(BUTTON_TEMPLATE)(extend(true, { styles: ganttStyles }, defaultCommands.append, { text: messages.append })));\n var footer = $('
').append(button);\n this.wrapper.append(footer);\n this.footer = footer;\n },\n _createButton: function (command) {\n var template = command.template || BUTTON_TEMPLATE;\n var messages = this.options.messages.actions;\n var commandName = typeof command === STRING ? command : command.name || command.text;\n var className = defaultCommands[commandName] ? defaultCommands[commandName].className : 'k-gantt-' + (commandName || '').replace(/\\s/g, '');\n var options = {\n iconClass: '',\n action: '',\n text: commandName,\n className: className,\n styles: Gantt.styles.toolbar\n };\n if (!commandName && !(isPlainObject(command) && command.template)) {\n throw new Error('Custom commands should have name specified');\n }\n options = extend(true, options, defaultCommands[commandName], { text: messages[commandName] });\n if (isPlainObject(command)) {\n if (command.className && inArray(options.className, command.className.split(' ')) < 0) {\n command.className += ' ' + options.className;\n }\n options = extend(true, options, command);\n }\n return kendo.template(template)(options);\n },\n _adjustDimensions: function () {\n var element = this.element;\n var toolbarHeight = outerHeight(this.toolbar);\n var footerHeight = this.footer ? outerHeight(this.footer) : 0;\n var totalHeight = element.height();\n var totalWidth = element.width();\n var splitBarWidth = this.splitbar.is(':visible') ? outerWidth(this.splitbar) : 0;\n var treeListWidth = this.treelistWrapper.is(':visible') ? outerWidth(this.treelistWrapper) : 0;\n var timelineWidth = totalWidth - (treeListWidth + splitBarWidth);\n this.layout.children().height(totalHeight - (toolbarHeight + footerHeight));\n this.timelineWrapper.width(timelineWidth);\n if (totalWidth < treeListWidth + splitBarWidth) {\n this.treelistWrapper.width(totalWidth - splitBarWidth);\n }\n },\n _scrollTo: function (value) {\n var view = this.timeline.view();\n var list = this.list;\n var attr = kendo.attr('uid');\n var id = typeof value === 'string' ? value : value.closest('tr' + selector()).attr(attr);\n var action;\n var scrollTarget;\n var scrollIntoView = function () {\n if (scrollTarget.length !== 0) {\n action();\n }\n };\n if (view.content.is(':visible')) {\n scrollTarget = view.content.find(selector(id));\n action = function () {\n view._scrollTo(scrollTarget);\n };\n } else {\n scrollTarget = list.element.find(selector(id));\n action = function () {\n scrollTarget.get(0).scrollIntoView();\n };\n }\n scrollIntoView();\n },\n _dropDowns: function () {\n var that = this;\n var actionsSelector = DOT + Gantt.styles.toolbar.appendButton;\n var actionMessages = this.options.messages.actions;\n var timeline = this.timeline;\n var editable = this.options.editable;\n var handler = function (e) {\n var type = e.type;\n var orderId;\n var dataSource = that.dataSource;\n var task = dataSource._createNewModel({});\n var selected = that.dataItem(that.select());\n var parent = dataSource.taskParent(selected);\n var firstSlot = timeline.view()._timeSlots()[0];\n var target = type === 'add' ? selected : parent;\n var editable = that.list.editor;\n if (editable && editable.trigger('validate')) {\n return;\n }\n task.set('title', 'New task');\n if (target) {\n task.set('parentId', target.get('id'));\n task.set('start', target.get('start'));\n task.set('end', target.get('end'));\n task.set('plannedStart', target.get('plannedStart'));\n task.set('plannedEnd', target.get('plannedEnd'));\n } else {\n task.set('start', firstSlot.start);\n task.set('end', firstSlot.end);\n }\n if (type !== 'add') {\n orderId = selected.get('orderId');\n orderId = type === 'insert-before' ? orderId : orderId + 1;\n }\n that._createTask(task, orderId);\n };\n if (!editable || editable.create === false) {\n return;\n }\n this.footerDropDown = new kendo.gantt.TaskDropDown(this.footer.children(actionsSelector).eq(0), {\n messages: { actions: actionMessages },\n direction: 'up',\n animation: { open: { effects: 'slideIn:up' } },\n navigatable: that.options.navigatable\n });\n this.headerDropDown = new kendo.gantt.TaskDropDown(this.toolbar.children(actionsSelector).eq(0), {\n messages: { actions: actionMessages },\n navigatable: that.options.navigatable\n });\n this.footerDropDown.bind('command', handler);\n this.headerDropDown.bind('command', handler);\n },\n _getListEditable: function () {\n var editable = false, options = this.options;\n if (options.editable !== false) {\n editable = 'incell';\n if (options.editable && options.editable.update === false) {\n editable = false;\n } else {\n if (!options.editable || options.editable.reorder !== false) {\n editable = {\n mode: 'incell',\n move: { reorderable: true }\n };\n }\n }\n }\n return editable;\n },\n _getListOptions: function () {\n var options = this.options, editable = this._getListEditable(), listWrapper = this.wrapper.find(DOT + ganttStyles.list), ganttListOptions = {\n columns: options.columns || [],\n dataSource: this.dataSource,\n selectable: options.selectable,\n reorderable: options.reorderable,\n editable: editable,\n resizable: options.resizable,\n filterable: options.filterable,\n columnMenu: options.columnMenu,\n columnResizeHandleWidth: this.options.columnResizeHandleWidth,\n listWidth: outerWidth(listWrapper),\n resourcesField: this.resources.field,\n rowHeight: this.options.rowHeight\n };\n return ganttListOptions;\n },\n _attachResourceEditor: function (columns) {\n var column;\n for (var i = 0; i < columns.length; i++) {\n column = columns[i];\n if (column.field === this.resources.field && typeof column.editor !== 'function') {\n column.editor = proxy(this._createResourceEditor, this);\n }\n }\n },\n _attachListEvents: function () {\n var that = this, navigatable = that.options.navigatable, toggleButtons = this.wrapper.find(DOT + ganttStyles.toolbar.toolbar + ' ' + DOT + ganttStyles.toolbar.appendButton), restoreFocus = function () {\n var element;\n if (navigatable && that._cachedCurrent) {\n element = that.list.content.find('tr').eq(that._cachedCurrent.rowIndex).find('td').eq(that._cachedCurrent.columnIndex);\n that._current(element);\n focusTable(that.list.content.find('table'), true);\n }\n delete that._cachedCurrent;\n };\n that.list.bind('columnShow', function (e) {\n that.trigger('columnShow', { column: e.column });\n }).bind('columnHide', function (e) {\n that.trigger('columnHide', { column: e.column });\n }).bind('columnReorder', function (e) {\n that.trigger('columnReorder', {\n column: e.column,\n oldIndex: e.oldIndex,\n newIndex: e.newIndex\n });\n }).bind('columnResize', function (e) {\n that.trigger('columnResize', {\n column: e.column,\n oldWidth: e.oldWidth,\n newWidth: e.newWidth\n });\n }).bind('render', function () {\n that._navigatable();\n }, true).bind('beforeEdit', function (e) {\n that._cachedCurrent = {\n rowIndex: e.container.closest('tr').index(),\n columnIndex: e.container.index()\n };\n if (that.trigger('edit', {\n task: e.model,\n container: e.container\n })) {\n e.preventDefault();\n }\n }).bind('cancel', function (e) {\n if (that.trigger('cancel', {\n task: e.model,\n container: e.cell\n })) {\n e.preventDefault();\n return;\n }\n that._preventItemChange = true;\n that.list.closeCell(true);\n restoreFocus();\n }).bind('save', function (e) {\n var updatedValues = e.values;\n that._preventRefresh = true;\n if (that.updateDuration === null || that.updateDuration === undefined) {\n that.updateDuration = e.model.duration();\n }\n if (that.updatePlannedDuration === null || that.updatePlannedDuration === undefined) {\n that.updatePlannedDuration = e.model.plannedDuration();\n }\n if (updatedValues.hasOwnProperty('start')) {\n that.previousStart = e.model.get('start');\n updatedValues.end = new Date(updatedValues.start.getTime() + that.updateDuration);\n }\n if (updatedValues.hasOwnProperty('plannedStart') && updatedValues.plannedStart) {\n that.previousPlannedStart = e.model.get('plannedStart');\n updatedValues.plannedEnd = new Date(updatedValues.plannedStart.getTime() + that.updatePlannedDuration);\n }\n that.updatedValues = updatedValues;\n }).bind('itemChange', function (e) {\n var updateInfo = that.updatedValues;\n var task = e.data;\n var resourcesField = that.resources.field;\n if (that._preventItemChange) {\n that._preventItemChange = false;\n return;\n }\n if (that.previousStart) {\n task.set('start', that.previousStart);\n that.previousStart = null;\n }\n if (that.previousPlannedStart) {\n task.set('plannedStart', that.previousPlannedStart);\n that.previousPlannedStart = null;\n }\n if (!that.trigger('save', {\n task: task,\n values: updateInfo\n })) {\n if (updateInfo) {\n that._preventRefresh = true;\n that.dataSource.update(task, updateInfo);\n if (updateInfo[resourcesField]) {\n that._updateAssignments(task.get('id'), updateInfo[resourcesField]);\n }\n }\n that._preventRefresh = false;\n that._requestStart();\n that.dataSource.sync().then(function () {\n restoreFocus();\n });\n } else if (that.dataSource.hasChanges()) {\n that.dataSource.cancelChanges();\n that._preventRefresh = false;\n that.refresh();\n }\n that.updatedValues = null;\n that.updateDuration = null;\n }).bind('change', function () {\n that.trigger('change');\n var selection = that.list.select();\n if (selection.length) {\n toggleButtons.removeAttr('data-action', 'add');\n that.timeline.select('[data-uid=\\'' + selection.attr('data-uid') + '\\']');\n } else {\n toggleButtons.attr('data-action', 'add');\n that.timeline.clearSelection();\n }\n }).bind('collapse', function (e) {\n e.preventDefault();\n var row = that.list.element.find('tr[data-uid=\\'' + e.model.uid + '\\']');\n e.model.set('expanded', false);\n that._cachedCurrent = {\n rowIndex: row.index(),\n columnIndex: row.find('.k-state-focused').index()\n };\n restoreFocus();\n }).bind('expand', function (e) {\n e.preventDefault();\n var row = that.list.element.find('tr[data-uid=\\'' + e.model.uid + '\\']');\n e.model.set('expanded', true);\n that._cachedCurrent = {\n rowIndex: row.index(),\n columnIndex: row.find('.k-state-focused').index()\n };\n restoreFocus();\n }).bind('dragend', function (e) {\n var dataSource = that.dataSource, task, updateInfo;\n if (e.position === 'over') {\n updateInfo = { parentId: e.source.parentId };\n dataSource.cancelChanges();\n task = dataSource.get(e.source.id);\n if (!that.trigger('save', {\n task: task,\n values: updateInfo\n })) {\n dataSource.update(task, updateInfo);\n }\n }\n dataSource.sync();\n }).bind('dataBound', function () {\n if (that.dataSource.sort().length === 0) {\n that.dataSource.sort([{\n field: 'orderId',\n dir: 'asc'\n }]);\n }\n }).bind('reorder', function (e) {\n that._updateTask(e.task, e.updateInfo);\n restoreFocus();\n });\n },\n _list: function () {\n var ganttStyles = Gantt.styles, listWrapper = this.wrapper.find(DOT + ganttStyles.list), listElement = listWrapper.find('> div'), listOptions = this._getListOptions();\n this._attachResourceEditor(listOptions.columns);\n this.list = new kendo.ui.GanttList(listElement, listOptions);\n this._attachListEvents();\n },\n _timeline: function () {\n var that = this;\n var ganttStyles = Gantt.styles;\n var options = trimOptions(extend(true, { resourcesField: this.resources.field }, this.options));\n var element = this.wrapper.find(DOT + ganttStyles.timeline + ' > div');\n this.timeline = new kendo.ui.GanttTimeline(element, options);\n this.timeline.bind('navigate', function (e) {\n var viewName = e.view.replace(/\\./g, '\\\\.').toLowerCase();\n that.toolbar.find(DOT + ganttStyles.toolbar.views + ' > button').removeClass(ganttStyles.selected).end().find(DOT + ganttStyles.toolbar.viewButton + '-' + viewName).addClass(ganttStyles.selected);\n that.toolbar.find(DOT + ganttStyles.toolbar.viewsDropdown).val(e.view);\n that.refresh();\n }).bind('moveStart', function (e) {\n var editable = that.list.editor;\n if (editable && !editable.end()) {\n e.preventDefault();\n return;\n }\n if (that.trigger('moveStart', { task: e.task })) {\n e.preventDefault();\n }\n }).bind('move', function (e) {\n var task = e.task;\n var start = e.start;\n var end = new Date(start.getTime() + task.duration());\n if (that.trigger('move', {\n task: task,\n start: start,\n end: end\n })) {\n e.preventDefault();\n }\n }).bind('moveEnd', function (e) {\n var task = e.task;\n var start = e.start;\n var end = new Date(start.getTime() + task.duration());\n if (!that.trigger('moveEnd', {\n task: task,\n start: start,\n end: end\n })) {\n that._updateTask(that.dataSource.getByUid(task.uid), {\n start: start,\n end: end\n });\n }\n }).bind('resizeStart', function (e) {\n var editable = that.list.editor;\n if (editable && !editable.end()) {\n e.preventDefault();\n return;\n }\n if (that.trigger('resizeStart', { task: e.task })) {\n e.preventDefault();\n }\n }).bind('resize', function (e) {\n if (that.trigger('resize', {\n task: e.task,\n start: e.start,\n end: e.end\n })) {\n e.preventDefault();\n }\n }).bind('resizeEnd', function (e) {\n var task = e.task;\n var updateInfo = {};\n if (e.resizeStart) {\n updateInfo.start = e.start;\n } else {\n updateInfo.end = e.end;\n }\n if (!that.trigger('resizeEnd', {\n task: task,\n start: e.start,\n end: e.end\n })) {\n that._updateTask(that.dataSource.getByUid(task.uid), updateInfo);\n }\n }).bind('percentResizeStart', function (e) {\n var editable = that.list.editor;\n if (editable && !editable.end()) {\n e.preventDefault();\n }\n }).bind('percentResizeEnd', function (e) {\n that._updateTask(that.dataSource.getByUid(e.task.uid), { percentComplete: e.percentComplete });\n }).bind('dependencyDragStart', function (e) {\n var editable = that.list.editor;\n if (editable && !editable.end()) {\n e.preventDefault();\n }\n }).bind('dependencyDragEnd', function (e) {\n var dependency = that.dependencies._createNewModel({\n type: e.type,\n predecessorId: e.predecessor.id,\n successorId: e.successor.id\n });\n that._createDependency(dependency);\n }).bind('select', function (e) {\n var editable = that.list.editor;\n if (editable) {\n editable.end();\n }\n that.select('[data-uid=\\'' + e.uid + '\\']');\n }).bind('editTask', function (e) {\n var editable = that.list.editor;\n if (editable && !editable.end()) {\n return;\n }\n that.editTask(e.uid);\n }).bind('clear', function () {\n that.clearSelection();\n }).bind('removeTask', function (e) {\n var editable = that.list.editor;\n if (editable && !editable.end()) {\n return;\n }\n that.removeTask(that.dataSource.getByUid(e.uid));\n }).bind('removeDependency', function (e) {\n var editable = that.list.editor;\n if (editable && !editable.end()) {\n return;\n }\n that.removeDependency(that.dependencies.getByUid(e.uid));\n });\n },\n _dataSource: function () {\n var options = this.options;\n var dataSource = options.dataSource;\n dataSource = isArray(dataSource) ? { data: dataSource } : dataSource;\n if (this.dataSource && this._refreshHandler) {\n this.dataSource.unbind('change', this._refreshHandler).unbind('progress', this._progressHandler).unbind('error', this._errorHandler);\n } else {\n this._refreshHandler = proxy(this.refresh, this);\n this._progressHandler = proxy(this._requestStart, this);\n this._errorHandler = proxy(this._error, this);\n }\n this.dataSource = kendo.data.GanttDataSource.create(dataSource).bind('change', this._refreshHandler).bind('progress', this._progressHandler).bind('error', this._errorHandler);\n },\n _dependencies: function () {\n var dependencies = this.options.dependencies || {};\n var dataSource = isArray(dependencies) ? { data: dependencies } : dependencies;\n if (this.dependencies && this._dependencyRefreshHandler) {\n this.dependencies.unbind('change', this._dependencyRefreshHandler).unbind('error', this._dependencyErrorHandler);\n } else {\n this._dependencyRefreshHandler = proxy(this.refreshDependencies, this);\n this._dependencyErrorHandler = proxy(this._error, this);\n }\n this.dependencies = kendo.data.GanttDependencyDataSource.create(dataSource).bind('change', this._dependencyRefreshHandler).bind('error', this._dependencyErrorHandler);\n },\n _resources: function () {\n var resources = this.options.resources;\n var dataSource = resources.dataSource || {};\n this.resources = {\n field: 'resources',\n dataTextField: 'name',\n dataColorField: 'color',\n dataFormatField: 'format'\n };\n extend(this.resources, resources);\n this.resources.dataSource = kendo.data.DataSource.create(dataSource);\n },\n _assignments: function () {\n var assignments = this.options.assignments;\n var dataSource = assignments.dataSource || {};\n if (this.assignments) {\n this.assignments.dataSource.unbind('change', this._assignmentsRefreshHandler);\n } else {\n this._assignmentsRefreshHandler = proxy(this.refresh, this);\n }\n this.assignments = {\n dataTaskIdField: 'taskId',\n dataResourceIdField: 'resourceId',\n dataValueField: 'value'\n };\n extend(this.assignments, assignments);\n this.assignments.dataSource = kendo.data.DataSource.create(dataSource);\n this.assignments.dataSource.bind('change', this._assignmentsRefreshHandler);\n },\n _createEditor: function () {\n var that = this;\n var editor = this._editor = new kendo.gantt.PopupEditor(this.wrapper, extend({}, this.options, {\n target: this,\n resources: {\n field: this.resources.field,\n editor: proxy(this._createResourceEditor, this)\n },\n createButton: proxy(this._createPopupButton, this)\n }));\n editor.bind('cancel', function (e) {\n var task = that.dataSource.getByUid(e.model.uid);\n if (that.trigger('cancel', {\n container: e.container,\n task: task\n })) {\n e.preventDefault();\n return;\n }\n that.cancelTask();\n }).bind('edit', function (e) {\n var task = that.dataSource.getByUid(e.model.uid);\n if (that.trigger('edit', {\n container: e.container,\n task: task\n })) {\n e.preventDefault();\n }\n }).bind('save', function (e) {\n var task = that.dataSource.getByUid(e.model.uid);\n that.saveTask(task, e.updateInfo);\n }).bind('remove', function (e) {\n that.removeTask(e.model.uid);\n }).bind('close', that._onDialogClose);\n },\n _onDialogClose: function () {\n },\n _createResourceEditor: function (container, options) {\n var that = this;\n var model = options instanceof ObservableObject ? options : options.model;\n var id = model.get('id');\n var messages = this.options.messages;\n var resourcesField = this.resources.field;\n var unitsValidation = { step: 0.01 };\n var assignmentsModel = this.assignments.dataSource.options.schema.model;\n if (assignmentsModel && assignmentsModel.fields.Units && assignmentsModel.fields.Units.validation) {\n extend(true, unitsValidation, assignmentsModel.fields.Units.validation);\n }\n var editor = this._resourceEditor = new kendo.gantt.ResourceEditor(container, {\n resourcesField: resourcesField,\n unitsValidation: unitsValidation,\n data: this._wrapResourceData(id),\n model: model,\n messages: extend({}, messages.editor),\n buttons: [\n {\n name: 'update',\n text: messages.save,\n className: Gantt.styles.primary\n },\n {\n name: 'cancel',\n text: messages.cancel\n }\n ],\n createButton: proxy(this._createPopupButton, this),\n save: function (e) {\n that._updateAssignments(e.model.get('id'), e.model.get(resourcesField));\n }\n });\n editor.open();\n },\n _createPopupButton: function (command) {\n var commandName = command.name || command.text;\n var options = {\n className: Gantt.styles.popup.button + ' k-gantt-' + (commandName || '').replace(/\\s/g, ''),\n text: commandName,\n attr: ''\n };\n if (!commandName && !(isPlainObject(command) && command.template)) {\n throw new Error('Custom commands should have name specified');\n }\n if (isPlainObject(command)) {\n if (command.className) {\n command.className += ' ' + options.className;\n }\n options = extend(true, options, command);\n }\n return kendo.template(COMMAND_BUTTON_TEMPLATE)(options);\n },\n view: function (type) {\n return this.timeline.view(type);\n },\n range: function (range) {\n var dataSource = this.dataSource;\n var view = this.view();\n var timeline = this.timeline;\n if (range) {\n view.options.range = {\n start: range.start,\n end: range.end\n };\n timeline._render(dataSource.taskTree());\n timeline._renderDependencies(this.dependencies.view());\n }\n return {\n start: view.start,\n end: view.end\n };\n },\n date: function (date) {\n var view = this.view();\n if (date) {\n view.options.date = date;\n view._scrollToDate(date);\n }\n return view.options.date;\n },\n dataItem: function (value) {\n if (!value) {\n return null;\n }\n var list = this.list;\n var element = list.element.find(value);\n return list._modelFromElement(element);\n },\n setDataSource: function (dataSource) {\n this.options.dataSource = dataSource;\n this._dataSource();\n this.list.setDataSource(this.dataSource);\n if (this.options.autoBind) {\n dataSource.fetch();\n }\n },\n setDependenciesDataSource: function (dependencies) {\n this.options.dependencies = dependencies;\n this._dependencies();\n if (this.options.autoBind) {\n dependencies.fetch();\n }\n },\n items: function () {\n return this.wrapper.children('.k-task');\n },\n _updateAssignments: function (id, resources) {\n var dataSource = this.assignments.dataSource;\n var taskId = this.assignments.dataTaskIdField;\n var resourceId = this.assignments.dataResourceIdField;\n var hasMatch = false;\n var assignments = new Query(dataSource.view()).filter({\n field: taskId,\n operator: 'eq',\n value: id\n }).toArray();\n var assignment;\n var resource;\n var value;\n while (assignments.length) {\n assignment = assignments[0];\n for (var i = 0, length = resources.length; i < length; i++) {\n resource = resources[i];\n if (assignment.get(resourceId) === resource.get('id')) {\n value = resources[i].get('value');\n this._updateAssignment(assignment, value);\n resources.splice(i, 1);\n hasMatch = true;\n break;\n }\n }\n if (!hasMatch) {\n this._removeAssignment(assignment);\n }\n hasMatch = false;\n assignments.shift();\n }\n for (var j = 0, newLength = resources.length; j < newLength; j++) {\n resource = resources[j];\n this._createAssignment(resource, id);\n }\n dataSource.sync();\n },\n cancelTask: function () {\n var editor = this._editor;\n var container = editor.container;\n if (container) {\n editor.close();\n }\n },\n editTask: function (uid) {\n var task = typeof uid === 'string' ? this.dataSource.getByUid(uid) : uid;\n if (!task) {\n return;\n }\n var taskCopy = this.dataSource._createNewModel(task.toJSON());\n taskCopy.uid = task.uid;\n this.cancelTask();\n this._editTask(taskCopy);\n },\n _editTask: function (task) {\n this._editor.editTask(task, this.options.editable.plannedTasks);\n },\n saveTask: function (task, updateInfo) {\n var editor = this._editor;\n var container = editor.container;\n var editable = editor.editable;\n if (container && editable && editable.end()) {\n this._updateTask(task, updateInfo);\n }\n },\n _updateTask: function (task, updateInfo) {\n var that = this;\n var resourcesField = that.resources.field;\n if (!that.trigger('save', {\n task: task,\n values: updateInfo\n })) {\n if (updateInfo) {\n that._preventRefresh = true;\n that.dataSource.update(task, updateInfo);\n if (updateInfo[resourcesField]) {\n that._updateAssignments(task.get('id'), updateInfo[resourcesField]);\n }\n }\n that._syncDataSource();\n } else if (that.dataSource.hasChanges()) {\n that.dataSource.cancelChanges();\n that._preventRefresh = false;\n that.refresh();\n }\n },\n _updateAssignment: function (assignment, value) {\n var resourceValueField = this.assignments.dataValueField;\n assignment.set(resourceValueField, value);\n },\n removeTask: function (uid) {\n var that = this;\n var task = typeof uid === 'string' ? this.dataSource.getByUid(uid) : uid;\n if (!task) {\n return;\n }\n this._taskConfirm(function (cancel) {\n if (!cancel) {\n that._removeTask(task);\n }\n }, task);\n },\n _createTask: function (task, index) {\n if (!this.trigger('add', {\n task: task,\n dependency: null\n })) {\n var dataSource = this.dataSource;\n this._preventRefresh = true;\n if (index === undefined) {\n dataSource.add(task);\n } else {\n dataSource.insert(index, task);\n }\n this._scrollToUid = task.uid;\n this._syncDataSource();\n }\n },\n _createDependency: function (dependency) {\n if (!this.trigger('add', {\n task: null,\n dependency: dependency\n })) {\n this._preventDependencyRefresh = true;\n this.dependencies.add(dependency);\n this._preventDependencyRefresh = false;\n this.dependencies.sync();\n }\n },\n _createAssignment: function (resource, id) {\n var assignments = this.assignments;\n var dataSource = assignments.dataSource;\n var taskId = assignments.dataTaskIdField;\n var resourceId = assignments.dataResourceIdField;\n var resourceValue = assignments.dataValueField;\n var assignment = dataSource._createNewModel();\n assignment[taskId] = id;\n assignment[resourceId] = resource.get('id');\n assignment[resourceValue] = resource.get('value');\n dataSource.add(assignment);\n },\n removeDependency: function (uid) {\n var that = this;\n var dependency = typeof uid === 'string' ? this.dependencies.getByUid(uid) : uid;\n if (!dependency) {\n return;\n }\n this._dependencyConfirm(function (cancel) {\n if (!cancel) {\n that._removeDependency(dependency);\n }\n }, dependency);\n },\n _removeTaskDependencies: function (task, dependencies) {\n this._preventDependencyRefresh = true;\n for (var i = 0, length = dependencies.length; i < length; i++) {\n this.dependencies.remove(dependencies[i]);\n }\n this._preventDependencyRefresh = false;\n this.dependencies.sync();\n },\n _removeTaskAssignments: function (task) {\n var dataSource = this.assignments.dataSource;\n var assignments = dataSource.view();\n var filter = {\n field: this.assignments.dataTaskIdField,\n operator: 'eq',\n value: task.get('id')\n };\n assignments = new Query(assignments).filter(filter).toArray();\n this._preventRefresh = true;\n for (var i = 0, length = assignments.length; i < length; i++) {\n dataSource.remove(assignments[i]);\n }\n this._preventRefresh = false;\n dataSource.sync();\n },\n _removeTask: function (task) {\n var dependencies = this.dependencies.dependencies(task.id);\n if (!this.trigger('remove', {\n task: task,\n dependencies: dependencies\n })) {\n this._removeTaskDependencies(task, dependencies);\n this._removeTaskAssignments(task);\n this._preventRefresh = true;\n if (this.dataSource.remove(task)) {\n this._syncDataSource();\n }\n this._preventRefresh = false;\n }\n },\n _removeDependency: function (dependency) {\n if (!this.trigger('remove', {\n task: null,\n dependencies: [dependency]\n })) {\n if (this.dependencies.remove(dependency)) {\n this.dependencies.sync();\n }\n }\n },\n _removeAssignment: function (assignment) {\n this.assignments.dataSource.remove(assignment);\n },\n _taskConfirm: function (callback, task) {\n var messages = this.options.messages;\n this._confirm(callback, {\n model: task,\n text: messages.deleteTaskConfirmation,\n title: messages.deleteTaskWindowTitle\n });\n },\n _dependencyConfirm: function (callback, dependency) {\n var messages = this.options.messages;\n this._confirm(callback, {\n model: dependency,\n text: messages.deleteDependencyConfirmation,\n title: messages.deleteDependencyWindowTitle\n });\n },\n _confirm: function (callback, options) {\n var editable = this.options.editable;\n var messages;\n var buttons;\n if (editable === true || editable.confirmation !== false) {\n messages = this.options.messages;\n buttons = [\n {\n name: 'delete',\n text: messages.destroy,\n className: Gantt.styles.primary,\n click: function () {\n callback();\n }\n },\n {\n name: 'cancel',\n text: messages.cancel,\n click: function () {\n callback(true);\n }\n }\n ];\n this.showDialog(extend(true, {}, options, { buttons: buttons }));\n } else {\n callback();\n }\n },\n showDialog: function (options) {\n this._editor.showDialog(options);\n },\n refresh: function () {\n if (this._preventRefresh || !this.list || this.list.editor) {\n return;\n }\n this._progress(false);\n var dataSource = this.dataSource;\n var taskTree = dataSource.taskTree();\n var scrollToUid = this._scrollToUid;\n var current;\n var cachedUid;\n var cachedIndex = -1;\n if (this.current) {\n cachedUid = this.current.closest('tr').attr(kendo.attr('uid'));\n cachedIndex = this.current.index();\n }\n if (this.trigger('dataBinding')) {\n return;\n }\n if (this.resources.dataSource.data().length !== 0) {\n this._assignResources(taskTree);\n }\n if (this._editor) {\n this._editor.close();\n }\n this.clearSelection();\n this.list._renderTree(taskTree);\n this.timeline._render(taskTree);\n this.timeline._renderDependencies(this.dependencies.view());\n if (scrollToUid) {\n this._scrollTo(scrollToUid);\n this.select(selector(scrollToUid));\n }\n if ((scrollToUid || cachedUid) && cachedIndex >= 0) {\n current = this.list.element.find('tr' + selector(scrollToUid || cachedUid) + ' > td:eq(' + cachedIndex + ')');\n this._current(current);\n }\n this._scrollToUid = null;\n this.trigger('dataBound');\n },\n refreshDependencies: function () {\n if (this._preventDependencyRefresh) {\n return;\n }\n if (this.trigger('dataBinding')) {\n return;\n }\n this.timeline._renderDependencies(this.dependencies.view());\n this.trigger('dataBound');\n },\n _assignResources: function (taskTree) {\n var resources = this.resources;\n var assignments = this.assignments;\n var groupAssigments = function () {\n var data = assignments.dataSource.view();\n var group = { field: assignments.dataTaskIdField };\n data = new Query(data).group(group).toArray();\n return data;\n };\n var assigments = groupAssigments();\n var applyTaskResource = function (task, action) {\n var taskId = task.get('id');\n kendo.setter(resources.field)(task, new ObservableArray([]));\n for (var i = 0, length = assigments.length; i < length; i++) {\n if (assigments[i].value === taskId) {\n action(task, assigments[i].items);\n }\n }\n };\n var wrapTask = function (task, items) {\n for (var j = 0, length = items.length; j < length; j++) {\n var item = items[j];\n var resource = resources.dataSource.get(item.get(assignments.dataResourceIdField));\n var resourceValue = item.get(assignments.dataValueField);\n var resourcedId = item.get(assignments.dataResourceIdField);\n var valueFormat = resource.get(resources.dataFormatField) || PERCENTAGE_FORMAT;\n var formatedValue = kendo.toString(resourceValue, valueFormat);\n task[resources.field].push(new ObservableObject({\n id: resourcedId,\n name: resource.get(resources.dataTextField),\n color: resource.get(resources.dataColorField),\n value: resourceValue,\n formatedValue: formatedValue\n }));\n }\n };\n for (var i = 0, length = taskTree.length; i < length; i++) {\n applyTaskResource(taskTree[i], wrapTask);\n }\n },\n _wrapResourceData: function (id) {\n var that = this;\n var result = [];\n var resource;\n var resources = this.resources.dataSource.view();\n var assignments = this.assignments.dataSource.view();\n var taskAssignments = new Query(assignments).filter({\n field: that.assignments.dataTaskIdField,\n operator: 'eq',\n value: id\n }).toArray();\n var valuePerResource = function (id) {\n var resourceValue = null;\n new Query(taskAssignments).filter({\n field: that.assignments.dataResourceIdField,\n operator: 'eq',\n value: id\n }).select(function (assignment) {\n resourceValue += assignment.get(that.assignments.dataValueField);\n });\n return resourceValue;\n };\n for (var i = 0, length = resources.length; i < length; i++) {\n resource = resources[i];\n result.push({\n id: resource.get('id'),\n name: resource.get(that.resources.dataTextField),\n format: resource.get(that.resources.dataFormatField) || PERCENTAGE_FORMAT,\n value: valuePerResource(resource.id)\n });\n }\n return result;\n },\n _syncDataSource: function () {\n this._preventRefresh = false;\n this._requestStart();\n this.dataSource.sync();\n },\n _requestStart: function () {\n this._progress(true);\n },\n _error: function () {\n this._progress(false);\n },\n _progress: function (toggle) {\n kendo.ui.progress(this.element, toggle);\n },\n _resizable: function () {\n var that = this;\n var wrapper = this.wrapper;\n var ganttStyles = Gantt.styles;\n var contentSelector = DOT + ganttStyles.gridContent;\n var treeListWrapper = wrapper.find(DOT + ganttStyles.list);\n var timelineWrapper = wrapper.find(DOT + ganttStyles.timeline);\n var treeListWidth;\n var timelineWidth;\n var timelineScroll;\n this._resizeDraggable = wrapper.find(DOT + ganttStyles.splitBar).height(treeListWrapper.height()).hover(function () {\n $(this).addClass(ganttStyles.splitBarHover);\n }, function () {\n $(this).removeClass(ganttStyles.splitBarHover);\n }).end().kendoResizable({\n orientation: 'horizontal',\n handle: DOT + ganttStyles.splitBar,\n 'start': function () {\n treeListWidth = treeListWrapper.width();\n timelineWidth = timelineWrapper.width();\n timelineScroll = kendo.scrollLeft(timelineWrapper.find(contentSelector));\n },\n 'resize': function (e) {\n var delta = e.x.initialDelta;\n if (kendo.support.isRtl(wrapper)) {\n delta *= -1;\n }\n if (treeListWidth + delta < 0 || timelineWidth - delta < 0) {\n return;\n }\n treeListWrapper.width(treeListWidth + delta);\n timelineWrapper.width(timelineWidth - delta);\n kendo.scrollLeft(timelineWrapper.find(contentSelector), timelineScroll + delta);\n that.timeline.view()._renderCurrentTime();\n }\n }).data('kendoResizable');\n },\n _scrollable: function () {\n var that = this;\n var ganttStyles = Gantt.styles;\n var contentSelector = DOT + ganttStyles.gridContent;\n var headerSelector = DOT + ganttStyles.gridHeaderWrap;\n var timelineHeader = this.timeline.element.find(headerSelector);\n var timelineContent = this.timeline.element.find(contentSelector);\n var treeListHeader = this.list.element.find(headerSelector);\n var treeListContent = this.list.element.find(contentSelector);\n if (mobileOS) {\n treeListContent.css('overflow-y', 'auto');\n }\n timelineContent.on('scroll', function () {\n that.scrollTop = this.scrollTop;\n kendo.scrollLeft(timelineHeader, this.scrollLeft);\n treeListContent.scrollTop(this.scrollTop);\n });\n treeListContent.on('scroll', function () {\n kendo.scrollLeft(treeListHeader, this.scrollLeft);\n }).on('DOMMouseScroll' + NS + ' mousewheel' + NS, function (e) {\n var scrollTop = timelineContent.scrollTop();\n var delta = kendo.wheelDeltaY(e);\n if (delta) {\n e.preventDefault();\n $(e.currentTarget).one('wheel' + NS, false);\n timelineContent.scrollTop(scrollTop + -delta);\n }\n });\n },\n _navigatable: function () {\n var that = this;\n var navigatable = this.options.navigatable;\n var editable = this.options.editable;\n var ganttStyles = Gantt.styles;\n var contentSelector = DOT + ganttStyles.gridContent;\n var headerSelector = DOT + ganttStyles.gridHeaderWrap;\n var headerTable = this.list.element.find(headerSelector).find('table');\n var contentTable = this.list.element.find(contentSelector).find('table');\n var isRtl = kendo.support.isRtl(this.wrapper);\n var timelineContent = this.timeline.element.find(DOT + ganttStyles.gridContent);\n var tables = headerTable.add(contentTable);\n var attr = selector();\n var cellIndex;\n var expandState = {\n collapse: false,\n expand: true\n };\n var scroll = function (reverse) {\n var width = that.timeline.view()._timeSlots()[0].offsetWidth;\n kendo.scrollLeft(timelineContent, kendo.scrollLeft(timelineContent) + (reverse ? -width : width));\n };\n var scrollVertical = function (reverse) {\n var height = that.timeline.view()._rowHeight;\n timelineContent.scrollTop(timelineContent.scrollTop() + (reverse ? -height : height));\n };\n var moveVertical = function (method) {\n var parent = that.current.parent('tr' + selector());\n var index = that.current.index();\n var sibling = parent[method]('tr:visible').first();\n if (that.select().length !== 0) {\n that.clearSelection();\n }\n if (sibling.length !== 0) {\n that._current(sibling.children('td:eq(' + index + ')'));\n that._scrollTo(that.current);\n } else {\n if (that.current.is('td') && method == 'prevAll') {\n focusTable(headerTable);\n } else if (that.current.is('th') && method == 'nextAll') {\n focusTable(contentTable);\n }\n }\n };\n var moveHorizontal = function (method) {\n var subling = that.current[method]();\n if (subling.length !== 0) {\n that._current(subling);\n cellIndex = that.current.index();\n }\n };\n var toggleExpandedState = function (value) {\n var model = that.dataItem(that.current);\n if (model.summary && model.expanded !== value) {\n model.set('expanded', value);\n }\n };\n var deleteAction = function () {\n var editable = that.options.editable;\n if (!editable || editable.destroy === false || that.list.editor) {\n return;\n }\n var selectedTask = that.select();\n var uid = kendo.attr('uid');\n if (selectedTask.length) {\n that.removeTask(selectedTask.attr(uid));\n }\n };\n $(this.wrapper).on('mousedown' + NS, 'tr' + attr + ', div' + attr + ':not(' + DOT + ganttStyles.line + ')', function (e) {\n var currentTarget = $(e.currentTarget);\n var isInput = $(e.target).is(':button,a,:input,a>.k-icon,textarea,span.k-icon:not(.k-i-none),span.k-link,.k-input,.k-multiselect-wrap');\n var current;\n if (e.ctrlKey) {\n return;\n }\n if (navigatable) {\n if (currentTarget.is('tr')) {\n current = $(e.target).closest('td');\n } else {\n current = that.list.content.find('tr' + selector(currentTarget.attr(kendo.attr('uid'))) + ' > td:first');\n }\n that._current(current);\n }\n if ((navigatable || editable) && !isInput) {\n that._focusTimeout = setTimeout(function () {\n focusTable(that.list.content.find('table'), true);\n }, 2);\n }\n }).on('keydown' + NS, function (e) {\n var key = e.keyCode;\n var that = this;\n var focusableItems = $(that._getToolbarItems());\n var idx = focusableItems.index(that.toolbar.find(DOT + ganttStyles.focused)[0]);\n if (idx === -1 && $(e.target).closest(DOT + ganttStyles.toolbar.views).length) {\n idx = focusableItems.index(that.toolbar.find('.k-gantt-views > .k-state-selected:visible, .k-views-dropdown:visible')[0]);\n }\n var itemToFocus = e.shiftKey ? focusableItems[idx - 1] : focusableItems[idx + 1];\n if (key === keys.F10) {\n that.toolbar.find('.k-button:visible:first').addClass(ganttStyles.focused).focus();\n e.preventDefault();\n } else if (key == keys.TAB && $(e.target).closest(DOT + ganttStyles.toolbar.toolbar).length) {\n that.toolbar.find(DOT + ganttStyles.focused).removeClass(ganttStyles.focused).blur();\n if (itemToFocus) {\n $(itemToFocus).addClass(ganttStyles.focused).focus();\n e.preventDefault();\n return;\n }\n if (this.list.element.is(':visible')) {\n this.list.element.find('table[role=treegrid]').focus();\n } else {\n this.element.find(DOT + ganttStyles.tasks)[0].focus();\n }\n e.preventDefault();\n }\n }.bind(this));\n if (navigatable !== true) {\n contentTable.on('keydown' + NS, function (e) {\n if (e.keyCode == keys.DELETE) {\n deleteAction();\n }\n });\n return;\n }\n tables.on('focus' + NS, function () {\n var selector = this === contentTable.get(0) ? 'td' : 'th';\n var selection = that.select();\n var current = that.current || $(selection.length ? selection : this).find(selector + ':eq(' + (cellIndex || 0) + ')');\n that._current(current);\n $(that.toolbar.find(DOT + ganttStyles.focused)).removeClass(ganttStyles.focused);\n }).on('blur' + NS, function () {\n that._current();\n if (this == headerTable) {\n $(this).attr(TABINDEX, -1);\n }\n }).on('keydown' + NS, function (e) {\n var key = e.keyCode;\n var isCell;\n if (!that.current) {\n return;\n }\n isCell = that.current.is('td');\n switch (key) {\n case keys.RIGHT:\n e.preventDefault();\n if (e.altKey) {\n scroll();\n } else if (e.ctrlKey) {\n toggleExpandedState(isRtl ? expandState.collapse : expandState.expand);\n } else {\n moveHorizontal(isRtl ? 'prev' : 'next');\n }\n break;\n case keys.LEFT:\n e.preventDefault();\n if (e.altKey) {\n scroll(true);\n } else if (e.ctrlKey) {\n toggleExpandedState(isRtl ? expandState.expand : expandState.collapse);\n } else {\n moveHorizontal(isRtl ? 'next' : 'prev');\n }\n break;\n case keys.UP:\n e.preventDefault();\n if (e.altKey) {\n scrollVertical(true);\n } else {\n moveVertical('prevAll');\n }\n break;\n case keys.DOWN:\n e.preventDefault();\n if (e.altKey) {\n scrollVertical();\n } else {\n moveVertical('nextAll');\n }\n break;\n case keys.SPACEBAR:\n e.preventDefault();\n if (isCell) {\n that.select(that.current.closest('tr'));\n }\n break;\n case keys.ENTER:\n e.preventDefault();\n if (isCell) {\n if (that.options.editable && that.options.editable.update !== false) {\n that.list._startEditHandler(that.current);\n $(this).one('keyup', function (e) {\n e.stopPropagation();\n });\n }\n } else {\n that.current.children('a.k-link').click();\n }\n break;\n case keys.DELETE:\n if (isCell) {\n deleteAction();\n }\n break;\n default:\n if (key >= 49 && key <= 57 && e.target.tagName.toLowerCase() !== 'input') {\n that.view(that.timeline._viewByIndex(key - 49));\n }\n break;\n }\n });\n },\n _getToolbarItems: function () {\n return this.toolbar.find('> .k-button:visible').toArray().concat(this.toolbar.find('.k-views-dropdown:visible').toArray(), this.toolbar.find('.k-gantt-views > .k-state-selected:visible').toArray());\n },\n _current: function (element) {\n var ganttStyles = Gantt.styles;\n var activeElement;\n if (this.current && this.current.length) {\n this.current.removeClass(ganttStyles.focused).removeAttr('id');\n }\n if (element && element.length) {\n this.current = element.addClass(ganttStyles.focused).attr('id', ACTIVE_CELL);\n activeElement = $(kendo._activeElement());\n if (activeElement.is('table') && this.wrapper.find(activeElement).length > 0) {\n activeElement.removeAttr(ARIA_DESCENDANT).attr(ARIA_DESCENDANT, ACTIVE_CELL);\n }\n } else {\n this.current = null;\n }\n },\n _dataBind: function () {\n var that = this;\n if (that.options.autoBind) {\n this._preventRefresh = true;\n this._preventDependencyRefresh = true;\n var promises = $.map([\n this.dataSource,\n this.dependencies,\n this.resources.dataSource,\n this.assignments.dataSource\n ], function (dataSource) {\n return dataSource.fetch();\n });\n $.when.apply(null, promises).done(function () {\n that._preventRefresh = false;\n that._preventDependencyRefresh = false;\n that.refresh();\n });\n }\n },\n _resize: function () {\n this._adjustDimensions();\n this.timeline.view()._adjustHeight();\n this.timeline.view()._renderCurrentTime();\n this.list._adjustHeight();\n },\n _createPlannedTasksSwitch: function () {\n var that = this;\n var switchLabel = that.options.messages.plannedTasks.switchText;\n var toggeSwitchWrap = $('');\n var plannedToggle = new kendo.ui.Switch($(''), {\n checked: that.options.showPlannedTasks,\n change: proxy(that._togglePlannedTasks, that),\n messages: {\n checked: '',\n unchecked: ''\n }\n });\n toggeSwitchWrap.append(plannedToggle.wrapper);\n that.toggeSwitchWrap = toggeSwitchWrap;\n that.toggleSwitch = plannedToggle;\n },\n _togglePlannedTasks: function (e) {\n var timeline = this.timeline;\n if (!this.trigger('togglePlannedTasks', { showPlannedTasks: !timeline.options.showPlannedTasks })) {\n this.wrapper.toggleClass(ganttStyles.plannedTasks);\n timeline._setPlanned(!timeline.options.showPlannedTasks);\n timeline._render(this.dataSource.taskTree());\n timeline._renderDependencies(this.dependencies.view());\n } else {\n e.preventDefault();\n }\n }\n });\n if (kendo.PDFMixin) {\n kendo.PDFMixin.extend(Gantt.fn);\n Gantt.fn._drawPDF = function () {\n var ganttStyles = Gantt.styles;\n var listTableWidth = this.wrapper.find(DOT + ganttStyles.list + ' ' + DOT + ganttStyles.gridContent + '>table').width();\n var content = this.wrapper.clone();\n content.find(DOT + ganttStyles.list).css('width', listTableWidth);\n return this._drawPDFShadow({ content: content }, { avoidLinks: this.options.pdf.avoidLinks });\n };\n }\n kendo.ui.plugin(Gantt);\n extend(true, Gantt, { styles: ganttStyles });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));"]}