{"version":3,"file":"kendo.gantt.min.js","names":["global","factory","exports","module","require","define","amd","globalThis","self","kendogantt","js","this","$","undefined$1","kendo","window","keys","supportsMedia","mobileOS","support","Widget","ui","encode","htmlEncode","ObservableObject","data","ObservableArray","Query","isArray","Array","isFunction","extend","isPlainObject","outerWidth","_outerWidth","outerHeight","_outerHeight","NS","TABINDEX","STRING","DOT","VIEWS_DROPDOWN_TEMPLATE","ref","label","styles","views","Object","map","view","title","join","ADD_ACTIONS","text","ganttStyles","wrapper","plannedTasks","rowHeight","content","listWrapper","list","timelineWrapper","timeline","splitBar","popupWrapper","popupList","resizeHandle","icon","item","line","buttonDelete","buttonCancel","buttonSave","buttonToggle","buttonDefaults","primary","hovered","selected","focused","focusedCell","gridHeader","gridHeaderWrap","gridContent","tasks","popup","form","editForm","formContainer","resourcesFormContainer","message","buttonsContainer","button","editField","editLabel","resourcesField","toolbar","headerWrapper","footerWrapper","viewsWrapper","viewsDropdown","iconPlus","iconPdf","iconToggle","viewButton","link","pdfButton","appendButton","selector","uid","attr","focusTable","table","direct","parents","scrollPositions","parentsUntil","filter","index","element","getComputedStyles","overflow","add","each","parent","scrollTop","setActive","e","focus","Gantt","init","options","events","dataSource","fn","call","_events","_wrapper","_resources","length","_timeline","_processDefaults","_toolbar","_footer","_splitter","_adjustDimensions","_preventRefresh","_selectedViewName","_dataSource","_assignments","_list","_dependencies","_scrollable","_dataBind","_attachEvents","_createEditor","notify","name","autoBind","navigatable","selectable","editable","resizable","columnResizeHandleWidth","columns","dependencies","resources","assignments","taskTemplate","messages","save","cancel","destroy","deleteTaskConfirmation","deleteDependencyConfirmation","deleteTaskWindowTitle","deleteDependencyWindowTitle","selectView","day","week","month","year","start","end","actions","append","addChild","insertBefore","insertAfter","pdf","toggle","editor","editorTitle","resourcesEditorTitle","plannedStart","plannedEnd","percentComplete","assignButton","resourcesHeader","unitsHeader","addNew","percentCompleteHint","remove","actualStart","actualEnd","parentOptionLabel","general","predecessors","successors","other","dependencyType","switchText","offsetTooltipAdvanced","offsetTooltipDelay","seconds","minutes","hours","days","showWorkHours","showWorkDays","workDayStart","Date","workDayEnd","workWeekStart","workWeekEnd","hourSpan","snap","height","listWidth","showPlannedTasks","select","value","find","_selectionUpdate","clearSelection","unbind","_refreshHandler","_progressHandler","_errorHandler","_dependencyRefreshHandler","_dependencyErrorHandler","getKendoToolBar","footer","_editor","_resourceEditorWindow","_resizeDraggable","layout","getKendoSplitter","off","_mediaQuery","removeListener","_mediaQueryHandler","_resizeHandler","setOptions","newOptions","deepExtend","selectedView","isSettings","type","empty","_setEvents","resize","bind","on","matches","splitter","kendoSplitter","orientation","panes","collapsible","scrollable","size","width","addClass","appendTo","css","treelistWrapper","_viewClickHandler","target","trigger","preventDefault","_togglePane","that","treelist","contentSelector","is","removeClass","refresh","_resize","ns","viewsButtons","toolbarStyles","actionsMessages","defaults","menuButtons","m","attributes","class","click","_addClickHandler","open","_openAddClickHandler","saveAsPDF","showText","switchLabel","template","component","componentOptions","checked","change","_togglePlannedTasks","unchecked","viewsDdl","togglable","group","viewsGroup","current","toLowerCase","push","values","t","buttons","_viewsButtons","defaultCommands","_processTools","items","commands","tools","spacerPresent","create","c","splitbar","toolbarEl","_suppressResize","hide","show","viewsDropdownSelector","toolsOptions","prepend","kendoToolBar","defaultTools","parentMessages","matchMedia","addListener","val","toggleSwitch","direction","animation","effects","toolbarHeight","footerHeight","totalHeight","totalWidth","treeListVisible","splitBarWidth","treeListWidth","timelineWidth","children","_scrollTo","action","scrollTarget","id","closest","get","scrollIntoView","_addTask","orderId","task","_createNewModel","firstSlot","_timeSlots","set","_createTask","dataItem","taskParent","_getListEditable","update","reorder","mode","move","reorderable","clickMoveClick","_getListOptions","filterable","columnMenu","field","_attachResourceEditor","column","i","_resourcePopupEditor","_attachListEvents","oldIndex","newIndex","oldWidth","newWidth","_navigatable","model","container","cell","_preventItemChange","closeCell","key","updatedValues","previousTask","updateDuration","duration","updatePlannedDuration","plannedDuration","hasOwnProperty","getTime","isCurrentInHeader","currentIndex","rowIndex","updateInfo","hasChanges","cancelChanges","_updateAssignments","Math","max","cellIndex","_requestStart","sync","then","_tabPressed","td","tbody","eq","_setCurrent","sender","position","parentId","source","sort","dir","_updateTask","selection","listElement","listOptions","GanttList","prefix","edit","navigate","trimOptions","GanttTimeline","viewName","replace","viewsEl","getKendoButtonGroup","getByUid","resizeStart","dependency","predecessorId","predecessor","successorId","successor","_createDependency","currentUid","editTask","removeTask","summary","removeDependency","_error","GanttDataSource","refreshDependencies","GanttDependencyDataSource","dataTextField","dataColorField","dataFormatField","DataSource","_assignmentsRefreshHandler","dataTaskIdField","dataResourceIdField","dataValueField","gantt","PopupEditor","_createResourceEditor","cancelTask","saveTask","updateDependencies","buttonsEl","dialog","popupStyles","dialogEl","format","kendoButton","themeColor","updateModel","close","kendoWindow","modal","draggable","visible","deactivate","center","unitsValidation","step","min","assignmentsModel","schema","resourceTextField","fields","Units","validation","_resourceEditor","ResourceEditor","r","range","_render","taskTree","_renderDependencies","date","_scrollToDate","_modelFromElement","setDataSource","fetch","setDependenciesDataSource","assignment","resource","taskId","resourceId","hasMatch","operator","toArray","_updateAssignment","splice","_removeAssignment","shift","j","newLength","_createAssignment","taskCopy","toJSON","_editTask","difference","hasResourceChanges","k","updated","u","some","concat","dirty","_syncDataSource","_updateDependency","this$1$1","created","d","_preventDependencyRefresh","destroyed","resourceValueField","_taskConfirm","_removeTask","insert","_scrollToUid","resourceValue","_dependencyConfirm","_removeDependency","_removeTaskDependencies","_removeTaskAssignments","callback","_confirm","confirmation","showDialog","_progress","cachedUid","scrollToUid","cachedIndex","_selected","_assignResources","_renderTree","_current","assigments","applyTaskResource","setter","wrapTask","resourcedId","valueFormat","formatedValue","toString","color","_wrapResourceData","result","taskAssignments","valuePerResource","progress","headerSelector","timelineHeader","timelineContent","treeListHeader","treeListContent","scrollLeft","delta","wheelDeltaY","currentTarget","one","headerTable","contentTable","tables","isInput","ctrlKey","_focusTimeout","setTimeout","focusedIndex","keyCode","focusSequence","contains","F10","first","TAB","shiftKey","hasClass","last","DELETE","selectedTask","deleteAction","tagName","_viewByIndex","promises","when","apply","done","_adjustHeight","_renderCurrentTime","toggleClass","_setPlanned","PDFMixin","_drawPDF","listTableWidth","clone","_drawPDFShadow","avoidLinks","plugin","jQuery"],"sources":["kendo.gantt.js"],"mappings":"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","sourcesContent":["(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('kendo.data.js'), require('kendo.resizable.js'), require('kendo.switch.js'), require('kendo.gantt.data.js'), require('kendo.gantt.editors.js'), require('kendo.gantt.list.js'), require('kendo.gantt.timeline.js'), require('kendo.splitter.js'), require('kendo.pdf.js'), require('kendo.toolbar.js'), require('kendo.html.button.js')) :\n typeof define === 'function' && define.amd ? define(['kendo.data', 'kendo.resizable', 'kendo.switch', 'kendo.gantt.data', 'kendo.gantt.editors', 'kendo.gantt.list', 'kendo.gantt.timeline', 'kendo.splitter', 'kendo.pdf', 'kendo.toolbar', 'kendo.html.button'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (global.kendogantt = global.kendogantt || {}, global.kendogantt.js = factory()));\n})(this, (function () {\n var __meta__ = {\n id: \"gantt\",\n name: \"Gantt\",\n category: \"web\",\n description: \"The Gantt component.\",\n depends: [ \"data\", \"resizable\", \"switch\", \"gantt.data\", \"gantt.editors\", \"gantt.list\", \"gantt.timeline\", \"pdf\", \"toolbar\", \"html.button\" ]\n };\n (function($, undefined$1) {\n\n var kendo = window.kendo,\n keys = kendo.keys,\n supportsMedia = \"matchMedia\" in window,\n mobileOS = kendo.support.mobileOS,\n Widget = kendo.ui.Widget,\n encode = kendo.htmlEncode,\n ObservableObject = kendo.data.ObservableObject,\n ObservableArray = kendo.data.ObservableArray,\n Query = kendo.data.Query,\n isArray = Array.isArray,\n isFunction = kendo.isFunction,\n extend = $.extend,\n isPlainObject = $.isPlainObject,\n outerWidth = kendo._outerWidth,\n outerHeight = kendo._outerHeight,\n defaultIndicatorWidth = 3,\n\n NS = \".kendoGantt\",\n PERCENTAGE_FORMAT = \"p0\",\n TABINDEX = \"tabIndex\",\n STRING = \"string\",\n DOT = \".\",\n TASK_DELETE_CONFIRM = \"Are you sure you want to delete this task?\",\n DEPENDENCY_DELETE_CONFIRM = \"Are you sure you want to delete this dependency?\",\n VIEWS_DROPDOWN_TEMPLATE = function (ref) {\n var label = ref.label;\n var styles = ref.styles;\n var views = ref.views;\n\n return \"';\n },\n MIN_SCREEN = \"(max-width: 480px)\",\n ADD_ACTIONS = [{\n data: \"add\",\n text: \"addChild\"\n },\n {\n data: \"insert-before\",\n text: \"insertBefore\"\n },\n {\n data: \"insert-after\",\n text: \"insertAfter\"\n }];\n\n var ganttStyles = {\n wrapper: \"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 splitBar: \"k-splitbar\",\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 buttonDefaults: \"k-button-md k-rounded-md k-button-solid\",\n primary: \"k-button-solid-primary\",\n hovered: \"k-hover\",\n selected: \"k-selected\",\n focused: \"k-focus\",\n focusedCell: \"k-focus\",\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\",\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-gantt-toolbar\",\n footerWrapper: \"k-gantt-footer 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\",\n buttonToggle: \"k-gantt-toggle\",\n buttonDefaults: \"k-button-md k-rounded-md k-button-solid\",\n iconPlus: \"plus\",\n iconPdf: \"file-pdf\",\n iconToggle: \"layout-1-by-4\",\n viewButton: \"k-view\",\n link: \"k-link\",\n pdfButton: \"k-gantt-pdf\",\n appendButton: \"k-gantt-create\"\n }\n };\n\n function selector(uid) {\n return \"[\" + kendo.attr(\"uid\") + (uid ? \"='\" + uid + \"']\" : \"]\");\n }\n\n function trimOptions(options) {\n delete options.name;\n delete options.prefix;\n\n delete options.remove;\n delete options.edit;\n delete options.add;\n delete options.navigate;\n\n return options;\n }\n\n function focusTable(table, direct) {\n var wrapper = table.parents('[' + kendo.attr(\"role\") + '=\"gantt\"]');\n var scrollPositions = [];\n var parents = scrollableParents(wrapper);\n\n table.attr(TABINDEX, 0);\n\n if (direct) {\n parents.each(function(index, parent) {\n scrollPositions[index] = $(parent).scrollTop();\n });\n }\n\n try {\n //The setActive method does not cause the document to scroll to the active object in the current page\n table[0].setActive();\n } catch (e) {\n table[0].focus();\n }\n\n if (direct) {\n parents.each(function(index, parent) {\n $(parent).scrollTop(scrollPositions[index]);\n });\n }\n }\n\n function scrollableParents(element) {\n return $(element).parentsUntil(\"body\")\n .filter(function(index, element) {\n var computedStyle = kendo.getComputedStyles(element, [\"overflow\"]);\n return computedStyle.overflow != \"visible\";\n })\n .add(window);\n }\n\n var Gantt = Widget.extend({\n init: function(element, options, events) {\n if (isArray(options)) {\n options = { dataSource: options };\n }\n\n Widget.fn.init.call(this, element, options);\n\n if (events) {\n this._events = events;\n }\n\n this._wrapper();\n\n this._resources();\n\n if (!this.options.views || !this.options.views.length) {\n this.options.views = [\"day\", \"week\", \"month\"];\n }\n\n this._timeline();\n\n this._processDefaults();\n this._toolbar();\n this._footer();\n this._splitter();\n\n this._adjustDimensions();\n\n // Prevent extra refresh from setting the view\n this._preventRefresh = true;\n\n this.view(this.timeline._selectedViewName);\n\n this._preventRefresh = false;\n\n this._dataSource();\n\n this._assignments();\n\n this._list();\n\n this._dependencies();\n\n this._scrollable();\n\n this._dataBind();\n\n this._attachEvents();\n\n this._createEditor();\n\n kendo.notify(this);\n },\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\n options: {\n name: \"Gantt\",\n autoBind: true,\n navigatable: true,\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 selectView: \"Select view\",\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 toggle: \"Toggle pane\"\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 parent: \"Parent\",\n addNew: \"Add\",\n name: \"Name\",\n percentCompleteHint: \"value from 0 to 1\",\n remove: \"Remove\",\n actualStart: \"Actual Start\",\n actualEnd: \"Actual End\",\n parentOptionLabel: \"-None-\",\n general: \"General\",\n predecessors: \"Predecessors\",\n successors: \"Successors\",\n other: \"Other\",\n dependencyType: \"Type\"\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\n select: function(value) {\n var list = this.list;\n\n if (!value) {\n return list.select();\n }\n\n if (typeof value === STRING) {\n value = list.content.find(value);\n }\n\n list.select(value);\n this._selectionUpdate();\n\n return;\n },\n\n clearSelection: function() {\n this.list.clearSelection();\n this._selectionUpdate();\n },\n\n destroy: function() {\n Widget.fn.destroy.call(this);\n\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\n if (this.dependencies) {\n this.dependencies.unbind(\"change\", this._dependencyRefreshHandler);\n this.dependencies.unbind(\"error\", this._dependencyErrorHandler);\n }\n\n if (this.timeline) {\n this.timeline.unbind();\n this.timeline.destroy();\n }\n\n if (this.list) {\n this.list.unbind();\n this.list.destroy();\n }\n\n if (this.toolbar && this.toolbar.getKendoToolBar()) {\n this.toolbar.getKendoToolBar().destroy();\n }\n\n if (this.footer && this.footer.getKendoToolBar()) {\n this.footer.getKendoToolBar().destroy();\n }\n\n if (this._editor) {\n this._editor.destroy();\n }\n\n if (this._resourceEditorWindow) {\n this._resourceEditorWindow.destroy();\n }\n\n if (this._resizeDraggable) {\n this._resizeDraggable.destroy();\n }\n\n if (this.layout && this.layout.getKendoSplitter()) {\n this.layout.getKendoSplitter().destroy();\n }\n\n this.toolbar.off(NS);\n\n if (supportsMedia) {\n this._mediaQuery.removeListener(this._mediaQueryHandler);\n this._mediaQuery = null;\n }\n\n $(window).off(\"resize\" + NS, this._resizeHandler);\n $(this.wrapper).off(NS);\n\n this.toolbar = null;\n this.footer = null;\n\n kendo.destroy(this.element);\n },\n\n setOptions: function(options) {\n var newOptions = kendo.deepExtend({}, this.options, options);\n\n var events = this._events;\n\n if (!options.views) {\n var selectedView = this.view().name;\n\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\n if (selectedView === name) {\n if (isSettings) {\n view.selected = true;\n } else {\n view = { type: name, selected: true };\n }\n } else if (isSettings) {\n view.selected = false;\n }\n\n return view;\n });\n }\n\n if (!options.dataSource) { newOptions.dataSource = this.dataSource; }\n if (!options.dependencies) { newOptions.dependencies = this.dependencies; }\n if (!options.resources) { newOptions.resources = this.resources; }\n if (!options.assignments) { newOptions.assignments = this.assignments; }\n\n this.destroy();\n this.element.empty();\n this.options = null;\n\n this.init(this.element, newOptions, events);\n\n Widget.fn._setEvents.call(this, newOptions);\n },\n\n _attachEvents: function() {\n this._resizeHandler = this.resize.bind(this, false);\n $(window).on(\"resize\" + NS, this._resizeHandler);\n\n if (supportsMedia) {\n this._mediaQueryHandler({ matches: this._mediaQuery.matches });\n }\n },\n\n _splitter: function() {\n this.splitter = this.layout.kendoSplitter({\n navigatable: this.options.navigatable,\n orientation: \"horizontal\",\n panes: [\n { collapsible: false, scrollable: false, label: \"Gantt List\" },\n { collapsible: false, scrollable: false, label: \"Gantt Timeline\" }\n ]\n }).getKendoSplitter();\n\n if (this.options.listWidth) {\n this.splitter.size(\".k-pane:first\", this.options.listWidth);\n }\n },\n\n _wrapper: function() {\n var ganttStyles = Gantt.styles;\n var options = this.options;\n var height = options.height;\n var width = options.width;\n\n this.wrapper = this.element.addClass(ganttStyles.wrapper).attr(\"role\", \"application\");\n this.layout = $(\"
\").appendTo(this.wrapper)\n .append(\"
\")\n .append(\"
\");\n\n if (options.showPlannedTasks) {\n this.wrapper.addClass(ganttStyles.plannedTasks);\n }\n\n if (height) {\n this.wrapper.css(\"height\", height);\n }\n\n if (width) {\n this.wrapper.css(\"width\", width);\n }\n\n if (options.rowHeight) {\n this.wrapper.addClass(ganttStyles.rowHeight);\n }\n\n this.treelistWrapper = this.wrapper.find(DOT + ganttStyles.list);\n this.timelineWrapper = this.wrapper.find(DOT + ganttStyles.timeline);\n\n this.treelistWrapper.css(\"width\", options.listWidth);\n this.timelineWrapper.css(\"width\", this.wrapper.width() - this.treelistWrapper.outerWidth());\n },\n\n _viewClickHandler: function(e) {\n var list = this.list;\n var name = e.target.attr(kendo.attr(\"name\"));\n\n if (list.editor && !list.editor.end()) {\n return;\n }\n\n if (!this.trigger(\"navigate\", { view: name })) {\n this.view(name);\n } else {\n e.preventDefault();\n }\n },\n\n _togglePane: function(e) {\n var that = this,\n treelist = that.treelistWrapper,\n timeline = that.timelineWrapper,\n contentSelector = DOT + ganttStyles.gridContent;\n\n e.preventDefault();\n\n if (treelist.is(\":visible\")) {\n treelist.addClass(\"k-hidden\");\n timeline.removeClass(\"k-hidden\");\n\n that.refresh();\n\n timeline\n .find(contentSelector)\n .scrollTop(that.scrollTop);\n } else {\n treelist.removeClass(\"k-hidden\");\n timeline.addClass(\"k-hidden\");\n\n treelist\n .find(contentSelector)\n .scrollTop(that.scrollTop);\n }\n\n that._resize();\n },\n\n _processDefaults: function() {\n var that = this,\n views = that.timeline.views,\n ns = kendo.ns,\n viewsButtons = [],\n toolbarStyles = Gantt.styles.toolbar,\n actionsMessages = this.options.messages.actions,\n items = ADD_ACTIONS.map(function (m) { return ({\n text: actionsMessages[m.text],\n attributes: { \"data-type\": m.data }\n }); }),\n defaults = {\n append: {\n name: \"append\",\n type: \"dropDownButton\",\n menuButtons: items,\n icon: toolbarStyles.iconPlus,\n attributes: {\n class: toolbarStyles.appendButton\n },\n click: that._addClickHandler.bind(that),\n open: that._openAddClickHandler.bind(that)\n },\n pdf: {\n name: \"pdf\",\n type: \"button\",\n attributes: {\n class: toolbarStyles.pdfButton\n },\n icon: toolbarStyles.iconPdf,\n click: that.saveAsPDF.bind(that)\n },\n toggle: {\n name: \"toggle\",\n type: \"button\",\n showText: \"overflow\",\n attributes: {\n class: \"k-gantt-toggle\"\n },\n icon: toolbarStyles.iconToggle,\n click: that._togglePane.bind(that)\n },\n switchLabel: {\n template: \"\"\n },\n plannedTasks: {\n type: \"component\",\n component: \"Switch\",\n element: \"\",\n componentOptions: {\n checked: that.options.showPlannedTasks,\n change: that._togglePlannedTasks.bind(that),\n messages: {\n checked: \"\",\n unchecked: \"\"\n }\n }\n },\n viewsDdl: {\n template: VIEWS_DROPDOWN_TEMPLATE({\n views: that.timeline.views,\n styles: toolbarStyles,\n label: that.options.messages.selectView\n })\n },\n view: {\n name: \"view\",\n type: \"button\",\n togglable: true,\n group: \"views\"\n },\n viewsGroup: {\n type: \"buttonGroup\",\n attributes: {\n class: toolbarStyles.views\n }\n }\n };\n\n Object.keys(views).map(function (name) {\n var current = $.extend(true, {}, defaults.view);\n\n current.text = views[name].title;\n current.attributes = {\n class: \"k-view-\" + name.toLowerCase()\n };\n current.attributes[\"data\" + ns + \"-name\"] = name;\n\n defaults[name] = current;\n\n viewsButtons.push(name);\n });\n\n Object.values(defaults).map(function (t) {\n if (t.name === \"view\") {\n t.click = that._viewClickHandler.bind(that);\n }\n });\n\n defaults.viewsGroup.buttons = viewsButtons;\n\n that._viewsButtons = viewsButtons;\n that.defaultCommands = defaults;\n },\n\n _processTools: function(items) {\n var editable = this.options.editable,\n commands = [],\n tools = [\"toggle\"],\n spacerPresent = false,\n defaults = this.defaultCommands;\n\n if (!Array.isArray(items)) {\n if (editable && editable.create !== false) {\n tools.push(\"append\");\n }\n } else {\n commands = items;\n }\n\n commands.map(function (c) {\n if (c === \"plannedTasks\" || c.name === \"plannedTasks\") {\n spacerPresent = true;\n\n tools.push({\n type: \"spacer\"\n });\n\n tools.push(\"switchLabel\");\n }\n\n if (!defaults[c] && !defaults[c.name] && !c.template) {\n if (typeof c === STRING) {\n c = {\n name: c,\n type: \"button\",\n text: c,\n attributes: {\n class: \"k-gantt-\" + c\n }\n };\n } else {\n c = $.extend({}, {\n type: \"button\",\n text: c.name,\n attributes: {\n class: \"k-gantt-\" + c.name\n }\n }, c);\n }\n }\n\n tools.push(c);\n });\n\n if (!spacerPresent) {\n tools.push({\n type: \"spacer\"\n });\n }\n\n if (this._viewsButtons && this._viewsButtons.length > 0) {\n if (this._viewsButtons.length > 1) {\n tools.push(\"viewsDdl\");\n }\n\n tools.push(\"viewsGroup\");\n }\n\n return tools;\n },\n\n _mediaQueryHandler: function(e) {\n var that = this;\n var splitbar = that.layout.find(\".k-splitbar\");\n var splitter = that.layout.getKendoSplitter();\n var treelist = that.treelistWrapper;\n var timeline = that.timelineWrapper;\n var contentSelector = DOT + ganttStyles.gridContent;\n\n var toolbarEl = that.toolbar;\n var toolbar = toolbarEl.getKendoToolBar();\n\n if (e.matches) {\n treelist.addClass(\"k-hidden\");\n splitbar.addClass(\"k-hidden\");\n splitter._suppressResize = true;\n toolbar.hide(toolbarEl.find(\".k-gantt-views\"));\n toolbar.show(toolbarEl.find(\".k-views-dropdown\"));\n\n treelist.width(\"100%\");\n } else {\n splitter._suppressResize = false;\n treelist.removeClass(\"k-hidden\");\n splitbar.removeClass(\"k-hidden\");\n timeline.removeClass(\"k-hidden\");\n\n toolbar.show(toolbarEl.find(\".k-gantt-views\"));\n toolbar.hide(toolbarEl.find(\".k-views-dropdown\"));\n\n treelist.width(treelist.outerWidth());\n\n timeline\n .find(contentSelector)\n .scrollTop(that.scrollTop);\n }\n\n that._resize();\n },\n\n _toolbar: function() {\n var that = this;\n var ganttStyles = Gantt.styles;\n var viewsDropdownSelector = DOT + ganttStyles.toolbar.viewsDropdown;\n var toolsOptions = this.options.toolbar;\n var tools;\n var toolbar;\n\n if (typeof toolsOptions === STRING) {\n toolsOptions = kendo.template(toolsOptions).bind(this);\n }\n\n if (isFunction(toolsOptions)) {\n tools = this._processTools([{\n template: toolsOptions({})\n }]);\n } else {\n tools = this._processTools(toolsOptions);\n }\n\n toolbar = $(\"
\");\n\n this.wrapper.prepend(toolbar);\n this.toolbar = toolbar;\n\n toolbar.kendoToolBar({\n resizable: false,\n tools: tools,\n size: \"medium\",\n defaultTools: this.defaultCommands,\n parentMessages: this.options.messages.actions\n });\n\n if (supportsMedia) {\n this._mediaQuery = window.matchMedia(MIN_SCREEN);\n this._mediaQuery.addListener(this._mediaQueryHandler.bind(this));\n }\n\n toolbar.on(\"change\" + NS, viewsDropdownSelector, function() {\n var list = that.list;\n var name = $(this).val();\n\n if (list.editable && list.editable.trigger(\"validate\")) {\n return;\n }\n\n if (!that.trigger(\"navigate\", { view: name })) {\n that.view(name);\n }\n });\n\n this.toggleSwitch = toolbar.find('input.k-gantt-planned-switch').data(\"kendoSwitch\");\n },\n\n _footer: function() {\n var editable = this.options.editable;\n\n if (!editable || editable.create === false) {\n return;\n }\n\n var ganttStyles = Gantt.styles.toolbar;\n var messages = this.options.messages.actions;\n var footer = $(\"
\");\n\n this.wrapper.append(footer);\n this.footer = footer;\n\n footer.kendoToolBar({\n resizable: false,\n size: \"medium\",\n tools: [\"append\"],\n defaultTools: {\n append: extend(true, {}, this.defaultCommands.append, {\n direction: \"up\",\n animation: {\n open: {\n effects: \"slideIn:up\"\n }\n }\n })\n },\n parentMessages: messages\n });\n },\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 treeListVisible = this.treelistWrapper.is(\":visible\");\n var splitBar = this.layout.find(\".k-splitbar\");\n var splitBarWidth = splitBar.is(\":visible\") ? outerWidth(splitBar) : 0;\n var treeListWidth = treeListVisible ? outerWidth(this.treelistWrapper) : 0;\n var timelineWidth = totalWidth - ( treeListWidth + splitBarWidth );\n\n this.layout.children().height(totalHeight - (toolbarHeight + footerHeight));\n this.timelineWrapper.width(timelineWidth);\n if (!treeListVisible) {\n this.timelineWrapper.css(\"left\", 0);\n }\n\n if (totalWidth < (treeListWidth + splitBarWidth)) {\n this.treelistWrapper.width(totalWidth - splitBarWidth);\n }\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 :\n 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\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\n scrollIntoView();\n },\n\n _addTask: function(selected, parent, type) {\n var dataSource = this.dataSource,\n task = dataSource._createNewModel({}),\n timeline = this.timeline,\n firstSlot = timeline.view()._timeSlots()[0],\n editable = this.list.editor,\n orderId;\n\n if (editable && editable.trigger(\"validate\")) {\n return;\n }\n\n task.set(\"title\", \"New task\");\n\n if (parent) {\n task.set(\"parentId\", parent.get(\"id\"));\n task.set(\"start\", parent.get(\"start\"));\n task.set(\"end\", parent.get(\"end\"));\n task.set(\"plannedStart\", parent.get(\"plannedStart\"));\n task.set(\"plannedEnd\", parent.get(\"plannedEnd\"));\n } else {\n task.set(\"start\", firstSlot.start);\n task.set(\"end\", firstSlot.end);\n }\n\n if (type && type !== \"add\") {\n orderId = selected.get(\"orderId\");\n orderId = type === \"insert-before\" ? orderId : orderId + 1;\n }\n\n this._createTask(task, orderId);\n },\n\n _addClickHandler: function(e) {\n var type = e.target.data(\"type\");\n var dataSource = this.dataSource;\n var selected = this.dataItem(this.select());\n var parent = dataSource.taskParent(selected);\n var target = type === \"add\" ? selected : parent;\n\n this._addTask(selected, target, type);\n },\n\n _openAddClickHandler: function(e) {\n var selected = this.select();\n\n if (!selected || selected.length === 0) {\n e.preventDefault();\n\n this._addTask();\n }\n },\n\n _getListEditable: function() {\n var editable = false,\n options = this.options;\n\n if (options.editable !== false) {\n editable = \"incell\";\n\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: {\n reorderable: true,\n clickMoveClick: options.editable.clickMoveClick === false ? false : true\n }\n };\n }\n }\n }\n\n return editable;\n },\n\n _getListOptions: function() {\n var options = this.options,\n editable = this._getListEditable(),\n listWrapper = this.wrapper.find(DOT + ganttStyles.list),\n ganttListOptions = {\n columns: options.columns || [],\n dataSource: this.dataSource,\n navigatable: options.navigatable,\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\n return ganttListOptions;\n },\n\n _attachResourceEditor: function(columns) {\n var column;\n\n for (var i = 0; i < columns.length; i++) {\n column = columns[i];\n\n if (column.field === this.resources.field && typeof column.editor !== \"function\") {\n column.editor = this._resourcePopupEditor.bind(this);\n }\n }\n },\n\n _attachListEvents: function() {\n var that = this;\n\n that.list\n .bind(\"columnShow\", function(e) {\n that.trigger(\"columnShow\", { column: e.column });\n })\n .bind(\"columnHide\", function(e) {\n that.trigger(\"columnHide\", { column: e.column });\n })\n .bind(\"columnReorder\", function(e) {\n that.trigger(\"columnReorder\", { column: e.column, oldIndex: e.oldIndex, newIndex: e.newIndex });\n })\n .bind(\"columnResize\", function(e) {\n that.trigger(\"columnResize\", { column: e.column, oldWidth: e.oldWidth, newWidth: e.newWidth });\n })\n .bind(\"render\", function() {\n that._navigatable();\n }, true)\n .bind(\"beforeEdit\", function(e) {\n\n if (that.trigger(\"edit\", { task: e.model, container: e.container })) {\n e.preventDefault();\n }\n })\n .bind(\"cancel\", function(e) {\n if (that.trigger(\"cancel\", { task: e.model, container: e.cell })) {\n e.preventDefault();\n return;\n }\n\n that._preventItemChange = true;\n that.list.closeCell(true);\n })\n .bind(\"save\", function(e) {\n var updatedValues = e.values,\n key;\n\n that.previousTask = {};\n that._preventRefresh = true;\n\n if (that.updateDuration === null || that.updateDuration === undefined$1) {\n that.updateDuration = e.model.duration();\n }\n\n if (that.updatePlannedDuration === null || that.updatePlannedDuration === undefined$1) {\n that.updatePlannedDuration = e.model.plannedDuration();\n }\n\n if (updatedValues.hasOwnProperty(\"start\")) {\n updatedValues.end = new Date(updatedValues.start.getTime() + that.updateDuration);\n }\n\n if (updatedValues.hasOwnProperty(\"plannedStart\") && updatedValues.plannedStart) {\n updatedValues.plannedEnd = new Date(updatedValues.plannedStart.getTime() + that.updatePlannedDuration);\n }\n\n for (key in updatedValues) {\n if (updatedValues.hasOwnProperty(key)) {\n that.previousTask[key] = e.model.get(key);\n }\n }\n\n that.updatedValues = updatedValues;\n })\n .bind(\"itemChange\", function(e) {\n var updateInfo = that.updatedValues,\n task = e.data,\n resourcesField = that.resources.field,\n previousTask = that.previousTask,\n current,\n isCurrentInHeader,\n currentIndex,\n rowIndex,\n navigatable = that.options.navigatable,\n key;\n\n if (that._preventItemChange) {\n that._preventItemChange = false;\n return;\n }\n\n for (key in previousTask) {\n if (previousTask.hasOwnProperty(key)) {\n task.set(key, previousTask[key]);\n }\n }\n\n that.previousTask = {};\n\n if (!that.trigger(\"save\", { task: task, values: updateInfo })) {\n if (updateInfo) {\n that._preventRefresh = true;\n that.dataSource.update(task, updateInfo);\n\n if (updateInfo[resourcesField]) {\n that._updateAssignments(task.get(\"id\"), updateInfo[resourcesField]);\n }\n }\n\n if (navigatable) {\n current = $(that.list.current());\n isCurrentInHeader = current.is(\"th\");\n rowIndex = current.closest(\"tr\").index();\n currentIndex = isCurrentInHeader ? current.parent().children(\":not(.k-group-cell)\").index(current[0]) : Math.max(that.list.cellIndex(current), 0);\n }\n\n that._preventRefresh = false;\n that._requestStart();\n that.dataSource.sync().then(function() {\n if (that.options.navigatable && !that._tabPressed) {\n if (!isCurrentInHeader) {\n var row = that.list.tbody.children().eq(rowIndex);\n\n var td = row.find(\">td:visible\")\n .eq(currentIndex);\n\n that.list._setCurrent(td, false, true);\n }\n }\n that._tabPressed = false;\n });\n } else if (that.dataSource.hasChanges()) {\n that.dataSource.cancelChanges(task);\n that._preventRefresh = false;\n that.refresh();\n }\n\n that.updatedValues = null;\n that.updateDuration = null;\n })\n .bind(\"change\", function() {\n that.trigger(\"change\");\n\n that._selectionUpdate();\n\n })\n .bind(\"navigate\", function(e) {\n var treeList = e.sender;\n var current = treeList.current();\n var uid;\n\n that._scrollTo(current);\n that.timeline.element.find(\"div.k-task\").attr(\"tabindex\", \"-1\");\n uid = current.closest(\"tr\").attr(\"data-uid\");\n that.timeline.element.find(\"div.k-task[data-uid='\" + uid + \"']\").attr(\"tabindex\", \"0\");\n })\n .bind(\"expand\", function(e) {\n e.preventDefault();\n e.model.set(\"expanded\", true);\n })\n .bind(\"collapse\", function(e) {\n e.preventDefault();\n e.model.set(\"expanded\", false);\n })\n .bind(\"dragend\", function(e) {\n var dataSource = that.dataSource,\n task, updateInfo;\n\n if (e.position === \"over\") {\n dataSource.cancelChanges();\n\n updateInfo = {\n parentId: e.source.parentId\n };\n\n task = dataSource.get(e.source.id);\n\n if (!that.trigger(\"save\", { task: task, values: updateInfo })) {\n dataSource.update(task, updateInfo);\n }\n\n dataSource.sync();\n }\n })\n .bind(\"dataBound\", function() {\n if (that.dataSource.sort().length === 0) {\n that.dataSource.sort([{ field: \"orderId\", dir: \"asc\" }]);\n }\n })\n .bind(\"reorder\", function(e) {\n that._updateTask(e.task, e.updateInfo);\n });\n },\n\n _selectionUpdate: function() {\n var that = this,\n selection = that.list.select();\n\n if (selection.length) {\n that.timeline.select(\"[data-uid='\" + selection.attr(\"data-uid\") + \"']\");\n } else {\n that.timeline.clearSelection();\n }\n },\n\n _list: function() {\n var ganttStyles = Gantt.styles,\n listWrapper = this.wrapper.find(DOT + ganttStyles.list),\n listElement = listWrapper.find(\"> div\"),\n listOptions = this._getListOptions();\n\n this._attachResourceEditor(listOptions.columns);\n\n this.list = new kendo.ui.GanttList(listElement, listOptions);\n\n this._attachListEvents();\n },\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\n this.timeline = new kendo.ui.GanttTimeline(element, options);\n\n this.timeline\n .bind(\"navigate\", function(e) {\n var viewName = e.view.replace(/\\./g, \"\\\\.\").toLowerCase();\n var viewsEl = that.toolbar.find(DOT + ganttStyles.toolbar.views);\n var viewsGroup = viewsEl.getKendoButtonGroup();\n\n if (viewsGroup) {\n viewsGroup.select(viewsEl.find(DOT + ganttStyles.toolbar.viewButton + \"-\" + viewName));\n }\n\n that.toolbar\n .find(DOT + ganttStyles.toolbar.viewsDropdown)\n .val(e.view);\n\n that.refresh();\n })\n .bind(\"moveStart\", function(e) {\n var editable = that.list.editor;\n\n if (editable && !editable.end()) {\n e.preventDefault();\n return;\n }\n\n if (that.trigger(\"moveStart\", { task: e.task })) {\n e.preventDefault();\n }\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\n if (that.trigger(\"move\", { task: task, start: start, end: end })) {\n e.preventDefault();\n }\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\n if (!that.trigger(\"moveEnd\", { task: task, start: start, end: end })) {\n that._updateTask(that.dataSource.getByUid(task.uid), {\n start: start,\n end: end\n });\n }\n })\n .bind(\"resizeStart\", function(e) {\n var editable = that.list.editor;\n\n if (editable && !editable.end()) {\n e.preventDefault();\n return;\n }\n\n if (that.trigger(\"resizeStart\", { task: e.task })) {\n e.preventDefault();\n }\n })\n .bind(\"resize\", function(e) {\n if (that.trigger(\"resize\", { task: e.task, start: e.start, end: e.end })) {\n e.preventDefault();\n }\n })\n .bind(\"resizeEnd\", function(e) {\n var task = e.task;\n var updateInfo = {};\n\n if (e.resizeStart) {\n updateInfo.start = e.start;\n } else {\n updateInfo.end = e.end;\n }\n\n if (!that.trigger(\"resizeEnd\", { task: task, start: e.start, end: e.end })) {\n that._updateTask(that.dataSource.getByUid(task.uid), updateInfo);\n }\n })\n .bind(\"percentResizeStart\", function(e) {\n var editable = that.list.editor;\n\n if (editable && !editable.end()) {\n e.preventDefault();\n }\n })\n .bind(\"percentResizeEnd\", function(e) {\n that._updateTask(that.dataSource.getByUid(e.task.uid), { percentComplete: e.percentComplete });\n })\n .bind(\"dependencyDragStart\", function(e) {\n var editable = that.list.editor;\n\n if (editable && !editable.end()) {\n e.preventDefault();\n }\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\n that._createDependency(dependency);\n })\n .bind(\"select\", function(e) {\n var editable = that.list.editor,\n current = that.select(),\n currentUid;\n\n if (editable) {\n editable.end();\n }\n\n if (current && current.length) {\n currentUid = current.data(\"uid\");\n }\n\n if (currentUid !== e.uid) {\n that.select(\"[data-uid='\" + e.uid + \"']\");\n that.trigger(\"change\");\n }\n })\n .bind(\"editTask\", function(e) {\n var editable = that.list.editor;\n\n if (editable && !editable.end()) {\n return;\n }\n\n that.editTask(e.uid);\n })\n .bind(\"clear\", function() {\n that.clearSelection();\n that.trigger(\"change\");\n })\n .bind(\"removeTask\", function(e) {\n var editable = that.list.editor;\n\n if (editable && !editable.end()) {\n return;\n }\n\n that.removeTask(that.dataSource.getByUid(e.uid));\n })\n .bind(\"expand\", function(e) {\n var model = that.dataSource.getByUid(e.uid);\n if (model.summary && !model.get(\"expanded\")) {\n model.set(\"expanded\", true);\n } else {\n e.preventDefault();\n }\n })\n .bind(\"collapse\", function(e) {\n var model = that.dataSource.getByUid(e.uid);\n\n if (model.summary && model.get(\"expanded\")) {\n model.set(\"expanded\", false);\n } else {\n e.preventDefault();\n }\n })\n .bind(\"removeDependency\", function(e) {\n var editable = that.list.editor;\n\n if (editable && !editable.end()) {\n return;\n }\n\n that.removeDependency(that.dependencies.getByUid(e.uid));\n });\n },\n\n _dataSource: function() {\n var options = this.options;\n var dataSource = options.dataSource;\n\n dataSource = isArray(dataSource) ? { data: dataSource } : dataSource;\n\n if (this.dataSource && this._refreshHandler) {\n this.dataSource\n .unbind(\"change\", this._refreshHandler)\n .unbind(\"progress\", this._progressHandler)\n .unbind(\"error\", this._errorHandler);\n } else {\n this._refreshHandler = this.refresh.bind(this);\n this._progressHandler = this._requestStart.bind(this);\n this._errorHandler = this._error.bind(this);\n }\n\n this.dataSource = kendo.data.GanttDataSource.create(dataSource)\n .bind(\"change\", this._refreshHandler)\n .bind(\"progress\", this._progressHandler)\n .bind(\"error\", this._errorHandler);\n },\n\n _dependencies: function() {\n var dependencies = this.options.dependencies || {};\n var dataSource = isArray(dependencies) ? { data: dependencies } : dependencies;\n\n if (this.dependencies && this._dependencyRefreshHandler) {\n this.dependencies\n .unbind(\"change\", this._dependencyRefreshHandler)\n .unbind(\"error\", this._dependencyErrorHandler);\n } else {\n this._dependencyRefreshHandler = this.refreshDependencies.bind(this);\n this._dependencyErrorHandler = this._error.bind(this);\n }\n\n this.dependencies = kendo.data.GanttDependencyDataSource.create(dataSource)\n .bind(\"change\", this._dependencyRefreshHandler)\n .bind(\"error\", this._dependencyErrorHandler);\n },\n\n _resources: function() {\n var resources = this.options.resources;\n var dataSource = resources.dataSource || {};\n\n this.resources = {\n field: \"resources\",\n dataTextField: \"name\",\n dataColorField: \"color\",\n dataFormatField: \"format\"\n };\n\n extend(this.resources, resources);\n\n this.resources.dataSource = kendo.data.DataSource.create(dataSource);\n },\n\n _assignments: function() {\n var assignments = this.options.assignments;\n var dataSource = assignments.dataSource || { };\n\n if (this.assignments) {\n this.assignments.dataSource\n .unbind(\"change\", this._assignmentsRefreshHandler);\n } else {\n this._assignmentsRefreshHandler = this.refresh.bind(this);\n }\n\n this.assignments = {\n dataTaskIdField: \"taskId\",\n dataResourceIdField: \"resourceId\",\n dataValueField: \"value\"\n };\n\n extend(this.assignments, assignments);\n\n this.assignments.dataSource = kendo.data.DataSource.create(dataSource);\n\n this.assignments.dataSource\n .bind(\"change\", this._assignmentsRefreshHandler);\n },\n\n _createEditor: function() {\n var that = this;\n\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: this._createResourceEditor.bind(this)\n }\n }));\n\n editor\n .bind(\"cancel\", function(e) {\n var task = that.dataSource.getByUid(e.model.uid);\n\n if (that.trigger(\"cancel\", { container: e.container, task: task })) {\n e.preventDefault();\n return;\n }\n\n if (that.dependencies) {\n that.dependencies.filter({});\n }\n\n that.cancelTask();\n if (that.options.navigatable) {\n that.timeline.element.find('div[data-uid=\"' + e.model.uid + '\"]').focus();\n }\n })\n .bind(\"edit\", function(e) {\n var task = that.dataSource.getByUid(e.model.uid);\n\n if (that.trigger(\"edit\", { container: e.container, task: task })) {\n e.preventDefault();\n }\n })\n .bind(\"save\", function(e) {\n var task = that.dataSource.getByUid(e.model.uid);\n\n that.saveTask(task, e.updateInfo, e.updateDependencies);\n })\n .bind(\"remove\", function(e) {\n that.removeTask(e.model.uid);\n })\n .bind(\"close\", function(options) {\n if (that.options.navigatable) {\n that.element.find('div[data-uid=\"' + options.window.attr(\"data-uid\") + '\"]').focus();\n }\n });\n },\n\n _resourcePopupEditor: function(container, options) {\n var that = this,\n editor = that._createResourceEditor($(\"
\"), options),\n popupStyles = ganttStyles.popup,\n wrapper = that.element,\n dialogEl = $(kendo.format('
')).appendTo(wrapper),\n messages = that.options.messages,\n buttonsEl, dialog;\n\n dialogEl.append(editor.wrapper);\n buttonsEl = $('
');\n dialogEl.append(buttonsEl);\n\n buttonsEl.append($(\"\").kendoButton({\n name: \"save\",\n themeColor: \"primary\",\n icon: \"save\",\n click: function () {\n if (!editor.updateModel()) {\n return;\n }\n editor.trigger(\"save\", { model: editor.model });\n that._updateAssignments(editor.model.get(\"id\"), editor.model.get(that.resources.field));\n\n dialog.trigger(\"close\");\n dialog.close();\n }\n }));\n\n buttonsEl.append($(\"\").kendoButton({\n name: \"cancel\",\n icon: \"cancel\",\n click: function () {\n dialog.trigger(\"close\");\n dialog.close();\n }\n }));\n\n this._resourceEditorWindow = dialog = dialogEl.kendoWindow({\n modal: true,\n resizable: false,\n draggable: true,\n visible: false,\n title: messages.editor.resourcesEditorTitle,\n deactivate: function () {\n editor.destroy();\n dialog.destroy();\n dialog.element.closest(\".k-window\").remove();\n }\n }).data(\"kendoWindow\");\n\n dialog.center().open();\n\n return editor;\n },\n\n _createResourceEditor: function(container, options) {\n var that = this;\n var model = options instanceof ObservableObject ? options : options.model;\n var messages = this.options.messages;\n var resourcesField = this.resources.field;\n var unitsValidation = { step: 0.01, min: 0.01, max: 1 };\n var assignmentsModel = this.assignments.dataSource.options.schema.model;\n var resourceTextField = that.resources.dataTextField;\n var resources = this.resources.dataSource.view();\n\n\n if (assignmentsModel && assignmentsModel.fields.Units && assignmentsModel.fields.Units.validation) {\n extend(true, unitsValidation, assignmentsModel.fields.Units.validation);\n }\n\n var editor = this._resourceEditor = new kendo.gantt.ResourceEditor(container, {\n resourcesField: resourcesField,\n unitsValidation: unitsValidation,\n resources: resources.map(function (r) { return ({ value: r.id, text: r[resourceTextField] }); }),\n model: model,\n messages: extend({}, messages.editor)\n });\n\n return editor;\n },\n\n view: function(type) {\n return this.timeline.view(type);\n },\n\n range: function(range) {\n var dataSource = this.dataSource;\n var view = this.view();\n var timeline = this.timeline;\n\n if (range) {\n view.options.range = {\n start: range.start,\n end: range.end\n };\n\n timeline._render(dataSource.taskTree());\n timeline._renderDependencies(this.dependencies.view());\n }\n\n return {\n start: view.start,\n end: view.end\n };\n },\n\n date: function(date) {\n var view = this.view();\n\n if (date) {\n view.options.date = date;\n view._scrollToDate(date);\n }\n\n return view.options.date;\n },\n\n dataItem: function(value) {\n if (!value) {\n return null;\n }\n\n var list = this.list;\n var element = list.element.find(value);\n\n return list._modelFromElement(element);\n },\n\n setDataSource: function(dataSource) {\n this.options.dataSource = dataSource;\n\n this._dataSource();\n\n this.list.setDataSource(this.dataSource);\n\n if (this.options.autoBind) {\n dataSource.fetch();\n }\n },\n\n setDependenciesDataSource: function(dependencies) {\n this.options.dependencies = dependencies;\n\n this._dependencies();\n\n if (this.options.autoBind) {\n dependencies.fetch();\n }\n },\n\n items: function() {\n return this.wrapper.children(\".k-task\");\n },\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())\n .filter({\n field: taskId,\n operator: \"eq\",\n value: id\n }).toArray();\n var assignment;\n var resource;\n var value;\n\n while (assignments.length) {\n assignment = assignments[0];\n\n for (var i = 0, length = resources.length; i < length; i++) {\n resource = resources[i];\n\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\n if (!hasMatch) {\n this._removeAssignment(assignment);\n }\n\n hasMatch = false;\n\n assignments.shift();\n }\n\n for (var j = 0, newLength = resources.length; j < newLength; j++) {\n resource = resources[j];\n\n if (resource.id !== undefined$1 && resource.value) {\n this._createAssignment(resource, id);\n }\n }\n\n dataSource.sync();\n },\n\n cancelTask: function() {\n var editor = this._editor;\n var container = editor.container;\n\n if (container) {\n editor.close();\n }\n\n if (this.dependencies) {\n this.dependencies.cancelChanges();\n }\n },\n\n editTask: function(uid) {\n var task = typeof uid === \"string\" ? this.dataSource.getByUid(uid) : uid;\n\n if (!task) {\n return;\n }\n\n var taskCopy = this.dataSource._createNewModel(task.toJSON());\n taskCopy.uid = task.uid;\n\n this.cancelTask();\n\n this._editTask(taskCopy);\n },\n\n _editTask: function(task) {\n this._editor.editTask(task, this.options.editable.plannedTasks);\n },\n\n saveTask: function(task, updateInfo, updateDependencies) {\n var that = this,\n editor = this._editor,\n container = editor.container,\n editable = editor.editable,\n hasChanges = false,\n hasResourceChanges = false,\n updateInfo = updateInfo || {},\n resourcesField = that.options.resources.field,\n difference;\n\n Object.keys(updateInfo).map(function (k) {\n var updated = updateInfo[k],\n current = task.get(k);\n\n if (updated instanceof Date) {\n updated = updated.getTime();\n current = current ? current.getTime() : undefined$1;\n }\n\n if (updated !== current) {\n if (k === resourcesField) {\n difference = updated\n .filter(function (u) { return !current.some(function (c) { return c.id === u.id && c.value === u.value; }); })\n .concat(current.filter(function (c) { return !updated.some(function (u) { return u.id === c.id && c.value === u.value; }); }));\n\n if (difference && difference.length > 0) {\n hasResourceChanges = true;\n }\n } else {\n hasChanges = true;\n }\n }\n });\n\n if (container &&\n editable &&\n editable.end() &&\n (hasChanges || hasResourceChanges || updateDependencies)) {\n if (!that.trigger(\"save\", { task: task, values: updateInfo, updateDependencies: updateDependencies })) {\n if (hasChanges) {\n that._preventRefresh = true;\n\n that.dataSource.update(task, updateInfo);\n }\n\n if (hasResourceChanges) {\n this._updateAssignments(task.get(\"id\"), updateInfo[resourcesField]);\n }\n\n that._syncDataSource();\n\n if (this.dependencies) {\n this._updateDependency(updateDependencies);\n }\n\n this._editor.close();\n } else {\n if (task && task.dirty) {\n that.dataSource.cancelChanges(task);\n that._preventRefresh = false;\n that.refresh();\n }\n\n if (that.dependencies) {\n that.dependencies.cancelChanges();\n }\n }\n } else if (editable && editable.end()) {\n this._editor.close();\n }\n },\n\n _updateDependency: function(updateDependencies) {\n var this$1$1 = this;\n\n this.dependencies.filter({});\n\n if (updateDependencies) {\n updateDependencies.created.map(function (d) {\n this$1$1._preventDependencyRefresh = true;\n this$1$1.dependencies.add(d);\n this$1$1._preventDependencyRefresh = false;\n });\n\n updateDependencies.destroyed.map(function (d) {\n this$1$1.dependencies.remove(d);\n });\n }\n\n this.dependencies.sync();\n },\n\n _updateTask: function(task, updateInfo) {\n var that = this;\n var resourcesField = that.resources.field;\n\n if (!that.trigger(\"save\", { task: task, values: updateInfo })) {\n if (updateInfo) {\n that._preventRefresh = true;\n\n that.dataSource.update(task, updateInfo);\n\n if (updateInfo[resourcesField]) {\n that._updateAssignments(task.get(\"id\"), updateInfo[resourcesField]);\n }\n }\n\n that._syncDataSource();\n } else {\n if (task && task.dirty) {\n that.dataSource.cancelChanges(task);\n that._preventRefresh = false;\n that.refresh();\n }\n\n if (that.dependencies) {\n that.dependencies.cancelChanges();\n }\n }\n },\n\n _updateAssignment: function(assignment, value) {\n var resourceValueField = this.assignments.dataValueField;\n\n assignment.set(resourceValueField, value);\n },\n\n removeTask: function(uid) {\n var that = this;\n var task = typeof uid === \"string\" ? this.dataSource.getByUid(uid) : uid;\n\n if (!task) {\n return;\n }\n\n this._taskConfirm(function(cancel) {\n if (!cancel) {\n that._removeTask(task);\n }\n }, task);\n },\n\n _createTask: function(task, index) {\n if (!this.trigger(\"add\", {\n task: task,\n dependency: null\n })) {\n var dataSource = this.dataSource;\n\n this._preventRefresh = true;\n\n if (index === undefined$1) {\n dataSource.add(task);\n } else {\n dataSource.insert(index, task);\n }\n\n this._scrollToUid = task.uid;\n this._syncDataSource();\n }\n },\n\n _createDependency: function(dependency) {\n if (!this.trigger(\"add\", {\n task: null,\n dependency: dependency\n })) {\n this._preventDependencyRefresh = true;\n\n this.dependencies.add(dependency);\n\n this._preventDependencyRefresh = false;\n\n this.dependencies.sync();\n }\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\n assignment[taskId] = id;\n assignment[resourceId] = resource.get(\"id\");\n assignment[resourceValue] = resource.get(\"value\");\n\n dataSource.add(assignment);\n },\n\n removeDependency: function(uid) {\n var that = this;\n var dependency = typeof uid === \"string\" ? this.dependencies.getByUid(uid) : uid;\n\n if (!dependency) {\n return;\n }\n\n this._dependencyConfirm(function(cancel) {\n if (!cancel) {\n that._removeDependency(dependency);\n }\n }, dependency);\n },\n\n _removeTaskDependencies: function(task, dependencies) {\n this._preventDependencyRefresh = true;\n\n for (var i = 0, length = dependencies.length; i < length; i++) {\n this.dependencies.remove(dependencies[i]);\n }\n\n this._preventDependencyRefresh = false;\n\n this.dependencies.sync();\n },\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\n assignments = new Query(assignments).filter(filter).toArray();\n\n this._preventRefresh = true;\n\n for (var i = 0, length = assignments.length; i < length; i++) {\n dataSource.remove(assignments[i]);\n }\n\n this._preventRefresh = false;\n\n dataSource.sync();\n },\n\n _removeTask: function(task) {\n var dependencies = this.dependencies.dependencies(task.id);\n\n if (!this.trigger(\"remove\", {\n task: task,\n dependencies: dependencies\n })) {\n this._removeTaskDependencies(task, dependencies);\n this._removeTaskAssignments(task);\n\n this._preventRefresh = true;\n\n if (this.dataSource.remove(task)) {\n this._syncDataSource();\n }\n\n if (this.dependencies) {\n this.dependencies.filter({});\n }\n\n this._preventRefresh = false;\n }\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\n _removeAssignment: function(assignment) {\n this.assignments.dataSource.remove(assignment);\n },\n\n _taskConfirm: function(callback, task) {\n var messages = this.options.messages;\n\n this._confirm(callback, {\n model: task,\n text: messages.deleteTaskConfirmation,\n title: messages.deleteTaskWindowTitle\n });\n },\n\n _dependencyConfirm: function(callback, dependency) {\n var messages = this.options.messages;\n\n this._confirm(callback, {\n model: dependency,\n text: messages.deleteDependencyConfirmation,\n title: messages.deleteDependencyWindowTitle\n });\n },\n\n _confirm: function(callback, options) {\n var editable = this.options.editable;\n\n if (editable === true || editable.confirmation !== false) {\n this.showDialog(extend(true, {}, options, { callback: callback }));\n } else {\n callback();\n }\n },\n\n showDialog: function(options) {\n this._editor.showDialog(options);\n },\n\n refresh: function() {\n if (this._preventRefresh || !this.list || this.list.editor) {\n return;\n }\n\n this._progress(false);\n\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 var selected = this.select()[0] ? this.select().data(\"uid\") : this._selected;\n\n if (this.current) {\n cachedUid = this.current.closest(\"tr\").attr(kendo.attr(\"uid\"));\n cachedIndex = this.current.index();\n }\n\n if (this.trigger(\"dataBinding\")) {\n return;\n }\n\n if (this.resources.dataSource.data().length !== 0) {\n this._assignResources(taskTree);\n }\n\n if (this._editor) {\n this._editor.close();\n }\n\n this.clearSelection();\n this.list._renderTree(taskTree);\n this.timeline._render(taskTree);\n this.timeline._renderDependencies(this.dependencies.view());\n\n if (scrollToUid) {\n this._scrollTo(scrollToUid);\n this.select(selector(scrollToUid));\n }\n\n if ((scrollToUid || cachedUid) && cachedIndex >= 0) {\n current = this.list.element\n .find(\"tr\" + selector((scrollToUid || cachedUid)) + \" > td\").eq(cachedIndex);\n\n this._current(current);\n }\n\n this._scrollToUid = null;\n\n if (selected) {\n this._selected = selected;\n this.select(\"[data-uid=\" + selected + \"]\");\n }\n\n this.trigger(\"dataBound\");\n },\n\n refreshDependencies: function() {\n if (this._preventDependencyRefresh) {\n return;\n }\n\n if (this.trigger(\"dataBinding\")) {\n return;\n }\n\n this.timeline._renderDependencies(this.dependencies.view());\n\n this.trigger(\"dataBound\");\n },\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 = {\n field: assignments.dataTaskIdField\n };\n\n data = new Query(data).group(group).toArray();\n\n return data;\n };\n var assigments = groupAssigments();\n var applyTaskResource = function(task, action) {\n var taskId = task.get(\"id\");\n\n kendo.setter(resources.field)(task, new ObservableArray([]));\n\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\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 format: valueFormat\n }));\n }\n };\n\n for (var i = 0, length = taskTree.length; i < length; i++) {\n applyTaskResource(taskTree[i], wrapTask);\n }\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\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\n return resourceValue;\n };\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\n return result;\n },\n\n _syncDataSource: function() {\n this._preventRefresh = false;\n this._requestStart();\n this.dataSource.sync();\n },\n\n _requestStart: function() {\n this._progress(true);\n },\n\n _error: function() {\n this._progress(false);\n },\n\n _progress: function(toggle) {\n kendo.ui.progress(this.element, toggle);\n },\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\n if (mobileOS) {\n treeListContent.css(\"overflow-y\", \"auto\");\n }\n\n timelineContent.on(\"scroll\", function() {\n that.scrollTop = this.scrollTop;\n kendo.scrollLeft(timelineHeader, this.scrollLeft);\n treeListContent.scrollTop(this.scrollTop);\n });\n\n treeListContent\n .on(\"scroll\", function() {\n kendo.scrollLeft(treeListHeader, this.scrollLeft);\n })\n .on(\"DOMMouseScroll\" + NS + \" mousewheel\" + NS, function(e) {\n var scrollTop = timelineContent.scrollTop();\n var delta = kendo.wheelDeltaY(e);\n\n if (delta) {\n e.preventDefault();\n //In Firefox DOMMouseScroll event cannot be canceled\n $(e.currentTarget).one(\"wheel\" + NS, false);\n\n timelineContent.scrollTop(scrollTop + (-delta));\n }\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 listWrapper = DOT + ganttStyles.listWrapper;\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 tables = headerTable.add(contentTable);\n var attr = selector();\n var deleteAction = function() {\n var editable = that.options.editable;\n\n if (!editable || editable.destroy === false || that.list.editor) {\n return;\n }\n\n var selectedTask = that.select();\n var uid = kendo.attr(\"uid\");\n\n if (selectedTask.length) {\n that.removeTask(selectedTask.attr(uid));\n }\n };\n\n $(this.wrapper)\n .on(\"mousedown\" + NS, listWrapper + \" tr\" + attr, function(e) {\n var isInput = $(e.target).is(\":button,a,:input,a>.k-icon,.k-svg-icon,k-svg-icon,svg,path,textarea,span.k-icon:not(.k-i-none),span.k-svg-icon:not(.k-svg-i-none),span.k-link,.k-input,.k-multiselect-wrap,.k-input-value-text,.k-input-inner\");\n\n if (e.ctrlKey) {\n return;\n }\n\n\n if ((navigatable || editable) && !isInput) {\n that._focusTimeout = setTimeout(function() {\n focusTable(that.list.content.find(\"table\"), true);\n }, 2);\n }\n })\n .on(\"keydown\" + NS, function(e) {\n var key = e.keyCode;\n var that = this;\n var uid;\n var cell;\n var target = $(e.target);\n var focusedIndex;\n var focusSequence = [\n that.toolbar,\n that.layout.find(\".k-splitbar\"),\n that.layout.find(\".k-gantt-treelist\"),\n that.layout.find(\".k-gantt-timeline\")\n ];\n\n that._tabPressed = false;\n\n if (that.footer) {\n focusSequence.push(that.footer);\n }\n\n for (var i = 0; i < focusSequence.length; i++) {\n if ($.contains(focusSequence[i][0], e.target) || focusSequence[i][0] === e.target) {\n focusedIndex = i;\n break;\n }\n }\n\n if (key === keys.F10) {\n that.toolbar.find(\"[tabindex=0]:visible\").first().addClass(ganttStyles.focused).trigger(\"focus\");\n e.preventDefault();\n } else if (key == keys.TAB) {\n if (focusedIndex == 2) {\n that._tabPressed = true;\n }\n if (e.shiftKey) {\n for (i = focusedIndex - 1; i >= 0; i--) {\n if (!focusSequence[i].hasClass(\"k-hidden\")) {\n uid = target.attr(\"data-uid\");\n if (i === 2 && uid) {\n cell = that.list.content.find(\"tr[data-uid='\" + uid + \"']\").find(\"td\").last();\n that.list.current(cell);\n focusTable(that.list.content.find(\"table\"), true);\n } else {\n focusSequence[i].find(\"[tabindex=0]:visible\").focus();\n }\n e.preventDefault();\n break;\n }\n }\n } else {\n for (i = focusedIndex + 1; i < focusSequence.length; i++) {\n if (!focusSequence[i].hasClass(\"k-hidden\")) {\n focusSequence[i].find(\"[tabindex=0]:visible\").focus();\n e.preventDefault();\n break;\n }\n }\n }\n }\n\n }.bind(this));\n\n if (navigatable) {\n contentTable\n .on(\"keydown\" + NS, function(e) {\n var key = e.keyCode;\n if (e.keyCode == keys.DELETE) {\n deleteAction();\n } else if (key >= 49 && key <= 57 && e.target.tagName.toLowerCase() !== \"input\") {\n that.view(that.timeline._viewByIndex(key - 49));\n }\n });\n\n return;\n }\n\n tables\n .on(\"focus\" + NS, function() {\n $(that.toolbar.find(DOT + ganttStyles.focused)).removeClass(ganttStyles.focused);\n })\n .on(\"blur\" + NS, function() {\n\n if (this == headerTable) {\n $(this).attr(TABINDEX, -1);\n }\n });\n },\n\n\n _dataBind: function() {\n var that = this;\n\n if (that.options.autoBind) {\n this._preventRefresh = true;\n this._preventDependencyRefresh = true;\n\n var promises = $.map([\n this.dataSource,\n this.dependencies,\n this.resources.dataSource,\n this.assignments.dataSource\n ],\n function(dataSource) {\n return dataSource.fetch();\n });\n\n $.when.apply(null, promises)\n .done(function() {\n that._preventRefresh = false;\n that._preventDependencyRefresh = false;\n that.refresh();\n });\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\n _togglePlannedTasks: function(e) {\n var timeline = this.timeline;\n\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\n if (kendo.PDFMixin) {\n kendo.PDFMixin.extend(Gantt.fn);\n\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\n content.find(DOT + ganttStyles.list).css(\"width\", listTableWidth);\n\n return this._drawPDFShadow({\n content: content\n }, {\n avoidLinks: this.options.pdf.avoidLinks\n });\n };\n }\n\n kendo.ui.plugin(Gantt);\n\n extend(true, Gantt, { styles: ganttStyles });\n\n })(window.kendo.jQuery);\n var kendo$1 = kendo;\n\n return kendo$1;\n\n}));\n"]}